ó
    ˆŽ¡j¤G  ã                   óÀ  • S SK JrJr  S SKrS SKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SSKJrJr  SS	KJrJr  SS
KJr  SSKJrJrJr  SSKJrJr  SSKJr  SSK J!r!   " S S\RD                  5      r# " S S\RD                  5      r$  S.S\RD                  S\RJ                  S\RJ                  S\RJ                  S\RJ                  S-  S\&S-  S\&S\\   4S jjr' " S S\RD                  5      r( " S S \RD                  5      r) " S! S"\5      r*\ " S# S$\5      5       r+ " S% S&\RD                  5      r,\ " S' S(\+5      5       r-\" S)S*9 " S+ S,\+5      5       r./ S-Qr/g)/é    )Ú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                   ón   ^ • \ rS rSrSrS\4U 4S jjrS\R                  S\R                  4S jr	Sr
U =r$ )	ÚIJepaPatchEmbeddingsé   zÜ
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.
Úconfigc                 óŠ  >• [         TU ]  5         UR                  nUR                  n[	        U[
        5      (       a  UOX"4n[	        U[
        5      (       a  UOX34nUS   US   -  US   US   -  -  U l        X l        X0l        UR                  U l        [        R                  " UR                  UR                  X3S9U l        g )Nr   r   )Úkernel_sizeÚstride)ÚsuperÚ__init__Ú
image_sizeÚ
patch_sizeÚ
isinstancer   Únum_patchesÚnum_channelsÚnnÚConv2dÚhidden_sizeÚ
projection)Úselfr   r    r!   Ú	__class__s       €Ú¶C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/ijepa/modeling_ijepa.pyr   Ú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ˆ�ó    Úpixel_valuesÚreturnc                 óÖ   • UR                   S   nX R                  :w  a  [        SU R                   SU S35      eU R                  U5      R	                  S5      R                  SS5      $ )Nr   zoMake sure that the channel dimension of the pixel values match with the one set in the configuration. Expected z	 but got Ú.é   )Úshaper$   Ú
ValueErrorr(   ÚflattenÚ	transpose)r)   r.   r$   s      r+   ÚforwardÚIJepaPatchEmbeddings.forward-   ss   € Ø#×)Ñ)¨!Ñ,ˆØ×,Ñ,Ó,ÜðØ!×.Ñ.Ð/¨y¸¸ÀaðIóð ð �‰˜|Ó,×4Ñ4°QÓ7×AÑAÀ!ÀQÓGÐGr-   )r    r$   r#   r!   r(   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   ÚtorchÚTensorr7   Ú__static_attributes__Ú__classcell__©r*   s   @r+   r   r      s:   ø† ñðx˜{÷ xðH E§L¡Lð H°U·\±\÷ Hò Hr-   r   c            	       óæ   ^ • \ rS rSrSrSS\S\SS4U 4S jjjrS\R                  S	\
S
\
S\R                  4S jr  SS\R                  S\R                  S-  S\S\R                  4S jjrSrU =r$ )ÚIJepaEmbeddingsé7   zZ
Construct the CLS token, position and patch embeddings. Optionally, also the mask token.
r   Úuse_mask_tokenr/   Nc                 ó  >• [         TU ]  5         U(       a6  [        R                  " [        R
                  " SSUR                  5      5      OS U l        [        U5      U l	        U R                  R                  n[        R                  " [        R                  " SX1R                  5      5      U l        [        R                  " UR                  5      U l        UR                   U l        U R                  R"                  U l        g )Nr   )r   r   r%   Ú	Parameterr>   Úzerosr'   Ú
mask_tokenr   Úpatch_embeddingsr#   ÚrandnÚposition_embeddingsÚDropoutÚhidden_dropout_probÚdropoutr!   r    )r)   r   rF   r#   r*   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-   Ú
embeddingsÚheightÚwidthc                 ó,  • UR                   S   nU R                  R                   S   n[        R                  R	                  5       (       d  XE:X  a  X#:X  a  U R                  $ U R                  nUR                   S   nX R
                  -  nX0R
                  -  n	[        US-  5      n
UR                  SXªU5      nUR                  SSSS5      n[        R                  R                  UX‰4SSS	9nUR                  SSSS5      R                  SSU5      nU$ )
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
r   éÿÿÿÿg      à?r   r   r2   ÚbicubicF)ÚsizeÚmodeÚalign_corners)r3   rM   r>   ÚjitÚ
is_tracingr!   r   ÚreshapeÚpermuter%   Ú
functionalÚinterpolateÚview)r)   rR   rS   rT   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-   r.   Úbool_masked_posrh   c                 ó  • UR                   u  pEpgU R                  U5      nUbX  UR                   S   n	U R                  R                  XIS5      n
UR	                  S5      R                  U
5      nUSU-
  -  X«-  -   nU(       a  X€R                  X†U5      -   nOdX`R                  S   :w  d  XpR                  S   :w  a2  [        SU SU SU R                  S    SU R                  S    S3	5      eX€R                  -   nU R                  U5      nU$ )	Nr   rV   g      ð?r   zInput image size (Ú*z) doesn't match model (z).)r3   rK   rJ   ÚexpandÚ	unsqueezeÚtype_asrh   r    r4   rM   rP   )r)   r.   rj   rh   Ú
batch_sizeÚ_rS   rT   rR   Ú
seq_lengthÚmask_tokensÚmasks               r+   r7   Ú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-   )rP   r    rJ   rK   r!   rM   )F)NF)r9   r:   r;   r<   r=   r   Úboolr   r>   r?   Úintrh   Ú
BoolTensorr7   r@   rA   rB   s   @r+   rD   rD   7   s    ø† ññ;˜{ð ;¸Dð ;ÈT÷ ;ð ;ð%°5·<±<ð %Èð %ÐUXð %Ð]b×]iÑ]iô %ðT 48Ø).ñ	à—l‘lðð ×)Ñ)¨DÑ0ðð #'ð	ð
 
�‰÷ó r-   rD   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingrP   Úkwargsc                 óÞ  • Uc  UR                  S5      S-  n[        R                  " XR                  SS5      5      U-  nUb  X„-   n[        R
                  R                  US[        R                  S9R                  UR                  5      n[        R
                  R                  X†U R                  S9n[        R                  " Xƒ5      n	U	R                  SS5      R                  5       n	X˜4$ )NrV   ç      à¿r2   r   )rd   Údtype)ÚpÚtrainingr   )rX   r>   Úmatmulr6   r%   r_   ÚsoftmaxÚfloat32Útor‚   rP   r„   Ú
contiguous)
ry   rz   r{   r|   r}   r~   rP   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                   ó¶   ^ • \ rS rSrS\4U 4S jjr SS\R                  S\R                  S-  S\\	   S\
\R                  \R                  4   4S	 jjrS
rU =r$ )ÚIJepaAttentioné©   r   c                 ó  >• [         TU ]  5         Xl        UR                  U l        [	        USUR
                  UR                  -  5      U l        UR                  U l        U R                  S-  U l	        SU l
        [        R                  " UR
                  UR                  U R                  -  UR                  S9U l        [        R                  " UR
                  UR                  U R                  -  UR                  S9U l        [        R                  " UR
                  UR                  U R                  -  UR                  S9U l        [        R                  " UR                  U R                  -  UR
                  SS9U l        g )NÚhead_dimr�   F)ÚbiasT)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©r)   r   r*   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-   NÚhidden_statesr}   r   r/   c                 ó¢  • UR                   S S n/ UQSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      n[        R                  " U R                  R                  [        5      n	U	" U UUUU4U R                  (       d  SOU R                  U R                  S.UD6u  p«U
R                  " / UQSP76 R!                  5       n
U R#                  U
5      n
X«4$ )NrV   r   r2   ç        )rP   r~   )r3   r‘   rš   ra   r6   r›   rœ   r   Úget_interfacer   Ú_attn_implementationrŒ   r„   r–   r~   r]   r‰   r�   )r)   r    r}   r   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacer‹   rŠ   s               r+   r7   ÚIJepaAttention.forward¸   sE  € ð $×)Ñ)¨#¨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)r9   r:   r;   r<   r   r   r>   r?   r   r   Útupler7   r@   rA   rB   s   @r+   rŽ   rŽ   ©   sk   ø† ðk˜{÷ kð" /3ñ)à—|‘|ð)ð Ÿ™ tÑ+ð)ð Ð+Ñ,ð	)ð
 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷)ó )r-   rŽ   c                   ój   ^ • \ rS rSrS\4U 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )ÚIJepaMLPéÚ   r   c                 ó  >• [         TU ]  5         Xl        [        UR                     U l        [        R                  " UR                  UR                  5      U l
        [        R                  " UR                  UR                  5      U l        g 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-   r    r/   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ r¬   )rµ   r³   r¶   )r)   r    s     r+   r7   ÚIJepaMLP.forwardâ   s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆàÐr-   )r³   r   rµ   r¶   ©r9   r:   r;   r<   r   r   r>   r?   r7   r@   rA   rB   s   @r+   r¯   r¯   Ú   s1   ø† ðK˜{÷ Kð U§\¡\ð °e·l±l÷ ò r-   r¯   c            	       ó˜   ^ • \ rS rSrS\4U 4S jjr SS\R                  S\R                  S-  S\\	   S\R                  4S	 jjr
S
rU =r$ )Ú
IJepaLayeréê   r   c                 ód  >• [         TU ]  5         [        U5      U l        [        R
                  " UR                  UR                  S9U l        [        R
                  " UR                  UR                  S9U l	        [        U5      U l        [        R                  " UR                  5      U l        g )N©Úeps)r   r   rŽ   Ú	attentionr%   Ú	LayerNormr'   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterr¯   ÚmlprN   rO   rP   rž   s     €r+   r   ÚIJepaLayer.__init__ë   sz   ø€ Ü‰ÑÔÜ'¨Ó/ˆŒÜ "§¢¨V×-?Ñ-?ÀV×EZÑEZÑ [ˆÔÜ!Ÿ|š|¨F×,>Ñ,>ÀF×DYÑDYÑZˆÔÜ˜FÓ#ˆŒÜ—z’z &×"<Ñ"<Ó=ˆ�r-   Nr    r}   r   r/   c                 óò   • UnU R                  U5      nU R                  " X40 UD6u  pU R                  U5      nX-   nUnU R                  U5      nU R	                  U5      nU R                  U5      nX-   nU$ r¬   )rÄ   rÁ   rP   rÅ   rÆ   )r)   r    r}   r   Úresidualrq   s         r+   r7   ÚIJepaLayer.forwardó   s†   € ð !ˆØ×-Ñ-¨mÓ<ˆØŸ>š>¨-ÑRÈ6ÑRÑˆØŸ™ ]Ó3ˆØ%Ñ0ˆð !ˆØ×,Ñ,¨]Ó;ˆØŸ™ Ó/ˆØŸ™ ]Ó3ˆØ%Ñ0ˆàÐr-   )rÁ   rP   rÅ   rÄ   rÆ   r¬   )r9   r:   r;   r<   r   r   r>   r?   r   r   r7   r@   rA   rB   s   @r+   r¼   r¼   ê   s[   ø† ð>˜{÷ >ð /3ñà—|‘|ðð Ÿ™ tÑ+ðð Ð+Ñ,ð	ð
 
�‰÷ó r-   r¼   c                   ó–   ^ • \ rS rSr% \\S'   SrSrSrSr	SS/r
SrSrSrSrSr\\S	.rS
r\R*                  " 5       U 4S j5       rSrU =r$ )ÚIJepaPreTrainedModeli
  r   Úijepar.   )ÚimageTrD   r¼   )r    Ú
attentionsrK   c                 ó8  >• [         TU ]  U5        [        U[        R                  [        R
                  45      (       ac  [        R                  " UR                  SU R                  R                  S9  UR                  b!  [        R                  " UR                  5        gg[        U[        5      (       ac  [        R                  " UR                  SU R                  R                  S9  UR                  b!  [        R                  " UR                  5        ggg)zInitialize the weightsr¢   )ÚmeanÚstdN)r   Ú_init_weightsr"   r%   r˜   r&   ÚinitÚtrunc_normal_Úweightr   Úinitializer_ranger’   Úzeros_rD   rM   rJ   )r)   ry   r*   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-   © )r9   r:   r;   r<   r   Ú__annotations__Ú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_layerr>   Úno_gradrÓ   r@   rA   rB   s   @r+   rÌ   rÌ   
  sv   ø‡ àÓØÐØ$€OØ!ÐØ&*Ð#Ø*¨LÐ9ÐØ€NØÐØÐØ"&ÐØ!Ðà#Ø$ñÐð ,Ðà
‡]‚]ƒ_ô
/ó ö
/r-   rÌ   c                   ój   ^ • \ rS rSrS\4U 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )ÚIJepaPooleri+  r   c                 ó²   >• [         TU ]  5         [        R                  " UR                  UR
                  5      U l        [        UR                     U l	        g 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-   r    r/   c                 ó\   • US S 2S4   nU R                  U5      nU R                  U5      nU$ )Nr   )rí   rï   )r)   r    Úfirst_token_tensorÚpooled_outputs       r+   r7   ÚIJepaPooler.forward1  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr-   )rï   rí   rº   rB   s   @r+   rê   rê   +  s/   ø† ð4˜{÷ 4ð
 U§\¡\ð °e·l±l÷ ò r-   rê   c                   óê   ^ • \ rS rSrSS\S\S\4U 4S jjjr\\" SS9\	    SS	\
R                  S-  S
\
R                  S-  S\S-  S\
R                  S-  S\\   S\4S jj5       5       5       rSrU =r$ )Ú
IJepaModeli:  Fr   Úadd_pooling_layerrF   c                 ó”  >• [         TU ]  U5        Xl        [        XS9U l        [
        R                  " [        UR                  5       Vs/ s H  n[        U5      PM     sn5      U l
        [
        R                  " UR                  UR                  S9U l        U(       a  [        U5      OSU l        U R#                  5         gs  snf )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.
)rF   r¿   N)r   r   r   rD   rR   r%   Ú
ModuleListÚrangeÚnum_hidden_layersr¼   ÚlayersrÂ   r'   rÃ   Ú	layernormrê   ÚpoolerÚ	post_init)r)   r   r÷   rF   rq   r*   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_statesNr.   rj   rh   r}   r   r/   c                 ó¦  • U R                   R                  R                  R                  R                  nUR                  U:w  a  UR                  U5      nU R                  XUS9n[        U R                  UUS9nUnU R                   H  n	U	" X„40 UD6nM     U R                  U5      n
U R                  b  U R                  U
5      OSn[        X«S9$ )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).
)rj   rh   )r   Úinputs_embedsr}   N)Úlast_hidden_stateÚpooler_output)rR   rK   r(   rÖ   r‚   rˆ   r   r   rü   rý   rþ   r
   )r)   r.   rj   rh   r}   r   Úexpected_dtypeÚembedding_outputr    ÚlayerÚsequence_outputró   s               r+   r7   Ú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   rR   rý   rü   rþ   )FF)NNNN)r9   r:   r;   r<   r   rv   r   r   r   r   r>   r?   rx   r   r   r
   r7   r@   rA   rB   s   @r+   rö   rö   :  sÃ   ø† ñ˜{ð ¸tð Ð]a÷ ð ð   Ù¨EÑ2Øð -1Ø37Ø04Ø.2ñ jà—l‘l TÑ)ð jð ×)Ñ)¨DÑ0ð jð #'¨¡+ð	 jð
 Ÿ™ tÑ+ð jð Ð+Ñ,ð jð 
$ô jó ó 3ó  ö 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                   ó¬   ^ • \ rS rSrS\4U 4S jjr\\   SS\R                  S-  S\R                  S-  S\
S-  S\\   S	\4
S
 jj5       5       rSrU =r$ )ÚIJepaForImageClassificationir  r   c                 ó.  >• [         TU ]  U5        UR                  U l        [        USS9U l        UR                  S:”  a+  [
        R                  " UR                  UR                  5      O[
        R                  " 5       U l	        U R                  5         g )NF)r÷   r   )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-   Nr.   Úlabelsrh   r   r/   c                 ó  • U R                   " U4SU0UD6nUR                  nU R                  UR                  SS95      nSnUb  U R                  " X'U R
                  40 UD6n[        UUUR                  UR                  S9$ )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).
rh   r   )rd   N)ÚlossÚlogitsr    rÏ   )	rÍ   r  r  rÑ   Úloss_functionr   r   r    rÏ   )	r)   r.   r  rh   r   Úoutputsr	  r  r  s	            r+   r7   Ú#IJepaForImageClassification.forward�  s›   € ð  /3¯jªjØñ/
à%=ð/
ð ñ/
ˆð
 "×3Ñ3ˆØ—‘ ×!5Ñ!5¸!Ð!5Ð!<Ó=ˆàˆØÑØ×%Ò% f°d·k±kÑLÀVÑLˆDä$ØØØ!×/Ñ/Ø×)Ñ)ñ	
ð 	
r-   )r  rÍ   r  )NNN)r9   r:   r;   r<   r   r   r   r   r>   r?   rv   r   r   r   r7   r@   rA   rB   s   @r+   r  r  r  s‚   ø† ð
˜{÷ 
ð Øð -1Ø&*Ø04ñ	
à—l‘l TÑ)ð
ð —‘˜tÑ#ð
ð #'¨¡+ð	
ð
 Ð+Ñ,ð
ð 
ô
ó ó ö
r-   r  )rÌ   rö   r  )Nr¢   )0Úcollections.abcr   r   r>   Ú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   ÚModuler   rD   r?   ÚfloatrŒ   rŽ   r¯   r¼   rÌ   rê   rö   r  Ú__all__rÚ   r-   r+   Ú<module>r*     s  ð÷ /ã Ý å &Ý !Ý 6Ý 9ß Qß FÝ &ß BÑ Bß IÝ 5Ý ,ôH˜2Ÿ9™9ô Hô<S�b—i‘iô Sðx !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(õ%ô8.)�R—Y‘Yô .)ôbˆr�y‰yô ô Ð+ô ð@ ô/˜?ó /ó ð/ô@�"—)‘)ô ð ô4jÐ%ó 4jó ð4jñn ðñô.
Ð"6ó .
óð.
òb P�r-   