Ë
    éÓ^jl  ã                   óh   — d Z ddlmZmZ ddlZddlmZ ddlmZ d„ Z G d„ d	ej                  «      Z
y)
z¨ PyTorch Mixed Convolution

Paper: MixConv: Mixed Depthwise Convolutional Kernels (https://arxiv.org/abs/1907.09595)

Hacked together by / Copyright 2020 Ross Wightman
é    )ÚListÚUnionN)Únné   )Úcreate_conv2d_padc                 óx   — t        |«      D �cg c]  }| |z  ‘Œ	 }}|dxx   | t        |«      z
  z  cc<   |S c c}w )Nr   )ÚrangeÚsum)Únum_chanÚ
num_groupsÚ_Úsplits       úc/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/layers/mixed_conv2d.pyÚ_split_channelsr      sA   € Ü-2°:Ó->Ö?¨ˆX˜Ó#Ð?€EÐ?Ø	ˆ!ƒH�œ3˜u›:Ñ%Ñ%ƒHØ€Lùò @s   Ž7c                   ób   ‡ — e Zd ZdZ	 	 	 	 	 ddededeeee   f   dedededefˆ fd	„Z	d
„ Z
ˆ xZS )ÚMixedConv2dz¸ Mixed Grouped Convolution

    Based on MDConv and GroupedConv in MixNet impl:
      https://github.com/tensorflow/tpu/blob/master/models/official/mnasnet/mixnet/custom_layers.py
    Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingÚdilationÚ	depthwisec                 óˆ  •— t         ‰| �  «        t        |t        «      r|n|g}t	        |«      }	t        ||	«      }
t        ||	«      }t        |
«      | _        t        |«      | _        t        t        ||
|«      «      D ];  \  }\  }}}|r|nd}| j                  t        |«      t        |||f||||dœ|¤Ž«       Œ= |
| _        y )Nr   )r   r   r   Úgroups)ÚsuperÚ__init__Ú
isinstanceÚlistÚlenr   r
   r   r   Ú	enumerateÚzipÚ
add_moduleÚstrr   Úsplits)Úselfr   r   r   r   r   r   r   Úkwargsr   Ú	in_splitsÚ
out_splitsÚidxÚkÚin_chÚout_chÚconv_groupsÚ	__class__s                    €r   r   zMixedConv2d.__init__   sØ   ø€ ô 	‰ÑÔä%/°¼TÔ%B‘kÈÈˆÜ˜Ó%ˆ
Ü# K°Ó<ˆ	Ü$ \°:Ó>ˆ
Ü˜y›>ˆÔÜ 
›OˆÔÜ'0´°[À)ÈZÓ1XÓ'Yò 	Ñ#ˆCÑ#�!�U˜FÙ#,™%°!ˆKà�O‰OÜ�C“Ü!ØØØð	ð "Ø#Ø%Ø&ñ	ð ñ	õð	ð   ˆ�ó    c                 óè   — t        j                  || j                  d«      }t        | j	                  «       «      D ��cg c]  \  }} |||   «      ‘Œ }}}t        j
                  |d«      }|S c c}}w )Nr   )Útorchr   r%   r!   ÚvaluesÚcat)r&   ÚxÚx_splitÚiÚcÚx_outs         r   ÚforwardzMixedConv2d.forward@   s]   € Ü—+‘+˜a §¡¨aÓ0ˆÜ+4°T·[±[³]Ó+C×D¡4 1 a‘�7˜1‘:•ÐDˆÑDÜ�I‰I�e˜QÓˆØˆùó Es   ¾A.)é   r   Ú r   F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr   r   r$   Úboolr   r:   Ú__classcell__)r/   s   @r   r   r      su   ø„ ñð 23ØØØØ#ñ# àð# ð ð# ð ˜s D¨¡I˜~Ñ.ð	# ð
 ð# ð ð# ð ð# ð õ# öJr0   r   )r@   Útypingr   r   r2   r   Úconv2d_samer   r   Ú
ModuleDictr   © r0   r   ú<module>rH      s-   ðñ÷ ã Ý å *òô/�"—-‘-õ /r0   