
    kh3                     X    d 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
    N)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       T/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/layers/mixed_conv2d.py_split_channelsr      sA    -2:->?X#?E?	!H3u:%%HL @s   7c                   .     e Zd ZdZ	 	 d 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
    c                    t         t        |           t        |t              r|n|g}t        |      }	t        ||	      }
t        ||	      }t        |
      | _        t        |      | _	        t        t        ||
|            D ];  \  }\  }}}|r|nd}| j                  t        |      t        |||f||||d|       = |
| _        y )Nr   )stridepaddingdilationgroups)superr   __init__
isinstancelistlenr   r   in_channelsout_channels	enumeratezip
add_modulestrr   splits)selfr   r   kernel_sizer   r   r   	depthwisekwargsr
   	in_splits
out_splitsidxkin_chout_chconv_groups	__class__s                    r   r   zMixedConv2d.__init__   s    k4)+%/T%Bk%
#K<	$\:>
y>
O'0[)Z1X'Y 	#C#!UF#,%!KOOC!61V-3#h{VNTV	      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+4T[[]+CD41a71:DDIIeQ Es   A.)   r    r   F)__name__
__module____qualname____doc__r   r8   __classcell__)r-   s   @r   r   r      s    
 ?@=B *r.   r   )r>   r0   r   conv2d_samer   r   
ModuleDictr    r.   r   <module>rC      s*      *"-- r.   