
    RЦil                     h    S r SSKJrJr  SSKrSSKJr  SSKJr  S r " S S	\R                  5      r
g)
zPyTorch 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                 |    [        U5       Vs/ s H  o U-  PM	     nnUS==   U [        U5      -
  -  ss'   U$ s  snf )Nr   )rangesum)num_chan
num_groups_splits       W/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/layers/mixed_conv2d.py_split_channelsr      sB    -2:->?->#->E?	!H3u:%%HL @s   9c                   p   ^  \ rS rSrSr     SS\S\S\\\\   4   S\S\S\S	\	4U 4S
 jjjr
S rSrU =r$ )MixedConv2d   zMixed 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U ]  5         [        U[        5      (       a  UOU/n[	        U5      n	[        X5      n
[        X)5      n[        U
5      U l        [        U5      U l        [        [        X:U5      5       H@  u  nu  pnU(       a  UOSnU R                  [        U5      [        UUU4UUUUS.UD65        MB     Xl        g )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   MixedConv2d.__init__   s     	%/T%B%Bk%
#K<	$\>
y>
O'0[Z1X'Y#C#!F#,%!KOOC!	 "#%&	 	 (Z       c                     [         R                  " XR                  S5      n[        U R	                  5       5       VVs/ s H  u  p4U" X#   5      PM     nnn[         R
                  " US5      nU$ s  snnf )Nr   )torchr   r&   r"   valuescat)r'   xx_spliticx_outs         r   forwardMixedConv2d.forward@   sZ    ++aa0+4T[[]+CD+C417:+CDIIeQ Es   A0)r   r   r&   )   r    r   F)__name__
__module____qualname____firstlineno____doc__intr   r   r%   boolr   r<   __static_attributes____classcell__)r0   s   @r   r   r      s     23## #  #  sDI~.	# 
 #  #  #  #  # J r2   r   )rD   typingr   r   r4   r   conv2d_samer   r   
ModuleDictr    r2   r   <module>rM      s-       */"-- /r2   