
    RЦiX                        S r SSKrSSKJrJrJrJrJrJr  SSK	r	SSK
Jr  SSKJrJr  SSKJrJrJrJrJrJrJr  SSKJr  SSKJr  SS	KJr  SS
KJrJr  S/r  " S S\RB                  5      r" " S S\RB                  5      r# " S S\RB                  5      r$ " S S\RB                  5      r%SS jr&\" \&" SS9\&" SS9\&" SS9S.5      r'S r(SS jr)\SS\%4S jj5       r*\SS\%4S jj5       r+\SS\%4S jj5       r,g)a  Transformer in Transformer (TNT) in PyTorch

A PyTorch implement of TNT as described in
'Transformer in Transformer' - https://arxiv.org/abs/2103.00112

The official mindspore code is released and available at
https://gitee.com/mindspore/mindspore/tree/master/model_zoo/research/cv/TNT

The official pytorch code is released and available at
https://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/tnt_pytorch
    N)ListOptionalTupleUnionTypeAnyIMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STD)MlpDropPathcalculate_drop_path_ratestrunc_normal__assert	to_2tupleresample_abs_pos_embed   )build_model_with_cfg)feature_take_indices)
checkpoint)generate_default_cfgsregister_modelTNTc                   ^   ^  \ rS rSrSr      SS\S\S\S\S\S\4U 4S	 jjjrS
 r	Sr
U =r$ )	Attention   zMulti-Head Attention
    dim
hidden_dim	num_headsqkv_bias	attn_drop	proj_dropc	                   > XxS.n	[         TU ]  5         X l        X0l        X#-  n
Xl        U
S-  U l        [        R                  " XS-  4SU0U	D6U l        [        R                  " X4SU0U	D6U l	        [        R                  " USS9U l        [        R                  " X40 U	D6U l        [        R                  " USS9U l        g )Ndevicedtypeg         biasT)inplace)super__init__r   r   head_dimscalennLinearqkvDropoutr!   projr"   )selfr   r   r   r    r!   r"   r%   r&   ddr,   	__class__s              N/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/tnt.pyr+   Attention.__init__    s     /$"* %
))CaEhE"E39(9b9It<IIc-"-	It<    c                 h   UR                   u  p#nU R                  U5      R                  X#SU R                  U R                  5      R                  SSSSS5      nUR                  S5      u  pgU R                  U5      R                  X#U R                  S5      R                  SSSS5      nXgR                  SS5      -  U R                  -  n	U	R                  SS9n	U R                  U	5      n	X-  R                  SS5      R                  X#S5      nU R                  U5      nU R                  U5      nU$ )	Nr'   r      r      r   )shaper0   reshaper   r,   permuteunbindr1   	transposer-   softmaxr!   r3   r"   )
r4   xBNCr0   qkr1   attns
             r7   forwardAttention.forward9   s   ''aWWQZaGOOPQSTVWYZ\]^yy|FF1IaDNNB7??1aKKKB''4::5|||#~~d#X  A&..qR8IIaLNN1r9   )	r!   r,   r   r   r3   r"   r0   r-   r1   )   F        rP   NN)__name__
__module____qualname____firstlineno____doc__intboolfloatr+   rM   __static_attributes____classcell__r6   s   @r7   r   r      sj     "!!== = 	=
 = = = =2 r9   r   c                      ^  \ rS rSrSrSSSSSSS\R                  \R                  SSS4S	\S
\S\S\S\S\	S\
S\	S\	S\	S\\R                     S\\R                     S\
4U 4S jjjrS rSrU =r$ )BlockI   zTNT Block
    r<            @FrP   Nr   dim_out	num_pixelnum_heads_innum_heads_out	mlp_ratior    r"   r!   	drop_path	act_layer
norm_layerlegacyc           	        > XS.n[         TU ]  5         U" U40 UD6U l        [        UU4UUU	US.UD6U l        U" U40 UD6U l        [        S	U[        US-  5      UUUS.UD6U l        Xl	        U R                  (       a7  U" U40 UD6U l
        [        R                  " X-  U4SS0UD6U l        S U l        O?U" X-  40 UD6U l
        [        R                  " X-  U4SS0UD6U l        U" U40 UD6U l        U" U40 UD6U l        [        UU4UUU	US.UD6U l        U
S:  a  [#        U
5      O[        R$                  " 5       U l        U" U40 UD6U l        [        S	U[        X&-  5      UUUS.UD6U l        g )
Nr$   )r   r    r!   r"   r<   )in_featureshidden_featuresout_featuresrg   dropr(   TFrP    )r*   r+   norm_inr   attn_innorm_mlp_inr   rV   mlp_inri   
norm1_projr.   r/   r3   
norm2_projnorm_outattn_outr   Identityrf   norm_mlpmlp)r4   r   ra   rb   rc   rd   re   r    r"   r!   rf   rg   rh   ri   r%   r&   r5   r6   s                    r7   r+   Block.__init__M   s   $ /!#,, 
 #
 
 &c0R0 
aL
 
 ;;(33DO		#/7LLLDI"DO(?B?DO		#/7MM"MDI(7B7DO #71b1!
 $
 
 1:B),BKKM"71b1 
 34 
 
r9   c                 d   XR                  U R                  U R                  U5      5      5      -   nXR                  U R                  U R	                  U5      5      5      -   nUR                  5       u  p4nU R                  c^  [        R                  " US S 2SS24   US S 2SS 24   U R                  U R                  U5      R                  X4S-
  S5      5      -   /SS9nOl[        R                  " US S 2SS24   US S 2SS 24   U R                  U R                  U R                  UR                  X4S-
  S5      5      5      5      -   /SS9nX R                  U R                  U R                  U5      5      5      -   nX R                  U R                  U R                  U5      5      5      -   nX4$ )Nr   r   r=   r?   )rf   rq   rp   rs   rr   sizeru   torchcatr3   rt   rA   rw   rv   rz   ry   )r4   pixel_embedpatch_embedrG   rH   rI   s         r7   rM   Block.forward   s   !NN4<<[@Y3Z$[[!NN4;;t?O?OP[?\3]$^^""$a??"))AqsF#AqrE"TYYt{/K/S/STU[\W\^`/a%bb% K
  ))AqsF#AqrE"T__TYYt{ObObcdjkfkmoOp?q5r%ss% K "NN4=={A[3\$]]!NN488DMM+<V3W$XX''r9   )rq   rw   rf   ri   rz   rs   rt   ru   rp   ry   rr   rv   r3   )rQ   rR   rS   rT   rU   r.   GELU	LayerNormrV   rX   rW   r   Moduler+   rM   rY   rZ   r[   s   @r7   r]   r]   I   s     !"!#!"!!!)+*,,, !H
H
 H
 	H

 H
 H
 H
 H
 H
 H
 H
 BIIH
 RYYH
 H
 H
T( (r9   r]   c                   "  ^  \ rS rSrSr        SS\\\\\4   4   S\\\\\4   4   S\S\S\S\4U 4S	 jjjr	SS
\\\\4   \4   4S jjr
S\\\4   S
\\\4   4S jrS\R                  S\R                  S
\R                  4S jrSrU =r$ )
PixelEmbed   zImage to Pixel Embedding
    img_size
patch_sizein_chansin_dimstrideri   c	                 H  > XxS.n	[         TU ]  5         [        U5      n[        U5      nUS   US   -  US   US   -  4U l        U R                  S   U R                  S   -  n
Xl        X l        X`l        Xl        X@l        U Vs/ s H  n[        R                  " X-  5      PM     nnXl        [        R                  " X0R                  4SSUS.U	D6U l        U R                  (       a  [        R                  " XS9U l        g [        R                  " X"S9U l        g s  snf )Nr$   r   r      r;   )kernel_sizepaddingr   )r   r   )r*   r+   r   	grid_sizer   r   ri   num_patchesr   mathceilnew_patch_sizer.   Conv2dr3   Unfoldunfold)r4   r   r   r   r   r   ri   r%   r&   r5   r   psr   r6   s                r7   r+   PixelEmbed.__init__   s     /X&z*
"1+A6zRS}8TU~~a(T^^A->? $&;EF:R$))BK0:F,IIhcAV\c`bc	;;))VDK))
NDK Gs   "Dreturnc                 R    U(       a  [        U R                  5      $ U R                  $ N)maxr   )r4   	as_scalars     r7   
feat_ratioPixelEmbed.feat_ratio   s    t''??"r9   c                 V    US   U R                   S   -  US   U R                   S   -  4$ )Nr   r   )r   )r4   r   s     r7   dynamic_feat_sizePixelEmbed.dynamic_feat_size   s2    {dooa00(1+QRAS2SSSr9   rF   	pixel_posc                    UR                   u  p4pV[        XPR                  S   :H  SU SU SU R                  S    SU R                  S    S3	5        [        X`R                  S   :H  SU SU SU R                  S    SU R                  S    S3	5        U R                  (       aw  U R	                  U5      nU R                  U5      nUR                  SS5      R                  X0R                  -  U R                  U R                  S   U R                  S   5      nOkU R                  U5      nUR                  SS5      R                  X0R                  -  X@R                  S   U R                  S   5      nU R	                  U5      nX-   nUR                  X0R                  -  U R                  S5      R                  SS5      nU$ )	Nr   zInput image size (*z) doesn't match model (r   z).r'   r=   )r@   r   r   ri   r3   r   rD   rA   r   r   r   r   )r4   rF   r   rG   rI   HWs          r7   rM   PixelEmbed.forward   s   WW
aq!! 1QC'>t}}Q?O>PPQRVR_R_`aRbQccef	h 	q!! 1QC'>t}}Q?O>PPQRVR_R_`aRbQccef	h ;;		!AAAAq!))$$$dkk43F3Fq3I4K^K^_`KacA AAAq!))!.>.>*>??STCUW[WfWfghWijA		!AMIIa***DKK<FFq!Lr9   )	r   r   r   ri   r   r   r   r3   r   )      r;   0   r<   FNNT)rQ   rR   rS   rT   rU   r   rV   r   rW   r+   r   r   r~   TensorrM   rY   rZ   r[   s   @r7   r   r      s   
 5868 OCsCx01O c5c?23O 	O
 O O O O@#E%S/32F,G #T%S/ TeCHo T %,, 5<<  r9   r   c            )       :  ^  \ rS rSrSrSSSSSSS	S
SS
SSSSSSS\R                  SSSS4S\\\	\\4   4   S\\\	\\4   4   S\S\S\
S\S\S\S\S\S\S\S\S\S\S\S \S!\\R                     S"\S#\4(U 4S$ jjjrS% r\R$                  R&                  S& 5       r\R$                  R&                  S<S' j5       r\R$                  R&                  S=S( j5       r\R$                  R&                  S)\R                  4S* j5       rS>S\S\\
   4S+ jjr      S?S,\R4                  S-\\\\\   4      S.\S/\S0\S1\
S2\S)\\\R4                     \	\R4                  \\R4                     4   4   4S3 jjr   S@S-\\\\   4   S4\S5\4S6 jjrS7 rS<S8\4S9 jjrS: r S;r!U =r"$ )Ar      zBTransformer in Transformer - https://arxiv.org/abs/2103.00112
    r   r   r;     tokeni   r   r_   r<   r`   FrP   Nr   r   r   num_classesglobal_pool	embed_dim	inner_dimdepthnum_heads_innernum_heads_outerre   r    	drop_ratepos_drop_rateproj_drop_rateattn_drop_ratedrop_path_raterh   first_strideri   c                 J  > [         TU ]  5         UUS.nUS;   d   eX@l        X0l        XPl        U=U l        =U l        U l        SU l        SU l	        [        SUUUUUUS.UD6U l        U R                  R                  n[        U R                  S5      (       a  U R                  R                  5       OUnUU l        U R                  R                  nUS   US   -  nU" UU-  40 UD6U l        ["        R$                  " UU-  U40 UD6U l        U" U40 UD6U l        ["        R*                  " [,        R.                  " SSU40 UD65      U l        ["        R*                  " [,        R.                  " SUS-   U40 UD65      U l        ["        R*                  " [,        R.                  " SUUS   US   40 UD65      U l        ["        R6                  " US9U l        [;        UU5      n/ n[=        U5       H-  nUR?                  [A        SUUUU	U
UUUUUU   UUS	.UD65        M/     ["        RB                  " U5      U l"        [=        U5       Vs/ s H  n[G        S
U 3UUS9PM     snU l$        U" U40 UD6U l%        ["        R6                  " U5      U l&        US:  a  ["        R$                  " Xd40 UD6O["        RN                  " 5       U l(        [S        U R0                  SS9  [S        U R2                  SS9  [S        U R4                  SS9  U RU                  U RV                  5        g s  snf )Nr$    r   avgr   F)r   r   r   r   r   ri   r   r   )p)r   ra   rb   rc   rd   re   r    r"   r!   rf   rh   ri   zblocks.)modulenum_chs	reduction{Gz?stdro   ),r*   r+   r   r   r   num_featureshead_hidden_sizer   num_prefix_tokensgrad_checkpointingr   r   r   hasattrr   r   rt   r.   r/   r3   ru   	Parameterr~   zeros	cls_token	patch_posr   r2   pos_dropr   rangeappendr]   
ModuleListblocksdictfeature_infonorm	head_droprx   headr   apply_init_weights) r4   r   r   r   r   r   r   r   r   r   r   re   r    r   r   r   r   r   rh   r   ri   r%   r&   r5   r   rr   rb   dprr   ir6   s                                   r7   r+   TNT.__init__   s    2 	/2222& &ENNND1DN!""'% 
!
 
 &&22-4T5E5E|-T-TD'')Zd&))88"1%q(99	$Y%:AbAIIi)3YE"E	$Y5"5ekk!Q	&HR&HIekk![1_i&VSU&VWekk!Yq@QSabcSd&khj&kl

]3'>uAMM% !#,-#!((a&%     mmF+PUV[P\^P\1D'!yAFP\^ y/B/	I.?JQBIIi;;TVT_T_Ta	dnn#.dnn#.dnn#.

4%%&^s   L c                    [        U[        R                  5      (       am  [        UR                  SS9  [        U[        R                  5      (       a9  UR
                  b+  [        R                  R                  UR
                  S5        g g g [        U[        R                  5      (       aU  [        R                  R                  UR
                  S5        [        R                  R                  UR                  S5        g g )Nr   r   r   g      ?)	
isinstancer.   r/   r   weightr(   init	constant_r   )r4   ms     r7   r   TNT._init_weightsM  s    a##!((,!RYY''AFF,>!!!&&!, -?'2<<((GGaffa(GGahh, )r9   c                 
    1 Sk$ )N>   r   r   r   ro   r4   s    r7   no_weight_decayTNT.no_weight_decayV  s    66r9   c                     [        SSS/S9nU$ )Nz=^cls_token|patch_pos|pixel_pos|pixel_embed|norm[12]_proj|proj)z^blocks\.(\d+)N)z^norm)i )stemr   )r   )r4   coarsematchers      r7   group_matcherTNT.group_matcherZ  s!    Q)$
 r9   c                     Xl         g r   )r   )r4   enables     r7   set_grad_checkpointingTNT.set_grad_checkpointinge  s    "(r9   r   c                     U R                   $ r   )r   r   s    r7   get_classifierTNT.get_classifieri  s    yyr9   c                    Xl         Ub  US;   d   eX l        [        U R                  S5      (       a   U R                  R                  R
                  OS n[        U R                  S5      (       a   U R                  R                  R                  OS nUS:  a&  [        R                  " U R                  XUS9U l        g [        R                  " 5       U l        g )Nr   r   r   r$   )r   r   r   r   r   r%   r&   r.   r/   r   rx   )r4   r   r   r%   r&   s        r7   reset_classifierTNT.reset_classifierm  s    &""6666*,3DIIx,H,H!!((d*1$))X*F*F		  &&DZehiZiBIIdnnkPUV	oqozozo|	r9   rF   indicesreturn_prefix_tokensr   
stop_early
output_fmtintermediates_onlyc                    US;   d   S5       eUS:H  n/ n	[        [        U R                  5      U5      u  pUR                  u  ppU R	                  XR
                  5      nU R                  U R                  U R                  UR                  XR                  S5      5      5      5      n[        R                  " U R                  R                  USS5      U4SS9nUU R                  -   nU R!                  U5      n[        R"                  R%                  5       (       d  U(       d  U R                  nOU R                  SUS-    n['        U5       H  u  nnU R(                  (       a4  [        R"                  R%                  5       (       d  [+        UUU5      u  nnOU" UU5      u  nnUU
;   d  M_  U	R-                  U(       a  U R/                  U5      OU5        M     U R0                  (       aJ  U	 Vs/ s H  nUSS2SU R0                  24   PM     nnU	 Vs/ s H  nUSS2U R0                  S24   PM     n	nU(       ac  U R                  R3                  X45      u  nnU	 Vs/ s H7  nUR                  UUUS5      R5                  SS	SS
5      R7                  5       PM9     n	n[        R"                  R%                  5       (       d  U(       a  [9        [;        U	W5      5      n	U(       a  U	$ U R/                  U5      nUU	4$ s  snf s  snf s  snf )a  Forward features that returns intermediates.

Args:
    x: Input image tensor
    indices: Take last n blocks if an int, if is a sequence, select by matching indices
    return_prefix_tokens: Return both prefix and spatial intermediate tokens
    norm: Apply norm layer to all 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:

)NCHWNLCz)Output format must be one of NCHW or NLC.r  r=   r   r?   Nr   r;   r'   )r   lenr   r@   r   r   ru   r3   rt   rA   r   r~   r   r   expandr   r   jitis_scripting	enumerater   r   r   r   r   r   rB   
contiguouslistzip)r4   rF   r  r  r   r  r  r  rA   intermediatestake_indices	max_indexrG   _heightwidthr   r   r   r   blkyprefix_tokensr   r   s                            r7   forward_intermediatesTNT.forward_intermediatesv  s   . _,Y.YY,&"6s4;;7G"Q  ggf&&q..9oodii@S@STUWgWgik@l0m&noii!6!6q"b!A; OUVW!DNN2mmK099!!##:[[F[[)a-0F'FAs&&uyy/E/E/G/G+5c;+T([+.{K+H([L $$tTYY{%;U ( !!ERS]Qq!D$:$:"::;]MSDQRMqQq$"8"8"99:MMR##55voFDAq^kl^kYZQYYq!Q3;;Aq!QGRRT^kMlyy%%'',@ ]M!BCM  ii,M))! TR
 ms   0K=L >L
prune_norm
prune_headc                     [        [        U R                  5      U5      u  pEU R                  SUS-    U l        U(       a  [        R                  " 5       U l        U(       a  U R                  SS5        U$ )z?Prune layers not required for specified intermediates.
        Nr   r   r   )r   r	  r   r.   rx   r   r   )r4   r  r  r  r  r  s         r7   prune_intermediate_layersTNT.prune_intermediate_layers  s[     #7s4;;7G"Qkk.9q=1DI!!!R(r9   c                 r   UR                   S   nU R                  XR                  5      nU R                  U R	                  U R                  UR                  X R                  S5      5      5      5      n[        R                  " U R                  R                  USS5      U4SS9nX@R                  -   nU R                  U5      nU R                   HQ  nU R                  (       a3  [        R                   R#                  5       (       d  [%        XSU5      u  p4MG  U" X45      u  p4MS     U R'                  U5      nU$ )Nr   r=   r   r?   )r@   r   r   ru   r3   rt   rA   r   r~   r   r   r
  r   r   r   r   r  r  r   r   )r4   rF   rG   r   r   r  s         r7   forward_featuresTNT.forward_features  s    GGAJ&&q..9oodii@S@STUWgWgik@l0m&noii!6!6q"b!A; OUVW!NN2mmK0;;C&&uyy/E/E/G/G+5c+T([+.{+H([	  ii,r9   
pre_logitsc                     U R                   (       a;  U R                   S:X  a"  US S 2U R                  S 24   R                  SS9OUS S 2S4   nU R                  U5      nU(       a  U$ U R	                  U5      $ )Nr   r   r?   r   )r   r   meanr   r   )r4   rF   r$  s      r7   forward_headTNT.forward_head  sq    =A=M=MQV=V!T++,,-22q29\]^_ab^b\cANN1q0DIIaL0r9   c                 J    U R                  U5      nU R                  U5      nU$ r   )r"  r'  )r4   rF   s     r7   rM   TNT.forward  s'    !!!$a r9   )r   r   r   r   r   r   r   r   r   r   r   rt   ru   r   r   r   r   r   r   r   r   r3   Fr   r   )NFFFr  F)r   FT)#rQ   rR   rS   rT   rU   r.   r   r   rV   r   strrX   rW   r   r   r+   r   r~   r  ignorer   r   r   r   r   r   r   r   r  r  r"  r'  rM   rY   rZ   r[   s   @r7   r   r      s
   
 5868#& #$#%!"!#%$&$&$&*,,, ! /X'CsCx01X' c5c?23X' 	X'
 X' X' X' X' X' !X' !X' X' X' X' !X'  "!X'" "#X'$ "%X'& RYY'X'( )X'* +X' X't- YY7 7 YY  YY) ) YY		  }C }hsm } 8<).$$',G*||G* eCcN34G* #'	G*
 G* G* G* !%G* 
tELL!5tELL7I)I#JJ	KG*V ./$#	3S	>*  	 $1$ 1 r9   c                 :    U SSS SSS[         [        SSSS	S
SS.UE$ )Nr   )r;   r   r   g?bicubicTzpixel_embed.projr   zarXiv:2103.00112zTransformer in TransformerzMhttps://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/tnt_pytorchz
apache-2.0)urlr   
input_size	pool_sizecrop_pctinterpolationfixed_input_sizer&  r   
first_conv
classifier	paper_ids
paper_name
origin_urllicenser	   )r0  kwargss     r7   _cfgr=    s>    =t'0F('2e  r9   ztimm/)	hf_hub_id)ztnt_s_legacy_patch16_224.in1kztnt_s_patch16_224.in1kztnt_b_patch16_224.in1kc                    U R                  SS 5        SU ;   a  U nGOv0 nU R                  5        GH_  u  p4UR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS	5      nUR                  S
S5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUS:X  ae  UR                  R                  S:X  aK  UR
                  u  pVn[        US-  5      =pX-  U:X  d   eUR                  SSS 5      R                  XWX5      nXBU'   GMb      US   R
                  UR                  R
                  :w  a%  [        US   UR                  R                  S S!9US'   U$ )"Nouter_tokensr   	outer_pos	inner_posr   r   r   
proj_norm1rt   
proj_norm2ru   inner_norm1rp   
inner_attnrq   inner_norm2rr   	inner_mlprs   outer_norm1rv   
outer_attnrw   outer_norm2ry   	outer_mlprz   Fg      ?r   r'   r   )new_sizer   )popitemsreplacer   ri   r@   rV   rB   rA   r   r   r   )

state_dictmodelout_dictrK   r1   rG   rH   rI   r   r   s
             r7   checkpoint_filter_fnrT    s   NN>4(j $$&DA		+{3A		+{3A		-7A		,5A		,5A		-3A		,	2A		-7A		+x0A		-4A		,
3A		-4A		+u-AKE$5$5$<$<$E''aAH%uz!zIIaA&..qQ:QK' '* U""eoo&;&;; 6[!&&00!

 Or9   c           	      j    UR                  SS5      n[        [        X4[        [	        USS9S.UD6nU$ )Nout_indicesr;   getter)rV  feature_cls)pretrained_filter_fnfeature_cfg)rN  r   r   rT  r   )variant
pretrainedr<  rV  rR  s        r7   _create_tntr]  1  sD    **]A.K W1[hG 	E
 Lr9   r   c           
      R    [        SSSSSSSS9n[        S
S	U 0[        U40 UD6D6nU$ )Nr        r_      FT)r   r   r   r   r   r    ri   r\  )tnt_s_legacy_patch16_224r   r]  r\  r<  	model_cfgrR  s       r7   rb  rb  ;  sA    "at%I gzgTR[Mf_eMfgELr9   c           	      P    [        SSSSSSS9n[        S	SU 0[        U40 UD6D6nU$ )
Nr   r_  r`  r_   ra  Fr   r   r   r   r   r    r\  )tnt_s_patch16_224rc  rd  s       r7   rh  rh  D  s>    "aI `
`d9F_X^F_`ELr9   c           	      P    [        SSSSSSS9n[        S	SU 0[        U40 UD6D6nU$ )
Nr   i  (   r_   
   Frg  r\  )tnt_b_patch16_224rc  rd  s       r7   rl  rl  M  s>    "bI `
`d9F_X^F_`ELr9   )r   r+  )-rU   r   typingr   r   r   r   r   r   r~   torch.nnr.   	timm.datar
   r   timm.layersr   r   r   r   r   r   r   _builderr   	_featuresr   _manipulater   	_registryr   r   __all__r   r   r]   r   r   r=  default_cfgsrT  r]  rb  rh  rl  ro   r9   r7   <module>rw     s  
  : :   E { { { * + # <'*		 *Z`(BII `(F@ @F{")) {| %%)& # #&  "J C   S   S  r9   