+
    œ°³j¤G  ã                   ó0  € ^ RI Ht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 ^RIHtHt ^RIHtHt ^R	IHt ^R
IHtHtHt ^RIHtHt ^RIHt ^RI H!t!  ! R R]PD                  4      t# ! R R]PD                  4      t$R$R R llt% ! R R]PD                  4      t& ! R R]PD                  4      t' ! R R]4      t(] ! R R]4      4       t) ! R R]PD                  4      t*] ! R R])4      4       t+]! R R!7       ! R" R#])4      4       t,. R%Ot-R# )&é    )ÚCallableÚIterableN)Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPoolingÚImageClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputs©ÚIJepaConfigc                   óT   a a€ ] tR t^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	# )ÚIJepaPatchEmbeddingszÜ
This class turns `pixel_values` of shape `(batch_size, num_channels, height, width)` into the initial
`hidden_states` (patch embeddings) of shape `(batch_size, seq_length, hidden_size)` to be consumed by a
Transformer.
c                ó    <€ V ^8„  d   QhRS[ /# ©é   Úconfigr   )ÚformatÚ__classdict__s   "€Úi/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/ijepa/modeling_ijepa.pyÚ__annotate__Ú!IJepaPatchEmbeddings.__annotate__    s   ø€ ÷ xñ x™{ñ xó    c                óÎ  <€ \         SV `  4        VP                  pVP                  p\	        V\
        4      '       d   TMW"3p\	        V\
        4      '       d   TMW33pV^,          V^,          ,          V^ ,          V^ ,          ,          ,          V n        W n        W0n        VP                  V n        \        P                  ! VP                  VP                  W3R7      V n        R# )é   )Úkernel_sizeÚstrideN)ÚsuperÚ__init__Ú
image_sizeÚ
patch_sizeÚ
isinstancer   Únum_patchesÚnum_channelsÚnnÚConv2dÚhidden_sizeÚ
projection)Úselfr   r(   r)   Ú	__class__s   &&  €r   r'   ÚIJepaPatchEmbeddings.__init__    s³   ø€ Ü‰ÑÔØ×&Ñ&ˆ
Ø×&Ñ&ˆ
Ü#-¨j¼(×#CÒ#C‘ZÈ*ÐIaˆ
Ü#-¨j¼(×#CÒ#C‘ZÈ*ÐIaˆ
à& q�M¨Z¸­]Õ:¸zÈ!½}ÐPZÐ[\ÕP]Õ?]Õ^ˆÔØ$ŒØ$ŒØ"×/Ñ/ˆÔÜŸ)š) F×$7Ñ$7¸×9KÑ9KÐYcÔwˆŽr!   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   Úpixel_valuesÚreturn©ÚtorchÚTensor)r   r   s   "€r   r   r    -   s'   ø€ ÷ Hñ H¡E§L¡Lð H±U·\±\ñ Hr!   c                óà   € VP                   ^,          pW P                  8w  d   \        RV P                   RV R24      hV P                  V4      P	                  ^4      P                  ^^4      # )r#   zoMake sure that the channel dimension of the pixel values match with the one set in the configuration. Expected z	 but got Ú.)Úshaper,   Ú
ValueErrorr0   ÚflattenÚ	transpose)r1   r5   r,   s   && r   ÚforwardÚIJepaPatchEmbeddings.forward-   ss   € Ø#×)Ñ)¨!Õ,ˆØ×,Ñ,Ô,ÜðØ!×.Ñ.Ð/¨y¸¸ÀaðIóð ð �‰˜|Ó,×4Ñ4°QÓ7×AÑAÀ!ÀQÓGÐGr!   )r(   r,   r+   r)   r0   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r'   r@   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r2   r   s   @@r   r   r      s(   ù‡ € ñ÷xó x÷H÷ Hð Hr!   r   c                   ón   a a€ ] tR t^7t oRtR	V3R lV 3R llltV3R lR ltR
V3R lR lltRtVt	V ;t
# )ÚIJepaEmbeddingszZ
Construct the CLS token, position and patch embeddings. Optionally, also the mask token.
c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r   r   Úuse_mask_tokenr6   N©r   Úbool)r   r   s   "€r   r   ÚIJepaEmbeddings.__annotate__<   s"   ø€ ÷ ;ñ ;™{ð ;¹Dð ;ÈTñ ;r!   c                ó  <€ \         SV `  4        V'       d7   \        P                  ! \        P
                  ! ^^VP                  4      4      MRV n        \        V4      V n	        V P                  P                  p\        P                  ! \        P                  ! ^W1P                  4      4      V n        \        P                  ! VP                  4      V n        VP                   V n        V P                  P"                  V n        R# )r#   N)r&   r'   r-   Ú	Parameterr8   Úzerosr/   Ú
mask_tokenr   Úpatch_embeddingsr+   ÚrandnÚposition_embeddingsÚDropoutÚhidden_dropout_probÚdropoutr)   r(   )r1   r   rN   r+   r2   s   &&& €r   r'   ÚIJepaEmbeddings.__init__<   s¬   ø€ Ü‰ÑÔßQ_œ"Ÿ,š,¤u§{¢{°1°a¸×9KÑ9KÓ'LÔMÐeiˆŒÜ 4°VÓ <ˆÔØ×+Ñ+×7Ñ7ˆÜ#%§<¢<´·²¸A¸{×L^ÑL^Ó0_Ó#`ˆÔ Ü—z’z &×"<Ñ"<Ó=ˆŒØ ×+Ñ+ˆŒØ×/Ñ/×:Ñ:ˆŽr!   c                óZ   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[ P                  /# )r   Ú
embeddingsÚheightÚwidthr6   )r8   r9   Úint)r   r   s   "€r   r   rQ   F   s5   ø€ ÷ %ñ %±5·<±<ð %Éð %ÑUXð %Ñ]b×]iÑ]iñ %r!   c                óh  € VP                   ^,          pV P                  P                   ^,          p\        P                  P	                  4       '       g   WE8X  d   W#8X  d   V P                  # V P                  pVP                   R,          pW P
                  ,          pW0P
                  ,          p	\        VR,          4      p
VP                  ^WªV4      pVP                  ^ ^^^4      p\        P                  P                  VW‰3RRR7      pVP                  ^ ^^^4      P                  ^RV4      pV# )aÐ  
This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
images. This method is also adapted to support torch.jit tracing.

Adapted from:
- https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
- https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
g      à?ÚbicubicF)ÚsizeÚmodeÚalign_cornerséÿÿÿÿ)r<   rX   r8   ÚjitÚ
is_tracingr)   r   ÚreshapeÚpermuter-   Ú
functionalÚinterpolateÚview)r1   r^   r_   r`   r+   Únum_positionsÚpatch_pos_embedÚdimÚ
new_heightÚ	new_widthÚsqrt_num_positionss   &&&&       r   Úinterpolate_pos_encodingÚ(IJepaEmbeddings.interpolate_pos_encodingF   s  € ð !×&Ñ& qÕ)ˆØ×0Ñ0×6Ñ6°qÕ9ˆô �y‰y×#Ñ#×%Ò%¨+Ô*FÈ6Ì?Ø×+Ñ+Ð+à×2Ñ2ˆà×Ñ˜rÕ"ˆàŸ™Õ.ˆ
ØŸ_™_Õ,ˆ	ä& }°cÕ'9Ó:ÐØ)×1Ñ1°!Ð5GÐ]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØÐ(ØØð	 4ó 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆàÐr!   c                ó|   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[RS[ P                  /# )r   r5   Úbool_masked_posNru   r6   )r8   r9   Ú
BoolTensorrP   )r   r   s   "€r   r   rQ   m   sF   ø€ ÷ ñ á—l‘lðñ ×)Ñ)¨DÕ0ðñ #'ð	ñ
 
�‰ñr!   c                ó~  € VP                   w  rErgV P                  V4      pVem   VP                   ^,          p	V P                  P                  WIR4      p
VP	                  R4      P                  V
4      pVRV,
          ,          W«,          ,           pV'       d   W€P                  W†V4      ,           pMzW`P                  ^ ,          8w  g   WpP                  ^,          8w  d;   \        RV RV RV P                  ^ ,           RV P                  ^,           R2	4      hW€P                  ,           pV P                  V4      pV# )Ng      ð?zInput image size (Ú*z) doesn't match model (z).rg   )r<   rV   rU   ÚexpandÚ	unsqueezeÚtype_asru   r(   r=   rX   r[   )r1   r5   rx   ru   Ú
batch_sizeÚ_r_   r`   r^   Ú
seq_lengthÚmask_tokensÚmasks   &&&&        r   r@   ÚIJepaEmbeddings.forwardm   s#  € ð (4×'9Ñ'9Ñ$ˆ
�vØ×*Ñ*¨<Ó8ˆ
àÒ&Ø#×)Ñ)¨!Õ,ˆJØŸ/™/×0Ñ0°ÈÓLˆKà"×,Ñ,¨RÓ0×8Ñ8¸ÓEˆDØ# s¨T¥zÕ2°[Õ5GÕGˆJ÷ $Ø#×&CÑ&CÀJÐX]Ó&^Õ^‰JàŸ™¨Õ+Ô+¨u¿¹ÈÕ8JÔ/JÜ Ø(¨¨°°%°ð 9ØŸ™¨Õ+Ð,¨A¨d¯o©o¸aÕ.@Ð-AÀðEóð ð $×&>Ñ&>Õ>ˆJà—\‘\ *Ó-ˆ
àÐr!   )r[   r(   rU   rV   r)   rX   )F)NF)rB   rC   rD   rE   rF   r'   ru   r@   rG   rH   rI   rJ   s   @@r   rL   rL   7   s.   ù‡ € ñ÷;õ ;÷%ð %÷N÷ ò r!   rL   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Úscalingr[   Úkwargs)r-   ÚModuler8   r9   Ú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\        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# )N)rq   Údtype)ÚpÚtrainingrg   ç      à¿)rd   r8   Úmatmulr?   r-   rl   ÚsoftmaxÚfloat32Útor�   r[   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ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€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# )ÚIJepaAttentionc                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   ÚIJepaAttention.__annotate__ª   s   ø€ ÷ kñ k™{ñ kr!   c                ó`  <€ \         SV `  4        Wn        VP                  V n        \	        VR VP
                  VP                  ,          4      V n        VP                  V n        V P                  R,          V n	        RV n
        \        P                  ! VP
                  VP                  V P                  ,          VP                  R7      V n        \        P                  ! VP
                  VP                  V P                  ,          VP                  R7      V n        \        P                  ! VP
                  VP                  V P                  ,          VP                  R7      V n        \        P                  ! VP                  V P                  ,          VP
                  RR7      V n        R# )Úhead_dimF)ÚbiasTNr“   )r&   r'   r   Únum_attention_headsÚgetattrr/   r¡   Úattention_probs_dropout_probÚattention_dropoutr‹   Ú	is_causalr-   ÚLinearÚqkv_biasÚq_projÚk_projÚv_projÚo_proj©r1   r   r2   s   &&€r   r'   ÚIJepaAttention.__init__ª   s*  ø€ Ü‰ÑÔØŒØ#)×#=Ñ#=ˆÔ Ü ¨
°F×4FÑ4FÈ&×JdÑJdÕ4dÓeˆŒØ!'×!DÑ!DˆÔØ—}‘} dÕ*ˆŒØˆŒä—i’i × 2Ñ 2°F×4NÑ4NÐQU×Q^ÑQ^Õ4^Ðek×etÑetÔuˆŒÜ—i’i × 2Ñ 2°F×4NÑ4NÐQU×Q^ÑQ^Õ4^Ðek×etÑetÔuˆŒÜ—i’i × 2Ñ 2°F×4NÑ4NÐQU×Q^ÑQ^Õ4^Ðek×etÑetÔuˆŒÜ—i’i × :Ñ :¸T¿]¹]Õ JÈF×L^ÑL^ÐeiÔjˆŽr!   c          
      ó¶   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[S[ P                  S[ P                  3,          /# ©r   Úhidden_statesrŠ   NrŒ   r6   )r8   r9   r   r   Útuple)r   r   s   "€r   r   rŸ   ¸   sX   ø€ ÷ )ñ )á—|‘|ð)ñ Ÿ™ 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	! V VVVV3RV P                  '       g   RMV P                  RV P                  /VB w  r«V
P                  ! . VORN5!  P!                  4       p
V P#                  V
4      p
W«3# )Nr[   ç        r‹   rg   )r<   r¡   rª   rn   r?   r«   r¬   r   Úget_interfacer   Ú_attn_implementationr›   r’   r¦   r‹   rj   r˜   r­   )r1   r²   rŠ   rŒ   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacerš   r™   s   &&&,        r   r@   ÚIJepaAttention.forward¸   sN  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØñ	%
ð  $Ÿ}Ÿ}˜}‘C°$×2HÑ2Hð	%
ð —L‘Lð	%
ð ñ	%
Ñ!ˆð "×)Ò)Ð;¨;Ð;¸Ó;×FÑFÓHˆØ—k‘k +Ó.ˆàÐ(Ð(r!   )
r¦   r   r¡   r§   r«   r£   r­   rª   r‹   r¬   ©N©	rB   rC   rD   rE   r'   r@   rG   rH   rI   rJ   s   @@r   r�   r�   ©   s    ù‡ € ÷kó k÷)÷ )ò )r!   r�   c                   óP   a a€ ] tR t^Ú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# )ÚIJepaMLPc                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   ÚIJepaMLP.__annotate__Û   s   ø€ ÷ Kñ K™{ñ Kr!   c                ó(  <€ \         SV `  4        Wn        \        VP                  ,          V n        \        P                  ! VP                  VP                  4      V n
        \        P                  ! VP                  VP                  4      V n        R # r¿   )r&   r'   r   r   Ú
hidden_actÚactivation_fnr-   r¨   r/   Úintermediate_sizeÚfc1Úfc2r®   s   &&€r   r'   ÚIJepaMLP.__init__Û   sb   ø€ Ü‰ÑÔØŒÜ# F×$5Ñ$5Õ6ˆÔÜ—9’9˜V×/Ñ/°×1IÑ1IÓJˆŒÜ—9’9˜V×5Ñ5°v×7IÑ7IÓJˆŽr!   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r   r²   r6   r7   )r   r   s   "€r   r   rÄ   â   s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r!   c                ól   € V P                  V4      pV P                  V4      pV P                  V4      pV# r¿   )rÉ   rÇ   rÊ   )r1   r²   s   &&r   r@   ÚIJepaMLP.forwardâ   s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆàÐr!   )rÇ   r   rÉ   rÊ   rÀ   rJ   s   @@r   rÂ   rÂ   Ú   s    ù‡ € ÷Kó K÷÷ ð r!   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# )Ú
IJepaLayerc                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   ÚIJepaLayer.__annotate__ë   s   ø€ ÷ >ñ >™{ñ >r!   c                ór  <€ \         SV `  4        \        V4      V n        \        P
                  ! VP                  VP                  R 7      V n        \        P
                  ! VP                  VP                  R 7      V n	        \        V4      V n        \        P                  ! VP                  4      V n        R# )©ÚepsN)r&   r'   r�   Ú	attentionr-   Ú	LayerNormr/   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterrÂ   ÚmlprY   rZ   r[   r®   s   &&€r   r'   ÚIJepaLayer.__init__ë   sz   ø€ Ü‰ÑÔÜ'¨Ó/ˆŒÜ "§¢¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÔÜ!Ÿ|š|¨F×,>Ñ,>ÀF×DYÑDYÔZˆÔÜ˜FÓ#ˆŒÜ—z’z &×"<Ñ"<Ó=ˆŽr!   c                óŒ   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[ P                  /# r±   )r8   r9   r   r   )r   r   s   "€r   r   rÓ   ó   sJ   ø€ ÷ ñ á—|‘|ðñ Ÿ™ tÕ+ðñ Ñ+Õ,ð	ñ
 
�‰ñr!   c                ó  € TpV P                  V4      pV P                  ! W3/ VB w  rV P                  V4      pW,           pTpV P                  V4      pV P	                  V4      pV P                  V4      pW,           pV# r¿   )rÚ   r×   r[   rÛ   rÜ   )r1   r²   rŠ   rŒ   Úresidualr€   s   &&&,  r   r@   ÚIJepaLayer.forwardó   s†   € ð !ˆØ×-Ñ-¨mÓ<ˆØŸ>š>¨-ÑRÈ6ÑRÑˆØŸ™ ]Ó3ˆØ%Õ0ˆð !ˆØ×,Ñ,¨]Ó;ˆØŸ™ Ó/ˆØŸ™ ]Ó3ˆØ%Õ0ˆàÐr!   )r×   r[   rÛ   rÚ   rÜ   r¿   rÀ   rJ   s   @@r   rÑ   rÑ   ê   s   ù‡ € ÷>ó >÷÷ ò r!   rÑ   c                   ó¢   a 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tR]R]/tR	t]P&                  ! 4       V 3R
 l4       tV3R ltRtVtV ;t# )ÚIJepaPreTrainedModeli
  Úijepar5   TrL   rÑ   r²   Ú
attentionsrV   c                óV  <€ \         SV `  V4       \        V\        P                  \        P
                  34      '       dj   \        P                  ! VP                  RV P                  P                  R7       VP                  e#   \        P                  ! VP                  4       R# R# \        V\        4      '       dj   \        P                  ! VP                  RV P                  P                  R7       VP                  e#   \        P                  ! VP                  4       R# R# R# )zInitialize the weightsrµ   )ÚmeanÚstdN)r&   Ú_init_weightsr*   r-   r¨   r.   ÚinitÚtrunc_normal_Úweightr   Úinitializer_ranger¢   Úzeros_rL   rX   rU   )r1   r†   r2   s   &&€r   ré   Ú"IJepaPreTrainedModel._init_weights  sÂ   ø€ ô 	‰Ñ˜fÔ%Ü�fœrŸy™y¬"¯)©)Ð4×5Ò5Ü×Ò˜vŸ}™}°3¸D¿K¹K×<YÑ<YÕZØ�{‰{Ò&Ü—’˜FŸK™KÖ(ñ 'ä˜¤×0Ò0Ü×Ò˜v×9Ñ9ÀÈÏÉ×IfÑIfÕgØ× Ñ Ò,Ü—’˜F×-Ñ-Ö.ñ -ñ 1r!   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # r   r   )r   r   s   "€r   r   Ú!IJepaPreTrainedModel.__annotate__
  s   ø‡ ‚ áÑò r!   © )Úimage)rB   rC   rD   rE   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendÚ_can_compile_fullgraphrÑ   r�   Ú_can_record_outputsÚ_input_embed_layerr8   Úno_gradré   Ú__annotate_func__rG   rH   rI   rJ   s   @@r   rã   rã   
  s   ù‡ € ð  ÐØ$€OØ!ÐØ&*Ð#Ø*¨LÐ9ÐØ€NØÐØÐØ"&ÐØ!Ðà˜Ø�nðÐð ,Ðà
‡]‚]ƒ_ô
/ó ð
/÷) … 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# )ÚIJepaPooleri+  c                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   ÚIJepaPooler.__annotate__,  s   ø€ ÷ 4ñ 4™{ñ 4r!   c                ó¼   <€ \         SV `  4        \        P                  ! VP                  VP
                  4      V n        \        VP                  ,          V n	        R # r¿   )
r&   r'   r-   r¨   r/   Úpooler_output_sizeÚdenser   Ú
pooler_actÚ
activationr®   s   &&€r   r'   ÚIJepaPooler.__init__,  s>   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3LÑ3LÓMˆŒ
Ü  ×!2Ñ!2Õ3ˆŽr!   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rÍ   r7   )r   r   s   "€r   r   r  1  s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r!   c                ó\   € VR,          pV P                  V4      pV P                  V4      pV# )ºNNN)r  r   )r  r
  )r1   r²   Úfirst_token_tensorÚpooled_outputs   &&  r   r@   ÚIJepaPooler.forward1  s2   € ð +¨4Õ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr!   )r
  r  rÀ   rJ   s   @@r   r  r  +  s   ù‡ € ÷4ó 4÷
÷ ð r!   r  c                   ó„   a a€ ] tR tRt oR	V3R lV 3R lllt]]! RR7      ]R
V3R lR ll4       4       4       tRt	Vt
V ;t# )Ú
IJepaModeli:  Fc                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   r   Úadd_pooling_layerrN   rO   )r   r   s   "€r   r   ÚIJepaModel.__annotate__<  s#   ø€ ÷ ñ ™{ð ¹tð Ñ]añ r!   c                ó¢  <€ \         SV `  V4       Wn        \        WR7      V n        \
        P                  ! \        VP                  4       Uu. uF  p\        V4      NK  	  up4      V n
        \
        P                  ! VP                  VP                  R7      V n        V'       d   \        V4      MRV n        V P#                  4        R# u upi )zÓ
add_pooling_layer (bool, *optional*, defaults to `True`):
    Whether to add a pooling layer
use_mask_token (`bool`, *optional*, defaults to `False`):
    Whether to use a mask token for masked image modeling.
)rN   rÕ   N)r&   r'   r   rL   r^   r-   Ú
ModuleListÚrangeÚnum_hidden_layersrÑ   ÚlayersrØ   r/   rÙ   Ú	layernormr  ÚpoolerÚ	post_init)r1   r   r  rN   r€   r2   s   &&&& €r   r'   ÚIJepaModel.__init__<  s’   ø€ ô 	‰Ñ˜Ô ØŒÜ)¨&ÔPˆŒÜ—m’mÄÀv×G_ÑG_ÔA`Ó$aÑA`¸A¤Z°Ö%7ÑA`Ñ$aÓbˆŒÜŸš f×&8Ñ&8¸f×>SÑ>SÔTˆŒß->”k &Ô)ÀDˆŒà�‰Öùò	 %bs   ÁC)Útie_last_hidden_statesc                óÂ   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          RS[S[,          RS[/# )r   r5   Nrx   ru   rŠ   rŒ   r6   )r8   r9   ry   rP   r   r   r	   )r   r   s   "€r   r   r  O  sv   ø€ ÷  jñ  já—l‘l TÕ)ð jñ ×)Ñ)¨DÕ0ð jñ #'¨¥+ð	 jñ
 Ÿ™ tÕ+ð jñ Ñ+Õ,ð jñ 
$ñ jr!   c                ó¼  € V P                   P                  P                  P                  P                  pVP                  V8w  d   VP                  V4      pV P                  WVR7      p\        V P                  VVR7      pTpV P                   F  p	V	! W„3/ VB pK  	  V P                  V4      p
V P                  e   V P                  V
4      MRp\        W«R7      # )z³
bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, num_patches)`, *optional*):
    Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).
)rx   ru   )r   Úinputs_embedsrŠ   N)Úlast_hidden_stateÚpooler_output)r^   rV   r0   rì   r�   r—   r   r   r  r  r  r	   )r1   r5   rx   ru   rŠ   rŒ   Úexpected_dtypeÚembedding_outputr²   ÚlayerÚsequence_outputr  s   &&&&&,      r   r@   ÚIJepaModel.forwardL  sÍ   € ð  Ÿ™×9Ñ9×DÑD×KÑK×QÑQˆØ×Ñ Ô/Ø'Ÿ?™?¨>Ó:ˆLàŸ?™?ØÐTlð +ó 
Ðô 3Ø—;‘;Ø*Ø)ô
ˆð
 )ˆØ—[”[ˆEÙ! -ÑJÀ6ÑJŠMñ !ð Ÿ.™.¨Ó7ˆØ8<¿¹Ò8O˜Ÿ™ OÔ4ÐUYˆä)¸OÔiÐir!   )r   r^   r  r  r  )FF)NNNN)rB   rC   rD   rE   r'   r   r   r   r@   rG   rH   rI   rJ   s   @@r   r  r  :  sF   ù‡ € ÷õ ð   Ù¨EÔ2Ø÷ jñ  jó ó 3ó  ÷ jð  jr!   r  aÒ  
    IJepa Model transformer with an image classification head on top (a linear layer on top of the final hidden states)
    e.g. for ImageNet.

    <Tip>

        Note that it's possible to fine-tune IJepa on higher resolution images than the ones it has been trained on, by
        setting `interpolate_pos_encoding` to `True` in the forward of the model. This will interpolate the pre-trained
        position embeddings to the higher resolution.

    </Tip>
    )Úcustom_introc                   ó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
# )ÚIJepaForImageClassificationir  c                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   Ú(IJepaForImageClassification.__annotate__�  s   ø€ ÷ 
ñ 
™{ñ 
r!   c                ó8  <€ \         SV `  V4       VP                  V n        \        VR R7      V n        VP                  ^ 8”  d,   \
        P                  ! VP                  VP                  4      M\
        P                  ! 4       V n	        V P                  4        R# )F)r  N)r&   r'   Ú
num_labelsr  rä   r-   r¨   r/   ÚIdentityÚ
classifierr  r®   s   &&€r   r'   Ú$IJepaForImageClassification.__init__�  ss   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ ¸%Ô@ˆŒ
ð OU×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[R,          RS[S[,          RS[/# )r   r5   NÚlabelsru   rŒ   r6   )r8   r9   rP   r   r   r
   )r   r   s   "€r   r   r/  �  sY   ø€ ÷ 
ñ 
á—l‘l TÕ)ð
ñ —‘˜tÕ#ð
ñ #'¨¥+ð	
ñ
 Ñ+Õ,ð
ñ 
ñ
r!   c                ó  € V P                   ! V3RV/VB pVP                  pV P                  VP                  ^R7      4      pRpVe   V P                  ! W'V P
                  3/ VB p\        VVVP                  VP                  R7      # )ab  
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).
ru   )rq   N)ÚlossÚlogitsr²   rå   )	rä   r$  r3  rç   Úloss_functionr   r
   r²   rå   )	r1   r5   r6  ru   rŒ   Úoutputsr)  r9  r8  s	   &&&&,    r   r@   Ú#IJepaForImageClassification.forward�  s›   € ð  /3¯jªjØñ/
à%=ð/
ð ñ/
ˆð
 "×3Ñ3ˆØ—‘ ×!5Ñ!5¸!Ð!5Ó!<Ó=ˆàˆØÒØ×%Ò% f°d·k±kÑLÀVÑLˆDä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r!   )r3  rä   r1  )NNN)rB   rC   rD   rE   r'   r   r   r@   rG   rH   rI   rJ   s   @@r   r-  r-  r  s5   ù‡ € ÷
ó 
ð Ø÷
ñ 
ó ó ÷
ð 
r!   r-  )Nrµ   )rã   r  r-  ).Úcollections.abcr   r   r8   Útorch.nnr-   Ú r   rê   Úactivationsr   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr	   r
   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_ijepar   r�   r   rL   r›   r�   rÂ   rÑ   rã   r  r  r-  Ú__all__rò   r!   r   Ú<module>rK     s  ð÷ /ã Ý å &Ý !Ý 6Ý 9ß Qß FÝ &ß BÑ Bß IÝ 5Ý ,ôH˜2Ÿ9™9ô Hô<S�b—i‘iô S÷l%ô8.)�R—Y‘Yô .)ôbˆr�y‰yô ô Ð+ô ð@ ô/˜?ó /ó ð/ô@�"—)‘)ô ð ô4jÐ%ó 4jó ð4jñn ðôô.
Ð"6ó .
óð.
òb P‚r!   