§
    ‚Štj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mZmZ d dlmZmZmZmZmZmZmZ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$ ddl%m&Z&m'Z' ddl(m)Z)  G d„ de¦  «        Z* e#d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z+ e#d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z, e#d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z- G d„ de¦  «        Z. G d„ de¦  «        Z/ G d„ de¦  «        Z0 G d„ dej1        ¦  «        Z2 G d„ d e¦  «        Z3 G d!„ d"e¦  «        Z4 G d#„ d$e¦  «        Z5 G d%„ d&e¦  «        Z6 G d'„ d(e¦  «        Z7 G d)„ d*e¦  «        Z8g d+¢Z9dS ),é    N)Ústrict)Únormalizers)ÚGemmaTokenizer)ÚSiglipConfigÚSiglipTextConfigÚSiglipVisionConfig)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚImageClassifierOutputÚSiglipForImageClassificationÚSiglipModelÚ#SiglipMultiheadAttentionPoolingHeadÚSiglipOutputÚSiglipPreTrainedModelÚSiglipTextModelÚSiglipTextModelOutputÚSiglipVisionModelÚSiglipVisionModelOutputé   )Úcreate_bidirectional_mask)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚtorch_compilable_check)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsc                   ó„   ‡ — e Zd ZdZ	 	 	 	 	 	 	 ddeeeef         z  dz  d	eee         z  dz  d
ededededefˆ fd„Zˆ xZ	S )ÚSiglip2TokenizerzN
    Gemma tokenizer + SigLIP2 training default: lowercase normalization.
    Nú<unk>ú<bos>ú<eos>ú<pad>ú<mask>ÚvocabÚmergesÚ	unk_tokenÚ	bos_tokenÚ	eos_tokenÚ	pad_tokenÚ
mask_tokenc                 ó†  •—  t          ¦   «         j        d|||||||dœ|¤Ž t          | d¦  «        r?t          | j        t
          ¦  «        r%| j                             d| j        j        ¦  «         t          | dd ¦  «        }	|	�:|	j
        �5t          j        t          j        ¦   «         |	j
        g¦  «        |	_
        d S d S d S )N)r%   r&   r'   r(   r)   r*   r+   Úinit_kwargsÚtokenizer_classÚ
_tokenizer© )ÚsuperÚ__init__ÚhasattrÚ
isinstancer-   ÚdictÚ
setdefaultÚ	__class__Ú__name__ÚgetattrÚ
normalizerr   ÚSequenceÚ	Lowercase)Úselfr%   r&   r'   r(   r)   r*   r+   ÚkwargsÚbackendr7   s             €úi/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/siglip2/modular_siglip2.pyr2   zSiglip2Tokenizer.__init__7   sê   ø€ ð 	�‰ŒÔð 		
ØØØØØØØ!ð		
ð 		
ð ð		
ð 		
ð 		
õ �4˜Ñ'Ô'ð 	T­J°tÔ7GÍÑ,NÔ,Nð 	TØÔ×'Ò'Ð(9¸4¼>Ô;RÑSÔSÐSå˜$ ¨dÑ3Ô3ˆØÐ 7Ô#5Ð#AÝ!,Ô!5µ{Ô7LÑ7NÔ7NÐPWÔPbÐ6cÑ!dÔ!dˆGÔÐÐð ÐÐ#AÐ#Aó    )NNr    r!   r"   r#   r$   )
r8   Ú
__module__Ú__qualname__Ú__doc__Ústrr5   ÚintÚlistr2   Ú__classcell__©r7   s   @r@   r   r   2   sØ   ø€ € € € € ðð ð .2Ø)-Ø Ø Ø Ø Ø"ðeð eà�T˜#˜s˜(”^Ñ# dÑ*ðeð �d˜3”i‘ $Ñ&ðeð ð	eð
 ðeð ðeð ðeð ðeð eð eð eð eð eð eð eð eð erA   r   z"google/siglip2-base-patch16-naflex)Ú
checkpointc                   ó   — e Zd ZdS )ÚSiglip2TextConfigN©r8   rB   rC   r0   rA   r@   rL   rL   V   ó   € € € € € ð 	€DrA   rL   c                   ó6   — e Zd ZU dZdZeed<    e¦   «         ZdS )ÚSiglip2VisionConfigar  
    num_patches (`int`, *optional*, defaults to 256):
        The number of patches in the image with the size of (`patch_size`, `patch_size`).
        The image is resized to fill maximum of this number of patches, and to preserve
        the aspect ratio. In case the resulted number of patches is lower, the image is
        padded in "patch" dimension.

    Example:

    ```python
    >>> from transformers import Siglip2VisionConfig, Siglip2VisionModel

    >>> # Initializing a Siglip2VisionConfig with google/siglip2-base-patch16-naflex style configuration
    >>> configuration = Siglip2VisionConfig()

    >>> # Initializing a Siglip2VisionModel (with random weights) from the google/siglip2-base-patch16-naflex style configuration
    >>> model = Siglip2VisionModel(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```é   Únum_patchesN)	r8   rB   rC   rD   rR   rF   Ú__annotations__ÚAttributeErrorÚ
image_sizer0   rA   r@   rP   rP   \   s9   € € € € € € ðð ð, €K�ÐÐÑØ�Ñ!Ô!€J€J€JrA   rP   c                   ó   — e Zd ZdS )ÚSiglip2ConfigNrM   r0   rA   r@   rW   rW   y   rN   rA   rW   c                   ó   — e Zd ZdS )ÚSiglip2VisionOutputNrM   r0   rA   r@   rY   rY      ó   € € € € € Ø€DrA   rY   c                   ó   — e Zd ZdS )ÚSiglip2TextOutputNrM   r0   rA   r@   r\   r\   ƒ   rZ   rA   r\   c                   ó   — e Zd ZdS )ÚSiglip2OutputNrM   r0   rA   r@   r^   r^   ‡   rZ   rA   r^   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      à?)r1   r2   ra   Úhidden_sizeÚ	embed_dimÚ
patch_sizeÚnnÚLinearÚnum_channelsÚpatch_embeddingrR   rF   Úposition_embedding_sizeÚ	EmbeddingÚposition_embedding©r=   ra   r7   s     €r@   r2   z Siglip2VisionEmbeddings.__init__Œ   sª   ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØ Ô+ˆŒå!œyØÔ+¨d¬oÑ=ÀÄÑOØœð 
ñ  
ô  
ˆÔð
 "Ô-ˆÔÝ'*¨4Ô+;¸SÑ+@Ñ'AÔ'AˆÔ$Ý"$¤,¨tÔ/?ÀÄÑ"PÔ"PˆÔÐÐrA   Úpositional_embeddingsÚspatial_shapesÚ
max_lengthÚreturnc                 ó
  — |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é   é   Ú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)Úshaperx   ÚtorchÚemptyrw   ÚpermuteÚ	unsqueezeÚtypeÚtoÚfloat32ÚrangeÚtolistr   ÚFÚinterpolateÚreshapeÚ	transpose)rp   rq   rr   Ú
batch_sizerf   Ú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Ð.>Ð.>Ð+>Ñ?Ð?à-Ð-rA   Ú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
        )rx   ru   rz   )rr   )	rk   Úweightrx   r‡   rn   r�   rl   r–   r�   )r=   r—   rq   Útarget_dtypeÚpatch_embedsrp   Ú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ˆ
ØÐrA   )r8   rB   rC   rP   r2   Ústaticmethodr‚   ÚTensorÚ
LongTensorrF   r–   ÚFloatTensorrž   rH   rI   s   @r@   r`   r`   ‹   sË   ø€ € € € € ðQÐ2ð Qð Qð Qð Qð Qð Qð ð;.Ø$œ|ð;.àÔ(ð;.ð ð;.ð 
Œð	;.ð ;.ð ;.ñ „\ð;.ðz EÔ$5ð ÀuÔGWð Ð\aÔ\hð ð ð ð ð ð ð ð rA   r`   c                   ó   — e Zd ZdZdZdS )ÚSiglip2PreTrainedModelFN)r8   rB   rC   Ú_supports_flex_attnÚ_supports_flash_attnr0   rA   r@   r¤   r¤   ó   s   € € € € € àÐØ ÐÐÐrA   r¤   c                   ó®   ‡ — e 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 )ÚSiglip2VisionModelra   c                 óJ   •— t          ¦   «                              |¦  «         d S ©N)r1   r2   ro   s     €r@   r2   zSiglip2VisionModel.__init__ú   s!   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ð Ð rA   F)Útie_last_hidden_statesr—   Úpixel_attention_maskrq   r>   rs   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
        ```
        )ra   Úinputs_embedsÚattention_mask)r®   r¯   N)Úlast_hidden_stateÚpooler_outputr0   )	r�   r   ra   Úencoderr°   Úpost_layernormÚuse_headÚheadr
   )
r=   r—   r¬   rq   r>   Úhidden_statesÚ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ˆå)Ø/Ø'ð
ñ 
ô 
ð 	
rA   )r8   rB   rC   rP   r2   r   r   r   r‚   r¢   r    r¡   r   r   r
   rž   rH   rI   s   @r@   r¨   r¨   ù   sÆ   ø€ € € € € ð!Ð2ð !ð !ð !ð !ð !ð !ð  Ø€_¨EÐ2Ñ2Ô2Øð9
àÔ'ð9
ð $œlð9
ð Ô(ð	9
ð
 Ð+Ô,ð9
ð 
$ð9
ð 9
ð 9
ñ „^ñ 3Ô2ñ  Ôð9
ð 9
ð 9
ð 9
ð 9
rA   r¨   c                   ó   — e Zd ZdS )ÚSiglip2TextModelNrM   r0   rA   r@   rº   rº   <  rZ   rA   rº   c                   ó^   ‡ — e 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 )	Ú$Siglip2MultiheadAttentionPoolingHeadra   c                 óp   •— t          ¦   «                              |¦  «         || _        |j        | _        d S rª   )r1   r2   ra   Únum_attention_headsÚ	num_headsro   s     €r@   r2   z-Siglip2MultiheadAttentionPoolingHead.__init__A  s0   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àˆŒØÔ3ˆŒˆˆrA   NÚhidden_stater¯   rs   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   rz   )ra   r®   r¯   Úencoder_hidden_statesru   g        rv   )Ú	attn_mask)r�   ÚprobeÚrepeatr   ra   r¿   r�   rx   r‚   ÚboolÚwhereÚtensorrw   ÚfinfoÚminÚ	attentionÚ	layernormÚmlp)r=   rÀ   r¯   r�   rÄ   Ú
target_lenÚ
source_lenÚresiduals           r@   rž   z,Siglip2MultiheadAttentionPoolingHead.forwardG  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Ô!Ð!rA   rª   )	r8   rB   rC   rP   r2   r‚   r    rž   rH   rI   s   @r@   r¼   r¼   @  s�   ø€ € € € € ð4Ð2ð 4ð 4ð 4ð 4ð 4ð 4ð"ð " E¤Lð "À%Ä,ÐQUÑBUð "ÐafÔamð "ð "ð "ð "ð "ð "ð "ð "rA   r¼   c                   ób  — e Z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dS )ÚSiglip2ModelNr—   r¬   rq   r>   rs   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¬   rq   r0   )Úvision_model)r=   r—   r¬   rq   r>   s        r@   Úget_image_featureszSiglip2Model.get_image_featuresj  s9   € ðD !ˆtÔ ð 
Ø%Ø!5Ø)ð
ð 
ð ð	
ð 
ð 	
rA   Ú	input_idsr¯   Úposition_idsÚ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'
        ```
        rÔ   )r×   r¯   rØ   ry   ru   T)ÚpÚdimÚkeepdimNr   )rw   ©rÜ   )ÚlossÚlogits_per_imageÚlogits_per_textÚtext_embedsÚimage_embedsÚtext_model_outputÚvision_model_outputr0   )rÕ   Ú
text_modelr±   Únormr‚   ÚmatmulÚtr‡   rw   Úlogit_scaleÚ
logit_biasÚexpÚeyer}   Ú	ones_likerh   Ú
functionalÚ
logsigmoidÚsumÚmeanr^   )r=   r×   r—   r¬   rq   r¯   rØ   rÙ   r>   Úvision_outputsÚtext_outputsrã   râ   rá   rê   rë   rà   rß   rí   Ú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åØØ-Ø+Ø#Ø%Ø*Ø .ð
ñ 
ô 
ð 	
rA   )NNN)NNNNNNN)r8   rB   rC   r   r   r‚   r¢   r    r¡   r   r   Útupler
   rÖ   rÆ   r^   rž   r0   rA   r@   rÒ   rÒ   h  sˆ  € € € € € àØð 26Ø48Ø26ð	%
ð %
àÔ'¨$Ñ.ð%
ð $œl¨TÑ1ð%
ð Ô(¨4Ñ/ð	%
ð
 Ð+Ô,ð%
ð 
Ð+Ñ	+ð%
ð %
ð %
ñ „^ñ Ôð%
ðP Øð .2Ø15Ø48Ø26Ø.2Ø04Ø#'ð^
ð ^
àÔ# dÑ*ð^
ð Ô'¨$Ñ.ð^
ð $œl¨TÑ1ð	^
ð
 Ô(¨4Ñ/ð^
ð œ tÑ+ð^
ð Ô&¨Ñ-ð^
ð ˜D‘[ð^
ð Ð+Ô,ð^
ð 
ð^
ð ^
ð ^
ñ „^ñ Ôð^
ð ^
ð ^
rA   rÒ   c                   ó¤   — e Z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dS )
ÚSiglip2ForImageClassificationNr—   r¬   rq   Úlabelsr>   rs   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¬   rq   N).Nrz   rÞ   )rß   Úlogitsr¶   Ú
attentions)rÕ   r°   r‡   rw   r‚   rñ   rò   Ú
classifierÚloss_functionra   r   r¶   rþ   )r=   r—   r¬   rq   rû   r>   ÚoutputsÚsequence_outputÚ	pool_maskrý   rß   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å$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rA   )NNNN)r8   rB   rC   r   r   r‚   r    r¡   r   r   r   rž   r0   rA   r@   rú   rú   ÷  sº   € € € € € àØð -1Ø48Ø26Ø&*ðJ
ð J
à”l TÑ)ðJ
ð $œl¨TÑ1ðJ
ð Ô(¨4Ñ/ð	J
ð
 ”˜tÑ#ðJ
ð Ð+Ô,ðJ
ð 
ðJ
ð J
ð J
ñ „^ñ ÔðJ
ð J
ð J
rA   rú   )	rW   rL   rP   rÒ   r¤   rº   r¨   rú   r   ):r‚   Útorch.nnrh   Útorch.nn.functionalrï   r‹   Úhuggingface_hub.dataclassesr   Ú
tokenizersr   Ú,transformers.models.gemma.tokenization_gemmar   Ú/transformers.models.siglip.configuration_siglipr   r   r   Ú*transformers.models.siglip.modeling_siglipr	   r
   r   r   r   r   r   r   r   r   r   r   Úmasking_utilsr   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   r   Úutils.output_capturingr   r   rL   rP   rW   rY   r\   r^   ÚModuler`   r¤   r¨   rº   r¼   rÒ   rú   Ú__all__r0   rA   r@   ú<module>r     s­  ðð  €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø "Ð "Ð "Ð "Ð "Ð "à GÐ GÐ GÐ GÐ GÐ GØ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 7Ð 6Ð 6Ð 6Ð 6Ð 6Ø &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð
 JÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5ð!eð !eð !eð !eð !e�~ñ !eô !eð !eðH €Ð?Ð@Ñ@Ô@Øð	ð 	ð 	ð 	ð 	Ð(ñ 	ô 	ñ „ñ AÔ@ð	ð €Ð?Ð@Ñ@Ô@Øð"ð "ð "ð "ð "Ð,ñ "ô "ñ „ñ AÔ@ð"ð6 €Ð?Ð@Ñ@Ô@Øð	ð 	ð 	ð 	ð 	�Lñ 	ô 	ñ „ñ AÔ@ð	ð	ð 	ð 	ð 	ð 	Ð1ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð-ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�Lñ 	ô 	ð 	ðeð eð eð eð e˜bœiñ eô eð eðP!ð !ð !ð !ð !Ð2ñ !ô !ð !ð@
ð @
ð @
ð @
ð @
Ð*ñ @
ô @
ð @
ðF	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ð%"ð %"ð %"ð %"ð %"Ð+Nñ %"ô %"ð %"ðPL
ð L
ð L
ð L
ð L
�;ñ L
ô L
ð L
ð^N
ð N
ð N
ð N
ð N
Ð$@ñ N
ô N
ð N
ðb
ð 
ð 
€€€rA   