
    ^jc                        d Z ddlZddlmZ ddlmZmZmZmZm	Z	 ddl
Z
ddlmc mZ ddl
mZ ddlmZmZ ddlmZmZ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  ddl!m"Z"m#Z# ddl$m%Z%m&Z& dgZ'e  G d dejP                               Z) G d dejP                        Z* G d dejP                        Z+ G d dejP                        Z, G d dejP                        Z- G d dejP                        Z.d,dZ/d Z0d-dZ1d.dZ2 e& e2dd d!       e2dd d!       e2dd"d#d$       e2dd"d#d$       e2dd"d#d$       e2dd#d!      d%      Z3e%d-d&e.fd'       Z4e%d-d&e.fd(       Z5e%d-d&e.fd)       Z6e%d-d&e.fd*       Z7e%d-d&e.fd+       Z8y)/a#   EdgeNeXt

Paper: `EdgeNeXt: Efficiently Amalgamated CNN-Transformer Architecture for Mobile Vision Applications`
 - https://arxiv.org/abs/2206.10589

Original code and weights from https://github.com/mmaaz60/EdgeNeXt

Modifications and additions for timm by / Copyright 2022, Ross Wightman
    N)partial)ListOptionalTupleTypeUnion)nnIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)DropPathcalculate_drop_path_ratesLayerNorm2dMlpcreate_conv2dNormMlpClassifierHeadClassifierHeadtrunc_normal_tf_   )build_model_with_cfg)feature_take_indices)register_notrace_module)named_applycheckpoint_seq)register_modelgenerate_default_cfgsEdgeNeXtc                   P     e Zd Z	 	 	 	 	 ddededef fdZdeeeef   fdZ xZS )PositionalEncodingFourier
hidden_dimdimtemperaturec                     ||d}t         |           t        j                  |dz  |fddi|| _        dt
        j                  z  | _        || _        || _	        || _
        y )Ndevicedtype   kernel_sizer   )super__init__r	   Conv2dtoken_projectionmathpiscaler"   r    r!   )selfr    r!   r"   r%   r&   dd	__class__s          _/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/edgenext.pyr*   z"PositionalEncodingFourier.__init__)   sa     / "		*q.# S1 SPR S[
&$    shapec           
      n   | j                   j                  j                  }| j                   j                  j                  }t	        j
                  |      j                  |t        j                         }|j                  dt        j                        }|j                  dt        j                        }d}||d d dd d d f   |z   z  | j                  z  }||d d d d dd f   |z   z  | j                  z  }t	        j                  | j                  t        j                  |      j                  t        j                        }| j                  dt	        j                  |dd	      z  | j                  z  z  }|d d d d d d d f   |z  }	|d d d d d d d f   |z  }
t	        j                   |	d d d d d d d
d df   j#                         |	d d d d d d dd df   j%                         fd      j'                  d      }	t	        j                   |
d d d d d d d
d df   j#                         |
d d d d d d dd df   j%                         fd      j'                  d      }
t	        j(                  |
|	fd      j+                  d
ddd      }| j                  |j                  |            }|S )Nr$   r   )r&   r'   ư>)r&   r%   floor)rounding_moder      r!      )r,   weightr%   r&   torchzerostoboolcumsumfloat32r/   aranger    int64r"   divstacksincosflattencatpermute)r0   r5   r%   r&   inv_masky_embedx_embedepsdim_tpos_xpos_yposs               r3   forwardz!PositionalEncodingFourier.forward9   s^   &&--44%%,,22KK&))uzz)JJ//!5==/9//!5==/9WQQY/#56CWQ23Y/#56CT__EKKORRSXS`S`a  Q5!7)S%SVZVeVe%ef1a&.1a&.1aADqD=!%%'1aADqD=!%%')./118 	 1aADqD=!%%'1aADqD=!%%')./118 	 iiA.66q!QB##CFF5M2
r4   )    i   g     @NN)	__name__
__module____qualname__intfloatr*   r   rV   __classcell__r2   s   @r3   r   r   '   sL     !!'  	 U3S=1 r4   r   c                        e Zd Zdddddd eej
                  d      ej                  dddfd	ed
ee   dedede	de
de
deej                     deej                     de
f fdZd Z xZS )	ConvBlockN   r   Tr;   r7   rQ           r!   dim_outr(   stride	conv_biasexpand_ratiols_init_value
norm_layer	act_layer	drop_pathc                    ||d}t         |           |xs |}|dkD  xs ||k7  | _        t        ||f||d|d|| _         ||fi || _        t        |t        ||z        fd|	i|| _        |dkD  r,t        j                  |t        j                  |fi |z        nd | _        |
dkD  rt        |
      | _        y t        j                         | _        y )Nr$   r   T)r(   re   	depthwisebiasrj   r   rc   )r)   r*   shortcut_after_dwr   conv_dwnormr   r[   mlpr	   	Parameterr?   onesgammar   Identityrk   )r0   r!   rd   r(   re   rf   rg   rh   ri   rj   rk   r%   r&   r1   r2   s                 r3   r*   zConvBlock.__init__U   s     /.S!'!!=sg~$
 $
 
 w-"-	w&'
  
 	
 Q^`aPaR\\-%**W2K2K"KLgk
09B),BKKMr4   c                 :   |}| j                  |      }| j                  r|}|j                  dddd      }| j                  |      }| j	                  |      }| j
                  | j
                  |z  }|j                  dddd      }|| j                  |      z   }|S )Nr   r'   r=   r   )rp   ro   rM   rq   rr   ru   rk   )r0   xshortcuts      r3   rV   zConvBlock.forward|   s    LLO!!HIIaAq!IIaLHHQK::!

QAIIaAq!t~~a((r4   )rX   rY   rZ   r   r	   	LayerNormGELUr[   r   rB   r\   r   Moduler*   rV   r]   r^   s   @r3   r`   r`   T   s     &* ""##'*1",,D*I)+!%R%R c]%R 	%R
 %R %R  %R !%R RYY%R BII%R %RNr4   r`   c                        e Zd Z	 	 	 	 	 	 d	dededededef
 fdZd Zej                  j                  d        Z xZS )
CrossCovarianceAttnr!   	num_headsqkv_bias	attn_drop	proj_dropc                 |   ||d}t         	|           || _        t        j                  t        j                  |ddfi |      | _        t        j                  ||dz  fd|i|| _	        t        j                  |      | _        t        j                  ||fi || _        t        j                  |      | _        y )Nr$   r   r=   rn   )r)   r*   r   r	   rs   r?   rt   r"   LinearqkvDropoutr   projr   )
r0   r!   r   r   r   r   r%   r&   r1   r2   s
            r3   r*   zCrossCovarianceAttn.__init__   s     /"<<

9a(Ib(IJ99S#'??B?I.IIc3-"-	I.r4   c                 H   |j                   \  }}}| j                  |      j                  ||d| j                  d      j	                  ddddd      }|j                  d      \  }}}t        j                  |d      t        j                  |d      j                  dd      z  | j                  z  }	|	j                  d      }	| j                  |	      }	|	|z  }|j	                  dddd      j                  |||      }| j                  |      }| j                  |      }|S )	Nr=   r8   r'   r   r;   r   r<   )r5   r   reshaper   rM   unbindF	normalize	transposer"   softmaxr   r   r   )
r0   rx   BNCr   qkvattns
             r3   rV   zCrossCovarianceAttn.forward   s   ''1ahhqk!!!Q4>>2>FFq!QPQSTU**Q-1a A2&QB)?)I)I"b)QQUYUeUee|||#~~d#AXIIaAq!))!Q2IIaLNN1r4   c                     dhS )Nr"    r0   s    r3   no_weight_decayz#CrossCovarianceAttn.no_weight_decay   s
    r4   )   Frc   rc   NN)rX   rY   rZ   r[   rB   r\   r*   rV   r?   jitignorer   r]   r^   s   @r3   r~   r~      so     "!!// / 	/
 / /(  YY r4   r~   c                        e Zd Zddddddd eej
                  d      ej                  dddddfd	ed
ededede	de	de	dede
ej                     de
ej                     dededef fdZd Z xZS )SplitTransposeBlockr   r   r;   Tr7   rb   rc   Nr!   
num_scalesr   rg   use_pos_embrf   r   rh   ri   rj   rk   r   r   c           
         ||d}t         |           t        t        t	        j
                  ||z              t        t	        j                  ||z                    }|| _        t        d|dz
        | _        g }t        | j                        D ]"  }|j                  t        ||fdd|d|       $ t        j                  |      | _        d | _        |rt!        dd|i|| _         |	|fi || _        |dkD  r,t        j$                  |t'        j(                  |fi |z        nd | _        t-        |f||||d|| _         |	|fd	d
i|| _        t3        |t        ||z        fd|
i|| _        |dkD  r,t        j$                  |t'        j(                  |fi |z        nd | _        |dkD  rt9        |      | _        y t        j:                         | _        y )Nr$   r   r=   T)r(   rm   rn   r!   r   )r   r   r   r   rQ   r7   rj   rc   r   )r)   r*   maxr[   r-   ceilr9   widthr   rangeappendr   r	   
ModuleListconvspos_embdr   norm_xcars   r?   rt   	gamma_xcar~   xcarq   r   rr   ru   r   rv   rk   )r0   r!   r   r   rg   r   rf   r   rh   ri   rj   rk   r   r   r%   r&   r1   r   r   ir2   s                       r3   r*   zSplitTransposeBlock.__init__   s   $ /C		#
"234c$**SJEV:W6XY
aa0t' 	kALLueidYbifhij	k]]5)
5D#DDDM"3-"-P]`aPamejj6K6K&KLgk&

 
 s333	s"#
  
 	
 MZ\]L]R\\-%**S2GB2G"GHcg
09B),BKKMr4   c           	         |}|j                  t        | j                        dz   d      }g }|d   }t        | j                        D ]+  \  }}|dkD  r|||   z   } ||      }|j	                  |       - |j	                  |d          t        j                  |d      }|j                  \  }}	}
}|j                  ||	|
|z        j                  ddd      }| j                  H| j                  ||
|f      j                  |d|j                  d         j                  ddd      }||z   }|| j                  | j                  | j                  | j                  |            z        z   }|j                  ||
||	      }| j                  |      }| j!                  |      }| j"                  | j"                  |z  }|j                  dddd      }|| j                  |      z   }|S )Nr   r<   r   r8   r'   r=   )chunklenr   	enumerater   r?   rL   r5   r   rM   r   rk   r   r   r   rq   rr   ru   )r0   rx   ry   spxspospr   convr   r   HWpos_encodings                r3   rV   zSplitTransposeBlock.forward   s    ggc$**o)qg1V , 	GAt1u#a&[bBJJrN		
 	

3r7IIc1 WW
1aIIaAE"**1a3==$==!Q3;;Ar1771:NVVWXZ[]^_LL At~~q9I0JJKKIIaAq! IIaLHHQK::!

QAIIaAq!t~~a((r4   )rX   rY   rZ   r   r	   rz   r{   r[   r\   rB   r   r|   r*   rV   r]   r^   s   @r3   r   r      s      "# $"!#'*1",,D*I)+!!!!3R3R 3R 	3R
  3R 3R 3R 3R !3R RYY3R BII3R 3R 3R 3Rj!r4   r   c            $            e Zd Zdddddddddddde eej                  d	
      ej                  dd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ee	      deej                     deej                     deej                     f" fdZd Z xZS )EdgeNeXtStager'   r   r;   ra   FT      ?Nr7   rb   in_chsout_chsre   depthnum_global_blocksr   scalesr(   rg   r   downsample_blockrf   rh   drop_path_ratesri   norm_layer_clrj   c                    ||d}t         |           d| _        |s|dk(  rt        j                         | _        n=t        j                   ||fi |t        j                  ||fdd|d|      | _        |}g }t        |      D ]f  }|||z
  k  r2|j                  t        d	|||r|dk(  r|nd|||	|||   ||d
|       n(|j                  t        d	||||	|
||||   ||d
|       |}h t        j                  | | _        y )
Nr$   Fr   r'   r(   re   rn   r   )
r!   rd   re   rf   r(   rg   rh   rk   ri   rj   )
r!   r   r   rg   r   rf   rh   rk   ri   rj   r   )r)   r*   grad_checkpointingr	   rv   
downsample
Sequentialr+   r   r   r`   r   blocks)r0   r   r   re   r   r   r   r   r(   rg   r   r   rf   rh   r   ri   r   rj   r%   r&   r1   stage_blocksr   r2   s                          r3   r*   zEdgeNeXtStage.__init__  sV   , /"'v{ kkmDO mm6(R(		&'YqYVXYDO Fu !	A5,,,## " ')9a1fv!"+$/%1&3"1!"4#0"+   ##' "#)"+%1$/"+&3"1!"4#0"+  FC!	D mm\2r4   c                     | j                  |      }| j                  r6t        j                  j	                         st        | j                  |      }|S | j                  |      }|S N)r   r   r?   r   is_scriptingr   r   r0   rx   s     r3   rV   zEdgeNeXtStage.forwardZ  sS    OOA""599+A+A+Ct{{A.A  AAr4   )rX   rY   rZ   r   r   r	   rz   r{   r[   r\   rB   r   r   r   r|   r*   rV   r]   r^   s   @r3   r   r     s-   
 %& "# %%*##&59*5-4R\\t-L)+)F3F3 F3 	F3
 F3  #F3 F3 F3 F3  F3 F3 #F3 F3 !F3 &d5k2F3  RYY!F3"  		?#F3$ BII%F3Pr4   r   c            )           e Zd Zddddddddd	d
dddddddej                  ddddfdedededeedf   deedf   deedf   deedf   deedf   deedf   deedf   de	de	d e	d!ed"ed#ed$ed%e
ej                     d&e	d'e	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?d.ej*                  d/eeeee   f      d0ed1ed2ed3ed+eeej*                     eej*                  eej*                     f   f   fd4Z	 	 	 d@d/eeee   f   d5ed6efd7Zd8 Zd<d9efd:Zd; Z xZS )Ar   r=     avg   0   X      r=   r=   	   r=   )r   r   r   r   )r=      ra   r   )r   r   r   r   )r'   r'   r=   r;   )FTFFr7   r   r;   FTpatchrc   Nin_chansnum_classesglobal_pooldims.depthsglobal_block_countskernel_sizesheads	d2_scalesr   rh   head_init_scalerg   r   rf   	stem_typehead_norm_firstrj   drop_path_rate	drop_ratec           
         t          |           ||d}|| _        || _        || _        || _        t        t        d      }t        t        j                  d      }g | _
        |dv sJ |dk(  rBt        j                  t        j                  ||d   fdd|d| ||d   fi |      | _        nBt        j                  t        j                  ||d   fd	dd|d
| ||d   fi |      | _        d}g }t        ||d      }|d   }t        d      D ]  }|dk(  s|dkD  rdnd}||z  }|j!                  t#        d&i d|d||   d|d||   d||   d||   d||   d|	|   d|d||   d|
|   d|d|d|d|d|d||       ||   }| xj                  t%        ||d | !      gz  c_
         t        j                  | | _        |d"   x| _        | _        |rB || j(                  fi || _        t/        | j(                  |f|| j
                  d#|| _        nCt        j2                         | _        t5        | j(                  |f|| j
                  |d$|| _        t7        t        t8        |%      |        y )'Nr$   r7   rb   )r   overlapr   r   r;   r   r   )r(   re   paddingrn   T)	stagewiser'   r   r   r   re   r   r   r   r   r   rg   r(   r   rh   r   rf   ri   r   rj   zstages.)num_chs	reductionmoduler8   )	pool_typer   )r   r   ri   )r   r   )r)   r*   r   r   r   r   r   r   r	   rz   feature_infor   r+   stemr   r   r   r   dictstagesnum_featureshead_hidden_sizenorm_prer   headrv   r   r   _init_weights)!r0   r   r   r   r   r   r   r   r   r   r   rh   r   rg   r   rf   r   r   rj   r   r   r%   r&   r1   ri   r   curr_strider   dp_ratesr   r   re   r2   s!                                   r3   r*   zEdgeNeXt.__init__d  s,   2 	/& &"[d3
$70000		(DG\19\XZ\47)b)DI
 		(DGk1f[dkhjk47)b)DI
 ,^VtTaq 	eA%*a!eQF6!KMM- Q  Qi	
 #6a"8  ( !) !| * )O (N , "2 $ &  ,!" $% * !WF$vW^_`^aUb"c!dd5	e8 mmV,48H<D1&t'8'8?B?DM&!! &..	
 DI KKMDM-!! &..% DI 	GM?KTRr4   c                 2    t        d|rd      S g d      S )Nz^stemz^stages\.(\d+)))z^stages\.(\d+)\.downsample)r   )z^stages\.(\d+)\.blocks\.(\d+)N)z	^norm_pre)i )r   r   )r   )r0   coarses     r3   group_matcherzEdgeNeXt.group_matcher  s'    (.$
 	
5
 	
r4   c                 4    | j                   D ]	  }||_         y r   )r   r   )r0   enabless      r3   set_grad_checkpointingzEdgeNeXt.set_grad_checkpointing  s     	*A#)A 	*r4   returnc                 .    | j                   j                  S r   )r   fcr   s    r3   get_classifierzEdgeNeXt.get_classifier  s    yy||r4   c                 J    || _         | j                  j                  ||       y r   )r   r   reset)r0   r   r   s      r3   reset_classifierzEdgeNeXt.reset_classifier  s    &		[1r4   rx   indicesrq   
stop_early
output_fmtintermediates_onlyc                    |dv sJ d       g }t        t        | j                        |      \  }}	| j                  |      }t        | j                        dz
  }
t        j
                  j                         s|s| j                  }n| j                  d|	dz    }t        |      D ]>  \  }} ||      }||v s|r||
k(  r| j                  |      }n|}|j                  |       @ |r|S |
k(  r| j                  |      }||fS )a   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: Apply norm layer to compatible intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
        Returns:

        )NCHWzOutput shape must be NCHW.r   N)
r   r   r   r   r?   r   r   r   r   r   )r0   rx   r  rq   r  r  r  intermediatestake_indices	max_indexlast_idxr   feat_idxstagex_inters                  r3   forward_intermediateszEdgeNeXt.forward_intermediates  s   * Y&D(DD&"6s4;;7G"Qi IIaLt{{#a'99!!#:[[F[[)a-0F(0 	.OHeaA<'H0"mmA.GG$$W-	.   xa A-r4   
prune_norm
prune_headc                     t        t        | j                        |      \  }}| j                  d|dz    | _        |rt        j                         | _        |r| j                  dd       |S )z@ Prune layers not required for specified intermediates.
        Nr   r    )r   r   r   r	   rv   r   r
  )r0   r  r  r  r  r  s         r3   prune_intermediate_layersz"EdgeNeXt.prune_intermediate_layers  s]     #7s4;;7G"Qikk.9q=1KKMDM!!!R(r4   c                 l    | j                  |      }| j                  |      }| j                  |      }|S r   )r   r   r   r   s     r3   forward_featureszEdgeNeXt.forward_features&  s/    IIaLKKNMM!r4   
pre_logitsc                 N    |r| j                  |d      S | j                  |      S )NT)r   )r   )r0   rx   r   s      r3   forward_headzEdgeNeXt.forward_head,  s$    0:tyyty,L		!Lr4   c                 J    | j                  |      }| j                  |      }|S r   )r  r"  r   s     r3   rV   zEdgeNeXt.forward/  s'    !!!$a r4   F)Tr   )NFFr  F)r   FT)rX   rY   rZ   r	   r{   r[   strr   rB   r\   r   r|   r*   r?   r   r   r   r  r  r   r
  Tensorr   r   r  r  r  r"  rV   r]   r^   s   @r3   r   r   c  s    #$$5&23?,8%1)5,G#'%'"#%*"$$))+$&!/fSfS fS 	fS
 S/fS #s(OfS "'sCxfS  S/fS c?fS S#XfS tSy)fS !fS #fS  fS #fS  !fS" #fS$ "%fS& BII'fS( ")fS* +fSP YY
 
 YY* * YY		  2C 2hsm 2 8<$$',0 ||0  eCcN340  	0 
 0  0  !%0  
tELL!5tELL7I)I#JJ	K0 h ./$#	3S	>*  	 M$ Mr4   r   c                 .   t        | t        j                        rNt        | j                  d       | j
                  *t        j                  j                  | j
                         y y t        | t        j                        rt        | j                  d       t        j                  j                  | j
                         |rPd|v rK| j                  j                  j                  |       | j
                  j                  j                  |       y y y y )Ng{Gz?)stdhead.)
isinstancer	   r+   r   r>   rn   initzeros_r   datamul_)r   namer   s      r3   r   r   5  s    &"))$C0;;"GGNN6;;' #	FBII	&C0
v{{#GtOMM##O4KK!!/2 $4 
'r4   c                 >   d| v sd| v r| S d| v r| d   } nd| v r| d   } n	d| v r| d   } i }ddl }| j                         D ]  \  }}|j                  dd	      }|j                  d
d|      }|j                  dd|      }|j                  dd      }|j                  dd      }|j                  dd      }|j	                  d      r|j                  dd      }|j
                  dk(  r2d|vr.|j                         |   j                  }|j                  |      }|||<    |S )z Remap FB checkpoints -> timm zhead.norm.weightznorm_pre.weight	model_emamodel
state_dictr   Nzdownsample_layers.0.zstem.zstages.([0-9]+).([0-9]+)zstages.\1.blocks.\2z#downsample_layers.([0-9]+).([0-9]+)zstages.\1.downsample.\2dwconvrp   pwconvzmlp.fcr)  zhead.fc.znorm.rq   z	head.normr'   r   )	reitemsreplacesub
startswithndimr3  r5   r   )r3  r2  out_dictr6  r   r   model_shapes          r3   checkpoint_filter_fnr>  B  sB   Z'+<
+J j ,
	J	(
		#-
H  " 1II,g6FF.0FJFF9;UWXYIIh	*IIh)IIgz*<< 		&+.A66Q;6?**,Q/55K		+&A Or4   c                 N    t        t        | |ft        t        dd      d|}|S )N)r   r   r'   r=   T)out_indicesflatten_sequential)pretrained_filter_fnfeature_cfg)r   r   r>  r   )variant
pretrainedkwargsr2  s       r3   _create_edgenextrG  a  s6     ':1\dK 	E
 Lr4   c                 2    | dddddt         t        dddd	|S )
Nr   )r=      rI  )r   r   g?bicubiczstem.0zhead.fcmit)urlr   
input_size	pool_sizecrop_pctinterpolationmeanr(  
first_conv
classifierlicenser
   )rL  rF  s     r3   _cfgrU  j  s3    =v)%.Bi  r4   ztimm/)r=      rV  )	hf_hub_idtest_input_sizetest_crop_pctgffffff?)r=   @  rZ  )rW  rO  rX  rY  )zedgenext_xx_small.in1kzedgenext_x_small.in1kzedgenext_small.usi_in1kzedgenext_base.usi_in1kzedgenext_base.in21k_ft_in1kzedgenext_small_rw.sw_in1kr  c           	      L    t        ddd      }t        dd| it        |fi |S )N)r'   r'      r'   r   r;   r;   r;   r;   r   r   r   rE  )edgenext_xx_smallr   rG  rE  rF  
model_argss      r3   r_  r_    s1     \0AVJeJe$zJd]cJdeer4   c           	      L    t        ddd      }t        dd| it        |fi |S )Nr   )rW   @   d      r]  r^  rE  )edgenext_x_smallr`  ra  s      r3   rg  rg    s1     \0B,WJd:djIc\bIcddr4   c           	      J    t        dd      }t        dd| it        |fi |S )Nr   )r   `      i0  r   r   rE  )edgenext_smallr`  ra  s      r3   rl  rl    s/     \0BCJbbtJGaZ`Gabbr4   c           	      R    t        g dg d      }t        dd| it        |fi |S )Nr   )P   rj  rV  iH  rk  rE  )edgenext_baser`  ra  s      r3   ro  ro    s/     \0CDJa
ad:F`Y_F`aar4   c           	      P    t        ddddd      }t        dd| it        |fi |S )	Nr   )r   ri  rf  i  TFr   )r   r   r   rf   r   rE  )edgenext_small_rwr`  ra  s      r3   rq  rq    s:    "4)EJ eJe$zJd]cJdeer4   )Nr   r$  )r  )9__doc__r-   	functoolsr   typingr   r   r   r   r   r?   torch.nn.functionalr	   
functionalr   	timm.datar   r   timm.layersr   r   r   r   r   r   r   r   _builderr   	_featuresr   _features_fxr   _manipulater   r   	_registryr   r   __all__r|   r   r`   r~   r   r   r   r   r>  rG  rU  default_cfgsr_  rg  rl  ro  rq  r   r4   r3   <module>r     s     5 5     A	 	 	 + + 1 4 <, )		 ) )X6		 6r'")) 'TW")) WtOBII OdOryy Od
3>	 %"%S: "%S:  $}C  #}C $(}C$ "&%S"'& 4 fX f f eH e e c( c c b b b fX f fr4   