
    ^j                        d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
Z
d dlmZ d dlmc mZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZ ddlmZ ddlm Z m!Z! dd	l"m#Z#m$Z$m%Z%m&Z&m'Z' dd
l(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0 ddgZ1 eejd                  d      Z3e+ G d dejh                               Z5 G d dejh                        Z6 G d dejh                        Z7dee8e
jr                  f   dee8e
jr                  f   fdZ:d/de8de;de7fdZ<d/de8de;de6fdZ=	 	 	 	 d0de8de>de;de;de7f
dZ?d1d e8fd!Z@ e/ e@d"d#d$d %       e@d&d"d#d$d d'(       e@d)*      d+      ZAe0d/de;de7fd,       ZBe0d/de;de6fd-       ZCe0d/de;de6fd.       ZDy)2    )partial)CallableDictListOptionalSequenceTupleUnionNIMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STD)	SelectAdaptivePool2dLinear	LayerType	RmsNorm2dConvNormActcreate_conv2dget_norm_layerget_norm_act_layer	to_2tuple   )build_model_with_cfg)SqueezeExciteUniversalInvertedResidual)	BlockArgsEfficientNetBuilderdecode_arch_defefficientnet_init_weightsround_channels)feature_take_indices)register_notrace_module)checkpoint_seq)generate_default_cfgsregister_modelMobileNetV5MobileNetV5Encodertanh)approximatec                        e Zd ZdZ	 	 	 	 	 	 	 	 ddeeee   f   dedededede	e   de
d	e	e   d
e	e   f fdZdeej                     dej                  fdZ xZS )"MobileNetV5MultiScaleFusionAdaptera  Multi-layer fusion token adapter.

  Args:
    in_chs: List of input channel counts for each feature scale.
    out_chs: The number of output channels.
    output_resolution: The output resolution.
    expansion_ratio: The FFN expansion ratio.
    interpolation_mode: The upsampling interpolation mode.
    layer_scale_init_value: The initial value of the layer scale, no layer scale if None.
  in_chsout_chsoutput_resolutionexpansion_ratiointerpolation_modelayer_scale_init_valuenoskip	act_layer
norm_layerc                    |
|d}t         |           t        |t              rt	        |      n|| _        || _        t        |      | _        || _	        || _
        || _        || _        |xs t        }|	xs t        }	t        d| j
                  | j                  d| j                  ||	| j                  | j                  d|| _         |	| j                  fi || _        y )Ndevicedtyper   )r+   r,   dw_kernel_size_mid	exp_ratior2   r3   r1   r0    )super__init__
isinstancer   sumin_channelsout_channelsr   r-   r.   r/   r0   r1   _GELUr   r   ffnnorm)selfr+   r,   r-   r.   r/   r0   r1   r2   r3   r6   r7   dd	__class__s                b/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/mobilenetv5.pyr<   z+MobileNetV5MultiScaleFusionAdapter.__init__4   s     U	+B	G&0&Bs6{DD&'89D*D0D"8DDK"UI(yJ( 
!!&&{{#::
 
DH 4,,33DI    inputsreturnc                    |d   j                   dd  }g }t        |      D ]]  \  }}|j                   dd  }|d   |d   k  s|d   |d   k  r"t        j                  ||| j                        }|j                  |       _ t        j                  |d      }| j                  |      }|d   | j                  d   k7  s|d   | j                  d   k7  r|d   | j                  d   z  dk7  s|d   | j                  d   z  dk7  r#t        j                  || j                  d      }nF|d   | j                  d   z  }|d   | j                  d   z  }	t        j                  |||	f||	f      }| j                  |      }|S )Nr   r   )sizemode)dimbilinear)kernel_sizestride)shape	enumerateFinterpolater/   appendtorchcatrB   r-   
avg_pool2drC   )
rD   rI   high_resolutionresized_inputs_img	feat_sizechannel_cat_imgs	h_strides	w_stridess
             rG   forwardz*MobileNetV5MultiScaleFusionAdapter.forward\   s   Qioobc*ONF# #3IIbcN	Q</!,,	!q?Q0Q--/@W@WXCc"	# yyQ7
((#
$CqT33A66/!:LPTPfPfghPi:i A!7!7!::a?A!7!7!::a?--$*@*@zRC'*d.D.DQ.GGI'*d.D.DQ.GGI,,&	2!9-C ))C.CJrH   )g       @nearestNTNNNN)__name__
__module____qualname____doc__r
   intr   floatstrr   boolr   r<   rX   Tensorrc   __classcell__rF   s   @rG   r*   r*   '   s    	  "%"+26)-*.&4c49n%&4 &4 	&4
 &4  &4 !)&4 &4 I&&4 Y'&4PD. 5<< rH   r*   c            +       P    e Zd ZdZddddddddd	dd
d
d
d
deddd
dd
d
fdededededededededede	e   dede
e   de
e   de
e   de
e   dedededed e
e   d!ef* fd"Zd# Zej"                  j$                  d:d$efd%       Zej"                  j$                  d;d&efd'       Zej"                  j$                  d(ej,                  fd)       Zd<ded!efd*Z	 	 	 	 	 	 d=d+ej2                  d,e
eee	e   f      d-ed.ed/ed0ed1ed(ee	ej2                     eej2                  e	ej2                     f   f   fd2Z	 	 	 	 d>d,eee	e   f   d3ed4ed1efd5Zd+ej2                  d(ej2                  fd6Zd:d+ej2                  d7ed(ej2                  fd8Zd+ej2                  d(ej2                  fd9Z  xZ!S )?r%   z MobiletNet-V5
            TF    rL   N        avg
block_argsnum_classesin_chans	stem_size	stem_biasfix_stemnum_featurespad_typeuse_msfamsfa_indicesmsfa_output_resolutionr2   r3   aa_layerse_layerse_from_expround_chs_fn	drop_ratedrop_path_rater0   global_poolc                    t         |           ||d}|xs t        }t        |      xs t        }t        ||      }|xs t        }|| _        || _        || _	        d| _
        |
| _        || _        |s ||      }t        ||fdd||||d|| _        t        dd|||||||||d
|}t!        j"                   |||       | _        |j&                  | _        | j(                  D cg c]  }|d   	 c}| _        |j,                  | _        |	r|x| _        | _        t3        t5        | j(                        | j                        d	   | _        t7        | j                  D cg c]  }| j(                  |   d
    c}      | _        t;        d| j8                  || j                  ||d|| _        t?        |      | _         d| _!        d| _"        n|j,                  | _        || _        d| _        t?        |      | _         | j.                  | j@                  jG                         z  }tI        || j0                  dfd|i|| _!         || j0                  fi || _"        |rt!        jJ                  d      nt!        jL                         | _'        |d	kD  rtQ        | j0                  |fi |nt!        jL                         | _)        tU        |        yc c}w c c}w )a  
        Args:
            block_args: Arguments for blocks of the network.
            num_classes: Number of classes for classification head.
            in_chans: Number of input image channels.
            stem_size: Number of output channels of the initial stem convolution.
            fix_stem: If True, don't scale stem by round_chs_fn.
            num_features: Number of output channels of the conv head layer.
            head_bias: If True, add a learnable bias to the conv head layer.
            pad_type: Type of padding to use for convolution layers.
            act_layer: Type of activation layer.
            norm_layer: Type of normalization layer.
            aa_layer: Type of anti-aliasing layer.
            se_layer: Type of Squeeze-and-Excite layer.
            se_from_exp: If True, calculate SE channel reduction from expanded mid channels.
            round_chs_fn: Callable to round number of filters based on depth multiplier.
            drop_rate: Dropout rate.
            drop_path_rate: Stochastic depth rate.
            layer_scale_init_value: Enable layer scale on compatible blocks if not None.
            global_pool: Type of pooling to use for global pooling features of the FC head.
        r5   Frr      rQ   rR   paddingbiasr3   r2       
output_strider   r   r   r2   r3   r   r   r   r0   stager   num_chsr+   r,   r-   r3   r2   	pool_typeNr   r   r:   )+r;   r<   rA   r   r   r   r   r{   r|   r   grad_checkpointingr   r   r   	conv_stemr   nn
Sequentialblocksfeaturesfeature_info
stage_endsr+   r   head_hidden_sizer    lenr>   msfa_in_chsr*   msfar   r   	conv_head	norm_head	feat_multr   FlattenIdentityflattenr   
classifierr   )rD   rz   r{   r|   r}   r~   r   r   r   r   r   r   r2   r3   r   r   r   r   r   r   r0   r   r6   r7   rE   norm_act_layerbuilderfminum_pooled_chsrF   s                                 rG   r<   zMobileNetV5.__init__   s   ^ 	/&	#J/<9
+J	B,}& ""'(&<# $Y/I$

 !

 

 & 
%#!)#9
 
 mmWY
%CD#,,/3/@/@A!1W:A#NN 8DDD 5 4S9J9J5KTM^M^ _`a bD"tO`O`#aD$5$5b$9)$D#abD: ''$"&"="=%# DI  4kJD!DN!DN 'D$0D!DI3kJD!..1A1A1K1K1MMN*>4;P;PRSl]eliklDN+D,A,AHRHDN(3rzz!}NY\]o&!6!6JrJcecncncp!$'E B $bs   (K!Kc                    | j                   | j                  g}|j                  | j                         |j	                  | j
                         | j                  |j	                  | j                         | j                  |j	                  | j                         |j                  t        j                         t        j                  | j                        | j                  g       t        j                  | S N)r   bn1extendr   rW   r   r   r   r   r   Dropoutr   r   r   )rD   layerss     rG   as_sequentialzMobileNetV5.as_sequential  s    ..$((+dkk"d&&'>>%MM$..)>>%MM$..)rzz|RZZ%?QR}}f%%rH   coarsec                 .    t        d|rd      S d      S )Nz^conv_stem|bn1z^blocks\.(\d+)z^blocks\.(\d+)\.(\d+))stemr   )dict)rD   r   s     rG   group_matcherzMobileNetV5.group_matcher  s%    "(.$
 	
4L
 	
rH   enablec                     || _         y r   )r   )rD   r   s     rG   set_grad_checkpointingz"MobileNetV5.set_grad_checkpointing  s
    "(rH   rJ   c                     | j                   S r   )r   )rD   s    rG   get_classifierzMobileNetV5.get_classifier  s    rH   c                    || _         t        |      | _        |rt        j                  d      nt        j
                         | _        |dkD  rt        | j                  |      | _	        y t        j
                         | _	        y )Nr   r   r   )
r{   r   r   r   r   r   r   r   r   r   )rD   r{   r   s      rG   reset_classifierzMobileNetV5.reset_classifier  s[    &/+F(3rzz!}HSVW&!6!6D]_]h]h]jrH   xindicesrC   
stop_early
output_fmtintermediates_onlyextra_blocksc                 R   |dv sJ d       |r	|sJ d       g }|r&t        t        | j                        dz   |      \  }	}
nMt        t        | j                        |      \  }	}
|	D cg c]  }| j                  |    }	}| j                  |
   }
d}| j	                  |      }||	v r|j                  |       t        j                  j                         s|s| j                  }n| j                  d|
 }|D ]%  }|dz  } ||      }||	v s|j                  |       ' |r|S ||fS c c}w )aa   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: Apply norm layer to compatible intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
            extra_blocks: Include outputs of all blocks and head conv in output, does not align with feature_info
        Returns:

        NCHWOutput shape must be NCHW./Must use intermediates_only for early stopping.r   r   N)	r    r   r   r   r   rW   rX   jitis_scripting)rD   r   r   rC   r   r   r   r   intermediatestake_indices	max_indexifeat_idxr   blks                  rG   forward_intermediatesz!MobileNetV5.forward_intermediates"  sB   . Y&D(DD&%X'XX%&:3t{{;Ka;OQX&Y#L)&:3t;OQX&Y#L)8DE1DOOA.ELE	2I NN1|#  #99!!#:[[F[[),F 	(CMHAA<'$$Q'		(   
 -; Fs   'D$
prune_norm
prune_headc                 p   |r&t        t        | j                        dz   |      \  }}n1t        t        | j                        |      \  }}| j                  |   }| j                  d| | _        |t        | j                        k  rd| _        d| _        |r d| _        d| _        | j                  dd       |S )z@ Prune layers not required for specified intermediates.
        r   Nr   ru   )r    r   r   r   r   r   r   )rD   r   r   r   r   r   r   s          rG   prune_intermediate_layersz%MobileNetV5.prune_intermediate_layers`  s     &:3t{{;Ka;OQX&Y#L)&:3t;OQX&Y#L)	2Ikk*9-s4;;''!DN!DN!DN!DN!!!R(rH   c                    | j                   d}g }| j                  |      }|| j                  v r|j                  |       | j                  D ]/  }|dz  } ||      }|| j                  v s|j                  |       1 | j                  |      }|S | j                  |      }| j
                  r8t        j                  j                         st        | j                  |d      }|S | j	                  |      }|S )Nr   r   T)r   )
r   r   r   rW   r   r   rX   r   r   r"   rD   r   r   r   r   s        rG   forward_featureszMobileNetV5.forward_featuresx  s    99 HMq!A4,,,$$Q'{{ ,AFt000!((+, 		-(A  q!A&&uyy/E/E/G"4;;4@  KKNrH   
pre_logitsc                 Z   | j                  |      }| j                  | j                  |      }| j                  | j                  |      }| j                  |      }| j                  dkD  r,t        j                  || j                  | j                        }|r|S | j                  |      S )Nrx   )ptraining)	r   r   r   r   r   rU   dropoutr   r   )rD   r   r   s      rG   forward_headzMobileNetV5.forward_head  s    Q>>%q!A>>%q!ALLO>>B		!t~~FAHq!!rH   c                 J    | j                  |      }| j                  |      }|S r   )r   r   rD   r   s     rG   rc   zMobileNetV5.forward  s'    !!!$a rH   F)T)ry   NFFr   FF)r   FTF)"re   rf   rg   rh   r   r   ri   rl   rk   r   r   r   r   rj   r<   r   rX   r   ignorer   r   r   Moduler   r   rm   r
   r	   r   r   r   r   rc   rn   ro   s   @rG   r%   r%   ~   s(     $"" $!&.*,-1.2,0,0 $%3!$&6:$1}(!}( }( 	}(
 }( }( }( }( }( }( s)}( %(}(  	*}( !+}( y)}(  y)!}(" #}($ #%}(& '}(( ")}(* %-UO+}(, -}(~	& YY
D 
 
 YY)T ) ) YY		  kC kc k 8<$$',!&< ||<  eCcN34<  	< 
 <  <  !%<  <  
tELL!5tELL7I)I#JJ	K< @ ./$#!&3S	>*  	
 0%,, 5<< ."ell " " " %,, rH   c            $           e Zd ZdZdddddddd	d	d	d	ded
d
d	d	d	fdedededededede	e   dede
e   de
e   de
e   de
e   dedededede
e   f" fdZ	 	 	 	 	 	 d)dej                   de
eeee   f      ded ed!ed"ed#ed$eeej                      eej                   eej                      f   f   fd%Zdej                   d$ej                   fd&Zdej                   d$ej                   fd'Zdej                   d$ej                   fd(Z xZS )*r&   zMobileNetV5 Vision Encoderrr   @   TFru   rv   rs   Nrx   rz   r|   r}   r~   r   r   r   r   r2   r3   r   r   r   r   r   r   r0   c                 @   t         |           ||d}|	xs t        }	t        |
      xs t        }
|xs t
        }d| _        || _        || _        d| _	        |s ||      }t        ||fdd|||
|	d|| _        t        dd||||	|
||||d
|}t        j                   |||       | _        |j                   | _        | j"                  D cg c]  }|d	   	 c}| _        d
x| _        | _        t+        t-        | j"                        |      d   | _        t1        | j.                  D cg c]  }| j"                  |   d    c}      | _        || _        t7        d| j2                  | j&                  | j4                  |
|	d|| _        t;        |        y c c}w c c}w )Nr5   r   Frr   r   r   r   r   r   rt   r   r   r:   )r;   r<   rA   r   r   r   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r>   r   r   r*   r   r   )rD   rz   r|   r}   r~   r   r   r   r   r2   r3   r   r   r   r   r   r   r0   r6   r7   rE   r   r   r   rF   s                           rG   r<   zMobileNetV5Encoder.__init__  s   , 	/&	#J/<9
,} ""' $Y/I$

 !

 

 & 
%#!)#9
 
 mmWY
%CD#,,/3/@/@A!1W:A488D10T5F5F1GVWXY4K\K\]R 1 1" 5i @]^&<#6 
##%%"99!
 
	 	"$'# B
  ^s   F*Fr   r   rC   r   r   r   r   rJ   c                    ~|dv sJ d       |r	|sJ d       g }g }	|r&t        t        | j                        dz   |      \  }
}nMt        t        | j                        |      \  }
}|
D cg c]  }| j                  |    }
}| j                  |   }d}| j	                  |      }||
v r|j                  |       || j                  v r|	j                  |       t        j                  j                         s|s| j                  }n| j                  d| }|D ]D  }|dz  } ||      }||
v r|j                  |       || j                  v s4|	j                  |       F |r|S | j                  |	      |fS c c}w )al   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: (Unused) Applies norm layer to compatible intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
            extra_blocks: Include outputs of all blocks and head conv in output, does not align with feature_info
        Returns:

        r   r   r   r   r   N)r    r   r   r   r   rW   r   rX   r   r   r   )rD   r   r   rC   r   r   r   r   r   msfa_intermediatesr   r   r   r   r   r   s                   rG   r   z(MobileNetV5Encoder.forward_intermediates  s   . Y&D(DD&%X'XX% &:3t{{;Ka;OQX&Y#L)&:3t;OQX&Y#L)8DE1DOOA.ELE	2I NN1|#  #t(((%%a(99!!#:[[F[[),F 	-CMHAA<'$$Q'4,,,"))!,	-   yy+,m;;7 Fs   *E4c                    d}g }| j                  |      }|| j                  v r|j                  |       | j                  D ]/  }|dz  } ||      }|| j                  v s|j                  |       1 | j	                  |      S )Nr   r   )r   r   rW   r   r   r   s        rG   r   z#MobileNetV5Encoder.forward_features;  s    NN1t(((  #;; 	(CMHAA4,,,$$Q'	( yy''rH   c                     t        d      )Nz=MobileNetV5Encoder does not support classification use cases.)NotImplementedErrorr   s     rG   r   zMobileNetV5Encoder.forward_headL  s    !"abbrH   c                 $    | j                  |      S r   )r   r   s     rG   rc   zMobileNetV5Encoder.forwardO  s    $$Q''rH   r   )re   rf   rg   rh   r   r   ri   rl   rk   r   r   r   r   rj   r<   rX   rm   r
   r   r	   r   r   r   rc   rn   ro   s   @rG   r&   r&     s   $
 ""*2*,-1.2,0,0 $%3!$&6:)O(!O( O( 	O(
 O( O( O( #3-O( %(O(  	*O( !+O( y)O( y)O( O( #O(  !O(" "#O($ %-UO%O(h 8<$$',!&C<||C< eCcN34C< 	C<
 C< C< !%C< C< 
tELL!5tELL7I)I#JJ	KC<J(%,, (5<< ("cell cu|| c( (%,, (rH   
state_dictrJ   c                     | j                  d|       } | j                  d|       } d| v r:d}| j                         D ci c]  \  }}||v s|j                  |d      | } }}| S c c}}w )z% convert weights from gemma encoders modelr   z3model.vision_tower.timm_model.conv_stem.conv.weightzmodel.vision_tower.timm_model.ru   )getitemsreplace)r   r   prefixkvs        rG   checkpoint_filter_fnr   S  sv    
 4Jj9J<
J1;E;K;K;M]41aQW[\Q\aii+Q.]
] ^s   A%A%variant
pretrainedc                 ~    |j                  dd      }t        |d      }d}t        t        | |fdt        ||d|}|S )Nout_indicesr   r   r   rr      getterr  feature_cls)r{   r   	head_conv	head_bias	head_normr   F)pretrained_strictpretrained_filter_fnfeature_cfgkwargs_filter)popr   r   r&   r   )r   r   kwargsr  r  r  r   s          rG   _create_mnv5_encoderr  `  s^    **]O<K;HEKM !	  1#	 	E LrH   c                 v    |j                  dd      }t        |d      }t        t        | |ft        |d|}|S )Nr  r  r  r  )r  r  )r  r   r   r%   r   )r   r   r  r  r  r   s         rG   _create_mnv5r  x  sO    **]O<K;HEK  2 E LrH   channel_multiplierencoderc           	      
   d| v rg dg dg dg dg}ng dg dg dg dg}t        t        ||      d	|d
k  t        t        |      t        t
        d      }t        |fi |}|rt        | |fi |}|S t        | |fi |}|S )Nmobilenetv5_base)er_r1_k3_s2_e4_c128er_r1_k3_s1_e4_c128r  )uir_r1_a3_k5_s2_e6_c256uir_r1_a5_k0_s1_e4_c256uir_r1_a3_k0_s1_e4_c256r  r  )uir_r1_a5_k5_s2_e6_c512uir_r1_a5_k0_s1_e4_c512r  uir_r1_a0_k0_s1_e1_c512mqa_r1_k3_h8_s2_d64_c512uir_r1_a0_k0_s1_e2_c512r  r   r  r   r  r   r  r   r  r   )uir_r1_a5_k5_s2_e6_c1024mqa_r1_k3_h16_s1_d64_c1024uir_r1_a0_k0_s1_e2_c1024r"  r#  r"  r#  r"  r#  r"  r#  r"  r#  r"  r#  )%uir_r1_a5_k5_s2_e6_c640uir_r1_a5_k0_s1_e4_c640r%  r%  r%  r%  r%  r%  uir_r1_a0_k0_s1_e1_c640mqa_r1_k3_h12_v2_s1_d64_c640uir_r1_a0_k0_s1_e2_c640r'  r(  r'  r(  r'  r(  r'  r(  r'  r(  r'  r(  r'  r(  r'  r(  r'  r(  r'  r(  r'  r(  r'  r(  r'  r(  )'uir_r1_a5_k5_s2_e6_c1280mqa_r1_k3_h16_s1_d96_c1280uir_r1_a0_k0_s1_e2_c1280r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  r*  r+  )
group_sizer         ?)
multipliergh㈵>)rz   r}   r   r   r3   r2   r0   )r   r   r   r   r   rA   r  r  )	r   r  r,  r   r  r  arch_defmodel_kwargsr   s	            rG   _gen_mobilenet_v5r1    s     W$&G4%
p&P(qa%
F "8
C#c)^8JK#L //L$WjILI L WjALALrH   urlc                 0    | dddddt         t        ddd
|S )	Nrq   )rr      r4  )rs   rs   r-  bicubiczconv_stem.convr   )
r2  r{   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_convr   r   )r2  r  s     rG   _cfgr=  9  s0    4}S[)'0F&l	
  rH   )rx   rx   rx   )r-  r-  r-  )rr      r>  )r:  r;  r6  r{   ztimm/gemma)	hf_hub_idr:  r;  r6  r{   licenserq   )r{   )mobilenetv5_300m_enczmobilenetv5_300m.gemma3nzmobilenetv5_base.untrainedc                 J    |j                  dd      }t        	 d| d|d|}|S )zMobileNet V5 Vision Encoderr   sameT)r   r  r   )rB  )r  r1  )r   r  r   r   s       rG   rB  rB  Y  s@     zz*f-H	
 E LrH   c                      t        dd| i|}|S )Nr   )mobilenetv5_300mr1  r   r  r   s      rG   rF  rF  g      RZR6RELrH   c                      t        dd| i|}|S )Nr   )r  rG  rH  s      rG   r  r  m  rI  rH   r   )r-  NFF)ru   )E	functoolsr   typingr   r   r   r   r   r	   r
   rX   torch.nnr   torch.nn.functional
functionalrU   	timm.datar   r   timm.layersr   r   r   r   r   r   r   r   r   _builderr   _efficientnet_blocksr   r   _efficientnet_builderr   r   r   r   r   	_featuresr    _features_fxr!   _manipulater"   	_registryr#   r$   __all__GELUrA   r   r*   r%   r&   rk   rm   r   rl   r  r  rj   r1  r=  default_cfgsrB  rF  r  r:   rH   rG   <module>r\     s"    I I I     E
 
 
 + J  , 1 ' <.
/V, S S Sla")) aH	n( n(b
ell*+
 
#u||

# 4 N` 0# 4 k   %( pp!p 	p
 p pfc  % |  !%| ! #'#!& , 
T 
@R 
 
  K  
  K  rH   