§
    ‚Štj„Œ  ã                   óN  — d Z ddlmZ ddlmZ ddlmZ ddlZddl	Z	ddl	m
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZmZ ddlmZ ddlmZmZm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*  e d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z+ e d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z,e e G d„ de¦  «        ¦   «         ¦   «         Z- G d„ de
j.        ¦  «        Z/ G d„ d e
j.        ¦  «        Z0	 dBd"e
j.        d#e	j1        d$e	j1        d%e	j1        d&e	j1        dz  d'e2d(e2fd)„Z3 G d*„ d+e
j.        ¦  «        Z4 G d,„ d-e
j.        ¦  «        Z5 G d.„ d/e¦  «        Z6e  G d0„ d1e¦  «        ¦   «         Z7 G d2„ d3e
j.        ¦  «        Z8 e d4¬¦  «         G d5„ d6e7¦  «        ¦   «         Z9 e d7¬¦  «         G d8„ d9e7¦  «        ¦   «         Z: G d:„ d;e
j.        ¦  «        Z;e  G d<„ d=e7¦  «        ¦   «         Z< e d>¬¦  «         G d?„ d@e7¦  «        ¦   «         Z=g dA¢Z>dS )Cz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                   ó¬   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dS )ÚSiglipVisionModelOutputzø
    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__Ú__doc__r    ÚtorchÚFloatTensorÚ__annotations__r!   r"   Útupler#   © ó    úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/siglip/modeling_siglip.pyr   r   +   s“   € € € € € € ðð ð
 .2€L�%Ô# dÑ*Ð1Ð1Ñ1Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;r-   r   ze
    Base class for text model's outputs that also contains a pooling of the last hidden states.
    c                   ó¬   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dS )ÚSiglipTextModelOutputzö
    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'   r1   r(   r)   r*   r!   r"   r+   r#   r,   r-   r.   r0   r0   >   s“   € € € € € € ðð ð
 -1€K�Ô" TÑ)Ð0Ð0Ñ0Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;r-   r0   c                   óÞ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
ej        dz  ed<   dZej        dz  ed<   dZeed<   dZeed	<   d
ee         fd„ZdS )ÚSiglipOutputa±  
    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_textr1   r    Útext_model_outputÚvision_model_outputÚreturnc                 óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ól   K  — | ]/}t          |t          ¦  «        r|                     ¦   «         n|V — Œ0d S ©N)Ú
isinstancer   Úto_tuple)Ú.0Úvs     r.   ú	<genexpr>z(SiglipOutput.to_tuple.<locals>.<genexpr>q   s=   è è € Ð^Ð^È1¥Z°µ;Ñ%?Ô%?ÐF�Q—Z’Z‘\”\�\ÀQÐ^Ð^Ð^Ð^Ð^Ð^r-   )r+   Úvalues©Úselfs    r.   r>   zSiglipOutput.to_tuplep   s,   € ÝÐ^Ð^ÐPT×P[ÒP[ÑP]ÔP]Ð^Ñ^Ô^Ñ^Ô^Ð^r-   )r$   r%   r&   r'   r4   r(   r)   r*   r5   r6   r1   r    r7   r   r8   r+   r   r>   r,   r-   r.   r3   r3   Q   så   € € € € € € ðð ð& &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø15Ð�eÔ'¨$Ñ.Ð5Ð5Ñ5Ø04€O�UÔ&¨Ñ-Ð4Ð4Ñ4Ø,0€K�Ô" TÑ)Ð0Ð0Ñ0Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø48ÐÐ1Ð8Ð8Ñ8Ø6:ÐÐ3Ð:Ð:Ñ:ð_˜% œ*ð _ð _ð _ð _ð _ð _r-   r3   c                   óv   ‡ — e Zd Zdefˆ fd„Zdej        dededej        fd„Zdd	ej	        dej        fd
„Z
ˆ xZS )ÚSiglipVisionEmbeddingsÚconfigc                 ó  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        |j        | _        t          j        |j	        | j        | j        | j        d¬¦  «        | _
        | j        | j        z  dz  | _        | j        | _        t          j        | j        | j        ¦  «        | _        |                      dt!          j        | j        ¦  «                             d¦  «        d¬¦  «         d S )NÚvalid)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingé   Úposition_ids©r   éÿÿÿÿF©Ú
persistent)ÚsuperÚ__init__rG   Úhidden_sizeÚ	embed_dimÚ
image_sizeÚ
patch_sizer   ÚConv2dÚnum_channelsÚpatch_embeddingÚnum_patchesÚnum_positionsÚ	EmbeddingÚposition_embeddingÚregister_bufferr(   ÚarangeÚexpand©rD   rG   Ú	__class__s     €r.   rV   zSiglipVisionEmbeddings.__init__u   sé   ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØ Ô+ˆŒØ Ô+ˆŒå!œyØÔ+ØœØœØ”?Øð 
ñ  
ô  
ˆÔð !œO¨t¬Ñ>À1ÑDˆÔØ!Ô-ˆÔÝ"$¤,¨tÔ/AÀ4Ä>Ñ"RÔ"RˆÔØ×Ò˜^­U¬\¸$Ô:LÑ-MÔ-M×-TÒ-TÐU\Ñ-]Ô-]ÐjoÐÑpÔpÐpÐpÐpr-   Ú
embeddingsÚheightÚwidthr9   c                 ó~  — |j         d         }| j        j        j         d         }t          j                             ¦   «         s&||k    r ||k    r|                      | j        ¦  «        S | j        j                             d¦  «        }|j         d         }|| j        z  }|| j        z  }	t          |dz  ¦  «        }
| 
                    d|
|
|¦  «        }|                     dddd¦  «        }t          j                             |||	fdd¬	¦  «        }|                     dddd¦  «                             dd|¦  «        }|S )
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   rR   g      à?r   rO   ÚbicubicF)ÚsizeÚmodeÚalign_corners)Úshapera   Úweightr(   ÚjitÚ
is_tracingrP   Ú	unsqueezerZ   r   ÚreshapeÚpermuter   Ú
functionalÚinterpolateÚview)rD   rg   rh   ri   r^   r_   Úpatch_pos_embedÚdimÚ
new_heightÚ	new_widthÚsqrt_num_positionss              r.   Úinterpolate_pos_encodingz/SiglipVisionEmbeddings.interpolate_pos_encoding‰   sL  € ð !Ô& qÔ)ˆØÔ/Ô6Ô<¸QÔ?ˆõ Œy×#Ò#Ñ%Ô%ð 	>¨+¸Ò*FÐ*FÈ6ÐUZÊ?È?Ø×*Ò*¨4Ô+<Ñ=Ô=Ð=àÔ1Ô8×BÒBÀ1ÑEÔEˆàÔ˜rÔ"ˆà˜tœÑ.ˆ
Ø˜Tœ_Ñ,ˆ	å& }°cÑ'9Ñ:Ô:ÐØ)×1Ò1°!Ð5GÐI[Ð]`ÑaÔaˆØ)×1Ò1°!°Q¸¸1Ñ=Ô=ˆåœ-×3Ò3ØØ˜iÐ(ØØð	 4ñ 
ô 
ˆð *×1Ò1°!°Q¸¸1Ñ=Ô=×BÒBÀ1ÀbÈ#ÑNÔNˆØÐr-   FÚpixel_valuesc                 óX  — |j         \  }}}}| j        j        j        }|                      |                     |¬¦  «        ¦  «        }|                     d¦  «                             dd¦  «        }|r||                      |||¦  «        z   }n||                      | j	        ¦  «        z   }|S )N)ÚdtyperO   r   )
ro   r]   rp   r�   ÚtoÚflattenÚ	transposer~   ra   rP   )	rD   r   r~   Ú_rh   ri   Útarget_dtypeÚpatch_embedsrg   s	            r.   ÚforwardzSiglipVisionEmbeddings.forward¯   s¯   € Ø*Ô0Ñˆˆ1ˆf�eØÔ+Ô2Ô8ˆØ×+Ò+¨L¯OªOÀ,¨OÑ,OÔ,OÑPÔPˆØ!×)Ò)¨!Ñ,Ô,×6Ò6°q¸!Ñ<Ô<ˆ
à#ð 	QØ# d×&CÒ&CÀJÐPVÐX]Ñ&^Ô&^Ñ^ˆJˆJà# d×&=Ò&=¸dÔ>OÑ&PÔ&PÑPˆJØÐr-   ©F)r$   r%   r&   r   rV   r(   ÚTensorÚintr~   r)   rˆ   Ú__classcell__©rf   s   @r.   rF   rF   t   s²   ø€ € € € € ðqÐ1ð qð qð qð qð qð qð($°5´<ð $Èð $ÐUXð $Ð]bÔ]ið $ð $ð $ð $ðL
ð 
 EÔ$5ð 
ÐZ_ÔZfð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r-   rF   c            	       ó~   ‡ — e Zd Zdefˆ fd„Z	 	 	 d	dej        dz  dej        dz  dej        dz  dej        fd„Z	ˆ xZ
S )
ÚSiglipTextEmbeddingsrG   c                 óV  •— t          ¦   «                              ¦   «          |j        }t          j        |j        |¦  «        | _        t          j        |j        |¦  «        | _        |  	                    dt          j        |j        ¦  «                             d¦  «        d¬¦  «         d S )NrP   rQ   FrS   )rU   rV   rW   r   r`   Ú
vocab_sizeÚtoken_embeddingÚmax_position_embeddingsra   rb   r(   rc   rd   ©rD   rG   rX   rf   s      €r.   rV   zSiglipTextEmbeddings.__init__¾   sœ   ø€ Ý‰Œ×ÒÑÔÐØÔ&ˆ	å!œ|¨FÔ,=¸yÑIÔIˆÔÝ"$¤,¨vÔ/MÈyÑ"YÔ"YˆÔð 	×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r-   NÚ	input_idsrP   Úinputs_embedsr9   c                 ó.  — |�|j         d         n|j         d         }| j        j        j         d         }||k    rt          d|› d|› �¦  «        ‚|€| j        d d …d |…f         }|€|                      |¦  «        }|                      |¦  «        }||z   }|S )NrR   éþÿÿÿr   zRSequence length must be less than max_position_embeddings (got `sequence length`: z and max_position_embeddings: )ro   ra   rp   Ú
ValueErrorrP   r’   )rD   r•   rP   r–   Ú
seq_lengthÚmax_position_embeddingÚposition_embeddingsrg   s           r.   rˆ   zSiglipTextEmbeddings.forwardÊ   sØ   € ð -6Ð,A�Y”_ RÔ(Ð(À}ÔGZÐ[]ÔG^ˆ
Ø!%Ô!8Ô!?Ô!EÀaÔ!HÐàÐ.Ò.Ð.ÝðVØðVð VØ=SðVð Vñô ð ð
 ÐØÔ,¨Q¨Q¨Q°°°¨^Ô<ˆLàÐ Ø ×0Ò0°Ñ;Ô;ˆMà"×5Ò5°lÑCÔCÐØ"Ð%8Ñ8ˆ
àÐr-   ©NNN)r$   r%   r&   r   rV   r(   Ú
LongTensorr)   rŠ   rˆ   rŒ   r�   s   @r.   r�   r�   ½   s©   ø€ € € € € ð

Ð/ð 

ð 

ð 

ð 

ð 

ð 

ð .2Ø04Ø26ð	ð àÔ# dÑ*ðð Ô&¨Ñ-ðð Ô(¨4Ñ/ð	ð
 
Œðð ð ð ð ð ð ð r-   r�   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutc                 óÀ  — t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |dt           j        ¬¦  «                             |j        ¦  «        }t          j         	                    ||| j
        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «                             ¦   «         }	|	|fS )NrR   r˜   )rz   r�   )ÚpÚtrainingr   rO   )r(   Úmatmulr„   r   rv   ÚsoftmaxÚfloat32r‚   r�   r¦   r©   Ú
contiguous)
r    r¡   r¢   r£   r¤   r¥   r¦   ÚkwargsÚattn_weightsÚattn_outputs
             r.   Úeager_attention_forwardr±   å   sÃ   € õ ”<  s§}¢}°R¸Ñ'<Ô'<Ñ=Ô=ÀÑG€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r-   c            
       ó~   ‡ — e Zd ZdZˆ fd„Z	 ddej        dej        dz  deej        ej        dz  f         fd„Zˆ xZ	S )	ÚSiglipAttentionz=Multi-headed attention from 'Attention Is All You Need' paperc                 ó‚  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        | j        | j        z  | _        | j        | j        z  | j        k    r t          d| j        › d| j        › d�¦  «        ‚| j        dz  | _	        |j
        | _        d| _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        d S )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).ç      à¿F)rU   rV   rG   rW   rX   Únum_attention_headsÚ	num_headsÚhead_dimr™   ÚscaleÚattention_dropoutr¦   Ú	is_causalr   ÚLinearÚk_projÚv_projÚq_projÚout_projre   s     €r.   rV   zSiglipAttention.__init__ÿ   s  ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØÔ3ˆŒØœ¨$¬.Ñ8ˆŒØŒ=˜4œ>Ñ)¨T¬^Ò;Ð;Ýð'ÈdÌnð 'ð 'Ø”Nð'ð 'ð 'ñô ð ð ”] DÑ(ˆŒ
ØÔ/ˆŒØˆŒå”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝœ	 $¤.°$´.ÑAÔAˆŒˆˆr-   Nr"   r¤   r9   c           
      ó¼  — |j         dd…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        }	 |	| ||||| j        | j        | j        sdn| j        ¬¦  «        \  }
} |
j        g |¢d‘R Ž                      ¦   «         }
|                      |
¦  «        }
|
|fS )z#Input shape: Batch x Time x ChannelNrR   r   rO   rŸ   )r»   r¥   r¦   )ro   r¸   r¿   rx   r„   r½   r¾   r   Úget_interfacerG   Ú_attn_implementationr±   r»   r¹   r©   r¦   rt   r­   rÀ   )rD   r"   r¤   r®   Úinput_shapeÚhidden_shapeÚqueriesÚkeysrB   Úattention_interfacer°   r¯   s               r.   rˆ   zSiglipAttention.forward  sg  € ð $Ô)¨#¨2¨#Ô.ˆà8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆØ—+’+˜mÑ,Ô,×1Ò1°,Ñ?Ô?×IÒIÈ!ÈQÑOÔOˆØ�{Š{˜=Ñ)Ô)×.Ò.¨|Ñ<Ô<×FÒFÀqÈ!ÑLÔLˆØ—’˜]Ñ+Ô+×0Ò0°Ñ>Ô>×HÒHÈÈAÑNÔNˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØØ”nØ”JØ#œ}Ð>�C�C°$´,ð	%
ñ 	%
ô 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜LÐ(Ð(r-   r<   )
r$   r%   r&   r'   rV   r(   rŠ   r+   rˆ   rŒ   r�   s   @r.   r³   r³   ü   s™   ø€ € € € € ØGÐGðBð Bð Bð Bð Bð. /3ð!)ð !)à”|ð!)ð œ tÑ+ð!)ð
 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ð!)ð !)ð !)ð !)ð !)ð !)ð !)ð !)r-   r³   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )Ú	SiglipMLPc                 ó  •— t          ¦   «                              ¦   «          || _        t          |j                 | _        t          j        |j        |j	        ¦  «        | _
        t          j        |j	        |j        ¦  «        | _        d S r<   )rU   rV   rG   r	   Ú
hidden_actÚactivation_fnr   r¼   rW   Úintermediate_sizeÚfc1Úfc2re   s     €r.   rV   zSiglipMLP.__init__9  sf   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ# FÔ$5Ô6ˆÔÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝ”9˜VÔ5°vÔ7IÑJÔJˆŒˆˆr-   r"   r9   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r<   )rÏ   rÍ   rÐ   )rD   r"   s     r.   rˆ   zSiglipMLP.forward@  s=   € ØŸš Ñ/Ô/ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš Ñ/Ô/ˆØÐr-   )r$   r%   r&   rV   r(   rŠ   rˆ   rŒ   r�   s   @r.   rÊ   rÊ   8  sc   ø€ € € € € ðKð Kð Kð Kð Kð U¤\ð °e´lð ð ð ð ð ð ð ð r-   rÊ   c            	       ó|   ‡ — e Zd Zdeez  fˆ fd„Zedej        dej        de	e
         dej        fd„¦   «         Zˆ xZS )ÚSiglipEncoderLayerrG   c                 óD  •— t          ¦   «                              ¦   «          |j        | _        t	          j        | j        |j        ¬¦  «        | _        t          |¦  «        | _	        t	          j        | j        |j        ¬¦  «        | _
        t          |¦  «        | _        d S ©N©Úeps)rU   rV   rW   rX   r   Ú	LayerNormÚlayer_norm_epsÚlayer_norm1r³   Ú	self_attnÚlayer_norm2rÊ   Úmlpre   s     €r.   rV   zSiglipEncoderLayer.__init__H  s}   ø€ Ý‰Œ×ÒÑÔÐØÔ+ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÝ(¨Ñ0Ô0ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÝ˜VÑ$Ô$ˆŒˆˆr-   r"   r¤   r®   r9   c                 óÆ   — |}|                       |¦  «        } | j        d||dœ|¤Ž\  }}||z   }|}|                      |¦  «        }|                      |¦  «        }||z   }|S )N)r"   r¤   r,   )rÚ   rÛ   rÜ   rÝ   )rD   r"   r¤   r®   Úresidualr…   s         r.   rˆ   zSiglipEncoderLayer.forwardP  s“   € ð !ˆà×(Ò(¨Ñ7Ô7ˆØ)˜4œ>ð 
Ø'Ø)ð
ð 
ð ð
ð 
Ñˆ�qð
 ! =Ñ0ˆà ˆØ×(Ò(¨Ñ7Ô7ˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆàÐr-   )r$   r%   r&   r   r   rV   r   r(   rŠ   r   r   r)   rˆ   rŒ   r�   s   @r.   rÓ   rÓ   G  sž   ø€ € € € € ð%Ð1Ð4DÑDð %ð %ð %ð %ð %ð %ð ðà”|ðð œðð Ð+Ô,ð	ð
 
Ô	ðð ð ñ „^ðð ð ð ð r-   rÓ   c                   ó‚   ‡ — e Zd ZU eed<   dZdZdZg d¢ZdZ	dZ
dZdZeedœZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚSiglipPreTrainedModelrG   Úsiglip)ÚimageÚtextT)r�   rF   rÓ   Ú#SiglipMultiheadAttentionPoolingHead)r"   r#   c                 óX	  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rÏt          | j        t
          ¦  «        r| j        j        j        n| j        j        }t          j	        |j
        j        dt          j        |¦  «        z  ¬¦  «         t          |d¦  «        rQt          j        |j        t#          j        |j        j        d         ¦  «                             d¦  «        ¦  «         dS dS t          |t*          j        ¦  «        rt          j        |j        ¦  «         dS t          |t0          ¦  «        ròt          j        |j        j        ¦  «         t          j        |j        j        ¦  «         t          j        |j        j        ¦  «         t          j        |j        j        ¦  «         t          j        |j        j        ¦  «         t          j        |j        j        ¦  «         t          j        |j        j        ¦  «         t          j        |j        j        ¦  «         dS t          |t@          ¦  «        r~t          j        |j!        j        ¦  «         t          j        |j"        j        ¦  «         t          j	        |j!        j        d¬¦  «         t          j	        |j"        j        d¬¦  «         dS t          |tF          ¦  «        rWt          j        |j$        ¦  «         t          j        |j%        j&        ¦  «         t          j        |j%        j'        ¦  «         dS t          |tP          ¦  «        r4t          j        |j)        ¦  «         t          j        |j*        ¦  «         dS t          |tV          ¦  «        rAt          j	        |j,        j        | j        j        j        dz  | j        j-        z  ¬¦  «         dS t          |t*          j.        t*          j/        f¦  «        r=t          j0        |j        ¦  «         |j        �t          j        |j        ¦  «         dS dS t          |tb          ¦  «        rQt          j        |j        t#          j        |j        j        d         ¦  «                             d¦  «        ¦  «         dS dS )	zInitialize the weightsr   )ÚstdrP   rR   rQ   g�íµ ÷Æ°>rµ   N)2rU   Ú_init_weightsr=   rF   rG   r   Úvision_configrW   ÚinitÚnormal_ra   rp   ÚnpÚsqrtÚhasattrÚcopy_rP   r(   rc   ro   rd   r   r`   Ú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¼   r[   Úlecun_normal_r�   )rD   r    ri   rf   s      €r.   rè   z#SiglipPreTrainedModel._init_weights€  s   ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ4Ñ5Ô5ð *	iõ ˜dœk­<Ñ8Ô8ð-�”Ô)Ô5Ð5à”[Ô,ð õ
 ŒL˜Ô2Ô9¸qÅ2Ä7È5Á>Ä>Ñ?QÐRÑRÔRÐRÝ�v˜~Ñ.Ô.ð mÝ”
˜6Ô.µ´¸VÔ=PÔ=VÐWYÔ=ZÑ0[Ô0[×0bÒ0bÐcjÑ0kÔ0kÑlÔlÐlÐlÐlðmð må˜¥¤Ñ-Ô-ð !	iÝÔ)¨&¬-Ñ8Ô8Ð8Ð8Ð8Ý˜¥Ñ0Ô0ð 	iÝÔ  ¤Ô!5Ñ6Ô6Ð6ÝÔ  ¤Ô!5Ñ6Ô6Ð6ÝÔ  ¤Ô!5Ñ6Ô6Ð6ÝÔ  ¤Ô!7Ñ8Ô8Ð8ÝŒK˜œÔ*Ñ+Ô+Ð+ÝŒK˜œÔ*Ñ+Ô+Ð+ÝŒK˜œÔ*Ñ+Ô+Ð+ÝŒK˜œÔ,Ñ-Ô-Ð-Ð-Ð-Ý˜¥	Ñ*Ô*ð 	iÝÔ  ¤Ô!2Ñ3Ô3Ð3ÝÔ  ¤Ô!2Ñ3Ô3Ð3ÝŒL˜œœ¨dÐ3Ñ3Ô3Ð3ÝŒL˜œœ¨dÐ3Ñ3Ô3Ð3Ð3Ð3Ý˜Õ CÑDÔDð 	iÝÔ  ¤Ñ.Ô.Ð.ÝÔ  Ô!1Ô!@ÑAÔAÐAÝŒK˜Ô(Ô5Ñ6Ô6Ð6Ð6Ð6Ý˜¥Ñ,Ô,ð 	iÝŒK˜Ô*Ñ+Ô+Ð+ÝŒK˜Ô)Ñ*Ô*Ð*Ð*Ð*Ý˜Õ <Ñ=Ô=ð 
	iÝŒLØÔ!Ô(Ø”KÔ-Ô9¸4Ñ?À$Ä+ÔB`Ñ`ðñ ô ð ð ð õ ˜¥¤­B¬IÐ 6Ñ7Ô7ð 	iÝÔ˜vœ}Ñ-Ô-Ð-ØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ð(Ð(ð 'Ð&å˜Õ 4Ñ5Ô5ð 	iÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhð	ið 	i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�   s   @r.   rá   rá   i  sµ   ø€ € € € € € àÐÐÑØ ÐØ(ÐØ&*Ð#ðð ð Ðð  ÐØ€NØÐØ"&Ðð ,Ø%ðð Ðð
 €U„]�_„_ð-ið -ið -ið -iñ „_ð-ið -ið -ið -ið -ir-   rá   c                   ól   ‡ — e Zd ZdZdefˆ fd„Ze	 d	dej        dz  de	e
         defd„¦   «         Zˆ xZS )
ÚSiglipEncoderz±
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`SiglipEncoderLayer`].

    Args:
        config: SiglipConfig
    rG   c                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r,   )rÓ   )r?   r…   rG   s     €r.   ú
<listcomp>z*SiglipEncoder.__init__.<locals>.<listcomp>¾  s"   ø€ Ð$iÐ$iÐ$iÀAÕ%7¸Ñ%?Ô%?Ð$iÐ$iÐ$ir-   F)	rU   rV   rG   r   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayersÚgradient_checkpointingre   s    `€r.   rV   zSiglipEncoder.__init__»  s`   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”mÐ$iÐ$iÐ$iÐ$iÍÈvÔOgÑIhÔIhÐ$iÑ$iÔ$iÑjÔjˆŒØ&+ˆÔ#Ð#Ð#r-   Nr¤   r®   r9   c                 óN   — |}| j         D ]} |||fi |¤Ž}Œt          |¬¦  «        S )N)r!   )r  r   )rD   r–   r¤   r®   r"   Úencoder_layers         r.   rˆ   zSiglipEncoder.forwardÂ  sU   € ð &ˆØ!œ[ð 	ð 	ˆMØ)˜MØØðð ð ðð ˆMˆMõ °Ð?Ñ?Ô?Ð?r-   r<   )r$   r%   r&   r'   r   rV   r   r(   rŠ   r   r   r   rˆ   rŒ   r�   s   @r.   r
  r
  ²  s¯   ø€ € € € € ðð ð,˜|ð ,ð ,ð ,ð ,ð ,ð ,ð ð /3ð@ð @ð œ tÑ+ð@ð Ð+Ô,ð	@ð
 
ð@ð @ð @ñ „^ð@ð @ð @ð @ð @r-   r
  zK
    The text model from SigLIP without any head or projection on top.
    c                   óà   ‡ — e Zd ZU eed<   dZdZdZdefˆ fd„Ze	 e
d¬¦  «        e	 	 	 dd	ej        dz  d
ej        dz  dej        dz  dee         def
d„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚSiglipTextModelrG   )rä   Ú
text_modelr’   c                 ó\  •— t          ¦   «                              |¦  «         || _        |j        }t	          |¦  «        | _        t          |¦  «        | _        t          j	        ||j
        ¬¦  «        | _        t          j        ||j        ¦  «        | _        |                      ¦   «          d S rÕ   )rU   rV   rG   rW   r�   rg   r
  Úencoderr   rØ   rÙ   Úfinal_layer_normr¼   Úprojection_sizeÚheadÚ	post_initr”   s      €r.   rV   zSiglipTextModel.__init__ß  sŽ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒØÔ&ˆ	Ý.¨vÑ6Ô6ˆŒÝ$ VÑ,Ô,ˆŒÝ "¤¨Y¸FÔ<QÐ RÑ RÔ RˆÔå”I˜i¨Ô)?Ñ@Ô@ˆŒ	Ø�ŠÑÔÐÐÐr-   F©Útie_last_hidden_statesNr•   r¤   rP   r®   r9   c                 ó¢  — |€t          d¦  «        ‚|                     ¦   «         }|                     d|d         ¦  «        }|                      ||¬¦  «        }t	          | j        ||¬¦  «        } | j        d||dœ|¤Ž}|j        }|                      |¦  «        }|dd…ddd…f         }	|  	                    |	¦  «        }	t          ||	¬¦  «        S )	a¬  
        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_idsrR   )r•   rP   )rG   r–   r¤   )r–   r¤   ©r!   Úpooler_outputr,   )r™   rl   rx   rg   r
   rG   r  r!   r  r  r   )
rD   r•   r¤   rP   r®   rÄ   r"   Úencoder_outputsr!   Úpooled_outputs
             r.   rˆ   zSiglipTextModel.forwardê  s  € ð4 ÐÝÐ<Ñ=Ô=Ð=à—n’nÑ&Ô&ˆØ—N’N 2 {°2¤Ñ7Ô7ˆ	àŸš°)È,˜ÑWÔWˆõ 3Ø”;Ø'Ø)ð
ñ 
ô 
ˆð ,8¨4¬<ð ,
Ø'Ø)ð,
ð ,
ð ð,
ð ,
ˆð ,Ô=ÐØ ×1Ò1Ð2CÑDÔDÐð *¨!¨!¨!¨R°°°¨(Ô3ˆØŸ	š	 -Ñ0Ô0ˆå)Ø/Ø'ð
ñ 
ô 
ð 	
r-   r�   )r$   r%   r&   r   r*   r   rÿ   Ú_input_embed_layerrV   r   r   r   r(   rŠ   r   r   r   rˆ   rŒ   r�   s   @r.   r  r  Ô  s  ø€ € € € € € ð ÐÐÑØ ÐØ$ÐØ*Ðð	Ð/ð 	ð 	ð 	ð 	ð 	ð 	ð  Ø€_¨EÐ2Ñ2Ô2Øð *.Ø.2Ø,0ð	6
ð 6
à”< $Ñ&ð6
ð œ tÑ+ð6
ð ”l TÑ)ð	6
ð
 Ð+Ô,ð6
ð 
$ð6
ð 6
ð 6
ñ „^ñ 3Ô2ñ  Ôð6
ð 6
ð 6
ð 6
ð 6
r-   r  zM
    The vision model from SigLIP without any head or projection on top.
    c            
       ó®   ‡ — e Zd ZU eed<   dZdZdZdZdefˆ fd„Z	e
 ed¬¦  «        e	 dd	ed
z  dee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚSiglipVisionModelrG   r   ©rã   Úvision_modelr]   c                 ó�  •— t          ¦   «                              |¦  «         || _        |j        }t	          |¦  «        | _        t          |¦  «        | _        t          j	        ||j
        ¬¦  «        | _        t          |d¦  «        sdn|j        | _        | j        rt          |¦  «        | _        |                      ¦   «          d S )NrÖ   Úvision_use_headT)rU   rV   rG   rW   rF   rg   r
  r  r   rØ   rÙ   Úpost_layernormrî   r+  Úuse_headrå   r  r  r”   s      €r.   rV   zSiglipVisionModel.__init__2  s°   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒØÔ&ˆ	å0°Ñ8Ô8ˆŒÝ$ VÑ,Ô,ˆŒÝ œl¨9¸&Ô:OÐPÑPÔPˆÔÝ$+¨FÐ4EÑ$FÔ$FÐb˜˜ÈFÔLbˆŒØŒ=ð 	DÝ;¸FÑCÔCˆDŒIØ�ŠÑÔÐÐÐr-   Fr  r~   Nr®   r9   c                 óä   — |                       ||¬¦  «        } | j        dd|i|¤Ž}|j        }|                      |¦  «        }| j        r|                      |¦  «        nd}t          ||¬¦  «        S )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–   Nr!  r,   )rg   r  r!   r,  r-  r  r   )rD   r   r~   r®   r"   r#  r!   r"  s           r.   rˆ   zSiglipVisionModel.forward?  s�   € ð> Ÿš¨ÐOg˜ÑhÔhˆà+7¨4¬<ð ,
ð ,
Ø'ð,
àð,
ð ,
ˆð
 ,Ô=ÐØ ×/Ò/Ð0AÑBÔBÐà8<¼ÐO˜Ÿ	š	Ð"3Ñ4Ô4Ð4È4ˆå)Ø/Ø'ð
ñ 
ô 
ð 	
r-   r‰   )r$   r%   r&   r   r*   Úmain_input_namer   rÿ   r%  rV   r   r   r   Úboolr   r   r   rˆ   rŒ   r�   s   @r.   r'  r'  &  sá   ø€ € € € € € ð ÐÐÑØ$€OØ!ÐØ&ÐØ*ÐðÐ1ð ð ð ð ð ð ð  Ø€_¨EÐ2Ñ2Ô2Øð 16ð+
ð +
ð #'¨¡+ð+
ð Ð+Ô,ð	+
ð
 
$ð+
ð +
ð +
ñ „^ñ 3Ô2ñ  Ôð+
ð +
ð +
ð +
ð +
r-   r'  c                   ó.   ‡ — e Zd ZdZdefˆ fd„Zd„ Zˆ xZS )rå   zMultihead Attention Pooling.rG   c                 ó€  •— t          ¦   «                              ¦   «          t          j        t	          j        dd|j        ¦  «        ¦  «        | _        t          j                             |j        |j	        d¬¦  «        | _
        t          j        |j        |j        ¬¦  «        | _        t          |¦  «        | _        d S )Nr   T)Úbatch_firstrÖ   )rU   rV   r   Ú	Parameterr(   ÚrandnrW   rô   ÚMultiheadAttentionr¶   rõ   rØ   rÙ   Ú	layernormrÊ   rÝ   re   s     €r.   rV   z,SiglipMultiheadAttentionPoolingHead.__init__s  s�   ø€ Ý‰Œ×ÒÑÔÐå”\¥%¤+¨a°°FÔ4FÑ"GÔ"GÑHÔHˆŒ
Ýœ×4Ò4°VÔ5GÈÔIcÐquÐ4ÑvÔvˆŒÝœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ˜VÑ$Ô$ˆŒˆˆr-   c                 ó  — |j         d         }| j                             |dd¦  «        }|                      |||¦  «        d         }|}|                      |¦  «        }||                      |¦  «        z   }|d d …df         S )Nr   r   )ro   rô   Úrepeatrõ   r7  rÝ   )rD   Úhidden_stateÚ
batch_sizerô   rß   s        r.   rˆ   z+SiglipMultiheadAttentionPoolingHead.forward{  s�   € Ø!Ô'¨Ô*ˆ
Ø”
×!Ò! *¨a°Ñ3Ô3ˆà—~’~ e¨\¸<ÑHÔHÈÔKˆàˆØ—~’~ lÑ3Ô3ˆØ $§(¢(¨<Ñ"8Ô"8Ñ8ˆà˜A˜A˜A˜q˜DÔ!Ð!r-   )r$   r%   r&   r'   r   rV   rˆ   rŒ   r�   s   @r.   rå   rå   p  sZ   ø€ € € € € Ø&Ð&ð%Ð1ð %ð %ð %ð %ð %ð %ð
"ð 
"ð 
"ð 
"ð 
"ð 
"ð 
"r-   rå   c                   óÚ  ‡ — e Zd ZU eed<   defˆ fd„Zdej        fd„Zdej        fd„Z	e
e	 	 ddej        d	ej        dz  d
ej        dz  dee         deez  f
d„¦   «         ¦   «         Ze
e	 ddej        dedee         deez  fd„¦   «         ¦   «         Ze
e	 	 	 	 	 	 ddej        dz  dej        dz  d	ej        dz  d
ej        dz  dedz  dedee         defd„¦   «         ¦   «         Zˆ xZS )rø   rG   c                 ó¶  •— t          ¦   «                              |¦  «         |j        }|j        }t                               |¦  «        | _        t                               |¦  «        | _        t          j
        t          j        d¦  «        ¦  «        | _        t          j
        t          j        d¦  «        ¦  «        | _        |                      ¦   «          d S )Nr   )rU   rV   Útext_configré   r  Ú_from_configr  r'  r)  r   r4  r(   r5  rù   rú   r  )rD   rG   r>  ré   rf   s       €r.   rV   zSiglipModel.__init__Œ  s£   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ(ˆØÔ,ˆõ *×6Ò6°{ÑCÔCˆŒÝ-×:Ò:¸=ÑIÔIˆÔåœ<­¬°A©¬Ñ7Ô7ˆÔÝœ,¥u¤{°1¡~¤~Ñ6Ô6ˆŒð 	�ŠÑÔÐÐÐr-   r9   c                 ó$   — | j         j        j        S r<   ©r  rg   r’   rC   s    r.   Úget_input_embeddingsz SiglipModel.get_input_embeddingsœ  s   € ØŒÔ)Ô9Ð9r-   r£   c                 ó(   — || j         j        _        d S r<   rA  ©rD   r£   s     r.   Úset_input_embeddingsz SiglipModel.set_input_embeddingsŸ  s   € Ø5:ˆŒÔ"Ô2Ð2Ð2r-   Nr•   r¤   rP   r®   c                 ó$   —  | j         d|||dœ|¤ŽS )am  
        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¤   rP   r,   )r  )rD   r•   r¤   rP   r®   s        r.   Úget_text_featureszSiglipModel.get_text_features¢  s7   € ð0 ˆtŒð 
ØØ)Ø%ð
ð 
ð ð	
ð 
ð 	
r-   Fr   r~   c                 ó"   —  | j         d||dœ|¤ŽS )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,   )r)  )rD   r   r~   r®   s       r.   Úget_image_featureszSiglipModel.get_image_featuresÁ  s5   € ð6 !ˆtÔ ð 
Ø%Ø%=ð
ð 
ð ð
ð 
ð 	
r-   Úreturn_lossc           	      óŒ  —  | j         d||dœ|¤Ž} | j        d|||dœ|¤Ž}	|j        }
|	j        }|
|
                     ddd¬¦  «        z  }
||                     ddd¬¦  «        z  }t	          j        ||
                     ¦   «                              |j        ¦  «        ¦  «        }| j	                             |j        ¦  «        | j
                             |j        ¦  «        }}||                     ¦   «         z  |z   }|                     ¦   «         }d}|r›t	          j        |                     d¦  «        |j        ¬	¦  «        }t	          j        |¦  «         d|z  z   }t          j        j                             ||z  ¦  «        }t	          j        |d¬
¦  «         }|                     ¦   «         }t)          |||||
|	|¬¦  «        S )a  
        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'
        ```rJ  rG  rO   rR   T)r¨   rz   ÚkeepdimNr   )Údevice©rz   )r4   r5   r6   r1   r    r7   r8   r,   )r)  r  r"  Únormr(   rª   Útr‚   rO  rù   rú   ÚexpÚeyerl   Ú	ones_liker   rv   Ú
logsigmoidÚsumÚmeanr3   )rD   r•   r   r¤   rP   rL  r~   r®   Úvision_outputsÚtext_outputsr    r1   r6   rù   rú   r5   r4   rT  Úm1_diag1ÚloglikÚnlls                        r.   rˆ   zSiglipModel.forwardã  sý  € ðX 6G°TÔ5Fð 6
Ø%Ø%=ð6
ð 6
ð ð6
ð 6
ˆð 4C°4´?ð 4
ØØ)Ø%ð4
ð 4
ð ð	4
ð 4
ˆð &Ô3ˆØ"Ô0ˆð $ l×&7Ò&7¸!ÀÈTÐ&7Ñ&RÔ&RÑRˆØ! K×$4Ò$4°q¸bÈ$Ð$4Ñ$OÔ$OÑOˆõ  œ, {°L·N²NÑ4DÔ4D×4GÒ4GÈÔHZÑ4[Ô4[Ñ\Ô\ˆà"&Ô"2×"5Ò"5°kÔ6HÑ"IÔ"IÈ4Ì?×K]ÒK]Ð^iÔ^pÑKqÔKq�ZˆØ)¨K¯OªOÑ,=Ô,=Ñ=À
ÑJˆà*×,Ò,Ñ.Ô.ÐàˆØð 	å”)˜O×0Ò0°Ñ3Ô3¸OÔ<RÐSÑSÔSˆCÝœ¨Ñ8Ô8Ð8¸1¸s¹7ÑBˆHÝ”XÔ(×3Ò3°H¸Ñ4NÑOÔOˆFÝ”9˜V¨Ð,Ñ,Ô,Ð,ˆCØ—8’8‘:”:ˆDåØØ-Ø+Ø#Ø%Ø*Ø .ð
ñ 
ô 
ð 	
r-   )NNr‰   )NNNNNF)r$   r%   r&   r   r*   rV   r   ÚModulerB  rE  r   r   r(   rŠ   r   r   r+   r   rH  r)   r0  rK  rž   r3   rˆ   rŒ   r�   s   @r.   rø   rø   ˆ  sG  ø€ € € € € € àÐÐÑð˜|ð ð ð ð ð ð ð : b¤ið :ð :ð :ð :ð;¨"¬)ð ;ð ;ð ;ð ;ð Øð /3Ø,0ð	
ð 
à”<ð
ð œ tÑ+ð
ð ”l TÑ)ð	
ð
 Ð+Ô,ð
ð 
Ð+Ñ	+ð
ð 
ð 
ñ „^ñ Ôð
ð: Øð */ð
ð 
àÔ'ð
ð #'ð
ð Ð+Ô,ð	
ð
 
Ð+Ñ	+ð
ð 
ð 
ñ „^ñ Ôð
ð@ Øð .2Ø15Ø.2Ø04Ø#'Ø).ðW
ð W
àÔ# dÑ*ðW
ð Ô'¨$Ñ.ðW
ð œ tÑ+ð	W
ð
 Ô&¨Ñ-ðW
ð ˜D‘[ðW
ð #'ðW
ð Ð+Ô,ðW
ð 
ðW
ð W
ð W
ñ „^ñ ÔðW
ð W
ð W
ð W
ð W
r-   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                   óÌ   ‡ — e Zd ZdZdZdeddfˆ fd„Zdej        fd„Z	dej        fd	„Z
ee	 	 	 ddej        dz  dej        dz  dedee         def
d„¦   «         ¦   «         Zˆ xZS )rû   r   r(  rG   r9   Nc                 ó`  •— t          ¦   «                              |¦  «         |j        | _        t                               |j        ¦  «        | _        |j        dk    r$t          j        |j        j	        |j        ¦  «        nt          j
        ¦   «         | _        |                      ¦   «          d S )Nr   )rU   rV   Ú
num_labelsr'  r?  ré   r)  r   r¼   rW   ÚIdentityrü   r  re   s     €r.   rV   z%SiglipForImageClassification.__init__I  s–   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ-×:Ò:¸6Ô;OÑPÔPˆÔð OUÔN_ÐbcÒNcÐNc�BŒI�fÔ*Ô6¸Ô8IÑJÔJÐJÕikÔitÑivÔivð 	Œð
 	�ŠÑÔÐÐÐr-   c                 ó$   — | j         j        j        S r<   ©r)  rg   r]   rC   s    r.   rB  z1SiglipForImageClassification.get_input_embeddingsW  s   € ØÔ Ô+Ô;Ð;r-   r£   c                 ó(   — || j         j        _        d S r<   rd  rD  s     r.   rE  z1SiglipForImageClassification.set_input_embeddingsZ  s   € Ø7<ˆÔÔ$Ô4Ð4Ð4r-   FÚlabelsr~   r®   c                 ó   —  | j         |fd|i|¤Ž}|j        }t          j        |d¬¦  «        }|                      |¦  «        }d}|�|                      ||| j        ¦  «        }t          |||j        |j	        ¬¦  «        S )au  
        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   rP  N)r4   Úlogitsr"   r#   )
r)  r!   r(   rX  rü   Úloss_functionrG   r   r"   r#   )	rD   r   rf  r~   r®   ÚoutputsÚsequence_outputrh  r4   s	            r.   rˆ   z$SiglipForImageClassification.forward]  s²   € ðT /@¨dÔ.?Øð/
ð /
à%=ð/
ð ð/
ð /
ˆð "Ô3ˆõ  œ* _¸!Ð<Ñ<Ô<ˆà—’ Ñ1Ô1ˆàˆØÐØ×%Ò% f¨f°d´kÑBÔBˆDå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r-   )NNF)r$   r%   r&   r/  r   r   rV   r   r^  rB  rE  r   r   r(   rŠ   r0  r   r   r   rˆ   rŒ   r�   s   @r.   rû   rû   ?  s  ø€ € € € € ð %€OØ!Ðð˜|ð °ð ð ð ð ð ð ð< b¤ið <ð <ð <ð <ð=¨"¬)ð =ð =ð =ð =ð Øð -1Ø&*Ø).ð	>
ð >
à”l TÑ)ð>
ð ”˜tÑ#ð>
ð #'ð	>
ð
 Ð+Ô,ð>
ð 
ð>
ð >
ð >
ñ „^ñ Ôð>
ð >
ð >
ð >
ð >
r-   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   r0   r3   r^  rF   r�   rŠ   Úfloatr±   r³   rÊ   rÓ   rá   r
  r  r'  rå   rø   rû   Ú__all__r,   r-   r.   ú<module>r}     sá  ðð Ð à $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ Tð €ððñ ô ð
 ð	<ð 	<ð 	<ð 	<ð 	<˜kñ 	<ô 	<ñ „ñô ð	<ð €ððñ ô ð
 ð	<ð 	<ð 	<ð 	<ð 	<˜Kñ 	<ô 	<ñ „ñô ð	<ð Ø
ð_ð _ð _ð _ð _�;ñ _ô _ñ „ñ „ð_ð@Eð Eð Eð Eð E˜RœYñ Eô Eð EðR%ð %ð %ð %ð %˜2œ9ñ %ô %ð %ð^ ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð %ð %ð %ð.8)ð 8)ð 8)ð 8)ð 8)�b”iñ 8)ô 8)ð 8)ðxð ð ð ð �”	ñ ô ð ðð ð ð ð Ð3ñ ô ð ðD ðDið Dið Dið Dið Di˜Oñ Diô Diñ „ðDiðP@ð @ð @ð @ð @�B”Iñ @ô @ð @ðD €ððñ ô ð
J
ð J
ð J
ð J
ð J
Ð+ñ J
ô J
ñô ð
J
ðZ €ððñ ô ð
B
ð B
ð B
ð B
ð B
Ð-ñ B
ô B
ñô ð
B
ðJ"ð "ð "ð "ð "¨"¬)ñ "ô "ð "ð0 ðs
ð s
ð s
ð s
ð s
Ð'ñ s
ô s
ñ „ðs
ðl €ððñ ô ðX
ð X
ð X
ð X
ð X
Ð#8ñ X
ô X
ñô ðX
ðvð ð €€€r-   