§
    ‚Štj(¡  ã                   ó\  — 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
c 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$ ddl%m&Z&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!¦  «        ¦   «         ¦   «         Z0 G d„ de
j1        ¦  «        Z2 G d„ de
j1        ¦  «        Z3	 d@d e
j1        d!ej4        d"ej4        d#ej4        d$ej4        dz  d%e5d&e5fd'„Z6 G d(„ d)e
j1        ¦  «        Z7 G d*„ d+e
j1        ¦  «        Z8 G d,„ d-e¦  «        Z9e# G d.„ d/e¦  «        ¦   «         Z: G d0„ d1e
j1        ¦  «        Z; e#d2¬¦  «         G d3„ d4e:¦  «        ¦   «         Z< e#d5¬¦  «         G d6„ d7e:¦  «        ¦   «         Z= G d8„ d9e
j1        ¦  «        Z>e# G d:„ d;e:¦  «        ¦   «         Z? e#d<¬¦  «         G d=„ d>e:¦  «        ¦   «         Z@g d?¢ZAdS )Aé    )ÚCallable)Ú	dataclass)ÚAnyNé   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚImageClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚtorch_compilable_check)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚSiglip2ConfigÚSiglip2TextConfigÚSiglip2VisionConfigz}
    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 )ÚSiglip2VisionOutputzø
    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"   © ó    új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/siglip2/modeling_siglip2.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 )ÚSiglip2TextOutputzö
    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&   r0   r'   r(   r)   r    r!   r*   r"   r+   r,   r-   r/   r/   >   s“   € € € € € € ðð ð
 -1€K�Ô" TÑ)Ð0Ð0Ñ0Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;r,   r/   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 )ÚSiglip2Outputaµ  
    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 [`Siglip2TextModel`].
    image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
        The image embeddings obtained by applying the projection layer to the pooled output of [`Siglip2VisionModel`].
    text_model_output (`BaseModelOutputWithPooling`):
        The output of the [`Siglip2TextModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`Siglip2VisionModel`].
    NÚlossÚlogits_per_imageÚlogits_per_textr0   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)Siglip2Output.to_tuple.<locals>.<genexpr>o   s=   è è € Ð^Ð^È1¥Z°µ;Ñ%?Ô%?ÐF�Q—Z’Z‘\”\�\ÀQÐ^Ð^Ð^Ð^Ð^Ð^r,   )r*   Úvalues©Úselfs    r-   r=   zSiglip2Output.to_tuplen   s,   € ÝÐ^Ð^ÐPT×P[ÒP[ÑP]ÔP]Ð^Ñ^Ô^Ñ^Ô^Ð^r,   )r#   r$   r%   r&   r3   r'   r(   r)   r4   r5   r0   r   r6   r   r7   r*   r   r=   r+   r,   r-   r2   r2   P   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,   r2   c            	       óœ   ‡ — e Zd Zdefˆ fd„Zedej        dej        de	dej        fd„¦   «         Z
dej        dej        dej        fd	„Zˆ xZS )
ÚSiglip2VisionEmbeddingsÚconfigc                 óˆ  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        t          j        |j        | j        z  | j        z  | j        ¬¦  «        | _	        |j
        | _
        t          | j
        dz  ¦  «        | _        t          j        | j
        | j        ¦  «        | _        d S )N)Úin_featuresÚout_featuresg      à?)ÚsuperÚ__init__rF   Úhidden_sizeÚ	embed_dimÚ
patch_sizeÚnnÚLinearÚnum_channelsÚpatch_embeddingÚnum_patchesÚintÚposition_embedding_sizeÚ	EmbeddingÚposition_embedding©rC   rF   Ú	__class__s     €r-   rK   z Siglip2VisionEmbeddings.__init__s   sª   ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØ Ô+ˆŒå!œyØÔ+¨d¬oÑ=ÀÄÑOØœð 
ñ  
ô  
ˆÔð
 "Ô-ˆÔÝ'*¨4Ô+;¸SÑ+@Ñ'AÔ'AˆÔ$Ý"$¤,¨tÔ/?ÀÄÑ"PÔ"PˆÔÐÐr,   Úpositional_embeddingsÚspatial_shapesÚ
max_lengthr8   c                 ó
  — |j         d         }| j         d         }| j        }t          j        |||f| j        |¬¦  «        }|                      ddd¦  «                             d¦  «        } | j        j        dk    r|                      t          j	        ¦  «        } t          |¦  «        D ]Ù}||                              ¦   «         \  }}	t          |	dk    d¦  «         t          |dk    d¦  «         t          ||	z  |k    d	¦  «         t          j        | ||	fd
dd¬¦  «        }
|
                     |||	z  ¦  «                             dd¦  «        }
|
                     |¦  «        }
|
||d||	z  …f<   |
d         ||||	z  d…f<   ŒÚ|S )ac  
        Resize positional embeddings to image-specific size and pad to a fixed size.

        Args:
            positional_embeddings (`torch.Tensor`):
                Position embeddings of shape (height, width, embed_dim)
            spatial_shapes (`torch.LongTensor`):
                Spatial shapes of shape (batch_size, 2) to resize the positional embeddings to
            max_length (`int`):
                Maximum length of the positional embeddings to pad resized positional embeddings to

        Returns:
            `torch.Tensor`: Embeddings of shape (batch_size, max_length, embed_dim)
        r   éÿÿÿÿ©ÚdeviceÚdtypeé   r   Úcpuz8Width of resized positional embeddings must be positive.z9Height of resized positional embeddings must be positive.z0Resized positional embeddings exceed max_length.ÚbilinearFT)ÚsizeÚmodeÚalign_cornersÚ	antialiasN)Úshapera   r'   Úemptyr`   ÚpermuteÚ	unsqueezeÚtypeÚtoÚfloat32ÚrangeÚtolistr   ÚFÚinterpolateÚreshapeÚ	transpose)rZ   r[   r\   Ú
batch_sizerM   Úsource_dtypeÚresulted_positional_embeddingsÚiÚheightÚwidthÚresized_embeddingss              r-   Úresize_positional_embeddingsz4Siglip2VisionEmbeddings.resize_positional_embeddings‚   sË  € ð( $Ô)¨!Ô,ˆ
Ø)Ô/°Ô3ˆ	Ø,Ô2ˆå).¬Ø˜ YÐ/Ø(Ô/Øð*
ñ *
ô *
Ð&ð !6× =Ò =¸aÀÀAÑ FÔ F× PÒ PÐQRÑ SÔ SÐð !Ô'Ô,°Ò5Ð5Ø$9×$<Ò$<½U¼]Ñ$KÔ$KÐ!å�zÑ"Ô"ð 	Xð 	XˆAà*¨1Ô-×4Ò4Ñ6Ô6‰MˆF�EÝ" E¨A¢IÐ0jÑkÔkÐkÝ" F¨Q¢JÐ1lÑmÔmÐmÝ" F¨U¡N°zÒ#AÐCuÑvÔvÐvÝ!"¤Ø%Ø˜e�_ØØ#Øð"ñ "ô "Ðð "4×!;Ò!;¸IÀvÐPUÁ~Ñ!VÔ!V×!`Ò!`ÐabÐdeÑ!fÔ!fÐð "4×!6Ò!6°|Ñ!DÔ!DÐàBTÐ*¨1Ð.>°¸±Ð.>Ð+>Ñ?ØBTÐUVÔBWÐ*¨1¨f°u©nÐ.>Ð.>Ð+>Ñ?Ð?à-Ð-r,   Úpixel_valuesc                 ó   — | j         j        j        }|                       |                     |¬¦  «        ¦  «        }| j        j                             | j        | j        d¦  «        }|                      |||j        d         ¬¦  «        }||z   }|S )aH  
        Args:
            pixel_values (`torch.FloatTensor`):
                Pixel values of shape (batch_size, max_num_patches, num_channels * patch_size * patch_size)
            spatial_shapes (`list[tuple[int, int]]`):
                Spatial shapes of shape (batch_size, 2) to resize the positional embeddings to
        )ra   r^   r   )r\   )	rR   Úweightra   rn   rW   rt   rU   r}   ri   )rC   r~   r[   Útarget_dtypeÚpatch_embedsrZ   Úresized_positional_embeddingsÚ
embeddingss           r-   ÚforwardzSiglip2VisionEmbeddings.forwardÀ   sŸ   € ð Ô+Ô2Ô8ˆØ×+Ò+¨L¯OªOÀ,¨OÑ,OÔ,OÑPÔPˆð !%Ô 7Ô >× FÒ FØÔ(¨$Ô*FÈñ!
ô !
Ðð )-×(IÒ(IØ! >¸lÔ>PÐQRÔ>Sð )Jñ )
ô )
Ð%ð
 "Ð$AÑAˆ
ØÐr,   )r#   r$   r%   r   rK   Ústaticmethodr'   ÚTensorÚ
LongTensorrT   r}   r(   r…   Ú__classcell__©rY   s   @r-   rE   rE   r   sË   ø€ € € € € ðQÐ2ð Qð Qð Qð Qð Qð Qð ð;.Ø$œ|ð;.àÔ(ð;.ð ð;.ð 
Œð	;.ð ;.ð ;.ñ „\ð;.ðz EÔ$5ð ÀuÔGWð Ð\aÔ\hð ð ð ð ð ð ð ð r,   rE   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 )
ÚSiglip2TextEmbeddingsrF   c                 óV  •— t          ¦   «                              ¦   «          |j        }t          j        |j        |¦  «        | _        t          j        |j        |¦  «        | _        |  	                    dt          j        |j        ¦  «                             d¦  «        d¬¦  «         d S )NÚposition_ids©r   r^   F)Ú
persistent)rJ   rK   rL   rO   rV   Ú
vocab_sizeÚtoken_embeddingÚmax_position_embeddingsrW   Úregister_bufferr'   ÚarangeÚexpand©rC   rF   rM   rY   s      €r-   rK   zSiglip2TextEmbeddings.__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_idsrŽ   Úinputs_embedsr8   c                 ó.  — |�|j         d         n|j         d         }| j        j        j         d         }||k    rt          d|› d|› �¦  «        ‚|€| j        d d …d |…f         }|€|                      |¦  «        }|                      |¦  «        }||z   }|S )Nr^   éþÿÿÿr   zRSequence length must be less than max_position_embeddings (got `sequence length`: z and max_position_embeddings: )ri   rW   r€   Ú
ValueErrorrŽ   r’   )rC   r˜   rŽ   r™   Ú
seq_lengthÚmax_position_embeddingÚposition_embeddingsr„   s           r-   r…   zSiglip2TextEmbeddings.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   rK   r'   rˆ   r(   r‡   r…   r‰   rŠ   s   @r-   rŒ   rŒ   Ú   s©   ø€ € € € € ð

Ð0ð 

ð 

ð 

ð 

ð 

ð 

ð .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 )Nr^   r›   )Údimra   )ÚpÚtrainingr   rb   )r'   Úmatmulru   rO   Ú
functionalÚsoftmaxro   rn   ra   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 )	ÚSiglip2Attentionz=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)rJ   rK   rF   rL   rM   Únum_attention_headsÚ	num_headsÚhead_dimrœ   ÚscaleÚattention_dropoutr¨   Ú	is_causalrO   rP   Úk_projÚv_projÚq_projÚout_projrX   s     €r-   rK   zSiglip2Attention.__init__  s  ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØÔ3ˆŒØœ¨$¬.Ñ8ˆŒØŒ=˜4œ>Ñ)¨T¬^Ò;Ð;Ýð'ÈdÌnð 'ð 'Ø”Nð'ð 'ð 'ñô ð ð ”] DÑ(ˆŒ
ØÔ/ˆŒØˆŒå”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝœ	 $¤.°$´.ÑAÔAˆŒˆˆr,   Nr!   r¦   r8   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 ChannelNr^   r   rb   r¡   )r¾   r§   r¨   )ri   r»   rÁ   Úviewru   r¿   rÀ   r   Úget_interfacerF   Ú_attn_implementationr´   r¾   r¼   r¬   r¨   rt   r°   rÂ   )rC   r!   r¦   r±   Úinput_shapeÚhidden_shapeÚqueriesÚkeysrA   Úattention_interfacer³   r²   s               r-   r…   zSiglip2Attention.forward0  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&   rK   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 )Ú
Siglip2MLPc                 ó  •— t          ¦   «                              ¦   «          || _        t          |j                 | _        t          j        |j        |j	        ¦  «        | _
        t          j        |j	        |j        ¦  «        | _        d S r;   )rJ   rK   rF   r   Ú
hidden_actÚactivation_fnrO   rP   rL   Úintermediate_sizeÚfc1Úfc2rX   s     €r-   rK   zSiglip2MLP.__init__U  sf   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ# FÔ$5Ô6ˆÔÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝ”9˜VÔ5°vÔ7IÑJÔJˆŒˆˆr,   r!   r8   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r;   )rÒ   rÐ   rÓ   )rC   r!   s     r-   r…   zSiglip2MLP.forward\  s=   € ØŸš Ñ/Ô/ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš Ñ/Ô/ˆØÐr,   )r#   r$   r%   rK   r'   r‡   r…   r‰   rŠ   s   @r-   rÍ   rÍ   T  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 )ÚSiglip2EncoderLayerrF   c                 óD  •— t          ¦   «                              ¦   «          |j        | _        t	          j        | j        |j        ¬¦  «        | _        t          |¦  «        | _	        t	          j        | j        |j        ¬¦  «        | _
        t          |¦  «        | _        d S ©N©Úeps)rJ   rK   rL   rM   rO   Ú	LayerNormÚlayer_norm_epsÚlayer_norm1r¶   Ú	self_attnÚlayer_norm2rÍ   ÚmlprX   s     €r-   rK   zSiglip2EncoderLayer.__init__d  s}   ø€ Ý‰Œ×ÒÑÔÐØÔ+ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÝ)¨&Ñ1Ô1ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÝ˜fÑ%Ô%ˆŒˆˆr,   r!   r¦   r±   r8   c                 óÆ   — |}|                       |¦  «        } | j        d||dœ|¤Ž\  }}||z   }|}|                      |¦  «        }|                      |¦  «        }||z   }|S )N)r!   r¦   r+   )rÝ   rÞ   rß   rà   )rC   r!   r¦   r±   ÚresidualÚ_s         r-   r…   zSiglip2EncoderLayer.forwardl  s“   € ð !ˆà×(Ò(¨Ñ7Ô7ˆØ)˜4œ>ð 
Ø'Ø)ð
ð 
ð ð
ð 
Ñˆ�qð
 ! =Ñ0ˆà ˆØ×(Ò(¨Ñ7Ô7ˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆàÐr,   )r#   r$   r%   r   r   rK   r   r'   r‡   r   r   r(   r…   r‰   rŠ   s   @r-   rÖ   rÖ   c  sž   ø€ € € € € ð&Ð2Ð5FÑFð &ð &ð &ð &ð &ð &ð ðà”|ðð œðð Ð+Ô,ð	ð
 
Ô	ðð ð ñ „^ðð ð ð ð 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 )	ÚSiglip2PreTrainedModelrF   Úsiglip2)ÚimageÚtextT)rŒ   rE   rÖ   Ú$Siglip2MultiheadAttentionPoolingHeadF)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   )ÚstdrŽ   r^   r�   g�íµ ÷Æ°>r¸   N)2rJ   Ú_init_weightsr<   rE   rF   r   Úvision_configrL   ÚinitÚnormal_rW   r€   ÚnpÚsqrtÚhasattrÚcopy_rŽ   r'   r•   ri   r–   rO   rV   Údefault_flax_embed_init_r¶   Úxavier_uniform_rÁ   r¿   rÀ   rÂ   Úzeros_ÚbiasrÍ   rÒ   rÓ   ré   ÚprobeÚ	attentionÚin_proj_weightÚin_proj_biasÚSiglip2ModelÚlogit_scaleÚ
logit_biasÚSiglip2ForImageClassificationÚ
classifierÚinitializer_factorrP   ÚConv2dÚlecun_normal_rŒ   )rC   r¢   r{   rY   s      €r-   rì   z$Siglip2PreTrainedModel._init_weights�  s  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ5Ñ6Ô6ð *	iõ ˜dœk­=Ñ9Ô9ð-�”Ô)Ô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Ñ1Ô1ð 	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Ý˜Õ DÑEÔEð 	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Ñ(Ô(Ð(Ð(Ð(ð 'Ð&å˜Õ 5Ñ6Ô6ð 	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å   …  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 )
ÚSiglip2Encoderz³
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`Siglip2EncoderLayer`].

    Args:
        config: Siglip2Config
    rF   c                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r+   )rÖ   )r>   rã   rF   s     €r-   ú
<listcomp>z+Siglip2Encoder.__init__.<locals>.<listcomp>Ú  s"   ø€ Ð$jÐ$jÐ$jÀQÕ%8¸Ñ%@Ô%@Ð$jÐ$jÐ$jr,   F)	rJ   rK   rF   rO   Ú
ModuleListrp   Únum_hidden_layersÚlayersÚgradient_checkpointingrX   s    `€r-   rK   zSiglip2Encoder.__init__×  sa   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”mÐ$jÐ$jÐ$jÐ$jÍ%ÐPVÔPhÑJiÔJiÐ$jÑ$jÔ$jÑkÔkˆŒØ&+ˆÔ#Ð#Ð#r,   Nr¦   r±   r8   c                 óN   — |}| j         D ]} |||fi |¤Ž}Œt          |¬¦  «        S )N)r    )r  r   )rC   r™   r¦   r±   r!   Úencoder_layers         r-   r…   zSiglip2Encoder.forwardÞ  sU   € ð &ˆØ!œ[ð 	ð 	ˆMØ)˜MØØðð ð ðð ˆMˆMõ °Ð?Ñ?Ô?Ð?r,   r;   )r#   r$   r%   r&   r   rK   r   r'   r‡   r   r   r   r…   r‰   rŠ   s   @r-   r  r  Î  s¯   ø€ € € € € ðð ð,˜}ð ,ð ,ð ,ð ,ð ,ð ,ð ð /3ð@ð @ð œ tÑ+ð@ð Ð+Ô,ð	@ð
 
ð@ð @ð @ñ „^ð@ð @ð @ð @ð @r,   r  zN
    The vision model from Siglip2 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ej        d	ej        d
ej        dee         def
d„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚSiglip2VisionModelrF   r~   ©rç   Úvision_modelrR   c                 ó�  •— t          ¦   «                              |¦  «         || _        |j        }t	          |¦  «        | _        t          |¦  «        | _        t          j	        ||j
        ¬¦  «        | _        t          |d¦  «        sdn|j        | _        | j        rt          |¦  «        | _        |                      ¦   «          d S )NrÙ   Úvision_use_headT)rJ   rK   rF   rL   rE   r„   r  ÚencoderrO   rÛ   rÜ   Úpost_layernormrò   r  Úuse_headré   ÚheadÚ	post_initr—   s      €r-   rK   zSiglip2VisionModel.__init__ü  s°   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒØÔ&ˆ	å1°&Ñ9Ô9ˆŒÝ% fÑ-Ô-ˆŒÝ œl¨9¸&Ô:OÐPÑPÔPˆÔÝ$+¨FÐ4EÑ$FÔ$FÐb˜˜ÈFÔLbˆŒØŒ=ð 	EÝ<¸VÑDÔDˆDŒIØ�ŠÑÔÐÐÐr,   F©Útie_last_hidden_statesÚpixel_attention_maskr[   r±   r8   c                 ó  — |                       ||¦  «        }t          | j        ||¬¦  «        } | j        d||dœ|¤Ž}|j        }|                      |¦  «        }| j        r|                      ||¦  «        nd}	t          ||	¬¦  «        S )a“  
        pixel_attention_mask (`torch.Tensor` of shape `(batch_size, image_size, image_size)`, *optional*):
            Mask to avoid performing attention on padding pixel indices.
        spatial_shapes (`torch.LongTensor` of shape `(batch_size, 2)`):
            Tensor containing the spatial dimensions (height, width) of the input images.

        Examples:

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

        >>> model = Siglip2VisionModel.from_pretrained("google/siglip2-base-patch16-224")
        >>> processor = AutoProcessor.from_pretrained("google/siglip2-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
        ```
        ©rF   r™   r¦   ©r™   r¦   N©r    Úpooler_outputr+   )	r„   r	   rF   r  r    r   r!  r"  r   )
rC   r~   r&  r[   r±   r!   Úencoder_attention_maskÚencoder_outputsr    r+  s
             r-   r…   zSiglip2VisionModel.forward	  sÆ   € ðL Ÿš¨°nÑEÔEˆå!:Ø”;Ø'Ø/ð"
ñ "
ô "
Ðð ,8¨4¬<ð ,
Ø'Ø1ð,
ð ,
ð ð,
ð ,
ˆð ,Ô=ÐØ ×/Ò/Ð0AÑBÔBÐàNRÌmÐe˜Ÿ	š	Ð"3Ð5IÑJÔJÐJÐaeˆå)Ø/Ø'ð
ñ 
ô 
ð 	
r,   )r#   r$   r%   r   r)   Úmain_input_namer  r  Ú_input_embed_layerrK   r   r   r   r'   r(   r‡   rˆ   r   r   r   r…   r‰   rŠ   s   @r-   r  r  ð  sí   ø€ € € € € € ð  ÐÐÑØ$€OØ!ÐØ&ÐØ*ÐðÐ2ð ð ð ð ð ð ð  Ø€_¨EÐ2Ñ2Ô2Øð9
àÔ'ð9
ð $œlð9
ð Ô(ð	9
ð
 Ð+Ô,ð9
ð 
$ð9
ð 9
ð 9
ñ „^ñ 3Ô2ñ  Ôð9
ð 9
ð 9
ð 9
ð 9
r,   r  zL
    The text model from Siglip2 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 )ÚSiglip2TextModelrF   )rè   Ú
text_modelr’   c                 ó\  •— t          ¦   «                              |¦  «         || _        |j        }t	          |¦  «        | _        t          |¦  «        | _        t          j	        ||j
        ¬¦  «        | _        t          j        ||j        ¦  «        | _        |                      ¦   «          d S rØ   )rJ   rK   rF   rL   rŒ   r„   r  r  rO   rÛ   rÜ   Úfinal_layer_normrP   Úprojection_sizer"  r#  r—   s      €r-   rK   zSiglip2TextModel.__init__S  sŽ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒØÔ&ˆ	Ý/°Ñ7Ô7ˆŒÝ% fÑ-Ô-ˆŒÝ "¤¨Y¸FÔ<QÐ RÑ RÔ RˆÔå”I˜i¨Ô)?Ñ@Ô@ˆŒ	Ø�ŠÑÔÐÐÐr,   Fr$  Nr˜   r¦   rŽ   r±   r8   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, Siglip2TextModel

        >>> model = Siglip2TextModel.from_pretrained("google/siglip2-base-patch16-224")
        >>> tokenizer = AutoTokenizer.from_pretrained("google/siglip2-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_idsr^   )r˜   rŽ   r(  r)  r*  r+   )rœ   re   rÄ   r„   r	   rF   r  r    r4  r"  r   )
rC   r˜   r¦   rŽ   r±   rÇ   r!   r-  r    Úpooled_outputs
             r-   r…   zSiglip2TextModel.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  r/  rK   r   r   r   r'   r‡   r   r   r   r…   r‰   rŠ   s   @r-   r1  r1  H  s  ø€ € € € € € ð ÐÐÑØ ÐØ$ÐØ*Ðð	Ð0ð 	ð 	ð 	ð 	ð 	ð 	ð  Ø€_¨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,   r1  c                   ób   ‡ — e Zd ZdZdefˆ fd„Zd	dej        dej        dz  dej        fd„Zˆ xZ	S )
ré   zMultihead Attention Pooling.rF   c                 ó¦  •— t          ¦   «                              ¦   «          t          j        t	          j        dd|j        ¦  «        ¦  «        | _        t          j                             |j        |j	        d¬¦  «        | _
        t          j        |j        |j        ¬¦  «        | _        t          |¦  «        | _        || _        |j	        | _        d S )Nr   T)Úbatch_firstrÙ   )rJ   rK   rO   Ú	Parameterr'   ÚrandnrL   rø   ÚMultiheadAttentionr¹   rù   rÛ   rÜ   Ú	layernormrÍ   rà   rF   rº   rX   s     €r-   rK   z-Siglip2MultiheadAttentionPoolingHead.__init__�  s    ø€ Ý‰Œ×ÒÑÔÐå”\¥%¤+¨a°°FÔ4FÑ"GÔ"GÑHÔHˆŒ
Ýœ×4Ò4°VÔ5GÈÔIcÐquÐ4ÑvÔvˆŒÝœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ˜fÑ%Ô%ˆŒàˆŒØÔ3ˆŒˆˆr,   NÚhidden_stater¦   r8   c                 ó¨  — |j         d         }| j                             |dd¦  «        }|�Î|j         d         |j         d         }}t          | j        |||¬¦  «        }|�š|                     d| j        |d¦  «        }|                     d||¦  «        }|j        t          j	        k    rQt          j
        |t          j        d|j        |j        ¬¦  «        t          j        |j        ¦  «        j        ¦  «        }|                      ||||¬¦  «        d         }|}|                      |¦  «        }||                      |¦  «        z   }|d d …df         S )Nr   r   )rF   r™   r¦   Úencoder_hidden_statesr^   r¡   r_   )Ú	attn_mask)ri   rø   Úrepeatr	   rF   rº   rt   ra   r'   ÚboolÚwhereÚtensorr`   ÚfinfoÚminrù   r>  rà   )rC   r?  r¦   rv   rø   Ú
target_lenÚ
source_lenrâ   s           r-   r…   z,Siglip2MultiheadAttentionPoolingHead.forward¨  sT  € Ø!Ô'¨Ô*ˆ
Ø”
×!Ò! *¨a°Ñ3Ô3ˆàÐ%Ø%*¤[°¤^°\Ô5GÈÔ5J˜
ˆJÝ6Ø”{Ø#Ø-Ø&2ð	ñ ô ˆNð Ð)Ø!/×!6Ò!6°q¸$¼.È*ÐVWÑ!XÔ!X�Ø!/×!7Ò!7¸¸JÈ
Ñ!SÔ!S�ð "Ô'­5¬:Ò5Ð5Ý%*¤[Ø&Ýœ S°Ô1FÈeÌkÐZÑZÔZÝœ E¤KÑ0Ô0Ô4ñ&ô &�Nð —~’~ e¨\¸<ÐSa�~ÑbÔbÐcdÔeˆàˆØ—~’~ lÑ3Ô3ˆØ $§(¢(¨<Ñ"8Ô"8Ñ8ˆà˜A˜A˜A˜q˜DÔ!Ð!r,   r;   )
r#   r$   r%   r&   r   rK   r'   r‡   r…   r‰   rŠ   s   @r-   ré   ré   š  s‡   ø€ € € € € Ø&Ð&ð	4Ð2ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð"ð " E¤Lð "À%Ä,ÐQUÑBUð "ÐafÔamð "ð "ð "ð "ð "ð "ð "ð "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z  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z  dej        dz  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e         defd„¦   «         ¦   «         Zˆ xZS )rü   rF   c                 ó¶  •— t          ¦   «                              |¦  «         |j        }|j        }t                               |¦  «        | _        t                               |¦  «        | _        t          j
        t          j        d¦  «        ¦  «        | _        t          j
        t          j        d¦  «        ¦  «        | _        |                      ¦   «          d S )Nr   )rJ   rK   Útext_configrí   r1  Ú_from_configr2  r  r  rO   r;  r'   r<  rý   rþ   r#  )rC   rF   rM  rí   rY   s       €r-   rK   zSiglip2Model.__init__Í  s£   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ(ˆØÔ,ˆõ +×7Ò7¸ÑDÔDˆŒÝ.×;Ò;¸MÑJÔJˆÔåœ<­¬°A©¬Ñ7Ô7ˆÔÝœ,¥u¤{°1¡~¤~Ñ6Ô6ˆŒð 	�ŠÑÔÐÐÐr,   r8   c                 ó$   — | j         j        j        S r;   ©r2  r„   r’   rB   s    r-   Úget_input_embeddingsz!Siglip2Model.get_input_embeddingsÝ  s   € ØŒÔ)Ô9Ð9r,   r¥   c                 ó(   — || j         j        _        d S r;   rP  ©rC   r¥   s     r-   Úset_input_embeddingsz!Siglip2Model.set_input_embeddingsà  s   € Ø5:ˆŒÔ"Ô2Ð2Ð2r,   Nr˜   r¦   rŽ   r±   c                 ó$   —  | j         d|||dœ|¤ŽS )ao  
        Examples:

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

        >>> model = AutoModel.from_pretrained("google/siglip2-base-patch16-224")
        >>> tokenizer = AutoTokenizer.from_pretrained("google/siglip2-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¦   rŽ   r+   )r2  )rC   r˜   r¦   rŽ   r±   s        r-   Úget_text_featureszSiglip2Model.get_text_featuresã  s7   € ð0 ˆtŒð 
ØØ)Ø%ð
ð 
ð ð	
ð 
ð 	
r,   r~   r&  r[   c                 ó$   —  | j         d|||dœ|¤ŽS )aé  
        pixel_attention_mask (`torch.Tensor` of shape `(batch_size, image_size, image_size)`, *optional*):
            Mask to avoid performing attention on padding pixel indices.
        spatial_shapes (`torch.LongTensor` of shape `(batch_size, 2)`):
            Tensor containing the spatial dimensions (height, width) of the input images.

        Examples:

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

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

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

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

        >>> with torch.no_grad():
        ...     image_features = model.get_image_features(**inputs)
        ```
        ©r~   r&  r[   r+   )r  )rC   r~   r&  r[   r±   s        r-   Úget_image_featureszSiglip2Model.get_image_features  s9   € ðD !ˆtÔ ð 
Ø%Ø!5Ø)ð
ð 
ð ð	
ð 
ð 	
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 )ae  
        pixel_attention_mask (`torch.Tensor` of shape `(batch_size, image_size, image_size)`, *optional*):
            Mask to avoid performing attention on padding pixel indices.
        spatial_shapes (`torch.LongTensor` of shape `(batch_size, 2)`):
            Tensor containing the spatial dimensions (height, width) of the input images.
        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/siglip2-base-patch16-224")
        >>> processor = AutoProcessor.from_pretrained("google/siglip2-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'
        ```
        rY  rV  rb   r^   T)r«   rª   ÚkeepdimNr   )r`   ©rª   )r3   r4   r5   r0   r   r6   r7   r+   )r  r2  r+  Únormr'   r­   Útrn   r`   rý   rþ   ÚexpÚeyere   Ú	ones_likerO   r®   Ú
logsigmoidÚsumÚmeanr2   )rC   r˜   r~   r&  r[   r¦   rŽ   r[  r±   Úvision_outputsÚtext_outputsr   r0   r5   rý   rþ   r4   r3   rb  Úm1_diag1ÚloglikÚnlls                         r-   r…   zSiglip2Model.forward,  s   € ðd 6G°TÔ5Fð 6
Ø%Ø!5Ø)ð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    )NNNNNNN)r#   r$   r%   r   r)   rK   rO   ÚModulerQ  rT  r   r   r'   r‡   r   r   r*   r   rW  r(   rˆ   rZ  rD  r2   r…   r‰   rŠ   s   @r-   rü   rü   É  sˆ  ø€ € € € € € àÐÐÑð˜}ð ð ð ð ð ð ð : b¤ið :ð :ð :ð :ð;¨"¬)ð ;ð ;ð ;ð ;ð Øð /3Ø,0ð	
ð 
à”<ð
ð œ tÑ+ð
ð ”l TÑ)ð	
ð
 Ð+Ô,ð
ð 
Ð+Ñ	+ð
ð 
ð 
ñ „^ñ Ôð
ð: Øð 26Ø48Ø26ð	%
ð %
àÔ'¨$Ñ.ð%
ð $œl¨TÑ1ð%
ð Ô(¨4Ñ/ð	%
ð
 Ð+Ô,ð%
ð 
Ð+Ñ	+ð%
ð %
ð %
ñ „^ñ Ôð%
ðP Øð .2Ø15Ø48Ø26Ø.2Ø04Ø#'ð^
ð ^
àÔ# dÑ*ð^
ð Ô'¨$Ñ.ð^
ð $œl¨TÑ1ð	^
ð
 Ô(¨4Ñ/ð^
ð œ tÑ+ð^
ð Ô&¨Ñ-ð^
ð ˜D‘[ð^
ð Ð+Ô,ð^
ð 
ð^
ð ^
ð ^
ñ „^ñ Ôð^
ð ^
ð ^
ð ^
ð ^
r,   rü   z®
    Siglip2 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j        dz  dej        dz  dee         defd„¦   «         ¦   «         Zˆ xZS )rÿ   r~   r  rF   r8   Nc                 ó`  •— t          ¦   «                              |¦  «         |j        | _        t                               |j        ¦  «        | _        |j        dk    r$t          j        |j        j	        |j        ¦  «        nt          j
        ¦   «         | _        |                      ¦   «          d S )Nr   )rJ   rK   Ú
num_labelsr  rN  rí   r  rO   rP   rL   ÚIdentityr   r#  rX   s     €r-   rK   z&Siglip2ForImageClassification.__init__™  s–   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ.×;Ò;¸FÔ<PÑQÔQˆÔð 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  r„   rR   rB   s    r-   rQ  z2Siglip2ForImageClassification.get_input_embeddings§  s   € ØÔ Ô+Ô;Ð;r,   r¥   c                 ó(   — || j         j        _        d S r;   rr  rS  s     r-   rT  z2Siglip2ForImageClassification.set_input_embeddingsª  s   € Ø7<ˆÔÔ$Ô4Ð4Ð4r,   r&  r[   Úlabelsr±   c                 ó¨  —  | j         |f||dœ|¤Ž}|j        }|�Q|d                              |j        ¦  «        }t	          j        ||z  d¬¦  «        t	          j        |d¬¦  «        z  }nt	          j        |d¬¦  «        }|                      |¦  «        }	d}
|�|                      ||	| j	        ¦  «        }
t          |
|	|j        |j        ¬¦  «        S )aÙ  
        pixel_attention_mask (`torch.Tensor` of shape `(batch_size, image_size, image_size)`, *optional*):
            Mask to avoid performing attention on padding pixel indices.
        spatial_shapes (`torch.LongTensor` of shape `(batch_size, 2)`):
            Tensor containing the spatial dimensions (height, width) of the input images.
        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, Siglip2ForImageClassification
        >>> 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 `Siglip2Model` 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/siglip2-base-patch16-224")
        >>> model = Siglip2ForImageClassification.from_pretrained("google/siglip2-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[   N).Nr   r^  )r3   Úlogitsr!   r"   )r  r    rn   r`   r'   re  rf  r   Úloss_functionrF   r   r!   r"   )rC   r~   r&  r[   rt  r±   ÚoutputsÚsequence_outputÚ	pool_maskrv  r3   s              r-   r…   z%Siglip2ForImageClassification.forward­  s	  € ð` /@¨dÔ.?Øð/
à!5Ø)ð/
ð /
ð ð	/
ð /
ˆð "Ô3ˆð  Ð+Ø,¨YÔ7×:Ò:¸?Ô;QÑRÔRˆIÝ#œi¨¸)Ñ(CÈÐKÑKÔKÍeÌiÐXaÐghÐNiÑNiÔNiÑiˆOˆOå#œj¨¸aÐ@Ñ@Ô@ˆOð —’ Ñ1Ô1ˆàˆØÐØ×%Ò% f¨f°d´kÑBÔBˆDå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r,   )NNNN)r#   r$   r%   r.  r  r   rK   rO   rl  rQ  rT  r   r   r'   r‡   rˆ   r   r   r   r…   r‰   rŠ   s   @r-   rÿ   rÿ   �  s<  ø€ € € € € ð %€OØ!Ðð˜}ð °ð ð ð ð ð ð ð< b¤ið <ð <ð <ð <ð=¨"¬)ð =ð =ð =ð =ð Øð -1Ø48Ø26Ø&*ðJ
ð J
à”l TÑ)ðJ
ð $œl¨TÑ1ðJ
ð Ô(¨4Ñ/ð	J
ð
 ”˜tÑ#ðJ
ð Ð+Ô,ðJ
ð 
ðJ
ð J
ð J
ñ „^ñ ÔðJ
ð J
ð J
ð J
ð J
r,   rÿ   )rü   rå   r1  r  rÿ   )r¡   )BÚcollections.abcr   Údataclassesr   Útypingr   Únumpyrð   r'   Útorch.nnrO   Útorch.nn.functionalr®   rr   Ú r   rî   Úactivationsr   Úmasking_utilsr	   Úmodeling_layersr
   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_siglip2r   r   r   r   r/   r2   rl  rE   rŒ   r‡   Úfloatr´   r¶   rÍ   rÖ   rå   r  r  r1  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Ø &Ð &Ð &Ð &Ð &Ð &Ø \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ Xð €ððñ ô ð
 ð	<ð 	<ð 	<ð 	<ð 	<˜+ñ 	<ô 	<ñ „ñô ð	<ð €ððñ ô ð
 ð	<ð 	<ð 	<ð 	<ð 	<˜ñ 	<ô 	<ñ „ñô ð	<ð Ø
ð_ð _ð _ð _ð _�Kñ _ô _ñ „ñ „ð_ð@eð eð eð eð e˜bœiñ eô eð eðP%ð %ð %ð %ð %˜BœIñ %ô %ð %ð^ ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð %ð %ð %ð.8)ð 8)ð 8)ð 8)ð 8)�r”yñ 8)ô 8)ð 8)ðvð ð ð ð �”ñ ô ð ðð ð ð ð Ð4ñ ô ð ðD ðEið Eið Eið Eið Ei˜_ñ Eiô Eiñ „ðEiðP@ð @ð @ð @ð @�R”Yñ @ô @ð @ðD €ððñ ô ð
P
ð P
ð P
ð P
ð P
Ð/ñ P
ô P
ñô ð
P
ðf €ððñ ô ð
J
ð J
ð J
ð J
ð J
Ð-ñ J
ô J
ñô ð
J
ðZ,"ð ,"ð ,"ð ,"ð ,"¨2¬9ñ ,"ô ,"ð ,"ð^ ðB
ð B
ð B
ð B
ð B
Ð)ñ B
ô B
ñ „ðB
ðJ €ððñ ô ðd
ð d
ð d
ð d
ð d
Ð$:ñ d
ô d
ñô ðd
ðNð ð €€€r,   