+
    œ°³jBx  ã                   óÐ  € R t ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIt	^ RI
t
^ RI
Ht ^ RIHt ^RIHt ^RIHt ^R	IHtHt ^R
IHtHt ^RIHt ^RIHtHtHtHt ^RIH t H!t! ^RI"H#t#H$t$ ^RI%H&t& ^RI'H(t( ]PR                  ! ]*4      t+]! RR7      ] ! R R]4      4       4       t,]! RR7      ] ! R R]4      4       4       t-R t. ! R R]P^                  4      t0 ! R R]P^                  4      t1R9R R llt2 ! R R ]P^                  4      t3 ! R! R"]P^                  4      t4 ! R# R$]P^                  4      t5 ! R% R&]P^                  4      t6 ! R' R(]P^                  4      t7 ! R) R*]4      t8 ! R+ R,]P^                  4      t9] ! R- R.]4      4       t:] ! R/ R0]:4      4       t; ! R1 R2]P^                  4      t<]! R3R7       ! R4 R5]:4      4       t=]! R6R7       ! R7 R8]:4      4       t>. R:Ot?R# );z,PyTorch VideoMAE (masked autoencoder) model.N)ÚCallable)Údeepcopy)Ú	dataclass)Únn)ÚMSELoss)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚImageClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚlogging)ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputs©ÚVideoMAEConfigz[
    Class for VideoMAEDecoder's outputs, with potential hidden states and attentions.
    )Úcustom_introc                   ó<   a € ] tR t^)t o RtRtRtRtV 3R ltRt	V t
R# )ÚVideoMAEDecoderOutputzx
logits (`torch.FloatTensor` of shape `(batch_size, patch_size ** 2 * num_channels)`):
    Pixel reconstruction logits.
Nc                óÄ   <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[S[ P                  ,          R,          ;R&   S[S[ P                  ,          R,          ;R&   # )é   NÚlogitsÚhidden_statesÚ
attentions©ÚtorchÚFloatTensorÚtuple)ÚformatÚ__classdict__s   "€Úo/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/videomae/modeling_videomae.pyÚ__annotate__Ú"VideoMAEDecoderOutput.__annotate__)   sW   ø‡ ‚ ñ ×Ñ Õ$Ñ+ñ ñ ™×*Ñ*Õ+¨dÕ2Ñ9ñ ñ ‘e×'Ñ'Õ(¨4Õ/Ñ6ò ó    © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r    Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r&   s   @r'   r   r   )   s"   ø‡ € ñð
 (,€FØ59€MØ26€J÷ ƒ r*   r   zb
    Class for VideoMAEForPreTraining's outputs, with potential hidden states and attentions.
    c                   ó@   a € ] tR t^:t o RtRtRtRtRtV 3R lt	Rt
V tR# )ÚVideoMAEForPreTrainingOutputzÃ
loss (`torch.FloatTensor` of shape `(1,)`):
    Pixel reconstruction loss.
logits (`torch.FloatTensor` of shape `(batch_size, patch_size ** 2 * num_channels)`):
    Pixel reconstruction logits.
Nc                óò   <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[ P                  R,          ;R&   S[S[ P                  ,          R,          ;R&   S[S[ P                  ,          R,          ;R&   # )r   NÚlossr   r   r    r!   )r%   r&   s   "€r'   r(   Ú)VideoMAEForPreTrainingOutput.__annotate__:   so   ø‡ ‚ ñ ×
Ñ
˜dÕ
"Ñ)ñ ñ ×Ñ Õ$Ñ+ñ ñ  ™×*Ñ*Õ+¨dÕ2Ñ9ñ! ñ" ‘e×'Ñ'Õ(¨4Õ/Ñ6ò# r*   r+   )r,   r-   r.   r/   r0   r8   r   r   r    r1   r2   r3   r4   s   @r'   r6   r6   :   s'   ø‡ € ñð &*€DØ'+€FØ59€MØ26€J÷# ƒ r*   r6   c                óL  a€ V3R lp\         P                  ! \        V 4       Uu. uF
  q2! V4      NK  	  up4      p\         P                  ! VR,          4      VR&   \         P                  ! VR,          4      VR&   \
        P                  ! V4      P                  ^ 4      # u upi )z Sinusoid position encoding tablec           
      ó¤   <€ \        S4       Uu. uF5  q\        P                  ! R ^V^,          ,          S,          4      ,          NK7  	  up# u upi )i'  )ÚrangeÚnpÚpower)ÚpositionÚhid_jÚd_hids   & €r'   Úget_position_angle_vecÚ;get_sinusoid_encoding_table.<locals>.get_position_angle_vecT   sB   ø€ ÜRWÐX]ÔR^Ó_ÑR^Èœ2Ÿ8š8 E¨1°¸µ
Õ+;¸eÕ+CÓD×DÐDÑR^Ñ_Ð_ùÒ_s   �;A)ºNNN:é    Nr   )rD   :é   Nr   )r=   Úarrayr<   ÚsinÚcosr"   r#   Ú	unsqueeze)Ú
n_positionrA   rB   Úpos_iÚsinusoid_tables   &f   r'   Úget_sinusoid_encoding_tablerN   P   sˆ   ø€ õ`ô —X’XÌ%ÐPZÔJ[Ó\ÑJ[ÀÐ5°eÖ<ÑJ[Ñ\Ó]€NÜ Ÿfšf ^°GÕ%<Ó=€N�7ÑÜ Ÿfšf ^°GÕ%<Ó=€N�7Ñä×Ò˜^Ó,×6Ñ6°qÓ9Ð9ùò	 ]s   ¥B!c                   ó<   a a€ ] tR t^^t oRtV 3R ltR tRtVtV ;t	# )ÚVideoMAEEmbeddingsz/
Construct the patch and position embeddings.

c                óÐ   <€ \         SV `  4        \        V4      V n        V P                  P                  V n        \        V P                  VP                  4      V n        Wn        R # ©N)	ÚsuperÚ__init__ÚVideoMAEPatchEmbeddingsÚpatch_embeddingsÚnum_patchesrN   Úhidden_sizeÚposition_embeddingsÚconfig©ÚselfrZ   Ú	__class__s   &&€r'   rT   ÚVideoMAEEmbeddings.__init__d   sP   ø€ Ü‰ÑÔä 7¸Ó ?ˆÔØ×0Ñ0×<Ñ<ˆÔä#>¸t×?OÑ?OÐQW×QcÑQcÓ#dˆÔ ØŽr*   c                ó  € V P                  V4      pW0P                  P                  4       P                  V4      P	                  VP
                  R R7      ,           pVe,   VP                  w  rEpW2( ,          pVP                  VRV4      pV# )T©ÚdeviceÚcopyéÿÿÿÿ)rV   rY   ÚdetachÚtype_asÚtora   ÚshapeÚreshape)r\   Úpixel_valuesÚbool_masked_posÚ
embeddingsÚ
batch_sizeÚ_Únum_channelss   &&&    r'   ÚforwardÚVideoMAEEmbeddings.forwardm   s‘   € à×*Ñ*¨<Ó8ˆ
ð  ×":Ñ":×"AÑ"AÓ"C×"KÑ"KÈJÓ"W×"ZÑ"ZØ×$Ñ$¨4ð #[ó #
õ 
ˆ
ð
 Ò&Ø*4×*:Ñ*:Ñ'ˆJ˜<Ø#Ð$4Õ5ˆJØ#×+Ñ+¨J¸¸LÓIˆJàÐr*   )rZ   rW   rV   rY   ©
r,   r-   r.   r/   r0   rT   ro   r2   r3   Ú__classcell__©r]   r&   s   @@r'   rP   rP   ^   s   ù‡ € ñõ
÷ò r*   rP   c                   ó<   a a€ ] tR t^t oRtV 3R ltR tRtVtV ;t	# )rU   ac  
Video to Patch Embedding. This module turns a batch of videos of shape (batch_size, num_frames, num_channels,
height, width) into a tensor of shape (batch_size, seq_len, hidden_size) to be consumed by a Transformer encoder.

The seq_len (the number of patches) equals (number of frames // tubelet_size) * (height // patch_size) * (width //
patch_size).

c           	     óþ  <€ \         S	V `  4        VP                  pVP                  pVP                  pVP
                  pVP                  pVP                  p\        V\        P                  P                  4      '       d   TMW"3p\        V\        P                  P                  4      '       d   TMW33pW n        W0n        \        V4      V n        V^,          V^,          ,          V^ ,          V^ ,          ,          ,          W`P                  ,          ,          pW@n        W€n        \        P                  ! VVV P                  V^ ,          V^,          3V P                  V^ ,          V^,          3R7      V n        R# )rF   )Úin_channelsÚout_channelsÚkernel_sizeÚstrideN)rS   rT   Ú
image_sizeÚ
patch_sizern   rX   Ú
num_framesÚtubelet_sizeÚ
isinstanceÚcollectionsÚabcÚIterableÚintrW   r   ÚConv3dÚ
projection)
r\   rZ   rz   r{   rn   rX   r|   r}   rW   r]   s
   &&       €r'   rT   Ú VideoMAEPatchEmbeddings.__init__‰   s3  ø€ Ü‰ÑÔà×&Ñ&ˆ
Ø×&Ñ&ˆ
Ø×*Ñ*ˆØ×(Ñ(ˆØ×&Ñ&ˆ
Ø×*Ñ*ˆä#-¨j¼+¿/¹/×:RÑ:R×#SÒ#S‘ZÐZdÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:R×#SÒ#S‘ZÐZdÐYqˆ
Ø$ŒØ$ŒÜ Ó-ˆÔà˜�]˜j¨�mÕ+°
¸1µÀÈAÅÕ0NÕOÐS]×arÑarÕSrÕsð 	ð )ÔØ&ÔÜŸ)š)Ø$Ø$Ø×*Ñ*¨J°q­M¸:Àa½=ÐIØ×%Ñ% z°!¥}°jÀµmÐDô	
ˆŽr*   c                ó¶  € VP                   w  r#rEpW@P                  8w  d   \        R 4      hWPP                  ^ ,          8w  g   W`P                  ^,          8w  d;   \        RV RV RV P                  ^ ,           RV P                  ^,           R2	4      hVP	                  ^ ^^^^4      pV P                  V4      P                  ^4      P                  ^^4      pV# )zeMake sure that the channel dimension of the pixel values match with the one set in the configuration.zInput image size (Ú*z) doesn't match model (z).)rg   rn   Ú
ValueErrorrz   Úpermuter„   ÚflattenÚ	transpose)r\   ri   rl   r|   rn   ÚheightÚwidthrk   s   &&      r'   ro   ÚVideoMAEPatchEmbeddings.forward¤   sÜ   € Ø>J×>PÑ>PÑ;ˆ
 °eØ×,Ñ,Ô,ÜØwóð ð —_‘_ QÕ'Ô'¨5·O±OÀAÕ4FÔ+FÜØ$ V H¨A¨e¨WÐ4KÈDÏOÉOÐ\]ÕL^ÐK_Ð_`Ðae×apÑapÐqrÕasÐ`tÐtvÐwóð ð $×+Ñ+¨A¨q°!°Q¸Ó:ˆØ—_‘_ \Ó2×:Ñ:¸1Ó=×GÑGÈÈ1ÓMˆ
ØÐr*   )rz   rn   rW   r{   r„   r}   rq   rs   s   @@r'   rU   rU      s   ù‡ € ñõ
÷6ò r*   rU   c                ó  € V ^8„  d   QhR\         P                  R\        P                  R\        P                  R\        P                  R\        P                  R,          R\        R,          R\        R	\
        \        ,          /# )
r   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskNÚscalingÚdropoutÚkwargs)r   ÚModuler"   ÚTensorÚfloatr   r   )r%   s   "r'   r(   r(   µ   s{   € ÷ %ñ %Ü�I‰Ið%ä�<‰<ð%ô 
�‰ð%ô �<‰<ð	%ô
 —L‘L 4Õ'ð%ô �T�\ð%ô ð%ô Ô'Õ(ñ%r*   c                 ó¶  € Vf   VP                  R4      R,          p\        P                  ! WP                  ^^4      4      V,          pVe	   W„,           p\        P
                  P                  VRR7      p\        P
                  P                  W†V P                  R7      p\        P                  ! Wƒ4      p	V	P                  ^^4      P                  4       p	W˜3# )N©Údim)ÚpÚtrainingrc   ç      à¿)
Úsizer"   Úmatmulr‹   r   Ú
functionalÚsoftmaxr–   rŸ   Ú
contiguous)
r�   r‘   r’   r“   r”   r•   r–   r—   Úattn_weightsÚattn_outputs
   &&&&&&&,  r'   Úeager_attention_forwardr¨   µ   s±   € ð ‚Ø—*‘*˜R“. DÕ(ˆô —<’< §}¡}°Q¸Ó':Ó;¸gÕE€LàÒ!Ø#Õ4ˆä—=‘=×(Ñ(¨¸2Ð(Ó>€LÜ—=‘=×(Ñ(¨È6Ï?É?Ð(Ó[€Lä—,’,˜|Ó3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ$Ð$r*   c                   óT   a a€ ] tR t^Ñt oV3R lV 3R lltRV3R lR lltRtVtV ;t# )ÚVideoMAESelfAttentionc                ó$   <€ V ^8„  d   QhRS[ RR/# )r   rZ   ÚreturnNr   )r%   r&   s   "€r'   r(   Ú"VideoMAESelfAttention.__annotate__Ò   s   ø€ ÷ ]ñ ]™~ð ]°$ñ ]r*   c                óh  <€ \         SV `  4        VP                  VP                  ,          ^ 8w  d9   \	        VR4      '       g'   \        RVP                   RVP                   R24      hWn        VP                  V n        \        VP                  VP                  ,          4      V n        V P                  V P                  ,          V n	        VP                  V n        V P                  R,          V n        RV n        \        P                  ! VP                  V P                  VP                   R7      V n        \        P                  ! VP                  V P                  VP                   R7      V n        \        P                  ! VP                  V P                  VP                   R7      V n        R# )	rE   Úembedding_sizezThe hidden size z4 is not a multiple of the number of attention heads Ú.F©ÚbiasNr    )rS   rT   rX   Únum_attention_headsÚhasattrrˆ   rZ   r‚   Úattention_head_sizeÚall_head_sizeÚattention_probs_dropout_probÚdropout_probr•   Ú	is_causalr   ÚLinearÚqkv_biasr‘   r’   r“   r[   s   &&€r'   rT   ÚVideoMAESelfAttention.__init__Ò   sG  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Õ:¸aÔ?ÌÐPVÐXh×HiÒHiÜØ" 6×#5Ñ#5Ð"6ð 7Ø×3Ñ3Ð4°Að7óð ð ŒØ#)×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÕ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÕPˆÔØ"×?Ñ?ˆÔØ×/Ñ/°Õ5ˆŒØˆŒä—Y’Y˜v×1Ñ1°4×3EÑ3EÈFÏOÉOÔ\ˆŒ
Ü—9’9˜V×/Ñ/°×1CÑ1CÈ&Ï/É/ÔZˆŒÜ—Y’Y˜v×1Ñ1°4×3EÑ3EÈFÏOÉOÔ\ˆŽ
r*   c                ó†   <€ V ^8„  d   QhRS[ P                  R,          RS[S[ P                  S[ P                  3,          /# )r   r   Nr¬   )r"   r™   r$   )r%   r&   s   "€r'   r(   r­   å   s8   ø€ ÷ .ñ .Ù"Ÿ\™\¨DÕ0ð.á	‰u�|‰|™UŸ\™\Ð)Õ	*ñ.r*   c                ó¾  € VP                   R R p. VORNV P                  N5pV P                  V4      P                  V4      P	                  ^^4      pV P                  V4      P                  V4      P	                  ^^4      pV P                  V4      P                  V4      P	                  ^^4      p\        P                  ! V P                  P                  \        4      pT! T TTTR V P                  V P                  V P                  '       g   RMV P                  R7      w  r‰VP!                  4       R R V P"                  3,           p
VP%                  V
4      pW‰3# )Nç        )r¹   r•   r–   rc   éþÿÿÿ)rg   rµ   r’   Úviewr‹   r“   r‘   r   Úget_interfacerZ   Ú_attn_implementationr¨   r¹   r•   rŸ   r¸   r¡   r¶   rh   )r\   r   Úinput_shapeÚhidden_shapeÚkeysÚvaluesÚqueriesÚattention_interfaceÚcontext_layerÚattention_probsÚnew_context_layer_shapes   &&         r'   ro   ÚVideoMAESelfAttention.forwardå   sB  € ð $×)Ñ)¨#¨2Ð.ˆàC˜ÐC bÐC¨$×*BÑ*BÑCˆØ�x‰x˜Ó&×+Ñ+¨LÓ9×CÑCÀAÀqÓIˆØ—‘˜MÓ*×/Ñ/°Ó=×GÑGÈÈ1ÓMˆØ—*‘*˜]Ó+×0Ñ0°Ó>×HÑHÈÈAÓNˆä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ *=ØØØØØØ—n‘nØ—L‘LØ#Ÿ}Ÿ}˜}‘C°$×2CÑ2Cô	*
Ñ&ˆð #0×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÕ"SÐØ%×-Ñ-Ð.EÓFˆàÐ-Ð-r*   )
r¶   rµ   rZ   r¸   r¹   r’   r³   r‘   r•   r“   rR   ©	r,   r-   r.   r/   rT   ro   r2   r3   rr   rs   s   @@r'   rª   rª   Ñ   s    ù‡ € ÷]ó ]÷&.÷ .ò .r*   rª   c                   óT   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltRtVtV ;t	# )ÚVideoMAESelfOutputi  z™
The residual connection is defined in VideoMAELayer instead of here (as is the case with other models), due to the
layernorm applied before each block.
c                ó    <€ V ^8„  d   QhRS[ /# ©r   rZ   r   )r%   r&   s   "€r'   r(   ÚVideoMAESelfOutput.__annotate__  ó   ø€ ÷ >ñ >™~ñ >r*   c                óÎ   <€ \         SV `  4        \        P                  ! VP                  VP                  4      V n        \        P                  ! VP                  4      V n        R # rR   )	rS   rT   r   rº   rX   ÚdenseÚDropoutÚhidden_dropout_probr–   r[   s   &&€r'   rT   ÚVideoMAESelfOutput.__init__  sB   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü—z’z &×"<Ñ"<Ó=ˆŽr*   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# ©r   r   Úinput_tensorr¬   ©r"   r™   )r%   r&   s   "€r'   r(   rÓ     s1   ø€ ÷ ñ ¡U§\¡\ð ÁÇÁð ÑRW×R^ÑR^ñ r*   c                óJ   € V P                  V4      pV P                  V4      pV# rR   ©rÖ   r–   ©r\   r   rÜ   s   &&&r'   ro   ÚVideoMAESelfOutput.forward  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr*   rß   rq   rs   s   @@r'   rÐ   rÐ     s#   ù‡ € ñ÷
>ó >÷
÷ ð r*   rÐ   c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚVideoMAEAttentioni  c                ó    <€ V ^8„  d   QhRS[ /# rÒ   r   )r%   r&   s   "€r'   r(   ÚVideoMAEAttention.__annotate__  s   ø€ ÷ 1ñ 1™~ñ 1r*   c                ód   <€ \         SV `  4        \        V4      V n        \	        V4      V n        R # rR   )rS   rT   rª   Ú	attentionrÐ   Úoutputr[   s   &&€r'   rT   ÚVideoMAEAttention.__init__  s&   ø€ Ü‰ÑÔÜ.¨vÓ6ˆŒÜ(¨Ó0ˆŽr*   c                ód   <€ V ^8„  d   QhRS[ P                  RS[S[,          RS[ P                  /# ©r   r   r—   r¬   ©r"   r™   r   r   )r%   r&   s   "€r'   r(   rå     s7   ø€ ÷ ñ á—|‘|ðñ Ñ+Õ,ðñ 
�‰ñ	r*   c                óR   € V P                   ! V3/ VB w  r4V P                  W14      pV# rR   ©rç   rè   )r\   r   r—   Úself_attn_outputrm   rè   s   &&,   r'   ro   ÚVideoMAEAttention.forward  s/   € ð
 #Ÿnšn¨]ÑE¸fÑEÑÐØ—‘Ð-Ó=ˆØˆr*   rî   rÎ   rs   s   @@r'   rã   rã     s   ù‡ € ÷1ó 1÷
÷ ð r*   rã   c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚVideoMAEIntermediatei(  c                ó    <€ V ^8„  d   QhRS[ /# rÒ   r   )r%   r&   s   "€r'   r(   Ú!VideoMAEIntermediate.__annotate__)  s   ø€ ÷ 9ñ 9™~ñ 9r*   c                ó"  <€ \         SV `  4        \        P                  ! VP                  VP
                  4      V n        \        VP                  \        4      '       d   \        VP                  ,          V n        R # VP                  V n        R # rR   )rS   rT   r   rº   rX   Úintermediate_sizerÖ   r~   Ú
hidden_actÚstrr   Úintermediate_act_fnr[   s   &&€r'   rT   ÚVideoMAEIntermediate.__init__)  s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬×-Ò-Ü'-¨f×.?Ñ.?Õ'@ˆDÖ$à'-×'8Ñ'8ˆDÖ$r*   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   r   r¬   rÝ   )r%   r&   s   "€r'   r(   rô   1  s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r*   c                óJ   € V P                  V4      pV P                  V4      pV# rR   ©rÖ   rù   )r\   r   s   &&r'   ro   ÚVideoMAEIntermediate.forward1  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr*   rý   rÎ   rs   s   @@r'   rò   rò   (  s   ù‡ € ÷9ó 9÷÷ ð r*   rò   c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚVideoMAEOutputi8  c                ó    <€ V ^8„  d   QhRS[ /# rÒ   r   )r%   r&   s   "€r'   r(   ÚVideoMAEOutput.__annotate__9  rÔ   r*   c                óÎ   <€ \         SV `  4        \        P                  ! VP                  VP
                  4      V n        \        P                  ! VP                  4      V n	        R # rR   )
rS   rT   r   rº   rö   rX   rÖ   r×   rØ   r–   r[   s   &&€r'   rT   ÚVideoMAEOutput.__init__9  sB   ø€ Ü‰ÑÔÜ—Y’Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
Ü—z’z &×"<Ñ"<Ó=ˆŽr*   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# rÛ   rÝ   )r%   r&   s   "€r'   r(   r  >  s1   ø€ ÷ ñ ¡U§\¡\ð ÁÇÁð ÑRW×R^ÑR^ñ r*   c                óZ   € V P                  V4      pV P                  V4      pW,           pV# rR   rß   rà   s   &&&r'   ro   ÚVideoMAEOutput.forward>  s,   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØ%Õ4ˆØÐr*   rß   rÎ   rs   s   @@r'   r   r   8  s   ù‡ € ÷>ó >÷
÷ ð r*   r   c                   óT   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltRtVtV ;t	# )ÚVideoMAELayeriF  z?This corresponds to the Block class in the timm implementation.c                ó    <€ V ^8„  d   QhRS[ /# rÒ   r   )r%   r&   s   "€r'   r(   ÚVideoMAELayer.__annotate__I  s   ø€ ÷ [ñ [™~ñ [r*   c                óx  <€ \         SV `  4        VP                  V n        ^V n        \	        V4      V n        \        V4      V n        \        V4      V n	        \        P                  ! VP                  VP                  R7      V n        \        P                  ! VP                  VP                  R7      V n        R# )rF   ©ÚepsN)rS   rT   Úchunk_size_feed_forwardÚseq_len_dimrã   rç   rò   Úintermediater   rè   r   Ú	LayerNormrX   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterr[   s   &&€r'   rT   ÚVideoMAELayer.__init__I  s‡   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ*¨6Ó2ˆŒÜ0°Ó8ˆÔÜ$ VÓ,ˆŒÜ "§¢¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÔÜ!Ÿ|š|¨F×,>Ñ,>ÀF×DYÑDYÔZˆÖr*   c                ód   <€ V ^8„  d   QhRS[ P                  RS[S[,          RS[ P                  /# rë   rì   )r%   r&   s   "€r'   r(   r  S  s7   ø€ ÷ ñ á—|‘|ðñ Ñ+Õ,ðñ 
�‰ñ	r*   c                óÄ   € V P                  V4      pV P                  ! V3/ VB pWA,           pV P                  V4      pV P                  V4      pV P	                  WQ4      pV# rR   )r  rç   r  r  rè   )r\   r   r—   Úhidden_states_normÚattention_outputÚlayer_outputs   &&,   r'   ro   ÚVideoMAELayer.forwardS  sl   € ð
 "×2Ñ2°=ÓAÐØŸ>š>Ð*<ÑGÀÑGÐð )Õ8ˆð ×+Ñ+¨MÓ:ˆØ×(Ñ(¨Ó6ˆð —{‘{ <Ó?ˆàÐr*   )rç   r  r  r  r  rè   r  rq   rs   s   @@r'   r	  r	  F  s#   ù‡ € ÙI÷[ó [÷÷ ð r*   r	  c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚVideoMAEEncoderii  c                ó    <€ V ^8„  d   QhRS[ /# rÒ   r   )r%   r&   s   "€r'   r(   ÚVideoMAEEncoder.__annotate__j  s   ø€ ÷ ,ñ ,™~ñ ,r*   c                óÖ   <€ \         SV `  4        Wn        \        P                  ! \        VP                  4       Uu. uF  p\        V4      NK  	  up4      V n        R V n	        R# u upi )FN)
rS   rT   rZ   r   Ú
ModuleListr<   Únum_hidden_layersr	  ÚlayerÚgradient_checkpointing)r\   rZ   rm   r]   s   && €r'   rT   ÚVideoMAEEncoder.__init__j  sR   ø€ Ü‰ÑÔØŒÜ—]’]Ä5È×IaÑIaÔCbÓ#cÑCb¸a¤M°&Ö$9ÑCbÑ#cÓdˆŒ
Ø&+ˆÖ#ùò $ds   ½A&c                óP   <€ V ^8„  d   QhRS[ P                  RS[S[,          RS[/# rë   )r"   r™   r   r   r	   )r%   r&   s   "€r'   r(   r   p  s8   ø€ ÷ @ñ @á—|‘|ð@ñ Ñ+Õ,ð@ñ 
ñ	@r*   c                óR   € V P                    F  pV! V3/ VB pK  	  \        VR 7      # )©Úlast_hidden_state)r$  r	   )r\   r   r—   Úlayer_modules   &&, r'   ro   ÚVideoMAEEncoder.forwardp  s.   € ð
 !ŸJœJˆLÙ(¨ÑA¸&ÑAŠMñ 'ô °Ô?Ð?r*   )rZ   r%  r$  rÎ   rs   s   @@r'   r  r  i  s!   ù‡ € ÷,ó ,÷@÷ @ð @r*   r  c                   ó`   a € ] tR tRt o RtRtRtRtRR.tRt	Rt
RtRtR]R	]/tV 3R
 ltRtV tR# )ÚVideoMAEPreTrainedModeli{  Úvideomaeri   ÚvideoTrP   r	  r   r    c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # rÒ   r   )r%   r&   s   "€r'   r(   Ú$VideoMAEPreTrainedModel.__annotate__{  s   ø‡ ‚ áÑò r*   r+   N)r,   r-   r.   r/   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendr	  rª   Ú_can_record_outputsr1   r2   r3   r4   s   @r'   r.  r.  {  sZ   ø‡ € ð #ÐØ$€OØÐØ&*Ð#Ø-¨Ð?ÐØ€NØÐØÐØ"&Ðà˜ØÐ+ðÐ÷ ƒ r*   r.  c                   óz   a a€ ] tR tRt oV 3R ltR t]]! RR7      ]R	V3R lR ll4       4       4       t	Rt
VtV ;t# )
ÚVideoMAEModeli�  c                ó(  <€ \         SV `  V4       Wn        \        V4      V n        \        V4      V n        VP                  '       d	   R V n        M1\        P                  ! VP                  VP                  R7      V n        V P                  4        R # )Nr  )rS   rT   rZ   rP   rk   r  ÚencoderÚuse_mean_poolingÚ	layernormr   r  rX   r  Ú	post_initr[   s   &&€r'   rT   ÚVideoMAEModel.__init__�  sj   ø€ Ü‰Ñ˜Ô ØŒä,¨VÓ4ˆŒÜ& vÓ.ˆŒà×"×"Ð"Ø!ˆD�NäŸ\š\¨&×*<Ñ*<À&×BWÑBWÔXˆDŒNð 	�‰Ör*   c                ó.   € V P                   P                  # rR   )rk   rV   )r\   s   &r'   Úget_input_embeddingsÚ"VideoMAEModel.get_input_embeddingsž  s   € Ø�‰×/Ñ/Ð/r*   F)Útie_last_hidden_statesc                óx   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[/# )r   ri   rj   Nr—   r¬   )r"   r#   Ú
BoolTensorr   r   r	   )r%   r&   s   "€r'   r(   ÚVideoMAEModel.__annotate__¤  sP   ø€ ÷ .Bñ .Bá×'Ñ'ð.Bñ ×)Ñ)¨DÕ0ð.Bñ Ñ+Õ,ð	.Bñ
 
ñ.Br*   c                ó´   € V P                  W4      pV P                  V4      pVP                  pV P                  e   V P                  V4      p\	        VR7      # )a‚  
bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Boolean masked positions. Indicates which patches are masked (1) and which aren't (0). Each video in the
    batch must have the same number of masked patches. If `None`, then all patches are considered. Sequence
    length is `(num_frames // tubelet_size) * (image_size // patch_size) ** 2`.

Examples:

```python
>>> import torch
>>> from transformers import VideoMAEVideoProcessor, VideoMAEModel
>>> from huggingface_hub import hf_hub_download

>>> # replace this with your own video file
>>> video_path = hf_hub_download(
...     repo_id="nielsr/video-demo", filename="eating_spaghetti.mp4", repo_type="dataset"
... )

>>> video_processor = VideoMAEVideoProcessor.from_pretrained("MCG-NJU/videomae-base")
>>> model = VideoMAEModel.from_pretrained("MCG-NJU/videomae-base")

>>> # prepare video for the model
>>> inputs = video_processor(video_path, return_tensors="pt")

>>> # forward pass
>>> with torch.no_grad():
...     outputs = model(**inputs)

>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 1568, 768]
```r)  )rk   r@  r*  rB  r	   )r\   ri   rj   r—   Úembedding_outputÚencoder_outputsÚsequence_outputs   &&&,   r'   ro   ÚVideoMAEModel.forward¡  sQ   € ðT  Ÿ?™?¨<ÓIÐà+/¯<©<Ð8HÓ+IˆØ)×;Ñ;ˆØ�>‰>Ò%Ø"Ÿn™n¨_Ó=ˆOä°ÔAÐAr*   )rZ   rk   r@  rB  rR   )r,   r-   r.   r/   rT   rF  r   r   r   ro   r2   r3   rr   rs   s   @@r'   r>  r>  �  sF   ù‡ € õò0ð  Ù¨EÔ2Ø÷.Bñ .Bó ó 3ó  ÷.Bð .Br*   r>  c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚVideoMAEDecoderiÕ  c                ó    <€ V ^8„  d   QhRS[ /# rÒ   r   )r%   r&   s   "€r'   r(   ÚVideoMAEDecoder.__annotate__Ö  s   ø€ ÷ %ñ %™~ñ %r*   c                ó¬  <€ \         SV `  4        VP                  VP                  ,          VP                  ^,          ,          p\        V4      pVP                  Vn        VP                  Vn	        VP                  Vn        VP                  Vn        \        P                  ! \!        VP                  4       Uu. uF  p\#        V4      NK  	  up4      V n        \        P&                  ! VP                  4      V n        V^ 8”  d"   \        P*                  ! VP                  V4      M\        P,                  ! 4       V n        RV n        W0n        R# u upi )r   FN)rS   rT   rn   r}   r{   r   Údecoder_hidden_sizerX   Údecoder_num_hidden_layersr#  Údecoder_num_attention_headsr³   Údecoder_intermediate_sizerö   r   r"  r<   r	  Údecoder_layersr  Únormrº   ÚIdentityÚheadr%  rZ   )r\   rZ   Údecoder_num_labelsÚdecoder_configrm   r]   s   &&   €r'   rT   ÚVideoMAEDecoder.__init__Ö  s
  ø€ Ü‰ÑÔà#×0Ñ0°6×3FÑ3FÕFÈ×IZÑIZÐ\]ÕI]Õ]Ðä! &Ó)ˆØ%+×%?Ñ%?ˆÔ"Ø+1×+KÑ+KˆÔ(Ø-3×-OÑ-OˆÔ*Ø+1×+KÑ+KˆÔ(Ü ŸmšmÜ49¸&×:ZÑ:ZÔ4[Ó\Ñ4[¨qŒ]˜>Ö*Ñ4[Ñ\ó
ˆÔô —L’L ×!;Ñ!;Ó<ˆŒ	àI[Ð^_ÔI_ŒB�IŠI�f×0Ñ0Ð2DÔEÔeg×epÒepÓerð 	Œ	ð ',ˆÔ#Ø$Žùò ]s   Â;Ec                ó:   <€ V ^8„  d   QhRS[ P                  RS[/# )r   r   Úreturn_token_num)r"   r™   r‚   )r%   r&   s   "€r'   r(   rT  ì  s   ø€ ÷ 4ñ 4¡U§\¡\ð 4ÁSñ 4r*   c                ó°   € V P                    F  pV! V4      pK  	  VR V) R13,          pV P                  V4      pV P                  V4      p\        VR7      # )rD   N)r   )rZ  r[  r]  r   )r\   r   rb  r+  r   s   &&&  r'   ro   ÚVideoMAEDecoder.forwardì  s]   € à ×/Ô/ˆLÙ(¨Ó7ŠMñ 0ð & aÐ*:Ð):Ñ);Ð&;Õ<ˆð Ÿ	™	 -Ó0ˆØ—‘˜=Ó)ˆä$¨FÔ3Ð3r*   )rZ   rZ  r%  r]  r[  rÎ   rs   s   @@r'   rR  rR  Õ  s   ù‡ € ÷%ó %÷,4÷ 4ð 4r*   rR  zb
    The VideoMAE Model transformer with the decoder on top for self-supervised pre-training.
    c                   óX   a a€ ] tR tRt oV 3R lt]]V3R lR l4       4       tRtVt	V ;t
# )ÚVideoMAEForPreTrainingiú  c                óÞ  <€ \         SV `  V4       Wn        \        V4      V n        \
        P                  ! VP                  VP                  R R7      V n	        \
        P                  ! \        P                  ! ^^VP                  4      4      V n        \        V P                  P                  P                   VP                  4      V n        \%        V4      V n        V P)                  4        R# )Fr±   N)rS   rT   rZ   r>  r/  r   rº   rX   rV  Úencoder_to_decoderÚ	Parameterr"   ÚzerosÚ
mask_tokenrN   rk   rW   rY   rR  ÚdecoderrC  r[   s   &&€r'   rT   ÚVideoMAEForPreTraining.__init__   s¨   ø€ Ü‰Ñ˜Ô ØŒä% fÓ-ˆŒä"$§)¢)¨F×,>Ñ,>À×@ZÑ@ZÐafÔ"gˆÔÜŸ,š,¤u§{¢{°1°a¸×9SÑ9SÓ'TÓUˆŒÜ#>Ø�M‰M×$Ñ$×0Ñ0°&×2LÑ2Ló$
ˆÔ ô ' vÓ.ˆŒð 	�‰Ör*   c                ój   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[S[,          RS[/# )r   ri   rj   r—   r¬   )r"   r#   rJ  r   r   r6   )r%   r&   s   "€r'   r(   Ú#VideoMAEForPreTraining.__annotate__  sK   ø€ ÷ L
ñ L
á×'Ñ'ðL
ñ ×)Ñ)ðL
ñ Ñ+Õ,ð	L
ñ
 
&ñL
r*   c                ó’	  € V P                   ! V3RV/VB pVP                  pV P                  V4      pVP                  w  rgpVf   \	        R4      hV P
                  P                  VRR4      P                  V4      p	V	P                  4       P                  VP                  RR7      p	W’( ,          P                  VRV4      p
W’,          P                  VRV4      p\        P                  ! WZ,           V P                  V,           .^R7      pV P                  WËP                  ^,          4      pVP                   pRp\        P"                  ! 4       ;_uu_ 4        V P$                  P&                  ^8w  d   TpMŒVP                  pVP(                  p\        P*                  ! \,        4      P                  VVR7      R,          p\        P*                  ! \.        4      P                  VVR7      R,          pVV,          V,           pVP                  w  pppppV P$                  P0                  V P$                  P2                  ppV P$                  P4                  '       Ed-   VP7                  VVV,          VVVV,          VVV,          V4      pVP9                  ^ ^^^^^^^4      P;                  4       pVP7                  VVV,          V,          V,          V,          V,          VV,          V,          V4      pVVP=                  RRR7      ,
          VP?                  RRRR	7      PA                  4       R
,           ,          pVP7                  VVV,          V,          V,          V,          V,          VV,          V,          V,          4      pMÄV P$                  P&                  ^8w  d   \	        R4      hVP7                  VVV,          VVVV,          VVV,          V4      pVP9                  ^ ^^^^^^^4      P;                  4       pVP7                  VVV,          V,          V,          V,          V,          VV,          V,          V,          4      pVP                  w  rgpVV,          P                  VRV4      pRRR4       \C        4       pV! VX4      p\E        VVVPF                  VPH                  R7      #   + '       g   i     LF; i)ae  
bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, sequence_length)`):
    Boolean masked positions. Indicates which patches are masked (1) and which aren't (0). Each video in the
    batch must have the same number of masked patches. Sequence length is `(num_frames // tubelet_size) *
    (image_size // patch_size) ** 2`.

Examples:
```python
>>> from transformers import AutoImageProcessor, VideoMAEForPreTraining
>>> import numpy as np
>>> import torch

>>> num_frames = 16
>>> video = list(np.random.randint(0, 256, (num_frames, 3, 224, 224)))

>>> image_processor = AutoImageProcessor.from_pretrained("MCG-NJU/videomae-base")
>>> model = VideoMAEForPreTraining.from_pretrained("MCG-NJU/videomae-base")

>>> pixel_values = image_processor(video, return_tensors="pt").pixel_values

>>> num_patches_per_frame = (model.config.image_size // model.config.patch_size) ** 2
>>> seq_length = (num_frames // model.config.tubelet_size) * num_patches_per_frame
>>> bool_masked_pos = torch.randint(0, 2, (1, seq_length)).bool()

>>> outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)
>>> loss = outputs.loss
```rj   Nz!One must provided a boolean mask Tr`   rœ   )ra   Údtype)r�   Úkeepdim)r�   Úunbiasedrr  g�íµ ÷Æ°>zQCan't unnormalize non-RGB images. Consider setting config.norm_pix_loss to False.©r8   r   r   r    rc   )NNrD   NNrÀ   )%r/  r*  rh  rg   rˆ   rY   Úexpandre   rd   rf   ra   rh   r"   Úcatrk  rl  r   Úno_gradrZ   rn   rq  Ú	as_tensorr   r   r}   r{   Únorm_pix_lossrÁ   r‰   r¥   ÚmeanÚvarÚsqrtr   r6   r   r    )r\   ri   rj   r—   ÚoutputsrO  rl   rm   rn   Úexpanded_position_embeddingsÚpos_emb_visibleÚpos_emb_maskÚx_fullÚdecoder_outputsr   r8   Úframesra   rq  rz  ÚstdÚtimerŒ   r�   r}   r{   Úframes_normÚvideos_patchÚlabelsÚloss_fcts   &&&,                          r'   ro   ÚVideoMAEForPreTraining.forward  s\  € ðF $(§=¢=°Ñ#iÈÐ#iÐbhÑ#iˆà!×3Ñ3ˆØ×1Ñ1°/ÓBˆð '6×&;Ñ&;Ñ#ˆ
�|ð Ò"ÜÐ@ÓAÐAà'+×'?Ñ'?×'FÑ'FÀzÐSUÐWYÓ'Z×'bÑ'bÐcoÓ'pÐ$Ø'C×'JÑ'JÓ'L×'OÑ'OÐWc×WjÑWjÐquÐ'OÓ'vÐ$Ø6Ð7GÕH×PÑPÐQ[Ð]_ÐamÓnˆØ3ÕD×LÑLÈZÐY[Ð]iÓjˆô —’˜OÕ=¸t¿¹ÐQ]Õ?]Ð^ÐdeÔfˆð 26·±¸f×FXÑFXÐYZÕF[Ó1\ˆØ ×'Ñ'ˆàˆÜ�]Š]�_�_à�{‰{×'Ñ'¨1Ô,à%‘ð &×,Ñ,�Ø$×*Ñ*�Ü—’Ô'<Ó=×@Ñ@ÈÐV[Ð@Ó\Ð]vÕw�Ü—o’oÔ&:Ó;×>Ñ>ÀfÐTYÐ>ÓZÐ[tÕu�Ø%¨Õ+¨dÕ2�à<B¿L¹LÑ9ˆJ˜˜l¨F°EØ'+§{¡{×'?Ñ'?ÀÇÁ×AWÑAW˜*ˆLØ�{‰{×(×(Ñ(àŸ™ØØ˜LÕ(Ø Ø Ø˜jÕ(ØØ˜ZÕ'Øó	�ð  Ÿ™¨¨1¨a°°A°q¸!¸QÓ?×JÑJÓL�àŸ™ØØ˜LÕ(¨6Õ1°ZÕ?À%ÕGÈ:ÕUØ  :Õ-°
Õ:Ø ó	�ð  &¨¯©¸ÀD¨Ó(IÕIØ—J‘J 2°¸d�JÓC×HÑHÓJÈTÕQõ�ð  +×/Ñ/ØØ˜LÕ(¨6Õ1°ZÕ?À%ÕGÈ:ÕUØ  :Õ-°
Õ:¸\ÕIó ‘ð —;‘;×+Ñ+¨qÔ0Ü$Økóð ð  Ÿ™ØØ˜LÕ(Ø Ø Ø˜jÕ(ØØ˜ZÕ'Øó	�ð  Ÿ™¨¨1¨a°°A°q¸!¸QÓ?×JÑJÓL�à%Ÿ{™{ØØ˜LÕ(¨6Õ1°ZÕ?À%ÕGÈ:ÕUØ  :Õ-°
Õ:¸\ÕIó �ð +7×*<Ñ*<Ñ'ˆJ˜<Ø! /Õ2×:Ñ:¸:ÀrÈ<ÓXˆF÷Q ôT “9ˆÙ˜ Ó'ˆä+ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
÷[ �_ús   ÅLR6Ò6S	)rZ   rl  rh  rk  rY   r/  ©r,   r-   r.   r/   rT   r   r   ro   r2   r3   rr   rs   s   @@r'   rf  rf  ú  s.   ù‡ € õð" Ø÷L
ó ó ÷L
ð L
r*   rf  z­
    VideoMAE Model transformer with a video classification head on top (a linear layer on top of the average pooled hidden
    states of all tokens) e.g. for ImageNet.
    c                   ó\   a a€ ] tR tRt oV 3R lt]]RV3R lR ll4       4       tRtVt	V ;t
# )ÚVideoMAEForVideoClassificationi¢  c                ó¦  <€ \         SV `  V4       VP                  V n        \        V4      V n        VP
                  '       d!   \        P                  ! VP                  4      MR V n	        VP                  ^ 8”  d,   \        P                  ! VP                  VP                  4      M\        P                  ! 4       V n        V P                  4        R # rR   )rS   rT   Ú
num_labelsr>  r/  rA  r   r  rX   Úfc_normrº   r\  Ú
classifierrC  r[   s   &&€r'   rT   Ú'VideoMAEForVideoClassification.__init__©  s”   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ% fÓ-ˆŒð <B×;R×;RÐ;R”r—|’| F×$6Ñ$6Ô7ÐX\ˆŒØNT×N_ÑN_ÐbcÔNcœ"Ÿ)š) F×$6Ñ$6¸×8IÑ8IÔJÔik×itÒitÓivˆŒð 	�‰Ör*   c                ó†   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[S[,          RS[/# )r   ri   Nrˆ  r—   r¬   )r"   r™   r   r   r
   )r%   r&   s   "€r'   r(   Ú+VideoMAEForVideoClassification.__annotate__¸  sK   ø€ ÷ ;
ñ ;
á—l‘l TÕ)ð;
ñ —‘˜tÕ#ð;
ñ Ñ+Õ,ð	;
ñ
 
ñ;
r*   c                ód  € V P                   ! V3/ VB pVP                  pV P                  e$   VP                  ^4      pV P                  V4      pM	VR,          pV P	                  V4      pRpVe   V P
                  ! W'V P                  3/ VB p\        VVVP                  VP                  R7      # )aØ  
labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
    Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
    config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
    `config.num_labels > 1` a classification loss is computed (Cross-Entropy).

Examples:

```python
>>> import torch
>>> from transformers import VideoMAEVideoProcessor, VideoMAEForVideoClassification
>>> from huggingface_hub import hf_hub_download

>>> # replace this with your own video file
>>> video_path = hf_hub_download(
...     repo_id="nielsr/video-demo", filename="eating_spaghetti.mp4", repo_type="dataset"
... )

>>> video_processor = VideoMAEVideoProcessor.from_pretrained("MCG-NJU/videomae-base-finetuned-kinetics")
>>> model = VideoMAEForVideoClassification.from_pretrained("MCG-NJU/videomae-base-finetuned-kinetics")

>>> inputs = video_processor(video_path, return_tensors="pt")

>>> with torch.no_grad():
...     outputs = model(**inputs)
...     logits = outputs.logits

>>> # model predicts one of the 400 Kinetics-400 classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
eating spaghetti
```Nrt  )rD   rE   )
r/  r*  r�  rz  r‘  Úloss_functionrZ   r
   r   r    )	r\   ri   rˆ  r—   r}  rO  rè   r   r8   s	   &&&,     r'   ro   Ú&VideoMAEForVideoClassification.forward¶  s®   € ðR $(§=¢=°Ñ#HÀÑ#HˆØ!×3Ñ3ˆà�<‰<Ò#Ø$×)Ñ)¨!Ó,ˆFØ—\‘\ &Ó)‰Fà$ TÕ*ˆFà—‘ Ó(ˆàˆØÒØ×%Ò% f°d·k±kÑLÀVÑLˆDä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r*   )r‘  r�  r�  r/  )NNr‹  rs   s   @@r'   r�  r�  ¢  s0   ù‡ € õð Ø÷;
ñ ;
ó ó ÷;
ð ;
r*   r�  )Nr¿   )rf  r>  r.  r�  )@r0   Úcollections.abcr   r   rb   r   Údataclassesr   Únumpyr=   r"   r   Útorch.nnr   Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr	   r
   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.constantsr   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_videomaer   Ú
get_loggerr,   Úloggerr   r6   rN   r˜   rP   rU   r¨   rª   rÐ   rã   rò   r   r	  r  r.  r>  rR  rf  r�  Ú__all__r+   r*   r'   Ú<module>r©     sû  ðñ 3ã Ý $Ý Ý !ã Û Ý Ý å !Ý 9ß Fß FÝ &ß MÓ Mß Jß IÝ 5Ý 2ð 
×	Ò	˜HÓ	%€ñ ðôð
 ô7˜Kó 7ó óð7ñ ðôð
 ô7 ;ó 7ó óð7ò :ô˜Ÿ™ô ôB2˜bŸi™iô 2÷l%ô80.˜BŸI™Iô 0.ôh˜Ÿ™ô ô$˜Ÿ	™	ô ô"˜2Ÿ9™9ô ô 
�R—Y‘Yô 
ôÐ.ô ôF@�b—i‘iô @ð$ ô˜oó ó ðð" ôDBÐ+ó DBó ðDBôN"4�b—i‘iô "4ñJ ðôô
`
Ð4ó `
óð
`
ñF ðôôK
Ð%<ó K
óðK
ò\ s‚r*   