
    ^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3u:%%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%Bk%
#K<	$\:>
y>
O'0[)Z1X'Y 	#C#!UF#,%!KOO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+4T[[]+CD41a71:DDIIeQ Es   A.)   r    r   F)__name__
__module____qualname____doc__intr   r   r$   boolr   r:   __classcell__)r/   s   @r   r   r      su     23## #  #  sDI~.	# 
 #  #  #  # Jr0   r   )r@   typingr   r   r2   r   conv2d_samer   r   
ModuleDictr    r0   r   <module>rH      s-       */"-- /r0   