ó
    Eñil  ã                   óz  • S SK Jr  S SKJrJrJr  S SKrS SKJs  J	r
  S SKJrJr  SSKJr  SSKJr  SS	KJrJrJr  SS
KJr  SSKJrJr  SSKJrJr  / SQrS\\   S\\   S\\   S\\\   \\   4   4S jr \RB                  RE                  S5        S\R                  S\R                  S\\   S\4S jr#\RB                  RE                  S5        S\\\\4   S\\\\4   S\\\\4   4S jr$\RB                  RE                  S5        S\S\\\\4   S\\\\4   S\\\\4   S\4
S jr%\RB                  RE                  S5             SGS\S \S!\S"\S\\   S#\S\\   S$\&S%\&S&\\   S'\\   S(\'S\4S) jjr(\RB                  RE                  S*5         " S+ S,\RR                  5      r* " S- S.\RR                  5      r+ " S/ S0\RR                  5      r,S\\   S1\S2\\   S#\\   S\\   S3\&S4\\   S5\'S6\S\,4S7 jr-\S8S9S:.r. " S; S<\5      r/ " S= S>\5      r0 " S? S@\5      r1\" 5       \" SA\/Rd                  4SB9SSSC.S4\\/   S5\'S6\S\,4SD jj5       5       r3\" 5       \" SA\0Rd                  4SB9SSSC.S4\\0   S5\'S6\S\,4SE jj5       5       r4\" 5       \" SA\1Rd                  4SB9SSSC.S4\\1   S5\'S6\S\,4SF jj5       5       r5g)Hé    )Úpartial)ÚAnyÚCallableÚOptionalN)ÚnnÚTensoré   )ÚVideoClassification)Ú_log_api_usage_onceé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_KINETICS400_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interface)ÚPatchMergingÚSwinTransformerBlock)ÚSwinTransformer3dÚSwin3D_T_WeightsÚSwin3D_S_WeightsÚSwin3D_B_WeightsÚswin3d_tÚswin3d_sÚswin3d_bÚ
shift_sizeÚsize_dhwÚwindow_sizeÚreturnc                 óX   • [        S5       H  nX   X#   ::  d  M  X   X#'   SX'   M     X 4$ )Nr	   r   ©Úrange)r   r   r   Úis       Úf/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/models/video/swin_transformer.pyÚ_get_window_and_shift_sizer%       s9   € ô �1ŽXˆØ‰;˜+™.Õ(à%™[ˆK‰NØˆJ‹Mñ	 ð Ð"Ð"ó    r%   Úrelative_position_bias_tableÚrelative_position_indexc                 óä   • US   US   -  US   -  nU US U2S U24   R                  5          nUR                  X3S5      nUR                  SSS5      R                  5       R	                  S5      nU$ )Nr   é   r   éÿÿÿÿ)ÚflattenÚviewÚpermuteÚ
contiguousÚ	unsqueeze)r'   r(   r   Ú
window_volÚrelative_position_biass        r$   Ú_get_relative_position_biasr3   /   sŽ   € ð ˜Q‘ +¨a¡.Ñ0°;¸q±>ÑA€Jà9Ø   ¨[¨j¨[Ð 8Ñ9×AÑAÓCñÐð 4×8Ñ8¸ÐQSÓTÐØ3×;Ñ;¸A¸qÀ!ÓD×OÑOÓQ×[Ñ[Ð\]Ó^ÐØ!Ð!r&   r3   Ú
patch_sizec                 ó€   • [        S5       Vs/ s H  o!U   X   X   -  -
  X   -  PM     nnUS   US   US   4$ s  snf )Nr	   r   r*   r   r!   )r   r4   r#   Úpad_sizes       r$   Ú_compute_pad_size_3dr7   ?   sU   € ÜW\Ð]^ÔW_Ó`ÒW_ÐRS˜A‘ ¡¨z©}Ñ!<Ñ<À
ÁÔMÑW_€HÐ`Ø�A‰;˜ ™ X¨a¡[Ð0Ð0ùò as   Ž;r7   Úxc           
      óþ  • U R                   " U6 nUS   US   -  US   US   -  -  US   US   -  -  n[        S5       Vs/ s H  nSX&   * 4X&   * X6   * 4X6   * S 44PM     nnSnUS    H?  n	US    H3  n
US    H'  nX„U	S   U	S   2U
S   U
S   2US   US   24'   US-  nM)     M5     MA     UR                  US   US   -  US   US   US   -  US   US   US   -  US   5      nUR                  SSSSSS5      R	                  XRS   US   -  US   -  5      nUR                  S5      UR                  S5      -
  nUR                  US:g  [        S5      5      R                  US:H  [        S5      5      nU$ s  snf )	Nr   r*   r   r	   é   é   g      YÀç        )Ú	new_zerosr"   r-   r.   Úreshaper0   Úmasked_fillÚfloat)r8   r   r   r   Ú	attn_maskÚnum_windowsr#   ÚslicesÚcountÚdÚhÚws               r$   Ú_compute_attention_mask_3drH   G   s  € ð —’˜XÐ&€IØ˜A‘; +¨a¡.Ñ0°X¸a±[ÀKÐPQÁNÑ5RÑSÐW_Ð`aÑWbÐfqÐrsÑftÑWtÑu€Kô �q”óò ˆAð	 �‘�Ð Ø‰nˆ_˜z™}˜nÐ-Ø‰mˆ^˜TÐ"ó	
ñ
 ð ð ð €EØ�AŒYˆØ˜”ˆAØ˜A”Y�ØCH˜!˜A™$  1¡˜+ q¨¡t¨a°©d {°A°a±D¸1¸Q¹4°KÐ?Ñ@Ø˜‘
’ó ó ñ ð —‘Ø�‰�{ 1‘~Ñ%Ø�A‰Ø�‰�{ 1‘~Ñ%Ø�A‰Ø�‰�{ 1‘~Ñ%Ø�A‰ó€Ið ×!Ñ! ! Q¨¨1¨a°Ó3×;Ñ;Ø ‘^ k°!¡nÑ4°{À1±~ÑEó€Ið ×#Ñ# AÓ&¨×)<Ñ)<¸QÓ)?Ñ?€IØ×%Ñ% i°1¡n´e¸F³mÓD×PÑPÐQZÐ^_ÑQ_ÔafÐgjÓakÓl€IØÐùò;s   Á !E:rH   TÚinputÚ
qkv_weightÚproj_weightr2   Ú	num_headsÚattention_dropoutÚdropoutÚqkv_biasÚ	proj_biasÚtrainingc                 ó*  • U R                   u  pÍpïn[        XÞU4US   US   US   45      n[        R                  " U SSSUS   SUS   SUS   45      nUR                   u  nnnnnUUU4n[	        U5      S:”  a%  [
        R                  " UUS   * US   * US   * 4SS9nUS   US   -  US   US   -  -  US   US   -  -  nUR                  UUS   US   -  US   US   US   -  US   US   US   -  US   U5      nUR                  SSSSSSS	S
5      R                  UU-  US   US   -  US   -  U5      n[        R                  " UX5      nUR                  UR                  S5      UR                  S5      SUUU-  5      R                  SSSSS5      nUS   US   US   nnnUUU-  S-  -  nUR                  UR                  SS5      5      nUU-   n[	        U5      S:”  aÌ  [        UUS   US   US   4US   US   US   4US   US   US   45      nUR                  UR                  S5      U-  UUUR                  S5      UR                  S5      5      nUUR                  S5      R                  S5      -   nUR                  SUUR                  S5      UR                  S5      5      n[        R                   " USS9n[        R"                  " UX{S9nUR                  U5      R                  SS5      R                  UR                  S5      UR                  S5      U5      n[        R                  " UX*5      n[        R"                  " UX‹S9nUR                  UUS   US   -  US   US   -  US   US   -  US   US   US   U5      nUR                  SSSSSSS	S
5      R                  UUUUU5      n[	        U5      S:”  a"  [
        R                  " UUS   US   US   4SS9nUSS2SU2SU2SU2SS24   R%                  5       nU$ )a‚  
Window based multi-head self attention (W-MSA) module with relative position bias.
It supports both of shifted and non-shifted window.
Args:
    input (Tensor[B, T, H, W, C]): The input tensor, 5-dimensions.
    qkv_weight (Tensor[in_dim, out_dim]): The weight tensor of query, key, value.
    proj_weight (Tensor[out_dim, out_dim]): The weight tensor of projection.
    relative_position_bias (Tensor): The learned relative position bias added to attention.
    window_size (List[int]): 3-dimensions window size, T, H, W .
    num_heads (int): Number of attention heads.
    shift_size (List[int]): Shift size for shifted window attention (T, H, W).
    attention_dropout (float): Dropout ratio of attention weight. Default: 0.0.
    dropout (float): Dropout ratio of output. Default: 0.0.
    qkv_bias (Tensor[out_dim], optional): The bias tensor of query, key, value. Default: None.
    proj_bias (Tensor[out_dim], optional): The bias tensor of projection. Default: None.
    training (bool, optional): Training flag used by the dropout parameters. Default: True.
Returns:
    Tensor[B, T, H, W, C]: The output tensor after shifted window attention.
r   r*   r   )r*   r   r	   )ÚshiftsÚdimsr	   r;   r:   é   é   g      à¿éþÿÿÿr+   )Údim)ÚprQ   N)Úshaper7   ÚFÚpadÚsumÚtorchÚrollr-   r.   r>   ÚlinearÚsizeÚmatmulÚ	transposerH   r0   ÚsoftmaxrN   r/   )rI   rJ   rK   r2   r   rL   r   rM   rN   rO   rP   rQ   ÚbÚtrF   rG   Úcr6   r8   Ú_ÚtpÚhpÚwpÚpadded_sizerB   ÚqkvÚqÚkÚvÚattnrA   s                                  r$   Úshifted_window_attention_3drr   s   s�  € ðB —K‘K�M€Aˆ!�ä# Q¨1 I°¸A±ÀÈAÁÐP[Ð\]ÑP^Ð/_Ó`€HÜ	�Šˆe�a˜˜A˜x¨™{¨A¨x¸©{¸A¸xÈ¹{ÐKÓL€AØ—w‘wÑ€A€rˆ2ˆr�1Ø�r˜2�,€Kô ˆ:ƒ˜ÓÜ�JŠJ�q :¨a¡= .°:¸a±=°.À:ÈaÁ=À.Ð!QÐXaÑbˆð 
�Q‰˜; q™>Ñ	)¨k¸!©nÀÈAÁÑ.NÑOÐS^Ð_`ÑSaÐepÐqrÑesÑSsÑtð ð 	
�‰Ø	Ø�A‰˜+ a™.Ñ(Ø�A‰Ø�A‰˜+ a™.Ñ(Ø�A‰Ø�A‰˜+ a™.Ñ(Ø�A‰Ø	ó		€Að 	
�	‰	�!�Q˜˜1˜a  A qÓ)×1Ñ1Ø	ˆK‰˜ Q™¨+°a©.Ñ8¸;Àq¹>ÑIÈ1ó	€Aô
 �(Š(�1�jÓ
+€CØ
�+‰+�a—f‘f˜Q“i §¡¨£¨A¨y¸!¸y¹.Ó
I×
QÑ
QÐRSÐUVÐXYÐ[\Ð^_Ó
`€CØ�!‰f�c˜!‘f˜c !™fˆ!€q€AØ	ˆQ�)‰^ Ñ$Ñ$€AØ�8‰8�A—K‘K  BÓ'Ó(€DàÐ(Ñ(€Dä
ˆ:ƒ˜Óä.ØØ˜‰^˜[¨™^¨[¸©^Ð<Ø˜‰^˜[¨™^¨[¸©^Ð<Ø˜‰]˜J q™M¨:°a©=Ð9ó	
ˆ	ð �y‰y˜Ÿ™ › kÑ1°;À	È1Ï6É6ÐRSË9ÐVW×V\ÑV\Ð]^ÓV_Ó`ˆØ�i×)Ñ)¨!Ó,×6Ñ6°qÓ9Ñ9ˆØ�y‰y˜˜Y¨¯©¨q«	°1·6±6¸!³9Ó=ˆä�9Š9�T˜rÑ"€DÜ�9Š9�TÐ.ÑB€Dà�‰�A‹× Ñ   AÓ&×.Ñ.¨q¯v©v°a«y¸!¿&¹&À»)ÀQÓG€AÜ	�Š��KÓ+€AÜ	�	Š	�!�wÑ2€Að 	
�‰Ø	Ø�A‰˜+ a™.Ñ(Ø�A‰˜+ a™.Ñ(Ø�A‰˜+ a™.Ñ(Ø�A‰Ø�A‰Ø�A‰Ø	ó		€Að 	
�	‰	�!�Q˜˜1˜a  A qÓ)×1Ñ1°!°R¸¸RÀÓC€Aô ˆ:ƒ˜ÓÜ�JŠJ�q *¨Q¡-°¸A±À
È1ÁÐ!NÐU^Ñ_ˆð 	
Š!ˆRˆaˆR��!��R�a�RšÐ
Ñ×&Ñ&Ó(€AØ€Hr&   rr   c                   ó¾   ^ • \ rS rSrSr    SS\S\\   S\\   S\S\S\S	\S
\SS4U 4S jjjr	SS jr
SS jrS\\   S\R                  4S jrS\S\4S jrSrU =r$ )ÚShiftedWindowAttention3déæ   z*
See :func:`shifted_window_attention_3d`.
rX   r   r   rL   rO   rP   rM   rN   r   Nc	                 ó^  >• [         T	U ]  5         [        U5      S:w  d  [        U5      S:w  a  [        S5      eX l        X0l        X@l        Xpl        X€l        [        R                  " XS-  US9U l        [        R                  " XUS9U l        U R                  5         U R                  5         g )Nr	   z.window_size and shift_size must be of length 2)Úbias)ÚsuperÚ__init__ÚlenÚ
ValueErrorr   r   rL   rM   rN   r   ÚLinearrm   ÚprojÚ#define_relative_position_bias_tableÚdefine_relative_position_index)
ÚselfrX   r   r   rL   rO   rP   rM   rN   Ú	__class__s
            €r$   ry   Ú!ShiftedWindowAttention3d.__init__ë   s�   ø€ ô 	‰ÑÔÜˆ{Ó˜qÓ ¤C¨
£O°qÓ$8ÜÐMÓNÐNà&ÔØ$ŒØ"ŒØ!2ÔØŒä—9’9˜S¨¡'°Ñ9ˆŒÜ—I’I˜c¨YÑ7ˆŒ	à×0Ñ0Ô2Ø×+Ñ+Õ-r&   c                 óF  • [         R                  " [        R                  " SU R                  S   -  S-
  SU R                  S   -  S-
  -  SU R                  S   -  S-
  -  U R
                  5      5      U l        [         R                  R                  U R                  SS9  g )Nr   r   r*   ç{®Gáz”?©Ústd)	r   Ú	Parameterr^   Úzerosr   rL   r'   ÚinitÚtrunc_normal_)r€   s    r$   r~   Ú<ShiftedWindowAttention3d.define_relative_position_bias_table  s•   € ä,.¯LªLÜ�KŠKØ�T×%Ñ% aÑ(Ñ(¨1Ñ,°°T×5EÑ5EÀaÑ5HÑ1HÈ1Ñ1LÑMÐQRÐUY×UeÑUeÐfgÑUhÑQhÐklÑQlÑmØ—‘óó-
ˆÔ)ô 	�‰×Ñ˜d×?Ñ?ÀTÐÒJr&   c           	      óv  • [        S5       Vs/ s H&  n[        R                  " U R                  U   5      PM(     nn[        R                  " [        R
                  " US   US   US   SS95      n[        R                  " US5      nUS S 2S S 2S 4   US S 2S S S 24   -
  nUR                  SSS5      R                  5       nUS S 2S S 2S4==   U R                  S   S-
  -  ss'   US S 2S S 2S4==   U R                  S   S-
  -  ss'   US S 2S S 2S4==   U R                  S   S-
  -  ss'   US S 2S S 2S4==   SU R                  S   -  S-
  SU R                  S   -  S-
  -  -  ss'   US S 2S S 2S4==   SU R                  S   -  S-
  -  ss'   UR                  S5      nU R                  SU5        g s  snf )	Nr	   r   r*   r   Úij)Úindexingr+   r(   )r"   r^   Úaranger   ÚstackÚmeshgridr,   r.   r/   r]   Úregister_buffer)r€   r#   Ú
coords_dhwÚcoordsÚcoords_flattenÚrelative_coordsr(   s          r$   r   Ú7ShiftedWindowAttention3d.define_relative_position_index  s·  € äAFÀqÄÓJÂ¸A”e—l’l 4×#3Ñ#3°AÑ#6Ö7Áˆ
ÐJÜ—’Ü�NŠN˜: a™=¨*°Q©-¸ÀA¹ÐQUÑVó
ˆô Ÿš v¨qÓ1ˆØ(ªªA¨t¨Ñ4°~ÂaÈÊqÀjÑ7QÑQˆØ)×1Ñ1°!°Q¸Ó:×EÑEÓGˆØšš1˜a˜Ó  D×$4Ñ$4°QÑ$7¸!Ñ$;Ñ;Ó Øšš1˜a˜Ó  D×$4Ñ$4°QÑ$7¸!Ñ$;Ñ;Ó Øšš1˜a˜Ó  D×$4Ñ$4°QÑ$7¸!Ñ$;Ñ;Ó àšš1˜a˜Ó  Q¨×)9Ñ)9¸!Ñ)<Ñ%<¸qÑ%@ÀQÈ×IYÑIYÐZ[ÑI\ÑE\Ð_`ÑE`Ñ$aÑaÓ Øšš1˜a˜Ó  A¨×(8Ñ(8¸Ñ(;Ñ$;¸aÑ$?Ñ?Ó à"1×"5Ñ"5°bÓ"9ÐØ×ÑÐ6Ð8OÕPùò Ks   Ž-F6c                 óD   • [        U R                  U R                  U5      $ )N)r3   r'   r(   )r€   r   s     r$   Úget_relative_position_biasÚ3ShiftedWindowAttention3d.get_relative_position_bias#  s   € Ü*¨4×+LÑ+LÈd×NjÑNjÐlwÓxÐxr&   r8   c                 óæ  • UR                   u  p#pEnX4U/nU R                  R                  5       U R                  R                  5       p‡[	        X†U5      u  pxU R                  U5      n	[        UU R                  R                  U R                  R                  U	UU R                  UU R                  U R                  U R                  R                  U R                  R                  U R                  S9$ )N)r   rM   rN   rO   rP   rQ   )rZ   r   Úcopyr   r%   r™   rr   rm   Úweightr}   rL   rM   rN   rw   rQ   )
r€   r8   rh   rf   rF   rG   r   r   r   r2   s
             r$   ÚforwardÚ ShiftedWindowAttention3d.forward&  sÃ   € ØŸ™‰ˆˆa�AØ˜!�9ˆØ"&×"2Ñ"2×"7Ñ"7Ó"9¸4¿?¹?×;OÑ;OÓ;Q�Zä"<¸ZÐS^Ó"_Ñˆà!%×!@Ñ!@ÀÓ!MÐä*ØØ�H‰H�O‰OØ�I‰I×ÑØ"ØØ�N‰NØ!Ø"×4Ñ4Ø—L‘LØ—X‘X—]‘]Ø—i‘i—n‘nØ—]‘]ñ
ð 	
r&   )rM   rN   rL   r}   rm   r'   r   r   )TTr<   r<   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚintÚlistÚboolr@   ry   r~   r   r^   r   r™   rž   Ú__static_attributes__Ú__classcell__©r�   s   @r$   rt   rt   æ   sÂ   ø† ñð ØØ#&Øñ.àð.ð ˜#‘Yð.ð ˜‘Ið	.ð
 ð.ð ð.ð ð.ð !ð.ð ð.ð 
÷.ð .ô6KôQð&y°d¸3±ið yÀEÇLÁLô yð
˜ð 
 F÷ 
ò 
r&   rt   c                   óŠ   ^ • \ rS rSrSr   SS\\   S\S\S\\S\	R                  4      S	S4
U 4S
 jjjrS\S	\4S jrSrU =r$ )ÚPatchEmbed3diA  a#  Video to Patch Embedding.

Args:
    patch_size (List[int]): Patch token size.
    in_channels (int): Number of input channels. Default: 3
    embed_dim (int): Number of linear projection output channels. Default: 96.
    norm_layer (nn.Module, optional): Normalization layer. Default: None
Nr4   Úin_channelsÚ	embed_dimÚ
norm_layer.r   c                 ó  >• [         TU ]  5         [        U 5        US   US   US   4U l        [        R
                  " UUU R                  U R                  S9U l        Ub  U" U5      U l        g [        R                  " 5       U l        g )Nr   r*   r   )Úkernel_sizeÚstride)	rx   ry   r   Útuple_patch_sizer   ÚConv3dr}   ÚnormÚIdentity)r€   r4   r­   r®   r¯   r�   s        €r$   ry   ÚPatchEmbed3d.__init__K  s|   ø€ ô 	‰ÑÔÜ˜DÔ!Ø!+¨A¡°
¸1±¸zÈ!¹}Ð MˆÔä—I’IØØØ×-Ñ-Ø×(Ñ(ñ	
ˆŒ	ð Ñ!Ù" 9Ó-ˆD�IäŸš›ˆD�Ir&   r8   c           
      ó2  • UR                  5       u    p#pE[        X4U4U R                  5      n[        R                  " USUS   SUS   SUS   45      nU R                  U5      nUR                  SSSSS5      nU R                  b  U R                  U5      nU$ )zForward function.r   r   r*   r	   r:   )ra   r7   r³   r[   r\   r}   r.   rµ   )r€   r8   rh   rf   rF   rG   r6   s          r$   rž   ÚPatchEmbed3d.forwarda  s“   € ð Ÿ™›‰ˆˆ1�Ü'¨¨q¨	°4×3HÑ3HÓIˆÜ�EŠE�!�a˜ !™ a¨°!©°a¸À!¹ÐEÓFˆØ�I‰I�a‹LˆØ�I‰I�a˜˜A˜q !Ó$ˆØ�9‰9Ñ Ø—	‘	˜!“ˆAØˆr&   )rµ   r}   r³   )r	   é`   N)r    r¡   r¢   r£   r¤   r¦   r¥   r   r   r   ÚModulery   r   rž   r¨   r©   rª   s   @r$   r¬   r¬   A  s{   ø† ñð ØØ9=ñ&à˜‘Ið&ð ð&ð ð	&ð
 ˜X c¨2¯9©9 nÑ5Ñ6ð&ð 
÷&ð &ð,
˜ð 
 F÷ 
ò 
r&   r¬   c                    ó6  ^ • \ rS rSrSrSSSSSSS\S4	S\\   S	\S
\\   S\\   S\\   S\S\S\S\S\S\	\
S\R                  4      S\	\
S\R                  4      S\
S\R                  4   S\	\
S\R                  4      SS4U 4S jjjrS\S\4S jrSrU =r$ )r   in  a  
Implements 3D Swin Transformer from the `"Video Swin Transformer" <https://arxiv.org/abs/2106.13230>`_ paper.
Args:
    patch_size (List[int]): Patch size.
    embed_dim (int): Patch embedding dimension.
    depths (List(int)): Depth of each Swin Transformer layer.
    num_heads (List(int)): Number of attention heads in different layers.
    window_size (List[int]): Window size.
    mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4.0.
    dropout (float): Dropout rate. Default: 0.0.
    attention_dropout (float): Attention dropout rate. Default: 0.0.
    stochastic_depth_prob (float): Stochastic depth rate. Default: 0.1.
    num_classes (int): Number of classes for classification head. Default: 400.
    norm_layer (nn.Module, optional): Normalization layer. Default: None.
    block (nn.Module, optional): SwinTransformer Block. Default: None.
    downsample_layer (nn.Module): Downsample layer (patch merging). Default: PatchMerging.
    patch_embed (nn.Module, optional): Patch Embedding layer. Default: None.
g      @r<   çš™™™™™¹?i�  Nr4   r®   ÚdepthsrL   r   Ú	mlp_ratiorN   rM   Ústochastic_depth_probÚnum_classesr¯   .ÚblockÚdownsample_layerÚpatch_embedr   c                 ó4  >• [         TU ]  5         [        U 5        X l        Uc  [	        [
        [        S9nUc  [	        [        R                  SS9nUc  [        nU" XUS9U l
        [        R                  " US9U l        / n[        U5      nSn[        [        U5      5       HÍ  n/ nUSU-  -  n[        UU   5       H`  nU	[!        U5      -  US-
  -  nUR#                  U" UUU   UU Vs/ s H  nUS-  S:X  a  SOUS-  PM     snUUUUU[        S	9
5        US-  nMb     UR#                  [        R$                  " U6 5        U[        U5      S-
  :  d  Mµ  UR#                  U" UU5      5        MÏ     [        R$                  " U6 U l        US[        U5      S-
  -  -  U l        U" U R(                  5      U l        [        R,                  " S5      U l        [        R0                  " U R(                  U
5      U l        U R5                  5        H„  n[7        U[        R0                  5      (       d  M$  [        R8                  R;                  UR<                  S
S9  UR>                  c  M[  [        R8                  RA                  UR>                  5        M†     g s  snf )N)Ú
attn_layergñhãˆµøä>)Úeps)r4   r®   r¯   )rY   r   r   r*   )r   r   r¿   rN   rM   rÀ   r¯   rÆ   r„   r…   )!rx   ry   r   rÁ   r   r   rt   r   Ú	LayerNormr¬   rÄ   ÚDropoutÚpos_dropr]   r"   rz   r@   ÚappendÚ
SequentialÚfeaturesÚnum_featuresrµ   ÚAdaptiveAvgPool3dÚavgpoolr|   ÚheadÚmodulesÚ
isinstancer‰   rŠ   r�   rw   Úzeros_)r€   r4   r®   r¾   rL   r   r¿   rN   rM   rÀ   rÁ   r¯   rÂ   rÃ   rÄ   ÚlayersÚtotal_stage_blocksÚstage_block_idÚi_stageÚstagerX   Úi_layerÚsd_probrG   Úmr�   s                            €r$   ry   ÚSwinTransformer3d.__init__‚  sE  ø€ ô" 	‰ÑÔÜ˜DÔ!Ø&Ôà‰=ÜÔ0Ô=UÑVˆEàÑÜ ¤§¡°4Ñ8ˆJàÑÜ&ˆKñ '°*Ð^hÑiˆÔÜŸ
š
 WÑ-ˆŒà"$ˆÜ  ›[ÐØˆäœS ›[Ö)ˆGØ%'ˆEØ˜a ™jÑ(ˆCÜ  ¨¡Ö1�à/´%¸Ó2GÑGÐK]Ð`aÑKaÑb�Ø—‘ÙØØ! 'Ñ*Ø$/ÙOZÓ#[Ê{È!¨°1©¸Ó)9¡A¸qÀA¹vÒ$EÉ{Ñ#[Ø"+Ø 'Ø*;Ø.5Ø#-Ü#;ñôð  !Ñ#’ñ# 2ð$ �M‰Mœ"Ÿ-š-¨Ð/Ô0àœ#˜f›+¨™/Õ*Ø—‘Ñ.¨s°JÓ?Ö@ñ1 *ô2 Ÿš vÐ.ˆŒà%¨¬c°&«k¸A©oÑ(>Ñ>ˆÔÙ˜t×0Ñ0Ó1ˆŒ	Ü×+Ò+¨AÓ.ˆŒÜ—I’I˜d×/Ñ/°Ó=ˆŒ	à—‘–ˆAÜ˜!œRŸY™Y×'Ó'Ü—‘×%Ñ% a§h¡h°DÐ%Ñ9Ø—6‘6Ó%Ü—G‘G—N‘N 1§6¡6Ö*ò	  ùò+ $\s   Ã+Jr8   c                 ó*  • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nUR	                  SSSSS5      nU R                  U5      n[        R                  " US5      nU R                  U5      nU$ )Nr   r:   r*   r   r	   )	rÄ   rÊ   rÍ   rµ   r.   rÐ   r^   r,   rÑ   )r€   r8   s     r$   rž   ÚSwinTransformer3d.forwardÎ  s€   € à×Ñ˜QÓˆØ�M‰M˜!ÓˆØ�M‰M˜!ÓˆØ�I‰I�a‹LˆØ�I‰I�a˜˜A˜q !Ó$ˆØ�L‰L˜‹OˆÜ�MŠM˜!˜QÓˆØ�I‰I�a‹LˆØˆr&   )rÐ   rÍ   rÑ   rµ   rÁ   rÎ   rÄ   rÊ   )r    r¡   r¢   r£   r¤   r   r¦   r¥   r@   r   r   r   r»   ry   r   rž   r¨   r©   rª   s   @r$   r   r   n  s@  ø† ñð4 ØØ#&Ø'*ØØ9=Ø48Ø5AØ:>ñJ+à˜‘IðJ+ð ðJ+ð �S‘	ð	J+ð
 ˜‘9ðJ+ð ˜#‘YðJ+ð ðJ+ð ðJ+ð !ðJ+ð  %ðJ+ð ðJ+ð ˜X c¨2¯9©9 nÑ5Ñ6ðJ+ð ˜  b§i¡i Ñ0Ñ1ðJ+ð # 3¨¯	©	 >Ñ2ðJ+ð ˜h s¨B¯I©I ~Ñ6Ñ7ðJ+ð  
÷!J+ð J+ðX
˜ð 
 F÷ 
ò 
r&   r   r®   r¾   rÀ   ÚweightsÚprogressÚkwargsc           
      óº   • Ub#  [        US[        UR                  S   5      5        [        SU UUUUUS.UD6n	Ub  U	R	                  UR                  USS95        U	$ )NrÁ   Ú
categories)r4   r®   r¾   rL   r   rÀ   T)rá   Ú
check_hash© )r   rz   Úmetar   Úload_state_dictÚget_state_dict)
r4   r®   r¾   rL   r   rÀ   rà   rá   râ   Úmodels
             r$   Ú_swin_transformer3drë   Û  s{   € ð ÑÜ˜f m´S¸¿¹ÀlÑ9SÓ5TÔUäð ØØØØØØ3ñð ñ€Eð ÑØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÐXÔYà€Lr&   )r*   r*   r*   )rä   Úmin_sizeÚmin_temporal_sizec                   óX   • \ rS rSr\" S\" \SSSSS90 \ESS	S
SSSS.0SSS.ES9r\r	Sr
g)r   i   z9https://download.pytorch.org/models/swin3d_t-7615ae03.pth©éà   rð   ©é   ©g
×£p=
ß?gÉv¾Ÿ/Ý?g–C‹lçûÙ?©gZd;ßOÍ?gyé&1¬Ì?gÍÌÌÌÌÌÌ?©Ú	crop_sizeÚresize_sizeÚmeanr†   úFhttps://github.com/SwinTransformer/Video-Swin-Transformer#kinetics-400úœThe weights were ported from the paper. The accuracies are estimated on video-level with parameters `frame_rate=15`, `clips_per_video=12`, and `clip_len=32`iv¨­úKinetics-400gö(\�ÂmS@gð§ÆK7aW@©zacc@1zacc@5g7‰A`åðE@g˜nƒÀb^@©ÚrecipeÚ_docsÚ
num_paramsÚ_metricsÚ_opsÚ
_file_size©ÚurlÚ
transformsrç   ræ   N©r    r¡   r¢   r£   r   r   r
   Ú_COMMON_METAÚKINETICS400_V1ÚDEFAULTr¨   ræ   r&   r$   r   r      óh   † ÙØGÙØØ ØØ)Ø(ñ
ð
Øð
à^ð[ð #àØ#Ø#ñ!ðð Ø!ò
ñ€Nð6 ƒGr&   r   c                   óX   • \ rS rSr\" S\" \SSSSS90 \ESS	S
SSSS.0SSS.ES9r\r	Sr
g)r   i  z9https://download.pytorch.org/models/swin3d_s-da41c237.pthrï   rñ   ró   rô   rõ   rù   rú   if$ørû   gÓMbXáS@g'1¬ŠW@rü   gçû©ñÒµT@gð§ÆK7Ik@rý   r  ræ   Nr  ræ   r&   r$   r   r     r  r&   r   c                   ó˜   • \ rS rSr\" S\" \SSSSS90 \ESS	S
SSSS.0SSS.ES9r\" S\" \SSSSS90 \ESS	S
SSSS.0SSS.ES9r	\r
Srg)r   i>  z<https://download.pytorch.org/models/swin3d_b_1k-24f7c7c6.pthrï   rñ   ró   rô   rõ   rù   rú   iX…?rû   gÙÎ÷SÛS@gbX9´˜W@rü   gÓMbX•a@g /Ý$Âv@rý   r  z=https://download.pytorch.org/models/swin3d_b_22k-7c6ae6fa.pthgþÔxé&iT@gÛù~j¼äW@ræ   N)r    r¡   r¢   r£   r   r   r
   r  r	  ÚKINETICS400_IMAGENET22K_V1r
  r¨   ræ   r&   r$   r   r   >  sÊ   † ÙØJÙØØ ØØ)Ø(ñ
ð
Øð
à^ð[ð #àØ#Ø#ñ!ðð Ø!ò
ñ€Nñ6 ")ØKÙØØ ØØ)Ø(ñ
ð
Øð
à^ð[ð #àØ#Ø#ñ!ðð Ø!ò
ñ"Ðð6 ƒGr&   r   Ú
pretrained)rà   )rà   rá   c                 ód   • [         R                  U 5      n [        S/ SQS/ SQ/ SQ/ SQSU US.UD6$ )	as  
Constructs a swin_tiny architecture from
`Video Swin Transformer <https://arxiv.org/abs/2106.13230>`_.

Args:
    weights (:class:`~torchvision.models.video.Swin3D_T_Weights`, optional): The
        pretrained weights to use. See
        :class:`~torchvision.models.video.Swin3D_T_Weights` below for
        more details, and possible values. By default, no pre-trained
        weights are used.
    progress (bool, optional): If True, displays a progress bar of the
        download to stderr. Default is True.
    **kwargs: parameters passed to the ``torchvision.models.video.swin_transformer.SwinTransformer``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/video/swin_transformer.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.video.Swin3D_T_Weights
    :members:
©r   r:   r:   rº   )r   r   rU   r   ©r	   rU   é   é   ©é   rV   rV   r½   ©r4   r®   r¾   rL   r   rÀ   rà   rá   ræ   )r   Úverifyrë   ©rà   rá   râ   s      r$   r   r   x  sH   € ô. ×%Ñ% gÓ.€Gäð 
ÚØÚÚ ÚØ!ØØñ
ð ñ
ð 
r&   c                 ód   • [         R                  U 5      n [        S/ SQS/ SQ/ SQ/ SQSU US.UD6$ )	at  
Constructs a swin_small architecture from
`Video Swin Transformer <https://arxiv.org/abs/2106.13230>`_.

Args:
    weights (:class:`~torchvision.models.video.Swin3D_S_Weights`, optional): The
        pretrained weights to use. See
        :class:`~torchvision.models.video.Swin3D_S_Weights` below for
        more details, and possible values. By default, no pre-trained
        weights are used.
    progress (bool, optional): If True, displays a progress bar of the
        download to stderr. Default is True.
    **kwargs: parameters passed to the ``torchvision.models.video.swin_transformer.SwinTransformer``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/video/swin_transformer.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.video.Swin3D_S_Weights
    :members:
r  rº   ©r   r   é   r   r  r  r½   r  ræ   )r   r  rë   r  s      r$   r   r   ž  sH   € ô. ×%Ñ% gÓ.€Gäð 
ÚØÚÚ ÚØ!ØØñ
ð ñ
ð 
r&   c                 ód   • [         R                  U 5      n [        S/ SQS/ SQ/ SQ/ SQSU US.UD6$ )	as  
Constructs a swin_base architecture from
`Video Swin Transformer <https://arxiv.org/abs/2106.13230>`_.

Args:
    weights (:class:`~torchvision.models.video.Swin3D_B_Weights`, optional): The
        pretrained weights to use. See
        :class:`~torchvision.models.video.Swin3D_B_Weights` below for
        more details, and possible values. By default, no pre-trained
        weights are used.
    progress (bool, optional): If True, displays a progress bar of the
        download to stderr. Default is True.
    **kwargs: parameters passed to the ``torchvision.models.video.swin_transformer.SwinTransformer``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/video/swin_transformer.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.video.Swin3D_B_Weights
    :members:
r  é€   r  )r:   r  é   é    r  r½   r  ræ   )r   r  rë   r  s      r$   r   r   Ä  sH   € ô. ×%Ñ% gÓ.€Gäð 
ÚØÚÚ ÚØ!ØØñ
ð ñ
ð 
r&   )r<   r<   NNT)6Ú	functoolsr   Útypingr   r   r   r^   Útorch.nn.functionalr   Ú
functionalr[   r   Útransforms._presetsr
   Úutilsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   Úswin_transformerr   r   Ú__all__r¦   r¥   Útupler%   ÚfxÚwrapr3   r7   rH   r@   r§   rr   r»   rt   r¬   r   rë   r  r   r   r   r	  r   r   r   ræ   r&   r$   Ú<module>r/     sQ  ðõ ß *Ñ *ã ß Ð ß å 6å (ç 7Ñ 7å +ß Cß Aò€ð	#Ø�S‘	ð	#Ø%)¨#¡Yð	#Ø=AÀ#¹Yð	#à
ˆ4�‰9�d˜3‘iÐÑ ô	#ð ‡�‡�Ð*Ô +ð
"Ø"'§,¡,ð
"ØINÏÉð
"ØdhÐilÑdmð
"àô
"ð ‡�‡�Ð+Ô ,ð1 5¨¨c°3¨Ñ#7ð 1ÀUÈ3ÐPSÐUXÈ=ÑEYð 1Ð^cÐdgÐilÐnqÐdqÑ^rô 1ð
 ‡�‡�Ð$Ô %ð&Øð&à�C˜˜c�MÑ"ð&ð �s˜C �}Ñ%ð&ð �c˜3 �mÑ$ð	&ð
 ô&ðR ‡�‡�Ð*Ô +ð  #ØØ!%Ø"&ØñmØðmàðmð ðmð #ð	mð
 �c‘ðmð ðmð �S‘	ðmð ðmð ðmð �vÑðmð ˜Ñðmð ðmð õmð` ‡�‡�Ð+Ô ,ôV
˜rŸy™yô V
ôv*�2—9‘9ô *ôZj˜Ÿ	™	ô jðZØ�S‘	ðàðð �‰Iðð �C‰yð	ð
 �c‘ðð !ðð �kÑ"ðð ðð ðð ôð> *ØØñ€ô�{ô ô>�{ô ô>7�{ô 7ñt ÓÙ ,Ð0@×0OÑ0OÐ!PÑQØ6:ÈTò !˜Ð"2Ñ3ð !Àdð !Ð]`ð !Ðevô !ó Ró ð!ñH ÓÙ ,Ð0@×0OÑ0OÐ!PÑQØ6:ÈTò !˜Ð"2Ñ3ð !Àdð !Ð]`ð !Ðevô !ó Ró ð!ñH ÓÙ ,Ð0@×0OÑ0OÐ!PÑQØ6:ÈTò !˜Ð"2Ñ3ð !Àdð !Ð]`ð !Ðevô !ó Ró ñ!r&   