
    RЦi]                     b   S r SSKJrJr  SSKrSSKJr  SSKJrJ	r	  SSK
Jr  SSKJrJr  SSKJr  SS	KJr  S
/r " S S\R(                  5      r " S S
\R(                  5      rSS jrSS jr\" \" SS9\" SS9\" SS9S.5      r\SS\4S jj5       r\SS\4S jj5       r\SS\4S jj5       rg)zConvMixer

    )OptionalTypeNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)SelectAdaptivePool2d   )register_modelgenerate_default_cfgs)build_model_with_cfg)checkpoint_seq	ConvMixerc                   J   ^  \ rS rSrS\R
                  4U 4S jjrS rSrU =r	$ )Residual   fnc                 .   > [         TU ]  5         Xl        g N)super__init__r   )selfr   	__class__s     T/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/convmixer.pyr   Residual.__init__   s        c                 *    U R                  U5      U-   $ r   r   r   xs     r   forwardResidual.forward   s    wwqzA~r   r   )
__name__
__module____qualname____firstlineno__nnModuler   r    __static_attributes____classcell__r   s   @r   r   r      s    299  r   r   c                     ^  \ rS rSrSSSSSS\R
                  SS4	S	\S
\S\S\S\S\S\S\S\	\R                     4U 4S jjjr\R                  R                  SS j5       r\R                  R                  SS j5       r\R                  R                  S\R                  4S j5       rSS\S\\   4S jjrS rSS\4S jjrS rSrU =r$ ) r      	           avgg        Ndimdepthkernel_size
patch_sizein_chansnum_classesglobal_pool	drop_rate	act_layerc                 x  > [         TU ]  5         XS.nX`l        XPl        U=U l        U l        SU l        [        R                  " [        R                  " XQ4XDS.UD6U	" 5       [        R                  " U40 UD65      U l        [        R                  " [        U5       Vs/ s H  n[        R                  " [        [        R                  " [        R                  " XU4USS.UD6U	" 5       [        R                  " U40 UD65      5      [        R                  " X4SS0UD6U	" 5       [        R                  " U40 UD65      PM     sn6 U l        [        USS	9U l        [        R"                  " U5      U l        US
:  a  [        R&                  " X40 UD6U l        g [        R(                  " 5       U l        g s  snf )N)devicedtypeF)r4   stridesame)groupspaddingr4   r	   T	pool_typeflattenr   )r   r   r7   r6   num_featureshead_hidden_sizegrad_checkpointingr&   
SequentialConv2dBatchNorm2dstemranger   blocksr   poolingDropout	head_dropLinearIdentityhead)r   r2   r3   r4   r5   r6   r7   r8   r9   r:   r<   r=   kwargsddir   s                  r   r   ConvMixer.__init__   sv    	/& 477D1"'MMIIhUURTUKNN3%"%
	
 mm U|	% $! mmR]]		#KZVZWYZ!s1b1 
 IIc<A<<KNN3-"-	 $	%
 ,k4PI.9DqBIIc5"5	bkkm		%s    B&F7c                     [        SSS9nU$ )Nz^stemz^blocks\.(\d+))rK   rM   )dict)r   coarsematchers      r   group_matcherConvMixer.group_matcherG   s    H->?r   c                     Xl         g r   )rG   )r   enables     r   set_grad_checkpointing ConvMixer.set_grad_checkpointingL   s    "(r   returnc                     U R                   $ r   )rS   )r   s    r   get_classifierConvMixer.get_classifierP   s    yyr   c                     Xl         Ub  [        USS9U l        US:  a'  [        R                  " U R
                  U5      U l        g [        R                  " 5       U l        g )NTrB   r   )r7   r   rN   r&   rQ   rE   rR   rS   )r   r7   r8   s      r   reset_classifierConvMixer.reset_classifierT   sJ    &"/+tTDLALqBIId//=	VXVaVaVc	r   c                     U R                  U5      nU R                  (       a;  [        R                  R	                  5       (       d  [        U R                  U5      nU$ U R                  U5      nU$ r   )rK   rG   torchjitis_scriptingr   rM   r   s     r   forward_featuresConvMixer.forward_featuresZ   sU    IIaL""599+A+A+C+Ct{{A.A  AAr   
pre_logitsc                 z    U R                  U5      nU R                  U5      nU(       a  U$ U R                  U5      $ r   )rN   rP   rS   )r   r   ro   s      r   forward_headConvMixer.forward_headb   s2    LLONN1q0DIIaL0r   c                 J    U R                  U5      nU R                  U5      nU$ r   )rm   rq   r   s     r   r    ConvMixer.forwardg   s'    !!!$a r   )
rM   rG   rS   rP   rF   r6   r7   rE   rN   rK   F)Tr   )r"   r#   r$   r%   r&   GELUintstrfloatr   r'   r   rj   rk   ignorer\   r`   rd   r   rg   rm   boolrq   r    r(   r)   r*   s   @r   r   r      s4   
  !#$!)+)\)\ )\ 	)\
 )\ )\ )\ )\ )\ BII)\ )\V YY  YY) ) YY		  dC dhsm d1$ 1
 r   c                 h    UR                  SS 5      (       a  [        S5      e[        [        X40 UD6$ )Nfeatures_onlyz3features_only not implemented for ConvMixer models.)getRuntimeErrorr   r   )variant
pretrainedrT   s      r   _create_convmixerr   m   s1    zz/4((PQQ	7I&IIr   c                 2    U SSS SS[         [        SSSS.UE$ )	Nr0   )r/      r   gQ?bicubicrS   zstem.0mit)urlr7   
input_size	pool_sizecrop_pctinterpolationmeanstd
classifier
first_convlicenser   )r   rT   s     r   _cfgr   t   s3    =t)%.BRX5  r   ztimm/)	hf_hub_id)zconvmixer_1536_20.in1kzconvmixer_768_32.in1kzconvmixer_1024_20_ks9_p14.in1krb   c                 <    [        SSSSSS.UD6n[        SU 40 UD6$ )Ni      r-   r.   r2   r3   r4   r5   convmixer_1536_20 rY   r   r   rT   
model_argss      r   r   r      s-    P$baAPPJ0*K
KKr   c           	      Z    [        SSSSS[        R                  S.UD6n[        SU 40 UD6$ )Ni       r.   )r2   r3   r4   r5   r:   convmixer_768_32r   )rY   r&   ReLUr   r   s      r   r   r      s7    b#RQ1PRPWPWb[abJ/JzJJr   c                 <    [        SSSSSS.UD6n[        SU 40 UD6$ )Ni   r   r-      r   convmixer_1024_20_ks9_p14r   r   r   s      r   r   r      s-    Q$baBQ&QJ8*S
SSr   ru   ) )__doc__typingr   r   rj   torch.nnr&   	timm.datar   r   timm.layersr   	_registryr
   r   _builderr   _manipulater   __all__r'   r   r   r   r   default_cfgsr   r   r   r   r   r   <module>r      s    "   A , < * '-ryy O		 OdJ %"W5!G4&*W&=&  LY L L
 KI K K
 TY T Tr   