
    NgN                        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dS )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                 V    t                                                       || _        d S N)super__init__fn)selfr   	__class__s     Q/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/convmixer.pyr   zResidual.__init__   s$        c                 2    |                      |          |z   S r   )r   r   xs     r   forwardzResidual.forward   s    wwqzzA~r   )__name__
__module____qualname__r   r   __classcell__r   s   @r   r   r      sG                  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
                 <  	 t                                                       || _        x| _        | _        d| _        t          j        t          j        |||           	            t          j	                            | _
        t          j        	fdt          |          D              | _        t          |d          | _        t          j        |          | _        |dk    rt          j        |          nt          j                    | _        d S )NF)kernel_sizestridec                 @   g | ]}t          j        t          t          j        t          j        d                        t          j                                      t          j        d                       t          j                            S )same)groupspaddingr   )r)   )nn
Sequentialr   Conv2dBatchNorm2d).0i	act_layerdimr)   s     r   
<listcomp>z&ConvMixer.__init__.<locals>.<listcomp>4   s     	% 	% 	%  mR]	#sKVTTT!	s++   
 Ic3A666IKKN3''	 	 	% 	% 	%r   T	pool_typeflattenr   )r   r   num_classesnum_featureshead_hidden_sizegrad_checkpointingr/   r0   r1   r2   stemrangeblocksr   poolingDropout	head_dropLinearIdentityhead)r   r6   depthr)   
patch_sizein_chansr;   global_pool	drop_rater5   kwargsr   s    ` `     ` r   r   zConvMixer.__init__   s    	&477D1"'MIhJOOOIKKN3
 
	
 m	% 	% 	% 	% 	% 	% U||	% 	% 	%
 ,k4PPPI..3>??BIc;///			r   Fc                 (    t          dd          }|S )Nz^stemz^blocks\.(\d+))r?   rA   )dict)r   coarsematchers      r   group_matcherzConvMixer.group_matcherC   s    H->???r   Tc                     || _         d S r   )r>   )r   enables     r   set_grad_checkpointingz ConvMixer.set_grad_checkpointingH   s    "(r   returnc                     | j         S r   )rG   )r   s    r   get_classifierzConvMixer.get_classifierL   s
    yr   Nr;   rK   c                     || _         |t          |d          | _        |dk    rt          j        | j        |          nt          j                    | _        d S )NTr8   r   )r;   r   rB   r/   rE   r<   rF   rG   )r   r;   rK   s      r   reset_classifierzConvMixer.reset_classifierP   sU    &"/+tTTTDLALqBId/===VXVaVcVc			r   c                     |                      |          }| j        r4t          j                                        st          | j        |          }n|                     |          }|S r   )r?   r>   torchjitis_scriptingr   rA   r   s     r   forward_featureszConvMixer.forward_featuresV   sX    IIaLL" 	59+A+A+C+C 	t{A..AAAAr   
pre_logitsc                     |                      |          }|                     |          }|r|n|                     |          S r   )rB   rD   rG   )r   r   r`   s      r   forward_headzConvMixer.forward_head^   s;    LLOONN10qqDIIaLL0r   c                 Z    |                      |          }|                     |          }|S r   )r_   rb   r   s     r   r   zConvMixer.forwardc   s-    !!!$$a  r   F)Tr   )r   r   r   r/   GELUr   r\   r]   ignorerR   rU   ModulerX   intr   strrZ   r_   boolrb   r   r    r!   s   @r   r   r      sH       
 g%V %V %V %V %V %VN Y    Y) ) ) ) Y	    d dC dhsm d d d d  1 1$ 1 1 1 1
      r   Fc                 t    |                     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_convmixerrq   i   sB    zz/4(( RPQQQ	7JII&IIIr    c                 4    | ddd ddt           t          ddd
|S )Nr&   )r%      rt   gQ?bicubicrG   zstem.0)
urlr;   
input_size	pool_sizecrop_pctinterpolationmeanstd
classifier
first_convr   )rv   rM   s     r   _cfgr   p   s6    =t)%.BRX   r   ztimm/)	hf_hub_id)zconvmixer_1536_20.in1kzconvmixer_768_32.in1kzconvmixer_1024_20_ks9_p14.in1krV   c                 @    t          dddddd|}t          d| fi |S )Ni      r#   r$   r6   rH   r)   rI   convmixer_1536_20 rO   rq   rp   rM   
model_argss      r   r   r      s9    P$baAPPPPJ0*KK
KKKr   c           	      V    t          dddddt          j        d|}t          d| fi |S )Ni       r$   )r6   rH   r)   rI   r5   convmixer_768_32r   )rO   r/   ReLUrq   r   s      r   r   r      s@    b#RQ1PRPWbb[abbJ/JJzJ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      s9    Q$baBQQ&QQJ8*SS
SSSr   rd   )rr   )__doc__typingr   r\   torch.nnr/   	timm.datar   r   timm.layersr   	_registryr	   r
   _builderr   _manipulater   __all__rg   r   r   rq   r   default_cfgsr   r   r   r   r   r   <module>r      s(                 A A A A A A A A , , , , , , < < < < < < < < * * * * * * ' ' ' ' ' '-    ry   K K K K K	 K K K\J J J J    %$"dW555!TG444&*dW&=&=&=& &   L LY L L L L
 K KI K K K K
 T TY T T T T T Tr   