
    RЦi                         S r SSKJrJrJr  SSKJr  SSKJr  SSKJ	r	   " S S\R                  5      r\r " S	 S
\R                  5      rg)a	  Depthwise Separable Conv Modules

Basic DWS convs. Other variations of DWS exist with batch norm or activations between the
DW and PW convs such as the Depthwise modules in MobileNetV2 / EfficientNet and Xception.

Hacked together by / Copyright 2020 Ross Wightman
    )OptionalTypeUnion)nn   )create_conv2d)get_norm_act_layerc                   $  ^  \ rS rSrSrSSSSSSS\R                  \R                  SS	S	S	4S
\S\S\S\S\S\	S\
S\S\S\\R                     S\\R                     S\
S\\\R                        4U 4S jjjr\S 5       r\S 5       rS rSrU =r$ )SeparableConvNormAct   z3Separable Conv w/ trailing Norm and Activation
       r    F      ?TNin_channelsout_channelskernel_sizestridedilationpaddingbiaschannel_multiplierpw_kernel_size
norm_layer	act_layer	apply_act
drop_layerc                   > XS.n[         TU ]  5         [        U[        X-  5      U4UUUSS.UD6U l        [        [        X-  5      UU	4UUS.UD6U l        [        X5      nUb	  [        US9O0 nU" U4SU0UDUD6U l        g )NdevicedtypeTr   r   r   	depthwiser   r   )r   r   )	super__init__r   intconv_dwconv_pwr	   dictbn)selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    ddnorm_act_layernorm_kwargs	__class__s                      Y/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/layers/separable_conv.pyr%   SeparableConvNormAct.__init__   s    $ /$01	
 	
 	
 %01
 
 
 ,JB5?5Kdj1QS XXkXUWX    c                 .    U R                   R                  $ Nr'   r   r+   s    r0   r    SeparableConvNormAct.in_channels@       ||'''r2   c                 .    U R                   R                  $ r4   r(   r   r6   s    r0   r   !SeparableConvNormAct.out_channelsD       ||(((r2   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r4   )r'   r(   r*   r+   xs     r0   forwardSeparableConvNormAct.forwardH   s.    LLOLLOGGAJr2   )r*   r'   r(   )__name__
__module____qualname____firstlineno____doc__r   BatchNorm2dReLUr&   strboolfloatr   Moduler   r%   propertyr   r   r@   __static_attributes____classcell__r/   s   @r0   r   r      s"     !(+"#*,..)+"48!+Y+Y +Y 	+Y
 +Y +Y +Y +Y !&+Y  +Y RYY+Y BII+Y +Y !bii1+Y +YZ ( ( ) ) r2   r   c                   h   ^  \ rS rSrSr         SU 4S jjr\S 5       r\S 5       rS r	Sr
U =r$ )	SeparableConv2dR   zSeparable Conv
    c                    > XS.n[         TU ]  5         [        U[        X-  5      U4UUUSS.UD6U l        [        [        X-  5      UU	4UUS.UD6U l        g )Nr   Tr!   r#   )r$   r%   r   r&   r'   r(   )r+   r   r   r   r   r   r   r   r   r   r   r    r,   r/   s                r0   r%   SeparableConv2d.__init__U   s     /$01	
 	
 	
 %01
 
 
r2   c                 .    U R                   R                  $ r4   r5   r6   s    r0   r   SeparableConv2d.in_channelsz   r8   r2   c                 .    U R                   R                  $ r4   r:   r6   s    r0   r   SeparableConv2d.out_channels~   r<   r2   c                 J    U R                  U5      nU R                  U5      nU$ r4   r'   r(   r>   s     r0   r@   SeparableConv2d.forward   s!    LLOLLOr2   r[   )	r   r   r   r   Fr   r   NN)rB   rC   rD   rE   rF   r%   rM   r   r   r@   rN   rO   rP   s   @r0   rR   rR   R   s]     "#
J ( ( ) ) r2   rR   N)rF   typingr   r   r   torchr   r   create_norm_actr	   rL   r   SeparableConvBnActrR    r2   r0   <module>rb      sD    ) (  ( /<299 <~ * 3bii 3r2   