
    RЦi\                        S r SSKrSSKJ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s  Jr  SSKJrJr  SSK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SK$J%r%  S/r&\\'\'4   r(\  " S S\RR                  5      5       r* " S S\RR                  5      r+ " S S\RR                  5      r, " S S\RR                  5      r- " S S\RR                  5      r. " S S\RR                  5      r/S%S jr0S&S jr1\#" \1" SS9\1" SS9\1" SS9\1" SS9\1" SS9\1" SS9S.5      r2\"S%S\/4S jj5       r3\"S%S\/4S  jj5       r4\"S%S\/4S! jj5       r5\"S%S\/4S" jj5       r6\"S%S\/4S# jj5       r7\"S%S\/4S$ jj5       r8g)'zTwins
A PyTorch impl of : `Twins: Revisiting the Design of Spatial Attention in Vision Transformers`
    - https://arxiv.org/pdf/2104.13840.pdf

Code/weights from https://github.com/Meituan-AutoML/Twins, original copyright/license info below

    N)partial)ListOptionalTupleUnionTypeAnyIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)MlpDropPath	to_2tupletrunc_normal_use_fused_attncalculate_drop_path_rates   )build_model_with_cfg)feature_take_indices)register_notrace_module)register_modelgenerate_default_cfgs)	AttentionTwinsc                      ^  \ rS rSr% Sr\R                  R                  \   \	S'         SS\
S\
S\S\S\
4
U 4S	 jjjrS
\4S jrSrU =r$ )LocallyGroupedAttn#   z'LSA: self attention within a group
    
fused_attndim	num_heads	attn_drop	proj_dropwsc                   > XgS.nUS:w  d   e[         T
U ]  5         X-  S:X  d   SU SU S35       eXl        X l        X-  n	U	S-  U l        [        5       U l        [        R                  " XS-  4S	S
0UD6U l	        [        R                  " U5      U l        [        R                  " X40 UD6U l        [        R                  " U5      U l        XPl        g )Ndevicedtyper   r   dim   should be divided by num_heads .         biasT)super__init__r   r    scaler   r   nnLinearqkvDropoutr!   projr"   r#   )selfr   r    r!   r"   r#   r&   r'   ddhead_dim	__class__s             P/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/twins.pyr/   LocallyGroupedAttn.__init__)   s     /Qww!#]tC50PQZP[[\%]]#"#%
(*99S';;;I.IIc-"-	I.    sizec           	         UR                   u  p4nUu  pgUR                  X6Xu5      nS=pU R                  XpR                  -  -
  U R                  -  n
U R                  X`R                  -  -
  U R                  -  n[        R                  " USSXX45      nUR                   u  ppXR                  -  XR                  -  nnUR                  X?U R                  UU R                  U5      R                  SS5      nU R                  U5      R                  X?U-  U R                  U R                  -  SU R                  XPR                  -  5      R                  SSSSSS5      nUR                  S5      u  nnnU R                  (       a?  [        R                  " UUUU R                  (       a  U R                  R                  OSS9nOIUU R                   -  nUUR                  S	S
5      -  nUR#                  S
S9nU R                  U5      nUU-  nUR                  SS5      R                  X?UU R                  U R                  U5      nUR                  SS5      R                  X?U R                  -  UU R                  -  U5      nU
S:  d  US:  a  US S 2S U2S U2S S 24   R%                  5       nUR                  X4U5      nU R'                  U5      nU R)                  U5      nU$ )Nr      r,   r                 	dropout_pr   )shapeviewr#   Fpadreshape	transposer3   r    permuteunbindr   scaled_dot_product_attentiontrainingr!   pr0   softmax
contiguousr5   r"   )r6   xr=   BNCHWpad_lpad_tpad_rpad_b_HpWp_h_wr3   qkvattns                         r:   forwardLocallyGroupedAttn.forwardD   sx    ''aFF11ww;&$''11ww;&$''1EE!aE%78wwrwwggBIIaTWWb$''15??1Ehhqk!!Bw$'')1dnna>>>QSSZSZ[\^_abdeghjkSl 	**Q-1a??..1a.2mm$..**A
 DJJAq{{2r**D<<B<'D>>$'DqAKK1%%aR$''1EKK1%%adggrDGG|QG19	!RaR!Q,**,AIIaAIIaLNN1r<   )	r!   r   r   r    r5   r"   r3   r0   r#      rB   rB   r   NN__name__
__module____qualname____firstlineno____doc__torchjitFinalbool__annotations__intfloatr/   Size_rh   __static_attributes____classcell__r9   s   @r:   r   r   #   sz    		%%
 !!  	
   6%u % %r<   r   c                      ^  \ rS rSr% Sr\R                  R                  \   \	S'         SS\
S\
S\S\S\
4
U 4S	 jjjrS
\4S jrSrU =r$ )GlobalSubSampleAttn   zPGSA: using a  key to summarize the information for a group to be efficient.
    r   r   r    r!   r"   sr_ratioc                 t  > XgS.n[         T
U ]  5         X-  S:X  d   SU SU S35       eXl        X l        X-  n	U	S-  U l        [        5       U l        [        R                  " X4SS0UD6U l	        [        R                  " XS	-  4SS0UD6U l
        [        R                  " U5      U l        [        R                  " X40 UD6U l        [        R                  " U5      U l        XPl        US
:  a;  [        R                   " X4XUS.UD6U l        [        R$                  " U40 UD6U l        g S U l        S U l        g )Nr%   r   r(   r)   r*   r+   r-   Tr?   r   kernel_sizestride)r.   r/   r   r    r0   r   r   r1   r2   rd   kvr4   r!   r5   r"   r   Conv2dsr	LayerNormnorm)r6   r   r    r!   r"   r   r&   r'   r7   r8   r9   s             r:   r/   GlobalSubSampleAttn.__init__   s    /!#]tC50PQZP[[\%]]#"#%
(*35$5"5))Cq:t:r:I.IIc-"-	I. a<iiVhVSUVDGS/B/DIDGDIr<   r=   c                 8   UR                   u  p4nU R                  U5      R                  X4U R                  XPR                  -  5      R	                  SSSS5      nU R
                  bg  UR	                  SSS5      R                  " X5/UQ76 nU R                  U5      R                  X5S5      R	                  SSS5      nU R                  U5      nU R                  U5      R                  USSU R                  XPR                  -  5      R	                  SSSSS5      nUR                  S5      u  pU R                  (       aQ  [        R                  R                  R                  XhU	U R                  (       a  U R                  R                   OSS9nOFX`R"                  -  nXhR%                  S	S5      -  n
U
R'                  SS
9n
U R                  U
5      n
X-  nUR%                  SS5      R                  X4U5      nU R)                  U5      nU R+                  U5      nU$ )Nr   r?   r   r,   rF   r@   rB   rC   rE   rG   )rH   rd   rL   r    rN   r   r   r   rO   r   rr   r1   
functionalrP   rQ   r!   rR   r0   rM   rS   r5   r"   )r6   rU   r=   rV   rW   rX   rd   r   re   rf   rg   s              r:   rh   GlobalSubSampleAttn.forward   s   ''aFF1IaDNNA4GHPPQRTUWXZ[\77		!Q"**17$7A
""1,44Q1=A		!AWWQZ2q$..!~~:MNVVWXZ[]^`acdeyy|??##@@a.2mm$..** A A
 JJA{{2r**D<<B<'D>>$'DAKK1%%aA.IIaLNN1r<   )r!   r   r   r   r   r    r5   r"   rd   r0   r   r   rj   rl   r|   s   @r:   r~   r~      s{    		%%
 !!     	 
      Du  r<   r~   c                      ^  \ rS rSrSSSS\R
                  \R                  SSSS4
S\S\S\S	\S
\S\S\	\R                     S\	\R                     S\S\\   4U 4S jjjrS\4S jrSrU =r$ )Block   g      @rB   r   Nr   r    	mlp_ratior"   r!   	drop_path	act_layer
norm_layerr   r#   c                   > [         TU ]  5         XS.nU" U40 UD6U l        U
c  [        XSS XT40 UD6U l        O-U
S:X  a  [        XXTU	40 UD6U l        O[        XXTU
40 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S.UD6U l        US:  a  [        U5      U l        g [        R                  " 5       U l        g )Nr%   Fr   rB   )in_featureshidden_featuresr   drop )r.   r/   norm1r   rg   r~   r   r   r1   Identity
drop_path1norm2r   rw   mlp
drop_path2)r6   r   r    r   r"   r!   r   r   r   r   r#   r&   r'   r7   r9   s                 r:   r/   Block.__init__   s     	/*r*
:!#%yZWYZDI1W+CIRZa^`aDI*39QSZWYZDI1:R(9-R[[]*r*
 
0	

 
 2;R(9-R[[]r<   r=   c                     XR                  U R                  U R                  U5      U5      5      -   nXR                  U R	                  U R                  U5      5      5      -   nU$ N)r   rg   r   r   r   r   )r6   rU   r=   s      r:   rh   Block.forward   sM    		$**Q- >??A 788r<   )rg   r   r   r   r   r   )rm   rn   ro   rp   r1   GELUr   rw   rx   r   Moduler   r/   ry   rh   rz   r{   r|   s   @r:   r   r      s      "!!!)+*,,, $"S"S "S 	"S
 "S "S "S BII"S RYY"S "S "S "SHu  r<   r   c                   X   ^  \ rS rSr    S
S\S\S\4U 4S jjjrS\4S jrS rS	r	U =r
$ )PosConv   in_chans	embed_dimr   c           	         > XES.n[         TU ]  5         [        R                  " [        R                  " XSUS4SUS.UD65      U l        X0l        g )Nr%   r,   r   T)r-   groups)r.   r/   r1   
Sequentialr   r5   r   )r6   r   r   r   r&   r'   r7   r9   s          r:   r/   PosConv.__init__  sN     /MMIIh1fa[d9[XZ[
	 r<   r=   c                     UR                   u  p4nUR                  SS5      R                  " X5/UQ76 nU R                  U5      nU R                  S:X  a  X-  nUR                  S5      R                  SS5      nU$ )Nr   r?   )rH   rM   rI   r5   r   flatten)r6   rU   r=   rV   rW   rX   cnn_feat_tokens          r:   rh   PosConv.forward  sp    ''aQ*//<t<IIn%;;!AIIaL""1a(r<   c                 J    [        S5       Vs/ s H  nSU-  PM
     sn$ s  snf )Nr@   zproj.%d.weight)range)r6   is     r:   no_weight_decayPosConv.no_weight_decay  s$    .3Ah7h 1$h777s    )r5   r   )   r   NN)rm   rn   ro   rp   rw   r/   ry   rh   r   rz   r{   r|   s   @r:   r   r      sM    
 !  	 u 8 8r<   r   c            	          ^  \ rS rSrSr      SS\\\\\4   4   S\\\\\4   4   S\S\4U 4S jjjrS\\	R                  \4   4S	 jrS
rU =r$ )
PatchEmbedi  zImage to Patch Embedding
    img_size
patch_sizer   r   c                   > XVS.n[         TU ]  5         [        U5      n[        U5      nXl        X l        US   US   -  S:X  a  US   US   -  S:X  d   SU SU S35       eUS   US   -  US   US   -  sU l        U l        U R
                  U R                  -  U l        [        R                  " X44X"S.UD6U l
        [        R                  " U40 UD6U l        g )Nr%   r   r   z	img_size z! should be divided by patch_size r*   r   )r.   r/   r   r   r   rY   rZ   num_patchesr1   r   r5   r   r   )	r6   r   r   r   r   r&   r'   r7   r9   s	           r:   r/   PatchEmbed.__init__"  s     /X&z*
 ${Z]*a/HQK*Q-4OST4T 	Qz!B:,aP	QT!!
15x{jQRm7S66DFF?IIhczc`bc	LL1b1	r<   returnc                     UR                   u  p#pEU R                  U5      R                  S5      R                  SS5      nU R	                  U5      nX@R
                  S   -  XPR
                  S   -  4nX4$ )Nr?   r   r   )rH   r5   r   rM   r   r   )r6   rU   rV   rX   rY   rZ   out_sizes          r:   rh   PatchEmbed.forward9  sk    WW
aIIaL  #--a3IIaL++Q//!2D-DE{r<   )rY   rZ   r   r   r   r   r5   )      r,   r   NN)rm   rn   ro   rp   rq   r   rw   r   r/   rr   Tensorry   rh   rz   r{   r|   s   @r:   r   r     s    
 5868 2CsCx012 c5c?232 	2
 2 2.E%,,"56  r<   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\" \R                  SS9\SS4S\	\
\\
\
4   4   S\
S\
S\
S\S\\
S4   S\\
S4   S\\S4   S\\
S4   S\\
S4   S\\\
S4      S\S\S\S \S!\S"\\R                      S#\4$U 4S$ jjj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+ r     S>S,\R8                  S-\\	\
\\
   4      S.\S/\S0\S1\S(\	\\R8                     \\R8                  \\R8                     4   4   4S2 jjr   S?S-\	\
\\
   4   S3\S4\4S5 jjr S6 r!S;S7\4S8 jjr"S9 r#S:r$U =r%$ )@r   iC  zTwins Vision Transformer (Revisiting Spatial Attention)

Adapted from PVT (PyramidVisionTransformer) class at https://github.com/whai362/PVT.git
r   r@   r,     avg@      r      )r   r?   r@   rk   r@   r@   r@   r@   r,   r@      r,   rk   r@   r?   r   NrB   gư>)epsr   r   r   num_classesglobal_pool
embed_dims.r    
mlp_ratiosdepths	sr_ratioswss	drop_ratepos_drop_rateproj_drop_rateattn_drop_ratedrop_path_rater   	block_clsc                   >^ [         TU ]  5         UUS.nX@l        X0l        XPl        Xl        X`l        US   =U l        U l        SU l	        [        U5      nUn[        R                  " 5       U l        [        R                  " 5       U l        [        [!        U	5      5       Hw  nU R                  R#                  [%        UTUUU   40 UD65        U R                  R#                  [        R&                  " US95        UU   n[)        U4S jU 5       5      nSmMy     [        R                  " 5       U l        / U l        [/        U[1        U	5      5      nSn[        [!        U	5      5       H  n[        R                  " [        U	U   5       Vs/ s H8  nU" SUU   UU   UU   UUUUU-      UU
U   Ub	  US-  S:X  a  SOUU   S	.	UD6PM:     sn5      nU R*                  R#                  U5        U =R,                  [3        S
U 3UU   SSU-   -  S9/-  sl        UU	U   -  nM     [        R                  " U Vs/ s H  n[5        UU40 UD6PM     sn5      U l        U" U R                  40 UD6U l        [        R&                  " U5      U l        US:  a"  [        R<                  " U R                  U40 UD6O[        R>                  " 5       U l         U RC                  U RD                  5        g s  snf s  snf )Nr%   rF   F)rR   c              3   ,   >#    U  H	  oT-  v   M     g 7fr   r   ).0tr   s     r:   	<genexpr>!Twins.__init__.<locals>.<genexpr>q  s     ?h*_hs   r?   r   r   )	r   r    r   r"   r!   r   r   r   r#   zblock.)modulenum_chs	reductionr   )#r.   r/   r   r   r   r   r   num_featureshead_hidden_sizegrad_checkpointingr   r1   
ModuleListpatch_embeds	pos_dropsr   lenappendr   r4   tupleblocksfeature_infor   sumdictr   	pos_blockr   	head_dropr2   r   headapply_init_weights)r6   r   r   r   r   r   r   r    r   r   r   r   r   r   r   r   r   r   r   r&   r'   r7   prev_chsr   dprcurre   _blockr   r9   s     `                          r:   r/   Twins.__init__H  s   . 	/& &$4>rNBD1"'X&MMOs6{#A$$Z*hPZ[\P]%dac%deNN!!"**}"=>!!}H?h??HJ $ mmo'FDs6{#A]] VAY'$) (! %. %qM#A,$Q-((cAg,%"1q1uz1s1v% % ($) *F KKv&$qclJqM]^abcdad]e"f!gg6!9C $" ]g'h]gPY	9(K(K]g'hit007B7	 I.GRUVBIId//CC\^\g\g\i	 	

4%%&3$)  (is   ?K+
7K0c                     [        U R                  R                  5        VVs/ s H
  u  pSU-   PM     snn5      $ s  snnf )Nz
pos_block.)setr   named_parameters)r6   nrR   s      r:   r   Twins.no_weight_decay  s5    1P1P1RS1RL1$1RSTTSs   <
c                 4    [        SU(       a  SS/O/ SQS9nU$ )Nz^patch_embeds.0)z)^(?:blocks|patch_embeds|pos_block)\.(\d+)Nz^norm)i ))z^blocks\.(\d+)\.(\d+)N)z"^(?:patch_embeds|pos_block)\.(\d+))r   r  )stemr   )r   )r6   coarsematchers      r:   group_matcherTwins.group_matcher  s.    #  E#

 r<   c                      U(       a   S5       eg )Nz$gradient checkpointing not supportedr   )r6   enables     r:   set_grad_checkpointingTwins.set_grad_checkpointing  s    AAAz6r<   r   c                     U R                   $ r   )r   )r6   s    r:   get_classifierTwins.get_classifier  s    yyr<   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 )N) r   weightr   r%   )r   r   hasattrr   r  r&   r'   r1   r2   r   r   )r6   r   r   r&   r'   s        r:   reset_classifierTwins.reset_classifier  s    &"+---*,3DIIx,H,H!!((d*1$))X*F*F		  &&D]hkl]lBIId//SXY	rtr}r}r	r<   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 [        U[        R                  5      (       a  UR                  S   UR                  S   -  UR                  -  nX!R                  -  nUR                  R                  R                  S[        R                   " SU-  5      5        UR
                  b%  UR
                  R                  R#                  5         g g g )Ng{Gz?)stdr   g      ?r   g       @)
isinstancer1   r2   r   r  r-   init	constant_r   r   r   out_channelsr   datanormal_mathsqrtzero_)r6   mfan_outs      r:   r   Twins._init_weights  s+   a##!((,!RYY''AFF,>!!!&&!, -?'2<<((GGaffa(GGahh,299%%mmA&q)99ANNJG GHHMM!!!TYYsW}%=>vv!!!# "	 &r<   rU   indicesr   
stop_early
output_fmtintermediates_onlyc           	      ~   US:X  d   S5       e/ n[        [        U R                  5      U5      u  pUR                  u  pp[	        [        U R                  U R                  U R                  U R                  5      5       GH  u  nu  nnnnU" U5      u  nnU" U5      n[	        U5       H   u  nnU" UU5      nUS:X  d  M  U" UU5      nM"     U[        U R                  5      S-
  :  aO  UR                  " U
/UQSP76 R                  SSSS5      R                  5       nX;   a  UR                  U5        M  M  X;   d  M  U(       a  U R                  U5      OUnUR                  UR                  " U
/UQSP76 R                  SSSS5      R                  5       5        GM!     U(       a  U$ U R                  U5      nX4$ )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 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:

NCHWz$Output shape for Twins must be NCHW.r   r   rF   r,   r?   )r   r   r   rH   	enumeratezipr   r   r   r   rL   rN   rT   r   r   )r6   rU   r'  r   r(  r)  r*  intermediatestake_indices	max_indexrV   r_   heightwidthr   embedr   r   pos_blkr=   jblkx_feats                          r:   forward_intermediatesTwins.forward_intermediates  s   ( V#K%KK#"6s4;;7G"Q
  ggf1:3!!4>>4;;<P 2
-A-tVW AhGAtQA#F+34L64(A ,
 3t{{#a''IIa+$++33Aq!Q?JJL$!((+ % $-1TYYq\qF!(()ED)E")E)M)MaQRTUWX)Y)d)d)fg%2
(   IIaLr<   
prune_norm
prune_headc                     [        [        U R                  5      U5      u  pEU(       a  [        R                  " 5       U l        U(       a  U R                  SS5        U$ )z?Prune layers not required for specified intermediates.
        r   r  )r   r   r   r1   r   r   r  )r6   r'  r;  r<  r0  r1  s         r:   prune_intermediate_layersTwins.prune_intermediate_layers  sE     #7s4;;7G"QDI!!!R(r<   c                     UR                   S   n[        [        U R                  U R                  U R
                  U R                  5      5       H  u  nu  pEpgU" U5      u  pU" U5      n[        U5       H  u  pU
" X5      nU	S:X  d  M  U" X5      nM     U[        U R                  5      S-
  :  d  Me  UR                  " U/UQSP76 R                  SSSS5      R                  5       nM     U R                  U5      nU$ )Nr   r   rF   r,   r?   )rH   r-  r.  r   r   r   r   r   r   rL   rN   rT   r   )r6   rU   rV   r   r4  r   r   r5  r=   r6  r7  s              r:   forward_featuresTwins.forward_features  s    GGAJ1:D%%t~~t{{DNNS2U-A-VAhGAQA#F+L6(A , 3t{{#a''IIa+$++33Aq!Q?JJL2U IIaLr<   
pre_logitsc                     U R                   S:X  a  UR                  SS9nU R                  U5      nU(       a  U$ U R                  U5      $ )Nr   r   rG   )r   meanr   r   )r6   rU   rC  s      r:   forward_headTwins.forward_head  sB    u$1ANN1q0DIIaL0r<   c                 J    U R                  U5      nU R                  U5      nU$ r   )rA  rF  )r6   rU   s     r:   rh   Twins.forward#  s'    !!!$a r<   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   F)Tr   )NFFr,  F)r   FT)&rm   rn   ro   rp   rq   r   r1   r   r   r   rw   r   strrx   r   r   r   r	   r/   rr   rs   ignorer   r
  r  r  r  r   r   r   ru   r9  r>  rA  rF  rh   rz   r{   r|   s   @r:   r   r   C  s    58#$*=)5,8&2)5-1!#%$&$&$&*1",,D*I"+J'CsCx01J' J' 	J'
 J' J' c3hJ' S#XJ' eSj)J' #s(OJ' S#XJ' %S/*J' J' !J' "J'  "!J'" "#J'$ RYY%J'& 'J' J'X YYU U YY  YYB B YY		  @C @hsm @$$ 8<$$',5 ||5  eCcN345  	5 
 5  5  !%5  
tELL!5tELL7I)I#JJ	K5 r ./$#	3S	>*  	 1$ 1 r<   c           	      `    UR                  SS5      n[        [        X4S[        USS90UD6nU$ )Nout_indicesr@   feature_cfggetter)rN  feature_cls)popr   r   r   )variant
pretrainedkwargsrN  models        r:   _create_twinsrW  )  sA    **]A.K w[hG E
 Lr<   c                 4    U SSS SSS[         [        SSSS	.UE$ )
Nr   )r,   r   r   g?bicubicTzpatch_embeds.0.projr   z
apache-2.0)urlr   
input_size	pool_sizecrop_pctinterpolationfixed_input_sizerE  r  
first_conv
classifierlicenser
   )rZ  rU  s     r:   _cfgrc  3  s5    =t%.B+6  r<   ztimm/)	hf_hub_id)ztwins_pcpvt_small.in1kztwins_pcpvt_base.in1kztwins_pcpvt_large.in1kztwins_svt_small.in1kztwins_svt_base.in1kztwins_svt_large.in1kr   c           	      `    [        S/ SQ/ SQ/ SQ/ SQ/ SQS9n[        S	SU 0[        U40 UD6D6$ )
Nr@   r   r   i@  r   r   r?   rA   rk   rk   rk   r@   r@   r   r   r   r   r    r   r   r   rT  )twins_pcpvt_smallr   rW  rT  rU  
model_argss      r:   rj  rj  I  s<    !4Ye|5J bbtJGaZ`Gabbr<   c           	      `    [        S/ SQ/ SQ/ SQ/ SQ/ SQS9n[        S	SU 0[        U40 UD6D6$ )
Nr@   rf  rg  rh  )r,   r@      r,   r   ri  rT  )twins_pcpvt_baserk  rl  s      r:   rp  rp  Q  s<    !4Ye6J a
ad:F`Y_F`aar<   c           	      `    [        S/ SQ/ SQ/ SQ/ SQ/ SQS9n[        S	SU 0[        U40 UD6D6$ )
Nr@   rf  rg  rh  )r,   rk      r,   r   ri  rT  )twins_pcpvt_largerk  rl  s      r:   rs  rs  Y  s<    !4Ye6J bbtJGaZ`Gabbr<   c           
      f    [        S/ SQ/ SQ/ SQ/ SQ/ SQ/ SQS9n[        S
S	U 0[        U40 UD6D6$ )Nr@   r   )r?   r@   rk   r   r   )r?   r?   
   r@      rw  rw  rw  r   r   r   r    r   r   r   r   rT  )twins_svt_smallrk  rl  s      r:   ry  ry  a  s?    !4Zf,,HJ `z`T*E_X^E_``r<   c           
      f    [        S/ SQ/ SQ/ SQ/ SQ/ SQ/ SQS9n[        S
S	U 0[        U40 UD6D6$ )Nr@   )`      i  r   )r,   r         r   r?   r?   ro  r?   rv  r   rx  rT  )twins_svt_baserk  rl  s      r:   r  r  i  s?    !4[g,,HJ _j_DD^W]D^__r<   c           
      f    [        S/ SQ/ SQ/ SQ/ SQ/ SQ/ SQS9n[        S
S	U 0[        U40 UD6D6$ )Nr@   )r   r   r   i   )r@   rk   r       r   r  rv  r   rx  rT  )twins_svt_largerk  rl  s      r:   r  r  q  s?    !6.]i,,HJ `z`T*E_X^E_``r<   rJ  )r  )9rq   r!  	functoolsr   typingr   r   r   r   r   r	   rr   torch.nnr1   torch.nn.functionalr   rJ   	timm.datar   r   timm.layersr   r   r   r   r   r   _builderr   	_featuresr   _features_fxr   	_registryr   r   vision_transformerr   __all__rw   ry   r   r   r~   r   r   r   r   rW  rc  default_cfgsrj  rp  rs  ry  r  r  r   r<   r:   <module>r     s     : :     A j j * + 1 < ))c3h E E EVB")) BJ)BII )X8bii 8<" "JcBII cL	 %"W5!G4"W5 73'2 73&  cU c c bE b b cU c c a5 a a `% ` ` a5 a ar<   