+
    œ°³j3¢  ã                   ó  € ^ RI Ht ^ RIH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Ht ^RIHt ^RIHtHt ^RI H!t! ]PD                  ! ]#4      t$]! RR7      ] ! R R]4      4       4       t%]! RR7      ] ! R R]4      4       4       t& ! R R]PN                  4      t( ! R R]PN                  4      t)R>R R llt*R t+ ! R R]PN                  4      t, ! R R ]PN                  4      t- ! R! R"]PN                  4      t. ! R# R$]4      t/ ! R% R&]PN                  4      t0R' R( lt1 ! R) R*]PN                  4      t2 ! R+ R,]PN                  4      t3 ! R- R.]PN                  4      t4 ! R/ R0]PN                  4      t5 ! R1 R2]4      t6 ! R3 R4]4      t7 ! R5 R6]PN                  4      t8] ! R7 R8]4      4       t9] ! R9 R:]94      4       t:]! R;R7       ! R< R=]94      4       t;. R?Ot<R# )@é    )ÚCallable)Ú	dataclassN)Únn)Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚImageClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputs©ÚVJEPA2ConfigzO
    VJEPA Predictor outputs that also contains the masked encoder outputs
    )Úcustom_introc                   ó@   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# )Ú$VJEPA2WithMaskedInputPredictorOutputaÖ  
masked_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*, returned when `context_mask` is provided which is applied on VJEPA2Encoder outputs):
    The masked hidden state of the model.
target_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*, returned when `target_mask` is provided which is applied on VJEPA2Encoder outputs):
    The target hidden state of the model.
Nc                ó  <€ V ^8„  d   Qh/ S[ P                  ;R&   S[ P                  R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[ P                  R,          ;R&   # )é   Úlast_hidden_stateNÚmasked_hidden_state.Úhidden_statesÚ
attentionsÚtarget_hidden_state)ÚtorchÚFloatTensorÚtuple)ÚformatÚ__classdict__s   "€Úk/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/vjepa2/modeling_vjepa2.pyÚ__annotate__Ú1VJEPA2WithMaskedInputPredictorOutput.__annotate__#   sŒ   ø‡ ‚ ñ ×(Ñ(Ñ(ñ ñ ×*Ñ*¨TÕ1Ñ8ñ ñ  ™×*Ñ*¨CÐ/Õ0°4Õ7Ñ>ñ! ñ" ‘e×'Ñ'¨Ð,Õ-°Õ4Ñ;ñ# ñ$ ×*Ñ*¨TÕ1Ñ8ò% ó    © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r    r!   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r&   s   @r'   r   r   #   s)   ø‡ € ñð 59ÐØ:>€MØ7;€JØ48Ð÷% ƒ r*   r   zs
    VJEPA outputs that also contains the masked encoder outputs
    Optionally contains the predictor outputs
    c                   óR   a a€ ] tR t^8t oRtRtRtRtRtV 3R lt	V3R lt
RtVtV ;t# )Ú VJEPA2WithMaskedInputModelOutputa]  
masked_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*, returned when `context_mask` is provided which is applied on VJEPA2Encoder outputs):
    The masked hidden state of the model.
predictor_output (`VJEPA2WithMaskedInputPredictorOutput`, *optional*):
    The output from the Predictor module.
Nc                ó¶   <€ \        \        SV `	  4       4      p\        VR,          \        4      '       d   VR,          P                  4       VR&   \        V4      # )é   éÿÿÿÿ)ÚlistÚsuperÚto_tupleÚ
isinstancer   r$   )ÚselfÚoutputÚ	__class__s   & €r'   r;   Ú)VJEPA2WithMaskedInputModelOutput.to_tupleM   sG   ø€ Ü”e‘gÑ&Ó(Ó)ˆÜ�f˜R•jÔ"F×GÒGØ �×,Ñ,Ó.ˆF�2‰JÜ�V‹}Ðr*   c                ó  <€ V ^8„  d   Qh/ S[ P                  ;R&   S[ P                  R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[R,          ;R&   # )r   r   Nr   .r   r    Úpredictor_output)r"   r#   r$   r   )r%   r&   s   "€r'   r(   Ú-VJEPA2WithMaskedInputModelOutput.__annotate__8   s†   ø‡ ‚ ñ ×(Ñ(Ñ(ñ ñ  ×*Ñ*¨TÕ1Ñ8ñ! ñ" ™×*Ñ*¨CÐ/Õ0°4Õ7Ñ>ñ# ñ$ ‘e×'Ñ'¨Ð,Õ-°Õ4Ñ;ñ% ñ& ;¸TÕAÑHò' r*   r+   )r,   r-   r.   r/   r0   r   r   r    rB   r;   r1   r2   r3   Ú__classcell__©r?   r&   s   @@r'   r5   r5   8   s.   ù‡ € ñð 59ÐØ:>€MØ7;€JØDHÐõ÷+ … r*   r5   c                   óh   a a€ ] tR t^Tt oRtRV3R lV 3R lllt]R 4       tV3R lR ltRt	Vt
V ;t# )	ÚVJEPA2PatchEmbeddings3Dz
Image to Patch Embedding
c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r   ÚconfigÚhidden_size©r   Úint)r%   r&   s   "€r'   r(   Ú$VJEPA2PatchEmbeddings3D.__annotate__Y   s   ø€ ÷ 
ñ 
áð
ñ ñ
r*   c                óJ  <€ \         SV `  4        VP                  V n        VP                  V n        W n        \
        P                  ! VP                  VVP                  VP                  VP                  3VP                  VP                  VP                  3R 7      V n        R# ))Úin_channelsÚout_channelsÚkernel_sizeÚstrideN)	r:   Ú__init__Ú
patch_sizeÚtubelet_sizerK   r   ÚConv3dÚin_chansÚproj©r=   rJ   rK   r?   s   &&&€r'   rT   Ú VJEPA2PatchEmbeddings3D.__init__Y   sƒ   ø€ ô
 	‰ÑÔØ ×+Ñ+ˆŒØ"×/Ñ/ˆÔØ&Ôä—I’IØŸ™Ø$Ø×,Ñ,¨f×.?Ñ.?À×ARÑARÐSØ×'Ñ'¨×):Ñ):¸F×<MÑ<MÐNô	
ˆŽ	r*   c                óÄ   € V P                   V P                  ,          V P                  V P                  ,          ,          V P                  V P                  ,          ,          # ©N©Úframes_per_cliprV   Ú	crop_sizerU   ©rJ   s   &r'   Únum_patchesÚ#VJEPA2PatchEmbeddings3D.num_patchesj   sO   € ð ×#Ñ# v×':Ñ':Õ:Ø×Ñ 6×#4Ñ#4Õ4õ6à×Ñ 6×#4Ñ#4Õ4õ6ð	
r*   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r   Úpixel_values_videosÚreturn©r"   ÚTensor)r%   r&   s   "€r'   r(   rN   r   s#   ø€ ÷ ñ ©5¯<©<ð ¹E¿L¹Lñ r*   c                óf   € V P                  V4      P                  ^4      P                  ^^4      pV# )r   )rY   ÚflattenÚ	transpose)r=   rf   Úxs   && r'   ÚforwardÚVJEPA2PatchEmbeddings3D.forwardr   s.   € Ø�I‰IÐ)Ó*×2Ñ2°1Ó5×?Ñ?ÀÀ1ÓEˆØˆr*   )rK   rU   rY   rV   ©é   ©r,   r-   r.   r/   r0   rT   Ústaticmethodrb   rn   r2   r3   rD   rE   s   @@r'   rG   rG   T   s7   ù‡ € ñ÷
õ 
ð" ñ
ó ð
÷÷ ð r*   rG   c                   óX   a a€ ] tR t^wt oRtRV3R lV 3R llltV3R lR ltRtVtV ;t	# )ÚVJEPA2Embeddingsú6
Construct mask token, position and patch embeddings.
c                ó&   <€ V ^8„  d   QhRS[ RS[/# rI   rL   )r%   r&   s   "€r'   r(   ÚVJEPA2Embeddings.__annotate__|   s   ø€ ÷ ,ñ ,™|ð ,¹#ñ ,r*   c                ó¶   <€ \         SV `  4        Wn        W n        \	        WR 7      V n        V P
                  P                  V n        VP                  V n        R# )©rK   N)r:   rT   rJ   rK   rG   Úpatch_embeddingsrb   rU   rZ   s   &&&€r'   rT   ÚVJEPA2Embeddings.__init__|   sG   ø€ Ü‰ÑÔàŒØ&ÔÜ 7¸Ô XˆÔà×0Ñ0×<Ñ<ˆÔØ ×+Ñ+ˆŽr*   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# re   rh   )r%   r&   s   "€r'   r(   rx   †   s#   ø€ ÷ ñ ©5¯<©<ð ¹E¿L¹Lñ r*   c                óv  € VP                   ^,          pVP                  ^ ^^^^4      pW P                  P                  8  d*   VP	                  ^^V P                  P                  ^^4      pV P
                  P                  P                  P                  pVP                  VR7      pV P                  V4      pV# )r7   )Údtype)
ÚshapeÚpermuterJ   rV   Úrepeatr{   rY   Úweightr   Úto)r=   rf   Ú
num_framesÚtarget_dtypeÚ
embeddingss   &&   r'   rn   ÚVJEPA2Embeddings.forward†   s¬   € Ø(×.Ñ.¨qÕ1ˆ
ð 2×9Ñ9¸!¸QÀÀ1ÀaÓHÐð Ÿ™×0Ñ0Ô0Ø"5×"<Ñ"<¸QÀÀ4Ç;Á;×C[ÑC[Ð]^Ð`aÓ"bÐà×,Ñ,×1Ñ1×8Ñ8×>Ñ>ˆØ1×4Ñ4¸<Ð4ÓHÐØ×*Ñ*Ð+>Ó?ˆ
àÐr*   )rJ   rK   rb   r{   rU   rp   ©
r,   r-   r.   r/   r0   rT   rn   r2   r3   rD   rE   s   @@r'   ru   ru   w   s#   ù‡ € ñ÷,õ ,÷÷ ð r*   ru   c                óÞ   € V ^8„  d   QhR\         P                  R\        P                  R\        P                  R\        P                  R\        P                  R,          R\        R\        /# )	r   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskNÚscalingÚdropout)r   ÚModuler"   ri   Úfloat)r%   s   "r'   r(   r(   š   sg   € ÷ %ñ %Ü�I‰Ið%ä�<‰<ð%ô 
�‰ð%ô �<‰<ð	%ô
 —L‘L 4Õ'ð%ô ð%ô ñ%r*   c                 ó¶  € \         P                  ! WP                  RR4      4      V,          p\        P                  P                  VR\         P                  R7      P                  VP                  4      p\        P                  P                  W†V P                  R7      p\         P                  ! Wƒ4      p	V	P                  ^^4      P                  4       p	W˜3# )r7   )Údimr   )ÚpÚtrainingr8   éþÿÿÿ)r"   Úmatmulrl   r   Ú
functionalÚsoftmaxÚfloat32r„   r   r‘   r—   Ú
contiguous)
r‹   rŒ   r�   rŽ   r�   r�   r‘   ÚkwargsÚattn_weightsÚattn_outputs
   &&&&&&&,  r'   Úeager_attention_forwardr¡   š   s¦   € ô —<’< §}¡}°R¸Ó'<Ó=ÀÕG€Lô —=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€Lô —=‘=×(Ñ(¨È6Ï?É?Ð(Ó[€Lä—,’,˜|Ó3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ$Ð$r*   c                 ó\  € V P                  4       w  r#rE\        P                  ! V^,          V P                  V P                  R7      pWeR,          ,          pRRV,          ,          pVP                  R4      V,          pVP                  4       pVP                  4       p	VP                  ^^^^4      pV	P                  ^^^^4      p	V P                  RR4      p
V
P                  RR7      w  r¼\        P                  ! V) V3RR7      p
V
P                  R4      p
W	,          W¨,          ,           # )	r   ©r   Údeviceg       @g      ð?i'  ©r•   r8   )r8   r   r˜   )Úsizer"   Úaranger   r¤   Ú	unsqueezeÚsinÚcosr‚   Ú	unflattenÚunbindÚstackrk   )rm   ÚposÚBÚ	num_headsÚNÚDÚomegaÚfreqÚemb_sinÚemb_cosÚyÚy1Úy2s   &&           r'   Úrotate_queries_or_keysrº   ´   sõ   € ØŸ™›Ñ€A�!ô
 �LŠL˜˜a� q§w¡w°q·x±xÔ@€EØ	��WÕ€EØ�%˜•,Õ€EØ�=‰=˜Ó˜uÕ$€Dð �h‰h‹j€GØ�h‰h‹j€Gà�n‰n˜Q  1 aÓ(€GØ�n‰n˜Q  1 aÓ(€Gð 	
�‰�B˜Ó €AØ�X‰X˜"ˆXÓ�F€Bä�Š�b�S˜"�I 2Ô&€AØ	�	‰	�"‹€AØ�K˜A�KÕ(Ð(r*   c                   ót   a a€ ] tR t^Ït oR
V3R lV 3R llltR tR tRR ltR tRV3R lR llt	R	t
VtV ;t# )ÚVJEPA2RopeAttentionc                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   rJ   rK   Únum_attention_headsrL   )r%   r&   s   "€r'   r(   Ú VJEPA2RopeAttention.__annotate__Ð   s)   ø€ ÷ #ñ #áð#ñ ð#ñ !ñ	#r*   c                óð  <€ \         SV `  4        Wn        W n        W0n        W#,          ^ 8w  d   \        RV3 RV R24      h\        W#,          4      V n        V P                  V P                  ,          V n        \        P                  ! W P                  VP                  R7      V n        \        P                  ! W P                  VP                  R7      V n        \        P                  ! W P                  VP                  R7      V n        \        P                  ! W"4      V n        VP                   V n        \        P$                  ! V P"                  4      V n        V P                  P(                  V P                  P*                  ,          V n        V P                  P.                  V P                  P0                  ,          V n        \        ^V P                  ^,          ^,          ,          4      V n        \        ^V P                  ^,          ^,          ,          4      V n        \        ^V P                  ^,          ^,          ,          4      V n        V P                  R,          V n        RV n        R# )r   zThe hidden size z4 is not a multiple of the number of attention heads Ú.©ÚbiasFNç      à¿)r:   rT   rJ   rK   r¾   Ú
ValueErrorrM   Úattention_head_sizeÚall_head_sizer   ÚLinearÚqkv_biasrŒ   r�   rŽ   rY   Úattention_probs_dropout_probÚdropout_probÚDropoutr‘   r`   rU   Ú	grid_sizer_   rV   Ú
grid_depthÚd_dimÚh_dimÚw_dimr�   Ú	is_causal)r=   rJ   rK   r¾   r?   s   &&&&€r'   rT   ÚVJEPA2RopeAttention.__init__Ð   sÄ  ø€ ô 	‰ÑÔØŒØ&ÔØ#6Ô ØÕ,°Ô1ÜØ" K >Ð"2ð 3Ø,Ð-¨Qð0óð ô
 $' {Õ'HÓ#IˆÔ Ø!×5Ñ5¸×8PÑ8PÕPˆÔä—Y’Y˜{×,>Ñ,>ÀVÇ_Á_ÔUˆŒ
Ü—9’9˜[×*<Ñ*<À6Ç?Á?ÔSˆŒÜ—Y’Y˜{×,>Ñ,>ÀVÇ_Á_ÔUˆŒ
ä—I’I˜kÓ7ˆŒ	Ø"×?Ñ?ˆÔÜ—z’z $×"3Ñ"3Ó4ˆŒàŸ™×.Ñ.°$·+±+×2HÑ2HÕHˆŒØŸ+™+×5Ñ5¸¿¹×9QÑ9QÕQˆŒä˜˜t×7Ñ7¸1Õ<ÀÕBÕCÓDˆŒ
Ü˜˜t×7Ñ7¸1Õ<ÀÕBÕCÓDˆŒ
Ü˜˜t×7Ñ7¸1Õ<ÀÕBÕCÓDˆŒ
à×/Ñ/°Õ5ˆŒØˆŽr*   c                ó^   € \        V P                  V P                  ,          4      pW,          # r]   )rM   rÍ   )r=   ÚidsÚtokens_per_frames   && r'   Ú_get_frame_posÚ"VJEPA2RopeAttention._get_frame_posõ   s#   € Ü˜tŸ~™~°·±Õ>Ó?ÐØÕ&Ð&r*   c                ó¶   € \        V P                  V P                  ,          4      pV P                  V4      pWV,          ,
          pV P                  pW,          # r]   )rM   rÍ   r×   )r=   rÕ   rÖ   Ú	frame_idsÚtokens_per_rows   &&   r'   Ú_get_height_posÚ#VJEPA2RopeAttention._get_height_posù   sI   € ä˜tŸ~™~°·±Õ>Ó?ÐØ×'Ñ'¨Ó,ˆ	Ø yÕ0Õ0ˆàŸ™ˆØÕ$Ð$r*   c                ó´  € VP                   pVP                  ^4      pVe.   VP                  ^4      P                  ^V P                  ^4      pM\
        P                  ! WCR7      p\        V P                  V P                  ,          4      pV P                  V4      pV P                  pV P                  V4      p	WVV,          ,
          W‰,          ,
          p
WyV
3# )r7   ©r¤   )r¤   r¦   r¨   r‚   r¾   r"   r§   rM   rÍ   r×   rÜ   )r=   rm   Úmasksr¤   Ú
token_sizerÕ   rÖ   rÚ   rÛ   Ú
height_idsÚ	width_idss   &&&        r'   Úget_position_idsÚ$VJEPA2RopeAttention.get_position_ids  s´   € Ø—‘ˆØ—V‘V˜A“Yˆ
ð ÒØ—/‘/ !Ó$×+Ñ+¨A¨t×/GÑ/GÈÓK‰Cä—,’,˜zÔ9ˆCä˜tŸ~™~°·±Õ>Ó?ÐØ×'Ñ'¨Ó,ˆ	àŸ™ˆØ×)Ñ)¨#Ó.ˆ
ð ¨iÕ7Õ7¸>Õ;VÕVˆ	Ø iÐ/Ð/r*   c                ó  € Vw  r4p^ p\        VRWfV P                  ,           13,          VR7      pW`P                  ,          p\        VRWfV P                  ,           13,          VR7      pW`P                  ,          p\        VRWfV P                  ,           13,          VR7      p	W`P                  ,          pW`P                  8  d*   VRVR13,          p
\
        P                  ! WxWš.RR7      pV# \
        P                  ! WxV	.RR7      pV# )r   .)r®   Nr¥   r8   )rº   rÏ   rÐ   rÑ   rÆ   r"   Úcat)r=   ÚqkÚpos_idsÚd_maskÚh_maskÚw_maskÚsÚqkdÚqkhÚqkwÚqkrs   &&&        r'   Úapply_rotary_embeddingsÚ+VJEPA2RopeAttention.apply_rotary_embeddings  sç   € Ø!(Ñˆ˜ØˆÜ$ R¨¨Q°T·Z±ZµÐ-?Ð(?Õ%@ÀfÔMˆØ	�Z‰Z�ˆÜ$ R¨¨Q°T·Z±ZµÐ-?Ð(?Õ%@ÀfÔMˆØ	�Z‰Z�ˆÜ$ R¨¨Q°T·Z±ZµÐ-?Ð(?Õ%@ÀfÔMˆØ	�Z‰Z�ˆà×'Ñ'Ô'Ø�S˜!™"�W•+ˆCÜ—’˜C cÐ/°RÔ8ˆBð ˆ	ô —’˜C c˜?°Ô3ˆBØˆ	r*   c                ó†   <€ V ^8„  d   QhRS[ P                  R,          RS[S[ P                  S[ P                  3,          /# )r   Úposition_maskNrg   ©r"   ri   r$   )r%   r&   s   "€r'   r(   r¿   (  s<   ø€ ÷ !.ñ !.ñ —|‘| dÕ*ð!.ñ 
‰u�|‰|™UŸ\™\Ð)Õ	*ñ	!.r*   c                óD  € 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V P                  WR7      pV P                  Wh4      pV P                  WX4      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
P+                  V4      4      p
W«3# )N)rà   ç        ©rÒ   r�   r‘   r8   r˜   )r€   rÆ   rŒ   Úviewrl   r�   rŽ   rä   rò   r   Úget_interfacerJ   Ú_attn_implementationr¡   rÒ   r�   r—   rË   r¦   rÇ   rY   Úreshape)r=   r   rõ   Úinput_shapeÚhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerré   Úattention_interfaceÚcontext_layerÚattention_probsÚnew_context_layer_shapes   &&&          r'   rn   ÚVJEPA2RopeAttention.forward(  s€  € ð
 $×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆØ—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆØ—H‘H˜]Ó+×0Ñ0°Ó>×HÑHÈÈAÓNˆ	Ø—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆà×'Ñ'¨Ð'ÓKˆØ×0Ñ0°ÓDˆ	Ø×2Ñ2°;ÓHˆä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ *=ØØØØØØ—n‘nØ—L‘LØ#Ÿ}Ÿ}˜}‘C°$×2CÑ2Cô	*
Ñ&ˆð #0×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÕ"SÐØŸ	™	 -×"7Ñ"7Ð8OÓ"PÓQˆàÐ-Ð-r*   )rÇ   rÆ   rJ   rÏ   r‘   rË   rÎ   rÍ   rÐ   rK   rÒ   r�   r¾   rY   rŒ   r�   rŽ   rÑ   )rq   é   r]   )r,   r-   r.   r/   rT   r×   rÜ   rä   rò   rn   r2   r3   rD   rE   s   @@r'   r¼   r¼   Ï   s3   ù‡ € ÷#õ #òJ'ò%ô0ò*÷"!.÷ !.ò !.r*   r¼   c                   óT   a a€ ] tR tRt oRV3R lV 3R llltV3R lR ltRtVtV ;t# )Ú	VJEPA2MLPiL  c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   rJ   rK   Ú	mlp_ratio)r   rM   r“   )r%   r&   s   "€r'   r(   ÚVJEPA2MLP.__annotate__M  s(   ø€ ÷ Gñ G™|ð G¹#ð GÑQVñ Gr*   c                óø   <€ \         SV `  4        T;rE\        W#,          4      p\        P                  ! WFR R7      V n        \        VP                  ,          V n        \        P                  ! WeR R7      V n	        R# ©TrÂ   N)
r:   rT   rM   r   rÈ   Úfc1r   Ú
hidden_actÚ
activationÚfc2)r=   rJ   rK   r  Úin_featuresÚout_featuresÚhidden_featuresr?   s   &&&&   €r'   rT   ÚVJEPA2MLP.__init__M  sY   ø€ Ü‰ÑÔØ%0Ð0ˆÜ˜kÕ5Ó6ˆÜ—9’9˜[ÀÔEˆŒÜ  ×!2Ñ!2Õ3ˆŒÜ—9’9˜_ÀÔFˆŽr*   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r   Úhidden_staterg   rh   )r%   r&   s   "€r'   r(   r  U  s#   ø€ ÷ ñ ¡E§L¡Lð ±U·\±\ñ r*   c                ól   € V P                  V4      pV P                  V4      pV P                  V4      pV# r]   )r  r  r  )r=   r  s   &&r'   rn   ÚVJEPA2MLP.forwardU  s2   € Ø—x‘x Ó-ˆØ—‘ |Ó4ˆØ—x‘x Ó-ˆØÐr*   )r  r  r  )rq   ç      @©	r,   r-   r.   r/   rT   rn   r2   r3   rD   rE   s   @@r'   r
  r
  L  s    ù‡ € ÷Gõ G÷÷ ð r*   r
  c                   ój   a a€ ] tR tRt oRtR
V3R lV 3R llltV3R lR ltV3R lR ltR	tVt	V ;t
# )ÚVJEPA2DropPathi]  zÃStochastic depth (DropPath) per sample, for residual blocks.

Identity when ``drop_prob`` is 0 or outside training. See `Deep Networks with Stochastic Depth
<https://arxiv.org/abs/1603.09382>`_.
c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   Ú	drop_probrg   N)r“   )r%   r&   s   "€r'   r(   ÚVJEPA2DropPath.__annotate__d  s   ø€ ÷ #ñ #¡%ð #°$ñ #r*   c                ó0   <€ \         SV `  4        Wn        R # r]   )r:   rT   r"  )r=   r"  r?   s   &&€r'   rT   ÚVJEPA2DropPath.__init__d  s   ø€ Ü‰ÑÔØ"Žr*   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   r   rg   rh   )r%   r&   s   "€r'   r(   r#  h  s#   ø€ ÷ <ñ <¡U§\¡\ð <±e·l±lñ <r*   c                ó˜  € V P                   R 8X  g   V P                  '       g   V# ^V P                   ,
          pVP                  ^ ,          3RVP                  ^,
          ,          ,           p\        P
                  ! W1P                  VP                  R7      p\        P                  ! WB,           4      pVP                  V4      V,          # )rø   r£   ©r7   )
r"  r—   r€   Úndimr"   Úrandr   r¤   ÚfloorÚdiv)r=   r   Ú	keep_probr€   Úrandom_tensors   &&   r'   rn   ÚVJEPA2DropPath.forwardh  s•   € Ø�>‰>˜SÔ ¨¯¯¨Ø Ð Ø˜Ÿ™Õ&ˆ	Ø×$Ñ$ QÕ'Ð)¨D°M×4FÑ4FÈÕ4JÕ,KÕKˆÜŸ
š
 5×0CÑ0CÈM×L`ÑL`ÔaˆÜŸš MÕ$=Ó>ˆØ× Ñ  Ó+¨mÕ;Ð;r*   c                ó    <€ V ^8„  d   QhRS[ /# ©r   rg   )Ústr)r%   r&   s   "€r'   r(   r#  q  s   ø€ ÷ %ñ %™Cñ %r*   c                ó    € R V P                    2# )zp=©r"  ©r=   s   &r'   Ú
extra_reprÚVJEPA2DropPath.extra_reprq  s   € Ø�D—N‘NÐ#Ð$Ð$r*   r4  ©rø   )r,   r-   r.   r/   r0   rT   rn   r6  r2   r3   rD   rE   s   @@r'   r   r   ]  s-   ù‡ € ñ÷#õ #÷<ð <÷%÷ %ð %r*   r   c                   ó\   a a€ ] tR tRt oRtRV3R lV 3R llltR	V3R lR lltRtVtV ;t	# )
ÚVJEPA2Layeriu  zCThis corresponds to the Block class in the original implementation.c          
      ó8   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[/# )r   rJ   Údrop_path_raterK   r¾   r  )r   r“   rM   )r%   r&   s   "€r'   r(   ÚVJEPA2Layer.__annotate__x  sD   ø€ ÷ Sñ SáðSñ ðSñ ð	Sñ
 !ðSñ ñSr*   c                óž  <€ \         SV `  4        Wn        W0n        W@n        WPn        \        P                  ! W1P                  R 7      V n	        \        WV4      V n        VP                  R8”  d   \        V4      M\        P                  ! 4       V n        \        P                  ! W1P                  R 7      V n        \#        WVR7      V n        R# )©Úepsrø   )rK   r  N)r:   rT   rJ   rK   r¾   r  r   Ú	LayerNormÚlayer_norm_epsÚnorm1r¼   Ú	attentionr<  r   ÚIdentityÚ	drop_pathÚnorm2r
  Úmlp)r=   rJ   r<  rK   r¾   r  r?   s   &&&&&&€r'   rT   ÚVJEPA2Layer.__init__x  s•   ø€ ô 	‰ÑÔØŒØ&ÔØ#6Ô Ø"Œä—\’\ +×3HÑ3HÔIˆŒ
Ü,¨VÐBUÓVˆŒØ;A×;PÑ;PÐSVÔ;Vœ¨Ô7Ô\^×\gÒ\gÓ\iˆŒÜ—\’\ +×3HÑ3HÔIˆŒ
Ü˜VÈ	ÔRˆŽr*   c          
      ó    <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[S[ P                  R3,          /# )r   r   rõ   Nrž   rg   .)r"   ri   r   r   r$   )r%   r&   s   "€r'   r(   r=  Œ  sT   ø€ ÷ +ñ +á—|‘|ð+ñ —|‘| dÕ*ð+ñ Ñ+Õ,ð	+ñ
 
‰u�|‰|˜SÐ Õ	!ñ+r*   c                ó   € TpV P                  V4      pV P                  VVR 7      w  rVV P                  V4      V,           pTpV P                  V4      pV P	                  V4      pV P                  V4      V,           pW3# ))rõ   )rC  rD  rF  rG  rH  )r=   r   rõ   rž   ÚresidualÚattention_outputrŸ   s   &&&,   r'   rn   ÚVJEPA2Layer.forwardŒ  s‹   € ð !ˆØŸ
™
 =Ó1ˆØ)-¯©ØØ'ð *8ó *
Ñ&Ðð Ÿ™Ð'7Ó8¸8ÕCˆð !ˆØŸ
™
 =Ó1ˆØŸ™ Ó/ˆØŸ™ }Ó5¸Õ@ˆð Ð*Ð*r*   )	rD  rJ   rF  rK   rH  r  rC  rG  r¾   )rø   rq   r  r  r]   r‰   rE   s   @@r'   r:  r:  u  s#   ù‡ € ÙM÷Sõ S÷(+÷ +ò +r*   r:  c                   óT   a a€ ] tR tR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# )ÚVJEPA2Encoderi¥  c                ó    <€ V ^8„  d   QhRS[ /# ©r   rJ   r   )r%   r&   s   "€r'   r(   ÚVJEPA2Encoder.__annotate__¦  s   ø€ ÷ ,ñ ,™|ñ ,r*   c                óŠ  <€ \         SV `  4        Wn        \        WP                  R 7      V n        \        VP                  4       Uu. uFA  pVP                  ^8”  d,   VP                  V,          VP                  ^,
          ,          MRNKC  	  pp\        P                  ! \        VP                  4       Uu. uF7  p\        VW2,          VP                  VP                  VP                  R7      NK9  	  up4      V n        \        P                  ! VP                  VP                   R7      V n        RV n        R# u upi u upi )rz   rø   ©r<  rK   r¾   r  r?  FN)r:   rT   rJ   ru   rK   r‡   ÚrangeÚnum_hidden_layersr<  r   Ú
ModuleListr:  r¾   r  ÚlayerrA  rB  Ú	layernormÚgradient_checkpointing©r=   rJ   ÚiÚdrop_path_ratesr?   s   &&  €r'   rT   ÚVJEPA2Encoder.__init__¦  s  ø€ Ü‰ÑÔØŒä*¨6×?QÑ?QÔRˆŒô ˜6×3Ñ3Ô4ó
á4�ð LR×KcÑKcÐfgÔKgˆV×"Ñ" QÕ&¨&×*BÑ*BÀQÕ*FÖGÐmpÒpÙ4ð 	ð 
ô —]’]ô ˜v×7Ñ7Ô8ó	ñ 9�Aô ØØ#2Õ#5Ø &× 2Ñ 2Ø(.×(BÑ(BØ$×.Ñ.÷ñ 9ñ	ó
ˆŒ
ô Ÿš f×&8Ñ&8¸f×>SÑ>SÔTˆŒØ&+ˆÖ#ùò#
ùò
	s   ÁAD;Â8=E c                ó^   <€ V ^8„  d   QhRS[ P                  R,          RS[S[,          RS[/# )r   rf   Nrž   rg   )r"   ri   r   r   r	   )r%   r&   s   "€r'   r(   rS  ¾  s8   ø€ ÷ 
ñ 
á"Ÿ\™\¨DÕ0ð
ñ Ñ+Õ,ð
ñ 
ñ	
r*   c                óÀ   € V P                  V4      p\        V P                  4       F  w  rEV! VR 3/ VB pV^ ,          pK  	  V P                  V4      p\	        VR7      # )N©r   )r‡   Ú	enumeraterY  rZ  r	   )r=   rf   rž   r   r]  Úlayer_moduleÚlayer_outputss   &&,    r'   rn   ÚVJEPA2Encoder.forward¾  sc   € ð
 Ÿ™Ð(;Ó<ˆä(¨¯©Ö4‰OˆAÙ(¨¸ÑGÀÑGˆMØ)¨!Õ,ŠMñ  5ð Ÿ™ }Ó5ˆäØ+ô
ð 	
r*   )rJ   r‡   r[  rY  rZ  r]   r  rE   s   @@r'   rP  rP  ¥  s   ù‡ € ÷,ó ,÷0
÷ 
ò 
r*   rP  c                óŽ   € V ^8„  d   QhR\         P                  R\        \         P                  ,          R\         P                  /# )r   Útensorrà   rg   )r"   ri   r9   )r%   s   "r'   r(   r(   Ð  s2   € ÷ 0ñ 0œŸ™ð 0¬T´%·,±,Õ-?ð 0ÄEÇLÁLñ 0r*   c                ó"  € . pV Fp  pVP                  V P                  4      pVP                  R4      P                  ^^V P	                  R4      4      pV\
        P                  ! V ^VR7      .,          pKr  	  \
        P                  ! V^ R7      # )zæ
Args:
    tensor (`torch.Tensor`):
        Tensor of shape [batch_size, num_patches, feature_dim]
    masks (`List[torch.Tensor]`):
        List of tensors of shape [batch_size, num_patches] containing indices of patches to keep
©r•   Úindexr¥   r8   )r„   r¤   r¨   r‚   r¦   r"   Úgatherrç   )rh  rà   Úall_masked_tensorsÚmaskÚ	mask_keeps   &&   r'   Úapply_masksrp  Ð  sz   € ð ÐÛˆØ�w‰w�v—}‘}Ó%ˆØ—N‘N 2Ó&×-Ñ-¨a°°F·K±KÀ³OÓDˆ	ØœuŸ|š|¨F¸ÀÔKÐLÕLÒñ ô
 �9Š9Ð'¨QÔ/Ð/r*   c                   óh   a a€ ] tR tRt oRtV3R lV 3R llt]R 4       tR	V3R lR lltRt	Vt
V ;t# )
ÚVJEPA2PredictorEmbeddingsiá  rv   c                ó    <€ V ^8„  d   QhRS[ /# rR  r   )r%   r&   s   "€r'   r(   Ú&VJEPA2PredictorEmbeddings.__annotate__æ  s   ø€ ÷ ñ ™|ñ r*   c                óœ  <€ \         SV `  4        Wn        \        P                  ! VP
                  VP                  4      V n        ^ V n        VP                  V n
        VP                  V n        \        P                  ! \        P                  ! V P                  ^^VP                  4      4      V n        VP                   V n        Wn        R# )r   N)r:   rT   rJ   r   rÈ   rK   Úpred_hidden_sizeÚpredictor_embeddingsÚnum_mask_tokensÚpred_zero_init_mask_tokensÚzero_init_mask_tokensÚpred_num_mask_tokensÚ	Parameterr"   ÚzerosÚmask_tokensrU   ©r=   rJ   r?   s   &&€r'   rT   Ú"VJEPA2PredictorEmbeddings.__init__æ  s•   ø€ Ü‰ÑÔàŒÜ$&§I¢I¨f×.@Ñ.@À&×BYÑBYÓ$ZˆÔ!Ø ˆÔØ%+×%FÑ%FˆÔ"Ø%×:Ñ:ˆÔÜŸ<š<¬¯ª°D×4HÑ4HÈ!ÈQÐPV×PgÑPgÓ(hÓiˆÔà ×+Ñ+ˆŒØŽr*   c                ód  € V P                   ^8”  db   V P                   V P                  ,          V P                  V P                  ,          ,          V P                  V P                  ,          ,          # V P                  V P                  ,          V P                  V P                  ,          ,          # r(  r^   ra   s   &r'   rb   Ú%VJEPA2PredictorEmbeddings.num_patchesó  s‹   € à×!Ñ! AÔ%à×'Ñ'¨6×+>Ñ+>Õ>Ø×#Ñ# v×'8Ñ'8Õ8õ:à×#Ñ# v×'8Ñ'8Õ8õ:ðð ×$Ñ$¨×(9Ñ(9Õ9¸f×>NÑ>NÐRX×RcÑRcÕ>cÕdÐdr*   c                óÒ   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  ,          RS[S[ P                  ,          RS[RS[S[ P                  S[ P                  3,          /# )r   r   Úcontext_maskÚtarget_maskÚ
mask_indexrg   )r"   ri   r9   rM   r$   )r%   r&   s   "€r'   r(   rt  þ  se   ø€ ÷ &!ñ &!á—|‘|ð&!ñ ™5Ÿ<™<Õ(ð&!ñ ™%Ÿ,™,Õ'ð	&!ñ
 ð&!ñ 
‰u�|‰|™UŸ\™\Ð)Õ	*ñ&!r*   c                ó  € VP                  ^ 4      pV P                  V4      pW@P                  ,          pV P                  V,          pV^ ,          P	                  4       ^,           pVP                  WX^4      p\        Ws4      pVP                  \        V4      ^^4      p\        P                  ! Wg.^R7      p	\        P                  ! V^ R7      p
\        P                  ! V^ R7      p\        P                  ! W«.^R7      pWœ3# )zÐ
hidden_states : encoder outputs (context)
context_mask: tokens of the context (outputs from the encoder)
target_mask: tokens to predict
mask_index: index of the target mask to choose (useful for multiclip?)
r¥   )
r¦   rw  rx  r~  Úmaxr‚   rp  Úlenr"   rç   )r=   r   r„  r…  r†  r¯   ÚcontextÚtargetÚmax_patch_numr‡   ÚcmÚtmrà   s   &&&&&        r'   rn   Ú!VJEPA2PredictorEmbeddings.forwardþ  sà   € ð ×Ñ˜qÓ!ˆØ×+Ñ+¨MÓ:ˆð  ×"6Ñ"6Õ6ˆ
Ø×!Ñ! *Õ-ˆð $ A�×*Ñ*Ó,¨qÕ0ˆØ—‘˜q°Ó3ˆÜ˜VÓ1ˆð —.‘.¤ \Ó!2°A°qÓ9ˆÜ—Y’Y Ð0°aÔ8ˆ
ô �YŠY�|¨Ô+ˆÜ�YŠY�{¨Ô*ˆÜ—	’	˜2˜(¨Ô*ˆàÐ Ð r*   )rJ   r~  rx  rU   rw  rz  r(  rr   rE   s   @@r'   rr  rr  á  s9   ù‡ € ñ÷ó ð ñeó ðe÷&!÷ &!ò &!r*   rr  c                   ó\   a a€ ] tR tRt oV3R lV 3R lltR tR tV3R lR ltRtVt	V ;t
# )	ÚVJEPA2Predictori'  c                ó    <€ V ^8„  d   QhRS[ /# rR  r   )r%   r&   s   "€r'   r(   ÚVJEPA2Predictor.__annotate__(  s   ø€ ÷ Vñ V™|ñ Vr*   c                óØ  <€ \         SV `  4        Wn        R V n        \	        V4      V n        \        VP                  4       Uu. uFA  pVP                  ^8”  d,   VP                  V,          VP                  ^,
          ,          MRNKC  	  pp\        P                  ! \        VP                  4       Uu. uF7  p\        VW2,          VP                  VP                  VP                  R7      NK9  	  up4      V n        \        P                   ! VP                  VP"                  R7      V n        \        P&                  ! VP                  VP(                  RR7      V n        R# u upi u upi )Frø   rU  r?  TrÂ   N)r:   rT   rJ   r[  rr  r‡   rV  Úpred_num_hidden_layersr<  r   rX  r:  rv  Úpred_num_attention_headsÚpred_mlp_ratiorY  rA  rB  rZ  rÈ   rK   rY   r\  s   &&  €r'   rT   ÚVJEPA2Predictor.__init__(  s=  ø€ Ü‰ÑÔØŒØ&+ˆÔ#Ü3°FÓ;ˆŒô ˜6×8Ñ8Ô9ó
ñ :�ð ×0Ñ0°1Ô4ð ×%Ñ%¨Õ)¨V×-JÑ-JÈQÕ-NÖOàòñ :ð 	ð 
ô —]’]ô ˜v×<Ñ<Ô=ó	ñ >�Aô ØØ#2Õ#5Ø &× 7Ñ 7Ø(.×(GÑ(GØ$×3Ñ3÷ñ >ñ	ó
ˆŒ
ô Ÿš f×&=Ñ&=À6×CXÑCXÔYˆŒÜ—I’I˜f×5Ñ5°v×7IÑ7IÐPTÔUˆŽ	ùò+
ùò	s   ÁAE"Â4=E'c                ó:  € VP                  VP                  4      p\        P                  ! V^VR7      pVP                  VP                  4      pVP	                  R4      P                  RRVP                  R4      4      p\        P                  ! V^VR7      pW3# )r7   rj  r8   )r„   r¤   r"   rl  r¨   Úexpandr¦   )r=   r   Úposition_masksÚargsortÚhidden_states_argsorts   &&&& r'   Úsort_tokensÚVJEPA2Predictor.sort_tokensD  s†   € à—*‘*˜^×2Ñ2Ó3ˆÜŸš n¸!À7ÔKˆð —*‘*˜]×1Ñ1Ó2ˆØ '× 1Ñ 1°"Ó 5× <Ñ <¸RÀÀ]×EWÑEWÐXZÓE[Ó \ÐÜŸš ]¸ÐAVÔWˆàÐ,Ð,r*   c                ó   € VP                  VP                  4      p\        P                  ! V^R7      pVP	                  R4      P                  RRVP                  R4      4      p\        P                  ! V^VR7      pV# )r7   r¥   rj  r8   )r„   r¤   r"   rœ  r¨   rš  r¦   rl  )r=   r   rœ  Úreverse_argsorts   &&& r'   Úunsort_tokensÚVJEPA2Predictor.unsort_tokensP  si   € Ø—*‘*˜]×1Ñ1Ó2ˆÜŸ-š-¨°QÔ7ˆØ)×3Ñ3°BÓ7×>Ñ>¸rÀ2À}×GYÑGYÐZ\ÓG]Ó^ˆÜŸš ]¸ÀÔQˆØÐr*   c          
      ó¤   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  ,          RS[S[ P                  ,          RS[S[,          RS[/# )r   Úencoder_hidden_statesr„  r…  rž   rg   )r"   ri   r9   r   r   r	   )r%   r&   s   "€r'   r(   r“  W  sY   ø€ ÷ 
ñ 
á$Ÿ|™|ð
ñ ™5Ÿ<™<Õ(ð
ñ ™%Ÿ,™,Õ'ð	
ñ
 Ñ+Õ,ð
ñ 
ñ
r*   c                ó®  € \        W4      pVP                  w  rVpV P                  WV4      w  r‰\        P                  ! V	^R7      p
V P                  W‰V
4      w  r‰\        V P                  4       F  w  r¼V! W‰3/ VB pV^ ,          pK  	  V P                  V4      pV P                  WŠ4      pVRVR13,          pV P                  V4      p\        VR7      # )r7   r¥   :NNNNrb  )rp  r€   r‡   r"   rœ  rž  rc  rY  rZ  r¢  rY   r	   )r=   r¥  r„  r…  rž   Ú_ÚN_ctxtr²   r   r›  rœ  r]  rd  re  s   &&&&,         r'   rn   ÚVJEPA2Predictor.forwardW  sØ   € ô !,Ð,AÓ PÐØ,×2Ñ2‰ˆ�1Ø(,¯©Ð8MÐ]hÓ(iÑ%ˆô —-’- °AÔ6ˆØ(,×(8Ñ(8¸ÐX_Ó(`Ñ%ˆä(¨¯©Ö4‰OˆAÙ(¨ÑQÈ&ÑQˆMØ)¨!Õ,ŠMñ  5ð Ÿ™ }Ó5ˆà×*Ñ*¨=ÓBˆØ% a¨© jÕ1ˆàŸ	™	 -Ó0ˆäØ+ô
ð 	
r*   )rJ   r‡   r[  rY  rZ  rY   )r,   r-   r.   r/   rT   rž  r¢  rn   r2   r3   rD   rE   s   @@r'   r‘  r‘  '  s*   ù‡ € ÷Vó Vò8
-ò÷
÷ 
ð 
r*   r‘  c                   óX   a a€ ] tR tRt oRt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	# )	ÚVJEPA2PoolerSelfAttentionix  z=Multi-headed attention from 'Attention Is All You Need' paperc                ó    <€ V ^8„  d   QhRS[ /# rR  r   )r%   r&   s   "€r'   r(   Ú&VJEPA2PoolerSelfAttention.__annotate__{  s   ø€ ÷ Bñ B™|ñ Br*   c                ó<  <€ \         SV `  4        Wn        VP                  V n        VP
                  V n        V P                  V P                  ,          V n        V P                  V P                  ,          V P                  8w  d'   \        R V P                   RV P                   R24      hV P                  R,          V n	        VP                  V n        RV n        \        P                  ! V P                  V P                  4      V n        \        P                  ! V P                  V P                  4      V n        \        P                  ! V P                  V P                  4      V n        \        P                  ! V P                  V P                  4      V n        R# ©z;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).FNrÄ   )r:   rT   rJ   rK   Ú	embed_dimr¾   r°   Úhead_dimrÅ   ÚscaleÚattention_dropoutr‘   rÒ   r   rÈ   Úk_projÚv_projÚq_projÚout_projr  s   &&€r'   rT   Ú"VJEPA2PoolerSelfAttention.__init__{  s  ø€ Ü‰ÑÔØŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Õ8ˆŒØ�=‰=˜4Ÿ>™>Õ)¨T¯^©^Ô;ÜØMÈdÏnÉnÐM]ð ^Ø—N‘NÐ# 2ð'óð ð —]‘] DÕ(ˆŒ
Ø×/Ñ/ˆŒØˆŒä—i’i §¡°·±Ó?ˆŒÜ—i’i §¡°·±Ó?ˆŒÜ—i’i §¡°·±Ó?ˆŒÜŸ	š	 $§.¡.°$·.±.ÓAˆŽr*   c                ó    <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[ P                  S[ P                  3,          /# )r   r   r�   Nrg   rö   )r%   r&   s   "€r'   r(   r­  �  sH   ø€ ÷ )ñ )á—|‘|ð)ñ Ÿ™ tÕ+ð)ñ 
‰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TV P                  V P                  V P                  '       g   RMV P                  R7      w  ršV	P                   ! . VORN5!  P#                  4       p	V P%                  V	4      p	Wš3# )ú#Input shape: Batch x Time x ChannelNrø   rù   r8   )r€   r±  r¶  rú   rl   r´  rµ  r   rû   rJ   rü   r¡   rÒ   r²  r—   r‘   rý   r�   r·  )r=   r   r�   rþ   rÿ   ÚqueriesÚkeysÚvaluesr  r    rŸ   s   &&&        r'   rn   Ú!VJEPA2PoolerSelfAttention.forward�  s8  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆØ—+‘+˜mÓ,×1Ñ1°,Ó?×IÑIÈ!ÈQÓOˆØ�{‰{˜=Ó)×.Ñ.¨|Ó<×FÑFÀqÈ!ÓLˆØ—‘˜]Ó+×0Ñ0°Ó>×HÑHÈÈAÓNˆä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØØ—n‘nØ—J‘JØ#Ÿ}Ÿ}˜}‘C°$·,±,ô	%
Ñ!ˆð "×)Ò)Ð;¨;Ð;¸Ó;×FÑFÓHˆØ—m‘m KÓ0ˆàÐ(Ð(r*   )rJ   r‘   r°  r±  rÒ   r´  r°   r·  r¶  r²  rµ  r]   r‰   rE   s   @@r'   r«  r«  x  s#   ù‡ € ÙG÷Bó B÷()÷ )ò )r*   r«  c                   óX   a a€ ] tR tRt oRt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	# )	ÚVJEPA2PoolerCrossAttentioni°  z_It's different from other cross-attention layers, doesn't have output projection layer (o_proj)c                ó    <€ V ^8„  d   QhRS[ /# rR  r   )r%   r&   s   "€r'   r(   Ú'VJEPA2PoolerCrossAttention.__annotate__µ  s   ø€ ÷ @ñ @™|ñ @r*   c                óÜ  <€ \         SV `  4        Wn        VP                  V n        VP
                  V n        V P                  V P                  ,          V n        V P                  V P                  ,          V P                  8w  d'   \        R V P                   RV P                   R24      hV P                  R,          V n	        VP                  V n        RV n        \        P                  ! V P                  V P                  4      V n        \        P                  ! V P                  V P                  4      V n        \        P                  ! V P                  V P                  4      V n        R# r¯  )r:   rT   rJ   rK   r°  r¾   r°   r±  rÅ   r²  r³  r‘   rÒ   r   rÈ   r´  rµ  r¶  r  s   &&€r'   rT   Ú#VJEPA2PoolerCrossAttention.__init__µ  sþ   ø€ Ü‰ÑÔØŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Õ8ˆŒØ�=‰=˜4Ÿ>™>Õ)¨T¯^©^Ô;ÜØMÈdÏnÉnÐM]ð ^Ø—N‘NÐ# 2ð'óð ð —]‘] DÕ(ˆŒ
Ø×/Ñ/ˆŒØˆŒä—i’i §¡°·±Ó?ˆŒÜ—i’i §¡°·±Ó?ˆŒÜ—i’i §¡°·±Ó?ˆŽr*   c                óÔ   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  RS[ P                  R,          RS[S[ P                  S[ P                  3,          /# )r   r¼  r½  r¾  r�   Nrg   rö   )r%   r&   s   "€r'   r(   rÃ  È  sd   ø€ ÷ %)ñ %)á—‘ð%)ñ �l‰lð%)ñ —‘ð	%)ñ
 Ÿ™ tÕ+ð%)ñ 
‰u�|‰|™UŸ\™\Ð)Õ	*ñ%)r*   c                ó"  € VP                   w  rVpVP                   ^,          pV P                  V4      pV P                  V4      pV P                  V4      pVP	                  WVV P
                  V P                  4      P                  ^^4      pVP	                  WXV P
                  V P                  4      P                  ^^4      pVP	                  WXV P
                  V P                  4      P                  ^^4      p\        P                  ! V P                  P                  \        4      p	T	! T TTTTV P                  V P                  V P                  '       g   RMV P                   R7      w  r«V
P#                  WVV4      P%                  4       p
W«3# )r»  rø   rù   )r€   r¶  r´  rµ  rú   r°   r±  rl   r   rû   rJ   rü   r¡   rÒ   r²  r—   r‘   rý   r�   )r=   r¼  r½  r¾  r�   Ú
batch_sizeÚq_seq_lengthr°  Úkv_seq_lengthr  r    rŸ   s   &&&&&       r'   rn   Ú"VJEPA2PoolerCrossAttention.forwardÈ  sH  € ð /6¯m©mÑ+ˆ
 )ØŸ
™
 1�ˆà—+‘+˜gÓ&ˆØ�{‰{˜4Ó ˆØ—‘˜VÓ$ˆà—,‘,˜z¸¿¹ÈÏÉÓW×aÑaÐbcÐefÓgˆØ�y‰y˜°D·N±NÀDÇMÁMÓR×\Ñ\Ð]^Ð`aÓbˆØ—‘˜Z¸¿¹ÈÏÉÓV×`Ñ`ÐabÐdeÓfˆä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØØ—n‘nØ—J‘JØ#Ÿ}Ÿ}˜}‘C°$·,±,ô	%
Ñ!ˆð "×)Ñ)¨*ÀIÓN×YÑYÓ[ˆàÐ(Ð(r*   )
rJ   r‘   r°  r±  rÒ   r´  r°   r¶  r²  rµ  r]   r‰   rE   s   @@r'   rÁ  rÁ  °  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# )ÚVJEPA2PoolerSelfAttentionLayeriñ  c                ó    <€ V ^8„  d   QhRS[ /# rR  r   )r%   r&   s   "€r'   r(   Ú+VJEPA2PoolerSelfAttentionLayer.__annotate__ò  ó   ø€ ÷ Eñ E™|ñ Er*   c                ó>  <€ \         SV `  4        \        P                  ! VP                  VP
                  R 7      V n        \        V4      V n        \        P                  ! VP                  VP
                  R 7      V n	        \        WP                  R7      V n        R# ©r?  rz   N)r:   rT   r   rA  rK   rB  Úlayer_norm1r«  Ú	self_attnÚlayer_norm2r
  rH  r  s   &&€r'   rT   Ú'VJEPA2PoolerSelfAttentionLayer.__init__ò  sj   ø€ Ü‰ÑÔÜŸ<š<¨×(:Ñ(:À×@UÑ@UÔVˆÔÜ2°6Ó:ˆŒÜŸ<š<¨×(:Ñ(:À×@UÑ@UÔVˆÔÜ˜V×1CÑ1CÔDˆŽr*   c                ó’   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[S[ P                  S[ P                  3,          /# )r   r   r�   rg   rö   )r%   r&   s   "€r'   r(   rÏ  ù  sC   ø€ ÷ +ñ +á—|‘|ð+ñ Ÿ™ð+ñ 
‰u�|‰|™UŸ\™\Ð)Õ	*ñ	+r*   c                óÀ   € TpV P                  V4      pV P                  VVR7      w  rW1,           pTpV P                  V4      pV P                  V4      pW1,           pW3# )a"  
Args:
    hidden_states (`torch.FloatTensor`):
        Input to the layer of shape `(batch, seq_len, embed_dim)`.
    attention_mask (`torch.FloatTensor`):
        Attention mask of shape `(batch, 1, q_len, k_v_seq_len)` where padding elements are indicated by very large negative values.
)r   r�   )rÓ  rÔ  rÕ  rH  )r=   r   r�   rL  rŸ   s   &&&  r'   rn   Ú&VJEPA2PoolerSelfAttentionLayer.forwardù  ss   € ð !ˆØ×(Ñ(¨Ó7ˆØ&*§n¡nØ'Ø)ð '5ó '
Ñ#ˆð !Õ0ˆà ˆØ×(Ñ(¨Ó7ˆØŸ™ Ó/ˆØ Õ0ˆàÐ*Ð*r*   )rÓ  rÕ  rH  rÔ  r  rE   s   @@r'   rÍ  rÍ  ñ  s    ù‡ € ÷Eó E÷+÷ +ð +r*   rÍ  c                   óT   a a€ ] tR tR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# )ÚVJEPA2PoolerCrossAttentionLayeri  c                ó    <€ V ^8„  d   QhRS[ /# rR  r   )r%   r&   s   "€r'   r(   Ú,VJEPA2PoolerCrossAttentionLayer.__annotate__  rÐ  r*   c                ó>  <€ \         SV `  4        \        P                  ! VP                  VP
                  R 7      V n        \        V4      V n        \        P                  ! VP                  VP
                  R 7      V n	        \        WP                  R7      V n        R# rÒ  )r:   rT   r   rA  rK   rB  rÓ  rÁ  Ú
cross_attnrÕ  r
  rH  r  s   &&€r'   rT   Ú(VJEPA2PoolerCrossAttentionLayer.__init__  sj   ø€ Ü‰ÑÔÜŸ<š<¨×(:Ñ(:À×@UÑ@UÔVˆÔÜ4°VÓ<ˆŒÜŸ<š<¨×(:Ñ(:À×@UÑ@UÔVˆÔÜ˜V×1CÑ1CÔDˆŽr*   c          
      óº   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  R,          RS[S[ P                  S[ P                  3,          /# )r   r¼  r  r�   Nrg   rö   )r%   r&   s   "€r'   r(   rÝ    sV   ø€ ÷ +ñ +á—‘ð+ñ —l‘lð+ñ Ÿ™ tÕ+ð	+ñ
 
‰u�|‰|™UŸ\™\Ð)Õ	*ñ+r*   c                óÈ   € TpV P                  V4      pV P                  VVVVR 7      vr%WB,           pTpV P                  V4      pV P                  V4      pWB,           pV.VO5# )©r�   )rÓ  rß  rÕ  rH  )r=   r¼  r  r�   rL  rŸ   s   &&&&  r'   rn   Ú'VJEPA2PoolerCrossAttentionLayer.forward  s€   € ð ˆØ×'Ñ'¨Ó5ˆØ&*§o¡oØØØØ)ð	 '6ó '
Ð#ˆð  Õ.ˆð  ˆØ×'Ñ'¨Ó5ˆØ—x‘x Ó-ˆØÕ.ˆàÐ*˜lÑ*Ð*r*   )rß  rÓ  rÕ  rH  r]   r  rE   s   @@r'   rÛ  rÛ    s    ù‡ € ÷Eó E÷+÷ +ò +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	# )ÚVJEPA2AttentivePooleri7  zAttentive Poolerc                ó    <€ V ^8„  d   QhRS[ /# rR  r   )r%   r&   s   "€r'   r(   Ú"VJEPA2AttentivePooler.__annotate__:  s   ø€ ÷ 
ñ 
™|ñ 
r*   c                óR  <€ \         SV `  4        \        P                  ! \        P
                  ! ^^VP                  4      4      V n        \        V4      V n	        \        P                  ! \        VP                  4       Uu. uF  p\        V4      NK  	  up4      V n        R# u upi )r7   N)r:   rT   r   r|  r"   r}  rK   Úquery_tokensrÛ  Úcross_attention_layerrX  rV  Únum_pooler_layersrÍ  Úself_attention_layers)r=   rJ   r§  r?   s   && €r'   rT   ÚVJEPA2AttentivePooler.__init__:  sx   ø€ Ü‰ÑÔÜŸLšL¬¯ª°Q¸¸6×;MÑ;MÓ)NÓOˆÔÜ%DÀVÓ%LˆÔ"Ü%'§]¢]Ü=BÀ6×C[ÑC[Ô=\Ó]Ñ=\¸Ô+¨FÖ3Ñ=\Ñ]ó&
ˆÖ"ùÚ]s   ÂB$c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# r  rh   )r%   r&   s   "€r'   r(   rè  B  s#   ø€ ÷ 'ñ '¡E§L¡Lð '±U·\±\ñ 'r*   c                óø   € V P                    F  pV! VR R7      ^ ,          pK  	  V P                  P                  VP                  ^ ,          ^^4      pV P	                  W14      ^ ,          pVP                  ^4      # )Nrã  )rí  rê  r‚   r€   rë  Úsqueeze)r=   r  rY  r¼  s   &&  r'   rn   ÚVJEPA2AttentivePooler.forwardB  sn   € Ø×/Ô/ˆEÙ  ¸dÔCÀAÕFŠLñ 0à×#Ñ#×*Ñ*¨<×+=Ñ+=¸aÕ+@À!ÀQÓGˆØ×1Ñ1°'ÓHÈÕKˆØ×#Ñ# AÓ&Ð&r*   )rë  rê  rí  r‰   rE   s   @@r'   ræ  ræ  7  s!   ù‡ € Ù÷
ó 
÷'÷ 'ð 'r*   ræ  c            	       ó´   a a€ ] tR tRt oRtRtRtRt. ROtRt	Rt
R]! ]RR7      R	]! ]^RR
7      /t]P                   ! 4       V 3R l4       tV3R ltRtVtV ;t# )ÚVJEPA2PreTrainedModeliJ  Úvjepa2rf   ÚvideoTr   zencoder.layer)Ú
layer_namer    )rk  r÷  c                óÒ  <€ \         SV `  V4       V P                  P                  p\	        V\
        4      '       Ed)   \        P                  ! VP                  VR7       \        VP                  ^4       F€  w  r4W#R,          ,          p\        P                  ! VP                  P                  P                  VR7       \        P                  ! VP                  P                  P                  VR7       K‚  	  V\!        VP                  4      ^,           R,          ,          p\        P                  ! VP"                  P                  P                  P                  VR7       R# \	        V\$        4      '       dY   VP&                  '       d#   \        P(                  ! VP*                  4       R# \        P                  ! VP*                  VR7       R# \	        V\,        P.                  \,        P0                  \,        P2                  34      '       dU   \        P                  ! VP                  VR7       VP4                  e#   \        P(                  ! VP4                  4       R# R# R# )zInitialize the weights)Ústdg      à?N)r:   Ú_init_weightsrJ   Úinitializer_ranger<   ræ  ÚinitÚtrunc_normal_rê  rc  rí  rÔ  r·  rƒ   rH  r  r‰  rë  rr  rz  Úzeros_r~  r   rÈ   ÚConv2drW   rÃ   )r=   r‹   Úinit_stdr]  rY  rù  r?   s   &&    €r'   rú  Ú#VJEPA2PreTrainedModel._init_weights^  sŽ  ø€ ô 	‰Ñ˜fÔ%à—;‘;×0Ñ0ˆÜ�fÔ3×4Ó4Ü×Ò˜v×2Ñ2¸ÕAÜ% f×&BÑ&BÀAÖF‘�Ø S¥&Õ)�Ü×"Ò" 5§?¡?×#;Ñ#;×#BÑ#BÈÕLÜ×"Ò" 5§9¡9§=¡=×#7Ñ#7¸S×Añ Gð œc &×">Ñ">Ó?À!ÕCÈÕKÕKˆCÜ×Ò˜v×;Ñ;×?Ñ?×CÑC×JÑJÐPS×TÜ˜Ô 9×:Ò:Ø×+×+Ð+Ü—’˜F×.Ñ.Ö/ä×"Ò" 6×#5Ñ#5¸8×DÜ˜¤§¡¬B¯I©I´r·y±yÐ A×BÒBÜ×Ò˜vŸ}™}°(Õ;Ø�{‰{Ò&Ü—’˜FŸK™KÖ(ñ 'ñ Cr*   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # rR  r   )r%   r&   s   "€r'   r(   Ú"VJEPA2PreTrainedModel.__annotate__J  s   ø‡ ‚ áÑò r*   r+   )r:  rÍ  rÛ  rr  )r,   r-   r.   r/   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpaÚ_supports_flash_attnr   r:  r¼   Ú_can_record_outputsr"   Úno_gradrú  r1   r2   r3   rD   rE   s   @@r'   rô  rô  J  sw   ù‡ € ð !ÐØ+€OØÐØ&*Ð#òÐð €NØÐà™¨ÀÔPØ‘nÐ%8ÀÈoÔ^ðÐð
 ‡]‚]ƒ_ô)ó ð)÷+ … r*   rô  c                   ó¤   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R7      ]RV3R lR	 ll4       4       4       t	V3R
 lR lt
RtVtV ;t# )ÚVJEPA2Modeliw  c                ó    <€ V ^8„  d   QhRS[ /# rR  r   )r%   r&   s   "€r'   r(   ÚVJEPA2Model.__annotate__y  s   ø€ ÷ ñ ™|ñ r*   c                ó’   <€ \         SV `  V4       Wn        \        V4      V n        \        V4      V n        V P                  4        R # r]   )r:   rT   rJ   rP  Úencoderr‘  Ú	predictorÚ	post_initr  s   &&€r'   rT   ÚVJEPA2Model.__init__y  s9   ø€ Ü‰Ñ˜Ô ØŒä$ VÓ,ˆŒÜ(¨Ó0ˆŒð 	�‰Ör*   c                ó    <€ V ^8„  d   QhRS[ /# r1  )rG   )r%   r&   s   "€r'   r(   r  ƒ  s   ø€ ÷ 8ñ 8Ñ&=ñ 8r*   c                óB   € V P                   P                  P                  # r]   )r  r‡   r{   r5  s   &r'   Úget_input_embeddingsÚ VJEPA2Model.get_input_embeddingsƒ  s   € Ø�|‰|×&Ñ&×7Ñ7Ð7r*   F)Útie_last_hidden_statesc                óÆ   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  ,          R,          RS[S[ P                  ,          R,          RS[RS[S[,          RS[/# )r   rf   r„  Nr…  Úskip_predictorrž   rg   )r"   ri   r9   Úboolr   r   r5   )r%   r&   s   "€r'   r(   r  ‰  sm   ø€ ÷ ;ñ ;á"Ÿ\™\ð;ñ ™5Ÿ<™<Õ(¨4Õ/ð;ñ ™%Ÿ,™,Õ'¨$Õ.ð	;ñ
 ð;ñ Ñ+Õ,ð;ñ 
*ñ;r*   c           	     óÌ  € Vf   \        R4      hV P                  ! R
RV/VB pVP                  pVf«   Vf§   VP                  ^ 4      pVP                  ^4      p	\        P
                  ! W‘P                  R7      P                  ^ 4      P                  V^34      .p\        P
                  ! W‘P                  R7      P                  ^ 4      P                  V^34      .pV'       gP   V P                  ! R
RVRVRV/VB p
\        V
P                  \        Ws4      V
P                  V
P                  R7      pMRp\        V\        Wr4      VP                  VP                  VR	7      pV# )a"  
context_mask (`torch.Tensor` with shape `[batch_size, patch_size, 1]`, *optional*):
    The mask position ids indicating which encoder output patches are going to be exposed to the predictor.
    By default, this mask is created as torch.arange(N).unsqueeze(0).repeat(B,1), indicating full context
    available to the predictor.
target_mask (`torch.Tensor` with shape `[batch_size, patch_size, 1]`, *optional*):
    The mask position ids indicating which encoder output patches are going to be used as a prediction target
    for the predictor. By default, this mask is created as torch.arange(N).unsqueeze(0).repeat(B,1), indicating
    that the predictor should predict all encoder patches.
skip_predictor (bool):
    flag to skip the predictor forward, useful if you just need the encoder outputs
Nz'You have to specify pixel_values_videosrf   rß   r¥  r„  r…  )r   r!   r   r    )r   r   r   r    rB   r+   )rÅ   r  r   r¦   r"   r§   r¤   r¨   r‚   r  r   rp  r   r    r5   )r=   rf   r„  r…  r  rž   Úencoder_outputsÚsequence_outputr¯   r±   Úpredictor_outputsrB   Úencoder_outputs   &&&&&,       r'   rn   ÚVJEPA2Model.forward†  sw  € ð. Ò&ÜÐFÓGÐGà+/¯<ª<ñ ,
Ø 3ð,
àñ,
ˆð *×;Ñ;ˆàÒ KÒ$7Ø#×(Ñ(¨Ó+ˆAØ×$Ñ$ QÓ'ˆAÜ!ŸLšL¨×3MÑ3MÔN×XÑXÐYZÓ[×bÑbÐdeÐghÐciÓjÐkˆLÜ Ÿ<š<¨×2LÑ2LÔM×WÑWÐXYÓZ×aÑaÐcdÐfgÐbhÓiÐjˆKçØ15·²ñ 2Ø&5ð2à)ð2ð (ð2ð ñ	2Ðô  DØ"3×"EÑ"EÜ$/°Ó$MØ/×=Ñ=Ø,×7Ñ7ô	 Ñð  $Ðä9Ø-Ü +¨OÓ JØ)×7Ñ7Ø&×1Ñ1Ø-ô
ˆð Ðr*   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r1  rh   )r%   r&   s   "€r'   r(   r  Æ  s   ø€ ÷ 0ñ 0¹%¿,¹,ñ 0r*   c                ó@   € V P                  VR R7      pVP                  # )T)r  )rn   r   )r=   rf   r"  s   && r'   Úget_vision_featuresÚVJEPA2Model.get_vision_featuresÆ  s!   € ØŸ™Ð&9È$˜ÓOˆØ×/Ñ/Ð/r*   )rJ   r  r  )NNF)r,   r-   r.   r/   rT   r  r   r   r   rn   r&  r2   r3   rD   rE   s   @@r'   r  r  w  sW   ù‡ € ÷ó ÷8ð 8ð  Ù¨EÔ2Ø÷;ñ ;ó ó 3ó  ð;÷z0÷ 0ð 0r*   r  z}
    V-JEPA 2 Model transformer with a video classification head on top (a linear layer on top of the attentive pooler).
    c                   óh   a a€ ] tR tRt oV3R lV 3R llt]]RV3R lR ll4       4       tRtVt	V ;t
# )ÚVJEPA2ForVideoClassificationiË  c                ó    <€ V ^8„  d   QhRS[ /# rR  r   )r%   r&   s   "€r'   r(   Ú)VJEPA2ForVideoClassification.__annotate__Ñ  s   ø€ ÷ ñ ™|ñ r*   c                ó  <€ \         SV `  V4       VP                  V n        \        V4      V n        \        V4      V n        \        P                  ! VP                  VP                  R R7      V n
        V P                  4        R# r  )r:   rT   Ú
num_labelsr  rõ  ræ  Úpoolerr   rÈ   rK   Ú
classifierr  r  s   &&€r'   rT   Ú%VJEPA2ForVideoClassification.__init__Ñ  sd   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ! &Ó)ˆŒô ,¨FÓ3ˆŒÜŸ)š) F×$6Ñ$6¸×8IÑ8IÐPTÔUˆŒð 	�‰Ör*   c          	      óˆ   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[S[,          /# )r   rf   ÚlabelsNrž   rg   )r"   ri   r   r   r$   r
   )r%   r&   s   "€r'   r(   r+  à  sL   ø€ ÷ <
ñ <
á"Ÿ\™\ð<
ñ —‘˜tÕ#ð<
ñ Ñ+Õ,ð	<
ñ
 
Ñ&Õ	&ñ<
r*   c                ó  € V P                   ! RRVRR/VB pVP                  pV P                  V4      pV P                  V4      pRpVe   V P	                  WrV P
                  R7      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
>>> import numpy as np
>>> from transformers import AutoVideoProcessor, VJEPA2ForVideoClassification

>>> device = "cuda"

>>> video_processor = AutoVideoProcessor.from_pretrained("facebook/vjepa2-vitl-fpc16-256-ssv2")
>>> model = VJEPA2ForVideoClassification.from_pretrained("facebook/vjepa2-vitl-fpc16-256-ssv2").to(device)

>>> video = np.ones((64, 256, 256, 3))  # 64 frames, 256x256 RGB
>>> inputs = video_processor(video, return_tensors="pt").to(device)

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

>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])

>>> # For training
>>> labels = torch.ones(1, dtype=torch.long, device=device)
>>> loss = model(**inputs, labels=labels).loss

```rf   r  TN)Úpooled_logitsr2  rJ   )ÚlossÚlogitsr   r    r+   )	rõ  r   r.  r/  Úloss_functionrJ   r
   r   r    )	r=   rf   r2  rž   Úoutputsr   Úpooler_outputr6  r5  s	   &&&,     r'   rn   Ú$VJEPA2ForVideoClassification.forwardÞ  s¤   € ðV —+’+ñ 
Ø 3ð
àð
ð ñ
ˆð $×5Ñ5ÐØŸ™Ð$5Ó6ˆØ—‘ Ó/ˆàˆØÒØ×%Ñ%°FÐRV×R]ÑR]Ð%Ó^ˆDä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r*   )r/  r-  r.  rõ  r]   )r,   r-   r.   r/   rT   r   r   rn   r2   r3   rD   rE   s   @@r'   r)  r)  Ë  s5   ù‡ € ÷ó ð Ø÷<
ñ <
ó ó ÷<
ð <
r*   r)  r8  )r  rô  r)  )=Úcollections.abcr   Údataclassesr   r"   r   Ú r   rü  Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr	   r
   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   r   Úconfiguration_vjepa2r   Ú
get_loggerr,   Úloggerr   r5   r’   rG   ru   r¡   rº   r¼   r
  r   r:  rP  rp  rr  r‘  r«  rÁ  rÍ  rÛ  ræ  rô  r  r)  Ú__all__r+   r*   r'   Ú<module>rJ     s	  ðõ %Ý !ã Ý å &Ý !Ý 9ß Fß FÝ &ß _Õ _Ý 7ß EÝ .ð 
×	Ò	˜HÓ	%€ñ ðôð
 ô9¨;ó 9ó óð9ñ ðôð ô {ó ó óðô* ˜bŸi™iô  ôF�r—y‘yô ÷F%ò4)ô6z.˜"Ÿ)™)ô z.ôz�—	‘	ô ô"%�R—Y‘Yô %ô0-+Ð,ô -+ô`(
�B—I‘Iô (
õV0ô"C! §	¡	ô C!ôLN
�b—i‘iô N
ôb5) §	¡	ô 5)ôp=) §¡ô =)ôB!+Ð%?ô !+ôH+Ð&@ô +ôD'˜BŸI™Iô 'ð& ô))˜Oó ))ó ð))ðX ôP0Ð'ó P0ó ðP0ñf ðôô
L
Ð#8ó L
óð
L
ò^ S‚r*   