ó
    qyüiØŒ  ã                   óæ  • S r SSKJr  SSKJr  SSKJr  SSK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Jr  SSKJrJr  SSKJr  SSKJrJrJ r J!r!J"r"  SSK#J$r$  SSK%J&r&  SSK'J(r(J)r)J*r*  \ " SS9\ " S S\5      5       5       r+\\ " SS9 " S S\5      5       5       r,\ \ " S S\5      5       5       r- " S S\
R\                  5      r/ " S S \
R\                  5      r0 SAS!\
R\                  S"\	Rb                  S#\	Rb                  S$\	Rb                  S%\	Rb                  S-  S&\2S'\24S( jjr3 " S) S*\
R\                  5      r4 " S+ S,\
R\                  5      r5 " S- S.\5      r6\  " S/ S0\5      5       r7 " S1 S2\
R\                  5      r8\ " S3S9 " S4 S5\75      5       r9\ " S6S9 " S7 S8\75      5       r: " S9 S:\
R\                  5      r;\  " S; S<\75      5       r<\ " S=S9 " S> S?\75      5       r=/ S@Qr>g)BzPyTorch Siglip model.é    )ÚCallable)Ú	dataclass)ÚAnyN)Únné   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚImageClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚ	torch_int)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚSiglipConfigÚSiglipTextConfigÚSiglipVisionConfigz}
    Base class for vision model's outputs that also contains image embeddings of the pooling of the last hidden states.
    )Úcustom_introc                   óÎ   • \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr
\\R                  S4   S-  \S'   Sr\\R                  S4   S-  \S'   S	rg)
ÚSiglipVisionModelOutputé+   zì
image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim)` *optional* returned when model is initialized with `with_projection=True`):
    The image embeddings obtained by applying the projection layer to the pooler_output.
NÚimage_embedsÚlast_hidden_state.Úhidden_statesÚ
attentions© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r!   ÚtorchÚFloatTensorÚ__annotations__r"   r#   Útupler$   Ú__static_attributes__r%   ó    Úg/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/siglip/modeling_siglip.pyr   r   +   sr   ‡ ñð
 .2€L�%×#Ñ# dÑ*Ó1Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ö;r0   r   ze
    Base class for text model's outputs that also contains a pooling of the last hidden states.
    c                   óÎ   • \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr
\\R                  S4   S-  \S'   Sr\\R                  S4   S-  \S'   S	rg)
ÚSiglipTextModelOutputé>   zê
text_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim)` *optional* returned when model is initialized with `with_projection=True`):
    The text embeddings obtained by applying the projection layer to the pooler_output.
NÚtext_embedsr"   .r#   r$   r%   )r&   r'   r(   r)   r*   r5   r+   r,   r-   r"   r#   r.   r$   r/   r%   r0   r1   r3   r3   >   sr   ‡ ñð
 -1€K�×"Ñ" TÑ)Ó0Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ö;r0   r3   c                   ó  • \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr
\R                  S-  \S'   Sr\R                  S-  \S'   Sr\R                  S-  \S'   Sr\\S	'   Sr\\S
'   S\\   4S jrSrg)ÚSiglipOutputéQ   am  
loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `return_loss` is `True`):
    Contrastive loss for image-text similarity.
logits_per_image (`torch.FloatTensor` of shape `(image_batch_size, text_batch_size)`):
    The scaled dot product scores between `image_embeds` and `text_embeds`. This represents the image-text
    similarity scores.
logits_per_text (`torch.FloatTensor` of shape `(text_batch_size, image_batch_size)`):
    The scaled dot product scores between `text_embeds` and `image_embeds`. This represents the text-image
    similarity scores.
text_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
    The text embeddings obtained by applying the projection layer to the pooled output of [`SiglipTextModel`].
image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
    The image embeddings obtained by applying the projection layer to the pooled output of [`SiglipVisionModel`].
text_model_output (`BaseModelOutputWithPooling`):
    The output of the [`SiglipTextModel`].
vision_model_output (`BaseModelOutputWithPooling`):
    The output of the [`SiglipVisionModel`].
NÚlossÚlogits_per_imageÚlogits_per_textr5   r!   Útext_model_outputÚvision_model_outputÚreturnc                 óB   • [        S U R                  5        5       5      $ )Nc              3   óp   #   • U  H,  n[        U[        5      (       a  UR                  5       OUv •  M.     g 7f©N)Ú
isinstancer   Úto_tuple)Ú.0Úvs     r1   Ú	<genexpr>Ú(SiglipOutput.to_tuple.<locals>.<genexpr>q   s)   é € Ð^ÒP]È1¤Z°´;×%?Ñ%?�Q—Z‘Z”\ÀQÔFÒP]ùs   ‚46)r.   Úvalues©Úselfs    r1   rC   ÚSiglipOutput.to_tuplep   s   € ÜÑ^ÐPT×P[ÑP[ÔP]Ó^Ó^Ð^r0   r%   )r&   r'   r(   r)   r*   r9   r+   r,   r-   r:   r;   r5   r!   r<   r   r=   r.   r   rC   r/   r%   r0   r1   r7   r7   Q   s�   ‡ ñð& &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø15Ð�e×'Ñ'¨$Ñ.Ó5Ø04€O�U×&Ñ&¨Ñ-Ó4Ø,0€K�×"Ñ" TÑ)Ó0Ø-1€L�%×#Ñ# dÑ*Ó1Ø48ÐÐ1Ó8Ø6:ÐÐ3Ó:ð_˜% ™*÷ _r0   r7   c                   ó°   ^ • \ rS rSrS\4U 4S jjrS\R                  S\S\S\R                  4S jr	SS	\R                  S\R                  4S
 jjrSrU =r$ )ÚSiglipVisionEmbeddingsét   Úconfigc                 ó^  >• [         TU ]  5         Xl        UR                  U l        UR
                  U l        UR                  U l        [        R                  " UR                  U R                  U R                  U R                  SS9U l
        U R
                  U R                  -  S-  U l        U R                  U l        [        R                  " U R                  U R                  5      U l        U R                  S[         R"                  " U R                  5      R%                  S5      SS9  g )NÚvalid)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingé   Úposition_ids©r   éÿÿÿÿF©Ú
persistent)ÚsuperÚ__init__rO   Úhidden_sizeÚ	embed_dimÚ
image_sizeÚ
patch_sizer   ÚConv2dÚnum_channelsÚpatch_embeddingÚnum_patchesÚnum_positionsÚ	EmbeddingÚposition_embeddingÚregister_bufferr+   ÚarangeÚexpand©rJ   rO   Ú	__class__s     €r1   r^   ÚSiglipVisionEmbeddings.__init__u   sä   ø€ Ü‰ÑÔØŒØ×+Ñ+ˆŒØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒä!ŸyšyØ×+Ñ+ØŸ™ØŸ™Ø—?‘?Øñ 
ˆÔð !ŸO™O¨t¯©Ñ>À1ÑDˆÔØ!×-Ñ-ˆÔÜ"$§,¢,¨t×/AÑ/AÀ4Ç>Á>Ó"RˆÔØ×Ñ˜^¬U¯\ª\¸$×:LÑ:LÓ-M×-TÑ-TÐU\Ó-]ÐjoÐÒpr0   Ú
embeddingsÚheightÚwidthr>   c                 ó�  • UR                   S   nU R                  R                  R                   S   n[        R                  R                  5       (       d%  XE:X  a   X#:X  a  U R                  U R                  5      $ U R                  R                  R                  S5      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 and no class embeddings.

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   r   rZ   g      à?r   rW   ÚbicubicF)ÚsizeÚmodeÚalign_corners)Úshaperi   Úweightr+   ÚjitÚ
is_tracingrX   Ú	unsqueezerb   r   ÚreshapeÚpermuter   Ú
functionalÚinterpolateÚview)rJ   rp   rq   rr   rf   rg   Úpatch_pos_embedÚdimÚ
new_heightÚ	new_widthÚsqrt_num_positionss              r1   Úinterpolate_pos_encodingÚ/SiglipVisionEmbeddings.interpolate_pos_encoding‰   s:  € ð !×&Ñ& qÑ)ˆØ×/Ñ/×6Ñ6×<Ñ<¸QÑ?ˆô �y‰y×#Ñ#×%Ñ%¨+Ó*FÈ6Ë?Ø×*Ñ*¨4×+<Ñ+<Ó=Ð=à×1Ñ1×8Ñ8×BÑBÀ1ÓEˆà×Ñ˜rÑ"ˆàŸ™Ñ.ˆ
ØŸ_™_Ñ,ˆ	ä& }°cÑ'9Ó:ÐØ)×1Ñ1°!Ð5GÐ]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØÐ(ØØð	 4ð 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆØÐr0   Úpixel_valuesc                 óX  • UR                   u    p4nU R                  R                  R                  nU R                  UR	                  US95      nUR                  S5      R                  SS5      nU(       a  X€R                  X„U5      -   nU$ X€R                  U R                  5      -   nU$ )N)ÚdtyperW   r   )
rx   re   ry   r‹   ÚtoÚflattenÚ	transposer‡   ri   rX   )	rJ   r‰   r‡   Ú_rq   rr   Útarget_dtypeÚpatch_embedsrp   s	            r1   ÚforwardÚSiglipVisionEmbeddings.forward¯   s¥   € Ø*×0Ñ0Ñˆˆ1�eØ×+Ñ+×2Ñ2×8Ñ8ˆØ×+Ñ+¨L¯O©OÀ,¨OÐ,OÓPˆØ!×)Ñ)¨!Ó,×6Ñ6°q¸!Ó<ˆ
æ#Ø#×&CÑ&CÀJÐX]Ó&^Ñ^ˆJð Ðð $×&=Ñ&=¸d×>OÑ>OÓ&PÑPˆJØÐr0   )rO   r`   ra   rf   rg   re   rb   ri   ©F)r&   r'   r(   r)   r   r^   r+   ÚTensorÚintr‡   r,   r’   r/   Ú__classcell__©rn   s   @r1   rM   rM   t   se   ø† ðqÐ1÷ qð($°5·<±<ð $Èð $ÐUXð $Ð]b×]iÑ]iô $ñL
 E×$5Ñ$5ð 
ÐZ_×ZfÑZf÷ 
ó 
r0   rM   c            	       ó¶   ^ • \ rS rSrS\4U 4S jjr   SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  4S	 jjr
S
rU =r$ )ÚSiglipTextEmbeddingsé½   rO   c                 óN  >• [         TU ]  5         UR                  n[        R                  " UR
                  U5      U l        [        R                  " UR                  U5      U l        U R                  S[        R                  " UR                  5      R                  S5      SS9  g )NrX   rY   Fr[   )r]   r^   r_   r   rh   Ú
vocab_sizeÚtoken_embeddingÚmax_position_embeddingsri   rj   r+   rk   rl   ©rJ   rO   r`   rn   s      €r1   r^   ÚSiglipTextEmbeddings.__init__¾   sƒ   ø€ Ü‰ÑÔØ×&Ñ&ˆ	ä!Ÿ|š|¨F×,=Ñ,=¸yÓIˆÔÜ"$§,¢,¨v×/MÑ/MÈyÓ"YˆÔð 	×ÑØœEŸLšL¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	ò 	
r0   NÚ	input_idsrX   Úinputs_embedsr>   c                 ó<  • Ub  UR                   S   OUR                   S   nU R                  R                  R                   S   nXE:”  a  [        SU SU 35      eUc  U R                  S S 2S U24   nUc  U R                  U5      nU R                  U5      nX6-   nU$ )NrZ   éþÿÿÿr   zRSequence length must be less than max_position_embeddings (got `sequence length`: z and max_position_embeddings: )rx   ri   ry   Ú
ValueErrorrX   rž   )rJ   r¢   rX   r£   Ú
seq_lengthÚmax_position_embeddingÚposition_embeddingsrp   s           r1   r’   ÚSiglipTextEmbeddings.forwardÊ   sÁ   € ð -6Ñ,A�Y—_‘_ RÒ(À}×GZÑGZÐ[]ÑG^ˆ
Ø!%×!8Ñ!8×!?Ñ!?×!EÑ!EÀaÑ!HÐàÓ.ÜØdØ�,Ð<Ð=SÐ<TðVóð ð
 ÑØ×,Ñ,ªQ°°°¨^Ñ<ˆLàÑ Ø ×0Ñ0°Ó;ˆMà"×5Ñ5°lÓCÐØ"Ñ8ˆ
àÐr0   )ri   rž   ©NNN)r&   r'   r(   r)   r   r^   r+   Ú
LongTensorr,   r•   r’   r/   r—   r˜   s   @r1   rš   rš   ½   sp   ø† ð

Ð/÷ 

ð .2Ø04Ø26ñ	à×#Ñ# dÑ*ðð ×&Ñ&¨Ñ-ðð ×(Ñ(¨4Ñ/ð	ð
 
�‰÷ó r0   rš   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutc                 ó°  • [         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$ )NrZ   r¥   )rƒ   r‹   )ÚpÚtrainingr   rW   )r+   ÚmatmulrŽ   r   r   ÚsoftmaxÚfloat32rŒ   r‹   r³   r¶   Ú
contiguous)
r­   r®   r¯   r°   r±   r²   r³   ÚkwargsÚattn_weightsÚattn_outputs
             r1   Úeager_attention_forwardr¾   å   s°   € ô —<’< §}¡}°R¸Ó'<Ó=ÀÑG€LØÑ!Ø#Ñ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÐS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨È6Ï?É?Ð(Ð[€Lä—,’,˜|Ó3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ$Ð$r0   c            
       ó®   ^ • \ rS rSrSrU 4S jr S
S\R                  S\R                  S-  S\\R                  \R                  S-  4   4S jjr	S	r
U =r$ )ÚSiglipAttentionéü   z=Multi-headed attention from 'Attention Is All You Need' paperc                 ó   >• [         TU ]  5         Xl        UR                  U l        UR
                  U l        U R                  U R                  -  U l        U R                  U R                  -  U R                  :w  a&  [        SU R                   SU R                   S35      eU R                  S-  U l	        UR                  U l        SU l        [        R                  " U R                  U R                  5      U l        [        R                  " U R                  U R                  5      U l        [        R                  " U R                  U R                  5      U l        [        R                  " U R                  U R                  5      U l        g )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).ç      à¿F)r]   r^   rO   r_   r`   Únum_attention_headsÚ	num_headsÚhead_dimr¦   ÚscaleÚattention_dropoutr³   Ú	is_causalr   ÚLinearÚk_projÚv_projÚq_projÚout_projrm   s     €r1   r^   ÚSiglipAttention.__init__ÿ   s  ø€ Ü‰ÑÔØŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØ�=‰=˜4Ÿ>™>Ñ)¨T¯^©^Ó;ÜØMÈdÏnÉnÐM]ð ^Ø—N‘NÐ# 2ð'óð ð —]‘] DÑ(ˆŒ
Ø×/Ñ/ˆŒØˆŒä—i’i §¡°·±Ó?ˆŒÜ—i’i §¡°·±Ó?ˆŒÜ—i’i §¡°·±Ó?ˆŒÜŸ	š	 $§.¡.°$·.±.ÓAˆ�r0   Nr#   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U R                  U R                  U R                  (       d  SOU R                  S9u  p«U
R                   " / UQSP76 R#                  5       n
U R%                  U
5      n
X«4$ )z#Input shape: Batch x Time x ChannelNrZ   r   rW   ç        )rÉ   r²   r³   )rx   rÆ   rÍ   r�   rŽ   rË   rÌ   r   Úget_interfacerO   Ú_attn_implementationr¾   rÉ   rÇ   r¶   r³   r}   rº   rÎ   )rJ   r#   r±   r»   Úinput_shapeÚhidden_shapeÚqueriesÚkeysrH   Úattention_interfacer½   r¼   s               r1   r’   ÚSiglipAttention.forward  s6  € ð $×)Ñ)¨#¨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ˆàÐ(Ð(r0   )rO   r³   r`   rÆ   rÉ   rË   rÅ   rÎ   rÍ   rÇ   rÌ   rA   )r&   r'   r(   r)   r*   r^   r+   r•   r.   r’   r/   r—   r˜   s   @r1   rÀ   rÀ   ü   s[   ø† ÙGõBð. /3ñ!)à—|‘|ð!)ð Ÿ™ tÑ+ð!)ð
 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷!)ó !)r0   rÀ   c                   ób   ^ • \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )Ú	SiglipMLPi8  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 rA   )r]   r^   rO   r	   Ú
hidden_actÚactivation_fnr   rÊ   r_   Úintermediate_sizeÚfc1Úfc2rm   s     €r1   r^   ÚSiglipMLP.__init__9  sb   ø€ Ü‰ÑÔØŒÜ# F×$5Ñ$5Ñ6ˆÔÜ—9’9˜V×/Ñ/°×1IÑ1IÓJˆŒÜ—9’9˜V×5Ñ5°v×7IÑ7IÓJˆ�r0   r#   r>   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rA   )rà   rÞ   rá   )rJ   r#   s     r1   r’   ÚSiglipMLP.forward@  s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆØÐr0   )rÞ   rO   rà   rá   )
r&   r'   r(   r)   r^   r+   r•   r’   r/   r—   r˜   s   @r1   rÛ   rÛ   8  s)   ø† õKð U§\¡\ð °e·l±l÷ ò r0   rÛ   c            	       óœ   ^ • \ rS rSrS\\-  4U 4S jjr\S\R                  S\R                  S\
\   S\R                  4S j5       rS	rU =r$ )
ÚSiglipEncoderLayeriG  rO   c                 ó<  >• [         TU ]  5         UR                  U l        [        R
                  " U R                  UR                  S9U l        [        U5      U l	        [        R
                  " U R                  UR                  S9U l
        [        U5      U l        g ©N©Úeps)r]   r^   r_   r`   r   Ú	LayerNormÚlayer_norm_epsÚlayer_norm1rÀ   Ú	self_attnÚlayer_norm2rÛ   Úmlprm   s     €r1   r^   ÚSiglipEncoderLayer.__init__H  sm   ø€ Ü‰ÑÔØ×+Ñ+ˆŒÜŸ<š<¨¯©¸F×<QÑ<QÑRˆÔÜ(¨Ó0ˆŒÜŸ<š<¨¯©¸F×<QÑ<QÑRˆÔÜ˜VÓ$ˆ�r0   r#   r±   r»   r>   c                 ó²   • UnU R                  U5      nU R                  " SUUS.UD6u  pXA-   nUnU R                  U5      nU R                  U5      nXA-   nU$ )N)r#   r±   r%   )rí   rî   rï   rð   )rJ   r#   r±   r»   Úresidualr�   s         r1   r’   ÚSiglipEncoderLayer.forwardP  sz   € ð !ˆà×(Ñ(¨Ó7ˆØŸ>š>ð 
Ø'Ø)ñ
ð ñ
Ñˆð
 !Ñ0ˆà ˆØ×(Ñ(¨Ó7ˆØŸ™ Ó/ˆØ Ñ0ˆàÐr0   )r`   rí   rï   rð   rî   )r&   r'   r(   r)   r   r   r^   r   r+   r•   r   r   r,   r’   r/   r—   r˜   s   @r1   ræ   ræ   G  sd   ø† ð%Ð1Ð4DÑD÷ %ð ðà—|‘|ðð Ÿ™ðð Ð+Ñ,ð	ð
 
×	Ñ	óó ör0   ræ   c                   ó|   • \ rS rSr% \\S'   SrSrSr/ SQr	Sr
SrSrSr\\S.r\R$                  " 5       S 5       rS	rg
)ÚSiglipPreTrainedModelii  rO   Úsiglip)ÚimageÚtextT)rš   rM   ræ   Ú#SiglipMultiheadAttentionPoolingHead)r#   r$   c                 óH  • [        U[        5      (       Ga  [        U R                  [        5      (       a   U R                  R                  R
                  OU R                  R
                  n[        R                  " UR                  R                  S[        R                  " U5      -  S9  [        US5      (       a\  [        R                  " UR                  [        R                   " UR                  R"                  S   5      R%                  S5      5        gg[        U[&        R(                  5      (       a!  [        R*                  " UR                  5        g[        U[,        5      (       GaQ  [        R.                  " UR0                  R                  5        [        R.                  " UR2                  R                  5        [        R.                  " UR4                  R                  5        [        R.                  " UR6                  R                  5        [        R8                  " UR0                  R:                  5        [        R8                  " UR2                  R:                  5        [        R8                  " UR4                  R:                  5        [        R8                  " UR6                  R:                  5        g[        U[<        5      (       a§  [        R.                  " UR>                  R                  5        [        R.                  " UR@                  R                  5        [        R                  " UR>                  R:                  SS9  [        R                  " UR@                  R:                  SS9  g[        U[B        5      (       au  [        R.                  " URD                  5        [        R.                  " URF                  RH                  5        [        R8                  " URF                  RJ                  5        g[        U[L        5      (       aA  [        R8                  " URN                  5        [        R8                  " URP                  5        g[        U[R        5      (       ab  [        R                  " URT                  R                  U R                  R                  R
                  S-  U R                  RV                  -  S9  g[        U[&        RX                  [&        RZ                  45      (       aO  [        R\                  " UR                  5        UR:                  b!  [        R8                  " UR:                  5        gg[        U[&        R^                  5      (       aA  [        R8                  " UR:                  5        [        R`                  " UR                  5        g[        U[b        5      (       a\  [        R                  " UR                  [        R                   " UR                  R"                  S   5      R%                  S5      5        gg)	zInitialize the weightsr   )ÚstdrX   rZ   rY   g�íµ ÷Æ°>rÃ   N)2rB   rM   rO   r   Úvision_configr_   ÚinitÚnormal_ri   ry   ÚnpÚsqrtÚhasattrÚcopy_rX   r+   rk   rx   rl   r   rh   Údefault_flax_embed_init_rÀ   Úxavier_uniform_rÍ   rË   rÌ   rÎ   Úzeros_ÚbiasrÛ   rà   rá   rú   ÚprobeÚ	attentionÚin_proj_weightÚin_proj_biasÚSiglipModelÚlogit_scaleÚ
logit_biasÚSiglipForImageClassificationÚ
classifierÚinitializer_factorrÊ   rc   Úlecun_normal_rë   Úones_rš   )rJ   r­   rr   s      r1   Ú_init_weightsÚ#SiglipPreTrainedModel._init_weights€  s²  € ô �fÔ4×5Ò5ô ˜dŸk™k¬<×8Ñ8ð —‘×)Ñ)×5Ò5à—[‘[×,Ñ,ð ô
 �LŠL˜×2Ñ2×9Ñ9¸qÄ2Ç7Â7È5Ã>Ñ?QÒRÜ�v˜~×.Ñ.Ü—
’
˜6×.Ñ.´·²¸V×=PÑ=P×=VÑ=VÐWYÑ=ZÓ0[×0bÑ0bÐcjÓ0kÕlð /ä˜¤§¡×-Ñ-Ü×)Ò)¨&¯-©-Õ8Ü˜¤×0Ò0Ü× Ò  §¡×!5Ñ!5Ô6Ü× Ò  §¡×!5Ñ!5Ô6Ü× Ò  §¡×!5Ñ!5Ô6Ü× Ò  §¡×!7Ñ!7Ô8Ü�KŠK˜Ÿ™×*Ñ*Ô+Ü�KŠK˜Ÿ™×*Ñ*Ô+Ü�KŠK˜Ÿ™×*Ñ*Ô+Ü�KŠK˜Ÿ™×,Ñ,Õ-Ü˜¤	×*Ñ*Ü× Ò  §¡×!2Ñ!2Ô3Ü× Ò  §¡×!2Ñ!2Ô3Ü�LŠL˜Ÿ™Ÿ™¨dÒ3Ü�LŠL˜Ÿ™Ÿ™¨dÓ3Ü˜Ô C×DÑDÜ× Ò  §¡Ô.Ü× Ò  ×!1Ñ!1×!@Ñ!@ÔAÜ�KŠK˜×(Ñ(×5Ñ5Õ6Ü˜¤×,Ñ,Ü�KŠK˜×*Ñ*Ô+Ü�KŠK˜×)Ñ)Õ*Ü˜Ô <×=Ñ=Ü�LŠLØ×!Ñ!×(Ñ(Ø—K‘K×-Ñ-×9Ñ9¸4Ñ?À$Ç+Á+×B`ÑB`Ñ`óô ˜¤§¡¬B¯I©IÐ 6×7Ñ7Ü×Ò˜vŸ}™}Ô-Ø�{‰{Ñ&Ü—’˜FŸK™KÕ(ð 'ä˜¤§¡×-Ñ-Ü�KŠK˜Ÿ™Ô$Ü�JŠJ�v—}‘}Õ%Ü˜Ô 4×5Ñ5Ü�JŠJ�v×*Ñ*¬E¯LªL¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhð 6r0   r%   N)r&   r'   r(   r)   r   r-   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_attention_backendræ   rÀ   Ú_can_record_outputsr+   Úno_gradr  r/   r%   r0   r1   rö   rö   i  sg   ‡ àÓØ ÐØ(ÐØ&*Ð#òÐð  ÐØ€NØÐØ"&Ðð ,Ø%ñÐð
 ‡]‚]ƒ_ñ/ió ó/ir0   rö   c                   óz   ^ • \ rS rSrSrS\4U 4S jjr\ SS\R                  S-  S\
\   S\4S	 jj5       rS
rU =r$ )ÚSiglipEncoderi´  z�
Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
[`SiglipEncoderLayer`].

Args:
    config: SiglipConfig
rO   c                 óÖ   >• [         TU ]  5         Xl        [        R                  " [        UR                  5       Vs/ s H  n[        U5      PM     sn5      U l        SU l	        g s  snf )NF)
r]   r^   rO   r   Ú
ModuleListÚrangeÚnum_hidden_layersræ   ÚlayersÚgradient_checkpointing)rJ   rO   r�   rn   s      €r1   r^   ÚSiglipEncoder.__init__½  sS   ø€ Ü‰ÑÔØŒÜ—m’mÌÈv×OgÑOgÔIhÓ$iÒIhÀAÔ%7¸Ö%?ÑIhÑ$iÓjˆŒØ&+ˆÕ#ùò %js   ½A&Nr±   r»   r>   c                 óR   • UnU R                    H  nU" UU40 UD6nM     [        US9$ )N)r"   )r&  r   )rJ   r£   r±   r»   r#   Úencoder_layers         r1   r’   ÚSiglipEncoder.forwardÄ  s>   € ð &ˆØ!Ÿ[œ[ˆMÙ)ØØñð ñŠMñ )ô °Ñ?Ð?r0   )rO   r'  r&  rA   )r&   r'   r(   r)   r*   r   r^   r   r+   r•   r   r   r   r’   r/   r—   r˜   s   @r1   r!  r!  ´  s_   ø† ñð,˜|÷ ,ð ð /3ñ@ð Ÿ™ tÑ+ð@ð Ð+Ñ,ð	@ð
 
ô@ó ö@r0   r!  zK
    The text model from SigLIP without any head or projection on top.
    c                   óê   ^ • \ rS rSr% \\S'   SrSrSrS\4U 4S jjr	\
\" SS9\   SS
\R                  S	-  S\R                  S	-  S\R                  S	-  S\\   S\4
S jj5       5       5       rSrU =r$ )ÚSiglipTextModeliÖ  rO   )rù   Ú
text_modelrž   c                 ó8  >• [         TU ]  U5        Xl        UR                  n[	        U5      U l        [        U5      U l        [        R                  " X!R                  S9U l        [        R                  " X!R                  5      U l        U R                  5         g rè   )r]   r^   rO   r_   rš   rp   r!  Úencoderr   rë   rì   Úfinal_layer_normrÊ   Úprojection_sizeÚheadÚ	post_initr    s      €r1   r^   ÚSiglipTextModel.__init__á  so   ø€ Ü‰Ñ˜Ô ØŒØ×&Ñ&ˆ	Ü.¨vÓ6ˆŒÜ$ VÓ,ˆŒÜ "§¢¨Y×<QÑ<QÑ RˆÔä—I’I˜i×)?Ñ)?Ó@ˆŒ	Ø�‰Õr0   F©Útie_last_hidden_statesNr¢   r±   rX   r»   r>   c                 ób  • Uc  [        S5      eUR                  5       nUR                  SUS   5      nU R                  XS9n[	        U R
                  UUS9nU R                  " SUUS.UD6nUR                  nU R                  U5      nUSS2SSS24   n	U R                  U	5      n	[        UU	S9$ )	aT  
Examples:

```python
>>> from transformers import AutoTokenizer, SiglipTextModel

>>> model = SiglipTextModel.from_pretrained("google/siglip-base-patch16-224")
>>> tokenizer = AutoTokenizer.from_pretrained("google/siglip-base-patch16-224")

>>> # important: make sure to set padding="max_length" as that's how the model was trained
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding="max_length", return_tensors="pt")

>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
>>> pooled_output = outputs.pooler_output  # pooled (EOS token) states
```NzYou have to specify input_idsrZ   )r¢   rX   )rO   r£   r±   )r£   r±   ©r"   Úpooler_outputr%   )r¦   ru   r�   rp   r
   rO   r0  r"   r1  r3  r   )
rJ   r¢   r±   rX   r»   rÔ   r#   Úencoder_outputsr"   Úpooled_outputs
             r1   r’   ÚSiglipTextModel.forwardì  s×   € ð4 ÑÜÐ<Ó=Ð=à—n‘nÓ&ˆØ—N‘N 2 {°2¡Ó7ˆ	àŸ™°)˜ÐWˆô 3Ø—;‘;Ø'Ø)ñ
ˆð ,0¯<ª<ð ,
Ø'Ø)ñ,
ð ñ,
ˆð ,×=Ñ=ÐØ ×1Ñ1Ð2CÓDÐð *ª!¨R²¨(Ñ3ˆØŸ	™	 -Ó0ˆä)Ø/Ø'ñ
ð 	
r0   )rO   rp   r0  r1  r3  r«   )r&   r'   r(   r)   r   r-   r  r  Ú_input_embed_layerr^   r   r   r   r+   r•   r   r   r   r’   r/   r—   r˜   s   @r1   r-  r-  Ö  s¯   ø‡ ð ÓØ ÐØ$ÐØ*Ðð	Ð/÷ 	ð  Ù¨EÑ2Øð *.Ø.2Ø,0ñ	6
à—<‘< $Ñ&ð6
ð Ÿ™ tÑ+ð6
ð —l‘l TÑ)ð	6
ð
 Ð+Ñ,ð6
ð 
$ô6
ó ó 3ó  ö6
r0   r-  zM
    The vision model from SigLIP without any head or projection on top.
    c            
       óš   ^ • \ rS rSr% \\S'   SrSrSrSr	S\4U 4S jjr
\\" SS	9\ SS
\S-  S\\   S\4S jj5       5       5       rSrU =r$ )ÚSiglipVisionModeli(  rO   r‰   ©rø   Úvision_modelre   c                 óx  >• [         TU ]  U5        Xl        UR                  n[	        U5      U l        [        U5      U l        [        R                  " X!R                  S9U l        [        US5      (       d  SOUR                  U l        U R                  (       a  [        U5      U l        U R#                  5         g )Nré   Úvision_use_headT)r]   r^   rO   r_   rM   rp   r!  r0  r   rë   rì   Úpost_layernormr  rD  Úuse_headrú   r3  r4  r    s      €r1   r^   ÚSiglipVisionModel.__init__4  sˆ   ø€ Ü‰Ñ˜Ô ØŒØ×&Ñ&ˆ	ä0°Ó8ˆŒÜ$ VÓ,ˆŒÜ Ÿlšl¨9×:OÑ:OÑPˆÔÜ$+¨FÐ4E×$FÑ$F™ÈF×LbÑLbˆŒØ�=�=Ü;¸FÓCˆDŒIØ�‰Õr0   Fr6  r‡   Nr»   r>   c                 óÞ   • U R                  XS9nU R                  " SSU0UD6nUR                  nU R                  U5      nU R                  (       a  U R                  U5      OSn[        UUS9$ )a¯  
Examples:

```python
>>> import httpx
>>> from io import BytesIO
>>> from PIL import Image
>>> from transformers import AutoProcessor, SiglipVisionModel

>>> model = SiglipVisionModel.from_pretrained("google/siglip-base-patch16-224")
>>> processor = AutoProcessor.from_pretrained("google/siglip-base-patch16-224")

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> inputs = processor(images=image, return_tensors="pt")

>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
>>> pooled_output = outputs.pooler_output  # pooled features
```)r‡   r£   Nr9  r%   )rp   r0  r"   rE  rF  r3  r   )rJ   r‰   r‡   r»   r#   r;  r"   r:  s           r1   r’   ÚSiglipVisionModel.forwardA  s|   € ð> Ÿ™¨˜Ðhˆà+/¯<ª<ñ ,
Ø'ð,
àñ,
ˆð
 ,×=Ñ=ÐØ ×/Ñ/Ð0AÓBÐà8<¿¿˜Ÿ	™	Ð"3Ô4È4ˆä)Ø/Ø'ñ
ð 	
r0   )rO   rp   r0  r3  rE  rF  r”   )r&   r'   r(   r)   r   r-   Úmain_input_namer  r  r>  r^   r   r   r   Úboolr   r   r   r’   r/   r—   r˜   s   @r1   r@  r@  (  s…   ø‡ ð ÓØ$€OØ!ÐØ&ÐØ*ÐðÐ1÷ ð  Ù¨EÑ2Øð 16ñ+
ð #'¨¡+ð+
ð Ð+Ñ,ð	+
ð
 
$ô+
ó ó 3ó  ö+
r0   r@  c                   ó:   ^ • \ rS rSrSrS\4U 4S jjrS rSrU =r	$ )rú   ir  zMultihead Attention Pooling.rO   c                 ó„  >• [         TU ]  5         [        R                  " [        R
                  " SSUR                  5      5      U l        [        R                  R                  UR                  UR                  SS9U l
        [        R                  " UR                  UR                  S9U l        [        U5      U l        g )Nr   T)Úbatch_firstré   )r]   r^   r   Ú	Parameterr+   Úrandnr_   r  ÚMultiheadAttentionrÄ   r	  rë   rì   Ú	layernormrÛ   rð   rm   s     €r1   r^   Ú,SiglipMultiheadAttentionPoolingHead.__init__u  s…   ø€ Ü‰ÑÔä—\’\¤%§+¢+¨a°°F×4FÑ4FÓ"GÓHˆŒ
ÜŸ™×4Ñ4°V×5GÑ5GÈ×IcÑIcÐquÐ4ÐvˆŒÜŸš f×&8Ñ&8¸f×>SÑ>SÑTˆŒÜ˜VÓ$ˆ�r0   c                 óâ   • UR                   S   nU R                  R                  USS5      nU R                  X1U5      S   nUnU R	                  U5      nX@R                  U5      -   nUS S 2S4   $ )Nr   r   )rx   r  Úrepeatr	  rR  rð   )rJ   Úhidden_stateÚ
batch_sizer  ró   s        r1   r’   Ú+SiglipMultiheadAttentionPoolingHead.forward}  sr   € Ø!×'Ñ'¨Ñ*ˆ
Ø—
‘
×!Ñ! *¨a°Ó3ˆà—~‘~ e¸<ÓHÈÑKˆàˆØ—~‘~ lÓ3ˆØ§(¡(¨<Ó"8Ñ8ˆàšA˜q˜DÑ!Ð!r0   )r	  rR  rð   r  )
r&   r'   r(   r)   r*   r   r^   r’   r/   r—   r˜   s   @r1   rú   rú   r  s   ø† Ù&ð%Ð1÷ %÷
"ð 
"r0   rú   c                   ó$  ^ • \ rS rSr% \\S'   S\4U 4S jjrS\R                  4S jr	S\R                  4S jr
\\  SS	\R                  S
\R                  S-  S\R                  S-  S\\   S\\-  4
S jj5       5       r\\ SS\R(                  S\S\\   S\\-  4S jj5       5       r\\      SS	\R.                  S-  S\R(                  S-  S
\R                  S-  S\R.                  S-  S\S-  S\S\\   S\4S jj5       5       rSrU =r$ )r  iŠ  rO   c                 ó˜  >• [         TU ]  U5        UR                  nUR                  n[        R                  U5      U l        [        R                  U5      U l        [        R                  " [        R                  " S5      5      U l        [        R                  " [        R                  " S5      5      U l        U R                  5         g )Nr   )r]   r^   Útext_configrý   r-  Ú_from_configr.  r@  rB  r   rO  r+   rP  r  r  r4  )rJ   rO   r[  rý   rn   s       €r1   r^   ÚSiglipModel.__init__Ž  sŠ   ø€ Ü‰Ñ˜Ô à×(Ñ(ˆØ×,Ñ,ˆô *×6Ñ6°{ÓCˆŒÜ-×:Ñ:¸=ÓIˆÔäŸ<š<¬¯ª°A«Ó7ˆÔÜŸ,š,¤u§{¢{°1£~Ó6ˆŒð 	�‰Õr0   r>   c                 óB   • U R                   R                  R                  $ rA   ©r.  rp   rž   rI   s    r1   Úget_input_embeddingsÚ SiglipModel.get_input_embeddingsž  s   € Ø�‰×)Ñ)×9Ñ9Ð9r0   r°   c                 ó8   • XR                   R                  l        g rA   r_  ©rJ   r°   s     r1   Úset_input_embeddingsÚ SiglipModel.set_input_embeddings¡  s   € Ø5:�‰×"Ñ"Õ2r0   Nr¢   r±   rX   r»   c                 ó.   • U R                   " SUUUS.UD6$ )a  
Examples:

```python
>>> from transformers import AutoTokenizer, AutoModel
>>> import torch

>>> model = AutoModel.from_pretrained("google/siglip-base-patch16-224")
>>> tokenizer = AutoTokenizer.from_pretrained("google/siglip-base-patch16-224")

>>> # important: make sure to set padding="max_length" as that's how the model was trained
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding="max_length", return_tensors="pt")
>>> with torch.no_grad():
...     text_features = model.get_text_features(**inputs)
```©r¢   r±   rX   r%   )r.  )rJ   r¢   r±   rX   r»   s        r1   Úget_text_featuresÚSiglipModel.get_text_features¤  s-   € ð0 �Šð 
ØØ)Ø%ñ
ð ñ	
ð 	
r0   r‰   r‡   c                 ó,   • U R                   " SUUS.UD6$ )a  
Examples:

```python
>>> import torch
>>> from transformers import AutoProcessor, AutoModel
>>> from transformers.image_utils import load_image

>>> model = AutoModel.from_pretrained("google/siglip-base-patch16-224")
>>> processor = AutoProcessor.from_pretrained("google/siglip-base-patch16-224")

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = load_image(url)

>>> inputs = processor(images=image, return_tensors="pt")

>>> with torch.no_grad():
...     image_features = model.get_image_features(**inputs)
```©r‰   r‡   r%   )rB  )rJ   r‰   r‡   r»   s       r1   Úget_image_featuresÚSiglipModel.get_image_featuresÃ  s,   € ð6 × Ò ð 
Ø%Ø%=ñ
ð ñ
ð 	
r0   Úreturn_lossc           
      ó”  • U R                   " SUUS.UD6nU R                  " SUUUS.UD6n	UR                  n
U	R                  nXªR                  SSSS9-  n
X»R                  SSSS9-  n[        R
                  " XºR                  5       R                  UR                  5      5      nU R                  R                  UR                  5      U R                  R                  UR                  5      píXÍR                  5       -  U-   nUR                  5       nSnU(       a�  [        R                  " UR                  S5      UR                  S	9n[        R                  " U5      * SU-  -   n[        R                  R                   R#                  UU-  5      n[        R$                  " USS
9* nUR'                  5       n[)        UUUUU
U	US9$ )aD  
return_loss (`bool`, *optional*):
    Whether or not to return the contrastive loss.

Examples:

```python
>>> from PIL import Image
>>> import httpx
>>> from io import BytesIO
>>> from transformers import AutoProcessor, AutoModel
>>> import torch

>>> model = AutoModel.from_pretrained("google/siglip-base-patch16-224")
>>> processor = AutoProcessor.from_pretrained("google/siglip-base-patch16-224")

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> texts = ["a photo of 2 cats", "a photo of 2 dogs"]
>>> # important: we pass `padding=max_length` since the model was trained with this
>>> inputs = processor(text=texts, images=image, padding="max_length", return_tensors="pt")

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

>>> logits_per_image = outputs.logits_per_image
>>> probs = torch.sigmoid(logits_per_image) # these are the probabilities
>>> print(f"{probs[0][0]:.1%} that image 0 is '{texts[0]}'")
31.9% that image 0 is 'a photo of 2 cats'
```rk  rg  rW   rZ   T)rµ   rƒ   ÚkeepdimNr   )Údevice©rƒ   )r9   r:   r;   r5   r!   r<   r=   r%   )rB  r.  r:  Únormr+   r·   ÚtrŒ   rq  r  r  ÚexpÚeyeru   Ú	ones_liker   r   Ú
logsigmoidÚsumÚmeanr7   )rJ   r¢   r‰   r±   rX   rn  r‡   r»   Úvision_outputsÚtext_outputsr!   r5   r;   r  r  r:   r9   rv  Úm1_diag1ÚloglikÚnlls                        r1   r’   ÚSiglipModel.forwardå  sÁ  € ðX 6:×5FÒ5Fð 6
Ø%Ø%=ñ6
ð ñ6
ˆð 48·?²?ð 4
ØØ)Ø%ñ4
ð ñ	4
ˆð &×3Ñ3ˆØ"×0Ñ0ˆð $×&7Ñ&7¸!ÀÈTÐ&7Ð&RÑRˆØ!×$4Ñ$4°q¸bÈ$Ð$4Ð$OÑOˆô  Ÿ,š, {·N±NÓ4D×4GÑ4GÈ×HZÑHZÓ4[Ó\ˆà"&×"2Ñ"2×"5Ñ"5°k×6HÑ6HÓ"IÈ4Ï?É?×K]ÑK]Ð^i×^pÑ^pÓKq�ZØ)¯O©OÓ,=Ñ=À
ÑJˆà*×,Ñ,Ó.ÐàˆÞä—)’)˜O×0Ñ0°Ó3¸O×<RÑ<RÑSˆCÜŸš¨Ó8Ð8¸1¸s¹7ÑBˆHÜ—X‘X×(Ñ(×3Ñ3°H¸Ñ4NÓOˆFÜ—9’9˜V¨Ñ,Ð,ˆCØ—8‘8“:ˆDäØØ-Ø+Ø#Ø%Ø*Ø .ñ
ð 	
r0   )r  r  r.  rB  )NNr”   )NNNNNF)r&   r'   r(   r)   r   r-   r^   r   ÚModuler`  rd  r   r   r+   r•   r   r   r.   r   rh  r,   rK  rl  r¬   r7   r’   r/   r—   r˜   s   @r1   r  r  Š  sÁ  ø‡ àÓð˜|÷ ð : b§i¡iô :ð;¨"¯)©)ô ;ð Øð /3Ø,0ñ	
à—<‘<ð
ð Ÿ™ tÑ+ð
ð —l‘l TÑ)ð	
ð
 Ð+Ñ,ð
ð 
Ð+Ñ	+ô
ó ó ð
ð: Øð */ñ
à×'Ñ'ð
ð #'ð
ð Ð+Ñ,ð	
ð
 
Ð+Ñ	+ô
ó ó ð
ð@ Øð .2Ø15Ø.2Ø04Ø#'Ø).ñW
à×#Ñ# dÑ*ðW
ð ×'Ñ'¨$Ñ.ðW
ð Ÿ™ tÑ+ð	W
ð
 ×&Ñ&¨Ñ-ðW
ð ˜D‘[ðW
ð #'ðW
ð Ð+Ñ,ðW
ð 
ôW
ó ó öW
r0   r  z­
    SigLIP vision encoder with an image classification head on top (a linear layer on top of the pooled final hidden states of
    the patch tokens) e.g. for ImageNet.
    c                   óö   ^ • \ rS rSrSrSrS\SS4U 4S jjrS\R                  4S jr
S	\R                  4S
 jr\\   SS\R                  S-  S\R                  S-  S\S\\   S\4
S jj5       5       rSrU =r$ )r  iA  r‰   rA  rO   r>   Nc                 ól  >• [         TU ]  U5        UR                  U l        [        R	                  UR
                  5      U l        UR                  S:”  a5  [        R                  " UR
                  R                  UR                  5      O[        R                  " 5       U l        U R                  5         g )Nr   )r]   r^   Ú
num_labelsr@  r\  rý   rB  r   rÊ   r_   ÚIdentityr  r4  rm   s     €r1   r^   Ú%SiglipForImageClassification.__init__K  s‡   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ-×:Ñ:¸6×;OÑ;OÓPˆÔð OU×N_ÑN_ÐbcÓNcŒB�IŠI�f×*Ñ*×6Ñ6¸×8IÑ8IÔJÔik×itÒitÓivð 	Œð
 	�‰Õr0   c                 óB   • U R                   R                  R                  $ rA   ©rB  rp   re   rI   s    r1   r`  Ú1SiglipForImageClassification.get_input_embeddingsY  s   € Ø× Ñ ×+Ñ+×;Ñ;Ð;r0   r°   c                 ó8   • XR                   R                  l        g rA   rˆ  rc  s     r1   rd  Ú1SiglipForImageClassification.set_input_embeddings\  s   € Ø7<×Ñ×$Ñ$Õ4r0   Úlabelsr‡   r»   c                 ó  • U R                   " U4SU0UD6nUR                  n[        R                  " USS9nU R	                  U5      nSnUb  U R                  X'U R                  5      n[        UUUR                  UR                  S9$ )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
>>> from transformers import AutoImageProcessor, SiglipForImageClassification
>>> import torch
>>> from PIL import Image
>>> import httpx
>>> from io import BytesIO

>>> torch.manual_seed(3)  # doctest: +IGNORE_RESULT
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> # note: we are loading a `SiglipModel` from the hub here,
>>> # so the head will be randomly initialized, hence the predictions will be random if seed is not set above.
>>> image_processor = AutoImageProcessor.from_pretrained("google/siglip-base-patch16-224")
>>> model = SiglipForImageClassification.from_pretrained("google/siglip-base-patch16-224")

>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> # model predicts one of the two classes
>>> predicted_class_idx = logits.argmax(-1).item()
>>> print("Predicted class:", model.config.id2label[predicted_class_idx])
Predicted class: LABEL_1
```r‡   r   rr  N)r9   Úlogitsr#   r$   )
rB  r"   r+   rz  r  Úloss_functionrO   r   r#   r$   )	rJ   r‰   rŒ  r‡   r»   ÚoutputsÚsequence_outputrŽ  r9   s	            r1   r’   Ú$SiglipForImageClassification.forward_  s�   € ðT /3×.?Ò.?Øñ/
à%=ð/
ð ñ/
ˆð "×3Ñ3ˆô  Ÿ*š* _¸!Ñ<ˆà—‘ Ó1ˆàˆØÑØ×%Ñ% f°d·k±kÓBˆDä$ØØØ!×/Ñ/Ø×)Ñ)ñ	
ð 	
r0   )r  r„  rB  )NNF)r&   r'   r(   r)   rJ  r  r   r^   r   r�  r`  rd  r   r   r+   r•   rK  r   r   r   r’   r/   r—   r˜   s   @r1   r  r  A  s²   ø† ð %€OØ!Ðð˜|ð °÷ ð< b§i¡iô <ð=¨"¯)©)ô =ð Øð -1Ø&*Ø).ñ	>
à—l‘l TÑ)ð>
ð —‘˜tÑ#ð>
ð #'ð	>
ð
 Ð+Ñ,ð>
ð 
ô>
ó ó ö>
r0   r  )r  rö   r-  r@  r  )rÑ   )?r*   Úcollections.abcr   Údataclassesr   Útypingr   Únumpyr   r+   r   Ú r   rþ   Úactivationsr	   Úmasking_utilsr
   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_siglipr   r   r   r   r3   r7   r�  rM   rš   r•   Úfloatr¾   rÀ   rÛ   ræ   rö   r!  r-  r@  rú   r  r  Ú__all__r%   r0   r1   Ú<module>r¤     sq  ðñ å $Ý !Ý ã Û Ý å &Ý !Ý 6Ý 9ß bÑ bß FÝ &÷õ õ 8Ý 5ß TÑ Tñ ðñð
 ô	<˜kó 	<ó óð	<ð Ùðñô	<˜Kó 	<óó ð	<ð Ø
ô_�;ó _ó ó ð_ô@E˜RŸY™Yô EôR%˜2Ÿ9™9ô %ð^ ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð õ%ô.8)�b—i‘iô 8)ôx�—	‘	ô ôÐ3ô ðD ôFi˜Oó Fió ðFiôT@�B—I‘Iô @ñD ðñô
J
Ð+ó J
óð
J
ñZ ðñô
B
Ð-ó B
óð
B
ôJ"¨"¯)©)ô "ð0 ôs
Ð'ó s
ó ðs
ñl ðñôX
Ð#8ó X
óðX
òv�r0   