a
    d                     @   sf   d Z ddlZddlmZ ddlmZ ddlmZ G dd dejZeZ	dddZ
G dd dejZdS )zF Conv2d + BN + Act

Hacked together by / Copyright 2020 Ross Wightman
    N)nn   )create_conv2d)get_norm_act_layerc                       sZ   e Zd Zdddddddejdejddf fdd	Zedd	 Zed
d Z	dd Z
  ZS )ConvNormActr    FTNc              
      sj   t t|   |pi }|pi }t||||||||d| _t|
|}|rN||d< ||f|	|d|| _d S )Nstridepaddingdilationgroupsbias
drop_layer	apply_act
act_kwargs)superr   __init__r   convr   bn)selfin_channelsout_channelskernel_sizer	   r
   r   r   r   r   
norm_layernorm_kwargs	act_layerr   r   norm_act_layer	__class__ `/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/layers/conv_bn_act.pyr      s$    
zConvNormAct.__init__c                 C   s   | j jS Nr   r   r   r    r    r!   r   2   s    zConvNormAct.in_channelsc                 C   s   | j jS r"   r   r   r$   r    r    r!   r   6   s    zConvNormAct.out_channelsc                 C   s   |  |}| |}|S r"   )r   r   r   xr    r    r!   forward:   s    

zConvNormAct.forward__name__
__module____qualname__r   ZBatchNorm2dZReLUr   propertyr   r   r(   __classcell__r    r    r   r!   r      s$   %

r      Tc                 C   s^   | r|st  S t| tjr:t| jt jr0|  S | |S n t| t jrN| |S | ||dS d S )N)channelsr	   )r   ZIdentity
isinstance	functoolspartial
issubclassfuncZ	AvgPool2d)aa_layerr0   r	   enabler    r    r!   	create_aaC   s    
r8   c                       s\   e Zd Zdddddddejdejdddf fdd	Zedd	 Zed
d Z	dd Z
  ZS )ConvNormActAar   r   FTNc              
      s   t t|   |d uo|dk}|p$i }|p,i }t||||r>dn|||||d| _t|
|}|rf||d< ||f|	|d|| _t||||d| _d S )Nr/   r   r   r   r   )r	   r7   )	r   r9   r   r   r   r   r   r8   aa)r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r6   r   Zuse_aar   r   r    r!   r   R   s    
zConvNormActAa.__init__c                 C   s   | j jS r"   r#   r$   r    r    r!   r   u   s    zConvNormActAa.in_channelsc                 C   s   | j jS r"   r%   r$   r    r    r!   r   y   s    zConvNormActAa.out_channelsc                 C   s"   |  |}| |}| |}|S r"   )r   r   r:   r&   r    r    r!   r(   }   s    


zConvNormActAa.forwardr)   r    r    r   r!   r9   Q   s&   #

r9   )r/   T)__doc__r2   Ztorchr   r   Zcreate_norm_actr   Moduler   Z	ConvBnActr8   r9   r    r    r    r!   <module>   s   4
