
    Ngq^                     b   d Z ddlmZ ddl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 ddlmZ dd	lmZ dd
lmZmZ dgZ G d de	j                  Z  G d de	j                  Z! G d de	j                  Z" G d de	j                  Z# G d de	j                  Z$ G d de	j                  Z%d4dZ&d5dZ' e e'd           e'd           e'd           e'd           e'd           e'd           e'ddddd            e'ddddd            e'ddddd            e'ddddd            e'dd!           e'dd!          d"          Z(d#e%fd$Z)d6d&Z*ed6d'e%fd(            Z+ed6d'e%fd)            Z,ed6d'e%fd*            Z-ed6d'e%fd+            Z.ed6d'e%fd,            Z/ed6d'e%fd-            Z0ed6d'e%fd.            Z1ed6d'e%fd/            Z2ed6d'e%fd0            Z3ed6d'e%fd1            Z4ed6d'e%fd2            Z5ed6d'e%fd3            Z6dS )7a[   FocalNet

As described in `Focal Modulation Networks` - https://arxiv.org/abs/2203.11926

Significant modifications and refactoring from the original impl at https://github.com/microsoft/FocalNet

This impl is/has:
* fully convolutional, NCHW tensor layout throughout, seemed to have minimal performance impact but more flexible
* re-ordered downsample / layer so that striding always at beginning of layer (stage)
* no input size constraints or input resolution/H/W tracking through the model
* torchscript fixed and a number of quirks cleaned up
* feature extraction support via `features_only=True`
    )partial)CallableOptionalTupleNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)MlpDropPathLayerNorm2dtrunc_normal_ClassifierHeadNormMlpClassifierHead   )build_model_with_cfg)named_apply)generate_default_cfgsregister_modelFocalNetc                   T     e Zd Zdddddefdedededed	ed
ededef fdZd Z	 xZ
S )FocalModulation   TF        dimfocal_levelfocal_factorbiasuse_post_normnormalize_modulator	proj_drop
norm_layerc
                    t                                                       || _        || _        || _        || _        || _        || _        ||| j        dz   g| _        t          j
        |d|z  | j        dz   z   d|          | _        t          j
        ||d|          | _        t          j                    | _        t          j
        ||d          | _        t          j        |          | _        t          j                    | _        g | _        t+          | j                  D ]}
| j        |
z  | j        z   }| j                            t          j        t          j
        |||||dz  d          t          j                                         | j                            |           | j        r |	|          nt          j                    | _        d S )Nr   r   )kernel_sizer   )r#   F)r#   groupspaddingr   )super__init__r   focal_windowr   r   r   r   input_splitnnConv2dfhGELUactprojDropoutr    
ModuleListfocal_layerskernel_sizesrangeappend
SequentialIdentitynorm)selfr   r(   r   r   r   r   r   r    r!   kr#   	__class__s               P/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/focalnet.pyr'   zFocalModulation.__init__%   s    	(&(*#6 d&6&:;3C4+;a+? @aVZ[[[3>>>799Ic3A666	I..MOOt'(( 	2 	2A+a/$2CCK$$R]	#sCQ\`aQahmnnn		& &    $$[1111'+'9LJJsOOOr{}}			    c                 F   |                      |          }t          j        || j        d          \  }}}d}t	          | j                  D ]'\  }} ||          }|||d d ||dz   f         z  z   }(|                     |                    dd                    }|||d d | j        d f         z  z   }| j	        r|| j        dz   z  }|| 
                    |          z  }	|                     |	          }	|                     |	          }	|                     |	          }	|	S )Nr   r   )r      T)keepdim)r,   torchsplitr)   	enumerater3   r/   meanr   r   r-   r9   r0   r    )
r:   xqctxgatesctx_alllfocal_layer
ctx_globalx_outs
             r=   forwardzFocalModulation.forwardM   s=   FF1IIAt'7;;3 '(9:: 	8 	8NA{+c""CeAAAqQwJ&7 77GGXXchhvth<<==
Jqqq$2B2C2C/C)DDD # 	7!1A!56G DFF7OO#		%   		%  u%%r>   )__name__
__module____qualname__r   intboolfloatr   r'   rO   __classcell__r<   s   @r=   r   r   $   s         !""'(-!#.&M &M&M 	&M
 &M &M  &M "&&M &M !&M &M &M &M &M &MP      r>   r   c                   &     e Zd Zd fd	Zd Z xZS )LayerScale2dh㈵>Fc                     t                                                       || _        t          j        |t          j        |          z            | _        d S N)r&   r'   inplacer*   	ParameterrB   onesgamma)r:   r   init_valuesr]   r<   s       r=   r'   zLayerScale2d.__init__i   sB    \+
3"?@@


r>   c                 ~    | j                             dddd          }| j        r|                    |          n||z  S )Nr   )r`   viewr]   mul_)r:   rF   r`   s      r=   rO   zLayerScale2d.forwardn   s:    
2q!,, $;qvve}}}!e);r>   )rZ   F)rP   rQ   rR   r'   rO   rV   rW   s   @r=   rY   rY   h   sR        A A A A A A
< < < < < < <r>   rY   c                   |     e Zd ZdZdddddddddej        efded	ed
edede	de	de	dededede
de
f fdZd Z xZS )FocalNetBlockz% Focal Modulation Network Block.
          @r   r@   F-C6?r   r   	mlp_ratior   r(   r   use_post_norm_in_modulationr   layerscale_valuer    	drop_path	act_layerr!   c           	         t                                                       || _        || _        || _        || _        || _        |s ||          nt          j                    | _	        t          ||| j        |||	|          | _        |r ||          nt          j                    | _        |t          ||          nt          j                    | _        |
dk    rt          |
          nt          j                    | _        |s ||          nt          j                    | _        t%          |t'          ||z            ||	d          | _        |r ||          nt          j                    | _        |t          ||          nt          j                    | _        |
dk    rt          |
          nt          j                    | _        dS )ap  
        Args:
            dim: Number of input channels.
            mlp_ratio: Ratio of mlp hidden dim to embedding dim.
            focal_level: Number of focal levels.
            focal_window: Focal window size at first focal level.
            use_post_norm: Whether to use layer norm after modulation.
            use_post_norm_in_modulation: Whether to use layer norm in modulation.
            layerscale_value: Initial layerscale value.
            proj_drop: Dropout rate.
            drop_path: Stochastic depth rate.
            act_layer: Activation layer.
            norm_layer: Normalization layer.
        )r(   r   r   r   r    r!   Nr   T)in_featureshidden_featuresrn   dropuse_conv)r&   r'   r   rj   r(   r   r   r*   r8   norm1r   
modulation
norm1_postrY   ls1r   
drop_path1norm2r
   rS   mlp
norm2_postls2
drop_path2)r:   r   rj   r   r(   r   rk   r   rl   r    rm   rn   r!   r<   s                r=   r'   zFocalNetBlock.__init__w   s   : 	"(&*,9LZZ___r{}}
)%(5 3!
 
 
 .;M**S///:J:V<%5666\^\g\i\i1:R(9---R[]],9LZZ___r{}}
i00
 
 
 .;M**S///:J:V<%5666\^\g\i\i1:R(9---R[]]r>   c                    |}|                      |          }|                     |          }|                     |          }||                     |                     |                    z   }||                     |                     |                     |                     | 	                    |                                                  z   }|S r\   )
rt   ru   rv   rx   rw   r}   r|   r{   rz   ry   )r:   rF   shortcuts      r=   rO   zFocalNetBlock.forward   s     JJqMMOOAOOAttxx{{333 $**Q--9P9P)Q)Q R RSSSr>   )rP   rQ   rR   __doc__r*   r.   r   rS   rU   rT   r   r'   rO   rV   rW   s   @r=   rg   rg   s   s
          "  !"'05(-&*!!"$'#.=S =S=S =S 	=S
 =S  =S *.=S "&=S $=S =S =S  =S !=S =S =S =S =S =S~      r>   rg   c                        e Zd ZdZdddddddddddefded	ed
ededededededededededededef fdZ	e
j        j        dd            Zd Z xZS )FocalNetStagez4 A basic Focal Transformer layer for one stage.
    rh   Tr   Fri   r   r   out_dimdepthrj   
downsampler   r(   use_overlap_downr   rk   r   rl   r    rm   r!   c                 h  	
 t                                                       || _        || _        d| _        |rt          |d|          | _        nt          j                    | _        t          j	        	
fdt          |          D                       | _        dS )a8  
        Args:
            dim: Number of input channels.
            out_dim: Number of output channels.
            depth: Number of blocks.
            mlp_ratio: Ratio of mlp hidden dim to embedding dim.
            downsample: Downsample layer at start of the layer.
            focal_level: Number of focal levels
            focal_window: Focal window size at first focal level
            use_overlap_down: User overlapped convolution in downsample layer.
            use_post_norm: Whether to use layer norm after modulation.
            use_post_norm_in_modulation: Whether to use layer norm in modulation.
            layerscale_value: Initial layerscale value
            proj_drop: Dropout rate for projections.
            drop_path: Stochastic depth rate.
            norm_layer: Normalization layer.
        Fr   )in_chsout_chsstrideoverlapr!   c                 ~    g | ]9}t          	
t          t                    r|         n           :S ))r   rj   r   r(   r   rk   r   rl   r    rm   r!   )rg   
isinstancelist).0irm   r   r(   rl   rj   r!   r   r   r    r   rk   s     r=   
<listcomp>z*FocalNetStage.__init__.<locals>.<listcomp>   sr     %# %# %#  #')+,G$7!1#*4Y*E*ET)A,,9%  %# %# %#r>   N)r&   r'   r   r   grad_checkpointing
Downsampler   r*   r8   r2   r5   blocks)r:   r   r   r   rj   r   r   r(   r   r   rk   r   rl   r    rm   r!   r<   s     ` ` `` ```````r=   r'   zFocalNetStage.__init__   s    F 	
"' 		,((%  DOO !kmmDO m %# %# %# %# %# %# %# %# %# %# %# %# %# %# 5\\%# %# %# $ $r>   c                     || _         d S r\   )r   )r:   enables     r=   set_grad_checkpointingz$FocalNetStage.set_grad_checkpointing  s    "(r>   c                     |                      |          }| j        D ]H}| j        r4t          j                                        st          j        ||          }= ||          }I|S r\   )r   r   r   rB   jitis_scripting
checkpoint)r:   rF   blks      r=   rO   zFocalNetStage.forward  sl    OOA; 	 	C& uy/E/E/G/G )#q11CFFr>   T)rP   rQ   rR   r   r   rS   rU   rT   r   r'   rB   r   ignorer   rO   rV   rW   s   @r=   r   r      sR          "#  !%*"'05(-&*!!#.!B$ B$B$ B$ 	B$
 B$ B$ B$ B$ #B$  B$ *.B$ "&B$ $B$ B$ B$  !!B$ B$ B$ B$ B$ B$H Y) ) ) )      r>   r   c                   N     e Zd Z	 	 	 ddededededee         f
 fd	Zd
 Z xZ	S )r      FNr   r   r   r   r!   c                 "   t                                                       || _        d}|}|r|dv sJ |dk    rd\  }}n|dk    rd\  }}t          j        |||||          | _        | ||          nt          j                    | _        dS )	a  

        Args:
            in_chs: Number of input image channels.
            out_chs: Number of linear projection output channels.
            stride: Downsample stride.
            overlap: Use overlapping convolutions if True.
            norm_layer: Normalization layer.
        r   )r   r   r   )   r   r   )r@   r   )r#   r   r%   N)r&   r'   r   r*   r+   r0   r8   r9   )	r:   r   r   r   r   r!   r%   r#   r<   s	           r=   r'   zDownsample.__init__  s    " 	 	,V####{{'+$WW1'+$WIfg;v_fggg	+5+AJJw'''r{}}			r>   c                 Z    |                      |          }|                     |          }|S r\   )r0   r9   r:   rF   s     r=   rO   zDownsample.forward;  s%    IIaLLIIaLLr>   )r   FN)
rP   rQ   rR   rS   rT   r   r   r'   rO   rV   rW   s   @r=   r   r     s         !-1U UU U 	U
 U !*U U U U U U<      r>   r   c            '           e Zd ZdZdddddddd	d
d
d
d
dddddd eed          fdededededeedf         de	deedf         deedf         de
de
de
de
dee         de	d ee	         d!e
d"e
d#e
d$ef& fd%Zej        j        d&             Zej        j        d1d'            Zej        j        d2d)            Zej        j        d*ej        fd+            Zd3dedee         fd,Zd- Zd1d.e
fd/Zd0 Z xZS )4r   z," Focal Modulation Networks (FocalNets)
    r@     avg`   r   r      r   rh   )r   r   r   r   r@   r@   r@   r@   FN      ?r   g?rZ   )epsin_chansnum_classesglobal_pool	embed_dimdepths.rj   focal_levelsfocal_windowsr   r   rk   r   head_hidden_sizehead_init_scalerl   	drop_rateproj_drop_ratedrop_path_rater!   c                 v   t                                                       t          |          | _        fdt	          | j                  D             || _        | _        d         x| _        | _        g | _	        t          |d         |	|          | _        d         }d t          j        d|t          |                    D             }g }t	          | j                  D ]}|         }t          ||||         ||dk    ||         ||         |	|
|||||t          |d|                   t          |d|dz                               |          }|}||gz  }| xj	        t!          |d	d
|z  z  d|           gz  c_	        t#          j        | | _        |r?t#          j                    | _        || _        t-          | j        |||||          | _        n2 || j                  | _        t1          | j        |||          | _        t3          t5          t6          |          |            dS )a`  
        Args:
            in_chans: Number of input image channels.
            num_classes: Number of classes for classification head.
            embed_dim: Patch embedding dimension.
            depths: Depth of each Focal Transformer layer.
            mlp_ratio: Ratio of mlp hidden dim to embedding dim.
            focal_levels: How many focal levels at all stages. Note that this excludes the finest-grain level.
            focal_windows: The focal window size at all stages.
            use_overlap_down: Whether to use convolutional embedding.
            use_post_norm: Whether to use layernorm after modulation (it helps stablize training of large models)
            layerscale_value: Value for layer scale.
            drop_rate: Dropout rate.
            drop_path_rate: Stochastic depth rate.
            norm_layer: Normalization layer.
        c                      g | ]
}d |z  z  S )r    )r   r   r   s     r=   r   z%FocalNet.__init__.<locals>.<listcomp>n  s"    JJJaY!q&)JJJr>   rc   r   )r   r   r   r!   c                 6    g | ]}|                                 S r   )item)r   rF   s     r=   r   z%FocalNet.__init__.<locals>.<listcomp>}  s     PPPAqvvxxPPPr>   Nr   )r   r   r   rj   r   r   r(   r   r   rk   r   rl   r    rm   r!   r   r   layers.)num_chs	reductionmodule)hidden_size	pool_typer   r!   )r   r   )r   )r&   r'   len
num_layersr5   r   r   num_featuresr   feature_infor   stemrB   linspacesumr   dictr*   r7   layersr8   r9   r   headr   r   r   _init_weights)r:   r   r   r   r   r   rj   r   r   r   r   rk   r   r   r   rl   r   r   r   r!   in_dimdprr   i_layerr   layerr<   s       `                     r=   r'   zFocalNet.__init__E  s   L 	f++JJJJ53I3IJJJ	&"4=bMAD1aL$!	
 
 
	 1PP>3v;;!O!OPPPT_-- 	q 	qG(G!Wo#"Q;(1*73!1+,G$7!1(c&'"233C|!|8L4M4MMN%  E" FugF$w!a7lBR[nel[n[n"o"o"o!ppmV, 	DI$4D!-!,%#%  DII #
4#455DI&!%#	  DI 	GM?KKKTRRRRRr>   c                     dhS )N r   r:   s    r=   no_weight_decayzFocalNet.no_weight_decay  s	    tr>   c                 4    t          d|rddgng d          S )Nz^stem)z^layers\.(\d+)Nz^norm)i ))z^layers\.(\d+).downsample)r   )z^layers\.(\d+)\.\w+\.(\d+)Nr   )r   r   )r   )r:   coarses     r=   group_matcherzFocalNet.group_matcher  sE     )$   

 

 

 
	
r>   Tc                 T    || _         | j        D ]}|                    |           d S )N)r   )r   r   r   )r:   r   rK   s      r=   r   zFocalNet.set_grad_checkpointing  s?    "( 	4 	4A$$F$3333	4 	4r>   returnc                     | j         j        S r\   )r   fcr   s    r=   get_classifierzFocalNet.get_classifier  s    y|r>   c                 >    | j                             ||           d S )N)r   )r   reset)r:   r   r   s      r=   reset_classifierzFocalNet.reset_classifier  s     	{;;;;;r>   c                     |                      |          }|                     |          }|                     |          }|S r\   )r   r   r9   r   s     r=   forward_featureszFocalNet.forward_features  s4    IIaLLKKNNIIaLLr>   
pre_logitsc                 ^    |r|                      ||          n|                      |          S )N)r   )r   )r:   rF   r   s      r=   forward_headzFocalNet.forward_head  s-    6@Rtyyzy222diiPQllRr>   c                 Z    |                      |          }|                     |          }|S r\   )r   r   r   s     r=   rO   zFocalNet.forward  s-    !!!$$a  r>   Fr   r\   )rP   rQ   rR   r   r   r   rS   strr   rU   rT   r   r   r'   rB   r   r   r   r   r   r*   Moduler   r   r   r   rO   rV   rW   s   @r=   r   r   A  s        
 #$&2!,8-9%*"'05(-.2%(04 #%#&#*7;D#A#A#A)gS gSgS gS 	gS
 gS #s(OgS gS  S/gS !c?gS #gS  gS *.gS "&gS 'smgS #gS  'uo!gS" #gS$ !%gS& !'gS( !)gS gS gS gS gS gSR Y   Y
 
 
 
 Y4 4 4 4
 Y	    < <C <hsm < < < <  S S$ S S S S      r>   r   c                    t          | t          j                  rEt          | j        d           | j        &t          j                            | j                   d S d S t          | t          j                  rt          | j        d           | j        $t          j                            | j                   |rFd|v rD| j        j	        
                    |           | j        j	        
                    |           d S d S d S d S )Ng{Gz?)stdhead.fc)r   r*   r+   r   weightr   initzeros_Lineardatare   )r   namer   s      r=   r   r     s   &")$$ 
3fm----;"GNN6;''''' #"	FBI	&	& 3fm----;"GNN6;''' 	3I%%M##O444K!!/222223 3	3 	3%%r>   r   c                 6    | dddddt           t          dddd	|S )
Nr   )r@      r   )r   r   g?bicubicz	stem.projr   mit)urlr   
input_size	pool_sizecrop_pctinterpolationrE   r   
first_conv
classifierlicenser   )r   kwargss     r=   _cfgr    s8    =v%.B!  # r>   ztimm/)	hf_hub_id)r@     r  )   r  iRU  )r  r   r   r   r   )r  r   )zfocalnet_tiny_srf.ms_in1kzfocalnet_small_srf.ms_in1kzfocalnet_base_srf.ms_in1kzfocalnet_tiny_lrf.ms_in1kzfocalnet_small_lrf.ms_in1kzfocalnet_base_lrf.ms_in1kzfocalnet_large_fl3.ms_in22kzfocalnet_large_fl4.ms_in22kzfocalnet_xlarge_fl3.ms_in22kzfocalnet_xlarge_fl4.ms_in22kzfocalnet_huge_fl3.ms_in22kzfocalnet_huge_fl4.ms_in22kmodelc                    |                      d|           } d| v r| S dd l}i }|                                }|                                 D ]\  }}|                    dd|          }|                    dd          }|                    dd	 |          }d
|v r||vr|                    dd|          }|                    dd          }|                    dd          }||v rf||                                         |                                k    r6||         j        |j        k    r |                    ||         j                  }|||<   |S )Nr  zstem.proj.weightr   zgamma_([0-9])z
ls\1.gammapatch_embedr   zlayers.(\d+).downsamplec                 T    dt          |                     d                    dz    dS )Nr   r   z.downsample)rS   group)rF   s    r=   <lambda>z&checkpoint_filter_fn.<locals>.<lambda>"  s(    9c3qwwqzz??UVCV9c9c9c r>   r9   znorm([0-9])znorm\1_postzln.znorm.r   r   )	getre
state_dictitemssubreplacenumelshapereshape)r  r  r  out_dict	dest_dictr;   vs          r=   checkpoint_filter_fnr    s^   44JZ''IIIH  ""I  "" 
 
1FF#]A66IImV,,FF-/c/cefggQ;;1I--~~q99AIIeW%%IIfi((	>>il0022aggii??IaLDVZ[ZaDaDa		)A,,--AOr>   Fc           	          t          d t          |                    dd                    D                       }|                    d|          }t	          t
          | |ft          t          d|          d|}|S )Nc              3       K   | ]	\  }}|V  
d S r\   r   )r   r   _s      r=   	<genexpr>z#_create_focalnet.<locals>.<genexpr>.  s&      \\da\\\\\\r>   r   )r   r   r@   r   out_indicesT)flatten_sequentialr  )pretrained_filter_fnfeature_cfg)tuplerD   r  popr   r   r  r   )variant
pretrainedr  default_out_indicesr  r  s         r=   _create_focalnetr'  -  s    \\i

8\8Z8Z.[.[\\\\\**],?@@K ':1DkJJJ  	 E
 Lr>   r   c                 @    t          dg ddd|}t          dd| i|S )Nr   r   r   r   focalnet_tiny_srfr%  r   )r*  r   r'  r%  r  model_kwargss      r=   r*  r*  9  s9    D|||rDDVDDLWWJW,WWWr>   c                 @    t          dg ddd|}t          dd| i|S )Nr   r      r   r   r)  focalnet_small_srfr%  r   )r1  r+  r,  s      r=   r1  r1  ?  s9    E}}}EEfEELXXZX<XXXr>   c                 @    t          dg ddd|}t          dd| i|S )Nr/     r)  focalnet_base_srfr%  r   )r4  r+  r,  s      r=   r4  r4  E  s9    F}}}FFvFFLWWJW,WWWr>   c                 F    t          dg ddg dd|}t          dd| i|S )	Nr   r   r   r   r   r   focalnet_tiny_lrfr%  r   )r7  r+  r,  s      r=   r7  r7  K  s@    _|||r__X^__LWWJW,WWWr>   c                 F    t          dg ddg dd|}t          dd| i|S )	Nr/  r   r   r6  focalnet_small_lrfr%  r   )r9  r+  r,  s      r=   r9  r9  Q  s@    `}}}``Y_``LXXZX<XXXr>   c                 F    t          dg ddg dd|}t          dd| i|S )	Nr/  r3  r   r6  focalnet_base_lrfr%  r   )r;  r+  r,  s      r=   r;  r;  W  s@    a}}},,,aaZ`aaLWWJW,WWWr>   c                 V    t          dg ddg ddgdz  dddd|}t          dd
| i|S )Nr/     r      r   Tri   r   r   r   r   r   r   rl   focalnet_large_fl3r%  r   )r@  r+  r,  s      r=   r@  r@  ^  se     T}},,,WXVY\]V]TDT TLRT TL XXZX<XXXr>   c           
      L    t          d	g ddg ddddd|}t          d
d| i|S )Nr/  r=  r   r   r   r   Tri   r   r   r   r   r   rl   focalnet_large_fl4r%  r   )rD  r+  r,  s      r=   rD  rD  f  sY     T}},,,TDT TLRT TL XXZX<XXXr>   c                 V    t          dg ddg ddgdz  dddd|}t          dd
| i|S )Nr/     r   r>  r   Tri   r?  focalnet_xlarge_fl3r%  r   )rG  r+  r,  s      r=   rG  rG  n  se     T}},,,WXVY\]V]TDT TLRT TL YYjYLYYYr>   c           
      L    t          d	g ddg ddddd|}t          d
d| i|S )Nr/  rF  rB  Tri   rC  focalnet_xlarge_fl4r%  r   )rI  r+  r,  s      r=   rI  rI  v  sY     T}},,,TDT TLRT TL YYjYLYYYr>   c                 X    t          dg ddg ddgdz  ddddd|}t          dd
| i|S )Nr/  `  r   r@   r   Tri   )r   r   r   r   r   rk   r   rl   focalnet_huge_fl3r%  r   )rL  r+  r,  s      r=   rL  rL  ~  sh     v}},,,WXVY\]V]tfjv vntv vL WWJW,WWWr>   c                 N    t          d	g ddg dddddd|}t          d
d| i|S )Nr/  rK  rB  Tri   )r   r   r   r   rk   r   rl   focalnet_huge_fl4r%  r   )rN  r+  r,  s      r=   rN  rN    s\     v}},,,tfjv vntv vL WWJW,WWWr>   )Nr   )r   r   )7r   	functoolsr   typingr   r   r   rB   torch.nnr*   torch.utils.checkpointutilsr   	timm.datar   r	   timm.layersr
   r   r   r   r   r   _builderr   _manipulater   	_registryr   r   __all__r   r   rY   rg   r   r   r   r   r  default_cfgsr  r'  r*  r1  r4  r7  r9  r;  r@  rD  rG  rI  rL  rN  r   r>   r=   <module>r[     sc   &       , , , , , , , , , ,        + + + + + + + + + A A A A A A A A h h h h h h h h h h h h h h h h * * * * * * $ $ $ $ $ $ < < < < < < < <,A A A A Abi A A AH< < < < <29 < < <O O O O OBI O O OdS S S S SBI S S Sl# # # # # # # #LX X X X Xry X X Xv3 3 3 3    %$!%" " ""&$# # #!%" " "!%" " ""&$# # #!%" " " $(4 HsPU$W $W $W $(4 HsPU$W $W $W %)D HsPU%W %W %W %)D HsPU%W %W %W #'$# # # #'$# # #; &  &    FH    *	 	 	 	 X XX X X X X
 Y Yh Y Y Y Y
 X XX X X X X
 X XX X X X X
 Y Yh Y Y Y Y
 X XX X X X X Y Yh Y Y Y Y Y Yh Y Y Y Y Z Zx Z Z Z Z Z Zx Z Z Z Z X XX X X X X X XX X X X X X Xr>   