
    ^j]                     d   d Z ddlmZmZ ddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZmZ ddlmZ dd	lmZ d
gZ G d dej(                        Z G d d
ej(                        ZddZddZ e ed       ed       ed      d      Zeddefd       Zeddefd       Zeddefd       Zy)z ConvMixer

    )OptionalTypeNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)SelectAdaptivePool2d   )register_modelgenerate_default_cfgs)build_model_with_cfg)checkpoint_seq	ConvMixerc                   >     e Zd Zdej                  f fdZd Z xZS )Residualfnc                 0    t         |           || _        y N)super__init__r   )selfr   	__class__s     `/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/convmixer.pyr   zResidual.__init__   s        c                 *    | j                  |      |z   S r   )r   r   xs     r   forwardzResidual.forward   s    wwqzA~r   )__name__
__module____qualname__nnModuler   r   __classcell__r   s   @r   r   r      s    299 r   r   c                   ~    e Zd Zddddddej                  ddf	ded	ed
ededededededeej                     f fdZ
ej                  j                  dd       Zej                  j                  dd       Zej                  j                  dej                  fd       Zddedee   fdZd ZddefdZd Z xZS )r   	           avgg        Ndimdepthkernel_size
patch_sizein_chansnum_classesglobal_pool	drop_rate	act_layerc                 l   t         |           |
|d}|| _        || _        |x| _        | _        d| _        t        j                  t        j                  ||f||d| |	       t        j                  |fi |      | _        t        j                  t        |      D cg c]  }t        j                  t        t        j                  t        j                  |||f|dd| |	       t        j                  |fi |            t        j                  ||fddi| |	       t        j                  |fi |       c} | _        t        |d	      | _        t        j"                  |      | _        |d
kD  rt        j&                  ||fi || _        y t        j(                         | _        y c c}w )N)devicedtypeF)r-   stridesame)groupspaddingr-   r	   T	pool_typeflattenr   )r   r   r0   r/   num_featureshead_hidden_sizegrad_checkpointingr!   
SequentialConv2dBatchNorm2dstemranger   blocksr   poolingDropout	head_dropLinearIdentityhead)r   r+   r,   r-   r.   r/   r0   r1   r2   r3   r5   r6   kwargsddir   s                  r   r   zConvMixer.__init__   s    	/& 477D1"'MMIIhUJURTUKNN3%"%
	
 mm U|	%  mmR]]		#sKZVZWYZ!s1b1 
 IIc3<A<<KNN3-"-	 	%
 ,k4PI.9DqBIIc;5"5	bkkm		%s   !BF1c                      t        dd      }|S )Nz^stemz^blocks\.(\d+))rD   rF   )dict)r   coarsematchers      r   group_matcherzConvMixer.group_matcherG   s    H->?r   c                     || _         y r   )r@   )r   enables     r   set_grad_checkpointingz ConvMixer.set_grad_checkpointingL   s
    "(r   returnc                     | j                   S r   )rL   )r   s    r   get_classifierzConvMixer.get_classifierP   s    yyr   c                     || _         |t        |d      | _        |dkD  r&t        j                  | j
                  |      | _        y t        j                         | _        y )NTr;   r   )r0   r   rG   r!   rJ   r>   rK   rL   )r   r0   r1   s      r   reset_classifierzConvMixer.reset_classifierT   sL    &"/+tTDLALqBIId//=	VXVaVaVc	r   c                     | j                  |      }| j                  r6t        j                  j	                         st        | j                  |      }|S | j                  |      }|S r   )rD   r@   torchjitis_scriptingr   rF   r   s     r   forward_featureszConvMixer.forward_featuresZ   sR    IIaL""599+A+A+Ct{{A.A  AAr   
pre_logitsc                 p    | j                  |      }| j                  |      }|r|S | j                  |      S r   )rG   rI   rL   )r   r   rb   s      r   forward_headzConvMixer.forward_headb   s2    LLONN1q0DIIaL0r   c                 J    | j                  |      }| j                  |      }|S r   )ra   rd   r   s     r   r   zConvMixer.forwardg   s'    !!!$a r   F)Tr   )r   r   r    r!   GELUintstrfloatr   r"   r   r^   r_   ignorerT   rW   rZ   r   r\   ra   boolrd   r   r#   r$   s   @r   r   r      s)   
  !#$!)+)\)\ )\ 	)\
 )\ )\ )\ )\ )\ BII)\V YY  YY) ) YY		  dC dhsm d1$ 1
r   c                 `    |j                  dd       rt        d      t        t        | |fi |S )Nfeatures_onlyz3features_only not implemented for ConvMixer models.)getRuntimeErrorr   r   )variant
pretrainedrM   s      r   _create_convmixerrs   m   s0    zz/4(PQQ	7JI&IIr   c                 2    | ddd ddt         t        dddd|S )	Nr)   )r(      ru   gQ?bicubicrL   zstem.0mit)urlr0   
input_size	pool_sizecrop_pctinterpolationmeanstd
classifier
first_convlicenser   )rx   rM   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.in1krX   c                 <    t        dddddd|}t        d| fi |S )Ni      r&   r'   r+   r,   r-   r.   convmixer_1536_20 rQ   rs   rr   rM   
model_argss      r   r   r      s-    P$baAPPJ0*K
KKr   c           	      Z    t        dddddt        j                  d|}t        d| fi |S )Ni       r'   )r+   r,   r-   r.   r3   convmixer_768_32r   )rQ   r!   ReLUrs   r   s      r   r   r      s7    b#RQ1PRPWPWb[abJ/JzJJr   c                 <    t        dddddd|}t        d| fi |S )Ni   r   r&      r   convmixer_1024_20_ks9_p14r   r   r   s      r   r   r      s-    Q$baBQ&QJ8*S
SSr   rf   ) )__doc__typingr   r   r^   torch.nnr!   	timm.datar   r   timm.layersr   	_registryr
   r   _builderr   _manipulater   __all__r"   r   r   rs   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   