
    khD                     `   d Z ddl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

    )OptionalNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)SelectAdaptivePool2d   )register_modelgenerate_default_cfgs)build_model_with_cfg)checkpoint_seq	ConvMixerc                   $     e Zd Z fdZd Z xZS )Residualc                 0    t         |           || _        y N)super__init__fn)selfr   	__class__s     Q/var/www/teggl/fontify/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__r   r   __classcell__r   s   @r   r   r      s    r   r   c                   :    e Zd Zdddddd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        c
                 F   t         |           || _        |x| _        | _        d| _        t        j                  t        j                  ||||       |	       t        j                  |            | _
        t        j                  t        |      D cg c]  }t        j                  t        t        j                  t        j                  ||||d       |	       t        j                  |                  t        j                  ||d       |	       t        j                  |             c} | _        t        |d      | _        t        j                   |      | _        |d	kD  rt        j$                  ||      | _        y t        j&                         | _        y c c}w )
NF)kernel_sizestridesame)groupspaddingr   )r)   T	pool_typeflattenr   )r   r   num_classesnum_featureshead_hidden_sizegrad_checkpointingnn
SequentialConv2dBatchNorm2dstemranger   blocksr   poolingDropout	head_dropLinearIdentityhead)r   dimdepthr)   
patch_sizein_chansr1   global_pool	drop_rate	act_layerkwargsir   s               r   r   zConvMixer.__init__   s@    	&477D1"'MMIIhJOKNN3
	
 mm U|	%  mmR]]		#sKVT!s+ 
 IIc3A6KNN3'	 	%
 ,k4PI.3>?BIIc;/			%s   BFc                      t        dd      }|S )Nz^stemz^blocks\.(\d+))r9   r;   )dict)r   coarsematchers      r   group_matcherzConvMixer.group_matcherC   s    H->?r   c                     || _         y r   )r4   )r   enables     r   set_grad_checkpointingz ConvMixer.set_grad_checkpointingH   s
    "(r   returnc                     | j                   S r   )rA   )r   s    r   get_classifierzConvMixer.get_classifierL   s    yyr   r1   rF   c                     || _         |t        |d      | _        |dkD  r&t        j                  | j
                  |      | _        y t        j                         | _        y )NTr.   r   )r1   r   r<   r5   r?   r2   r@   rA   )r   r1   rF   s      r   reset_classifierzConvMixer.reset_classifierP   sL    &"/+tTDLALqBIId//=	VXVaVaVc	r   c                     | j                  |      }| j                  r6t        j                  j	                         st        | j                  |      }|S | j                  |      }|S r   )r9   r4   torchjitis_scriptingr   r;   r   s     r   forward_featureszConvMixer.forward_featuresV   sR    IIaL""599+A+A+Ct{{A.A  AAr   
pre_logitsc                 p    | j                  |      }| j                  |      }|r|S | j                  |      S r   )r<   r>   rA   )r   r   r]   s      r   forward_headzConvMixer.forward_head^   s2    LLONN1q0DIIaL0r   c                 J    | j                  |      }| j                  |      }|S r   )r\   r_   r   s     r   r   zConvMixer.forwardc   s'    !!!$a r   F)Tr   )r   r   r   r5   GELUr   rY   rZ   ignorerO   rR   ModulerU   intr   strrW   r\   boolr_   r   r    r!   s   @r   r   r      s    
 gg%VN 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
pretrainedrI   s      r   _create_convmixerrn   i   s0    zz/4(PQQ	7JI&IIr   c                 0    | ddd ddt         t        ddd
|S )Nr&   )r%      rp   gQ?bicubicrA   zstem.0)
urlr1   
input_size	pool_sizecrop_pctinterpolationmeanstd
classifier
first_convr   )rr   rI   s     r   _cfgr{   p   s1    =t)%.BRX  r   ztimm/)	hf_hub_id)zconvmixer_1536_20.in1kzconvmixer_768_32.in1kzconvmixer_1024_20_ks9_p14.in1krS   c                 <    t        dddddd|}t        d| fi |S )Ni      r#   r$   rB   rC   r)   rD   convmixer_1536_20 rL   rn   rm   rI   
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$   )rB   rC   r)   rD   rH   convmixer_768_32r   )rL   r5   ReLUrn   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   ra   ) )__doc__typingr   rY   torch.nnr5   	timm.datar   r   timm.layersr   	_registryr	   r
   _builderr   _manipulater   __all__rd   r   r   rn   r{   default_cfgsr   r   r   r   r   r   <module>r      s       A , < * '-ryy K		 K\J %"W5!G4&*W&=&  LY L L
 KI K K
 TY T Tr   