§
    ‚Štjñ™  ã                   ó  — d Z ddlmZ ddlmZ ddlm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"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z)  ej*        e+¦  «        Z,dej-        dej-        fd„Z.dej-        dej-        fd„Z/dej-        dej-        fd„Z0 ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z1 ed¬¦  «        e G d „ d!e¦  «        ¦   «         ¦   «         Z2ee G d"„ d#e¦  «        ¦   «         ¦   «         Z3 G d$„ d%ej4        ¦  «        Z5 G d&„ d'ej4        ¦  «        Z6	 dLd)ej4        d*ej-        d+ej-        d,ej-        d-ej-        dz  d.e7d/e7d0ee         fd1„Z8 G d2„ d3ej4        ¦  «        Z9 G d4„ d5ej4        ¦  «        Z: G d6„ d7e¦  «        Z;e G d8„ d9e¦  «        ¦   «         Z< G d:„ d;ej4        ¦  «        Z= ed<¬¦  «         G d=„ d>e<¦  «        ¦   «         Z> ed?¬¦  «         G d@„ dAe<¦  «        ¦   «         Z?e G dB„ dCe<¦  «        ¦   «         Z@e G dD„ dEe<¦  «        ¦   «         ZAe G dF„ dGe<¦  «        ¦   «         ZB edH¬¦  «         G dI„ dJe<¦  «        ¦   «         ZCg dK¢ZDdS )MzPyTorch CLIP model.é    )ÚCallable)Ú	dataclass)ÚAnyN)Únné   )Úinitialization)ÚACT2FN)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚImageClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚloggingÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )Ú
CLIPConfigÚCLIPTextConfigÚCLIPVisionConfigÚlogitsÚreturnc                 óŽ   — t           j                             | t          j        t          | ¦  «        | j        ¬¦  «        ¦  «        S )N©Údevice)r   Ú
functionalÚcross_entropyÚtorchÚarangeÚlenr"   )r   s    úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/clip/modeling_clip.pyÚcontrastive_lossr)   /   s3   € ÝŒ=×&Ò& v­u¬|½CÀ¹K¼KÐPVÔP]Ð/^Ñ/^Ô/^Ñ_Ô_Ð_ó    Ú
similarityc                 óX   — t          | ¦  «        }t          | j        ¦  «        }||z   dz  S )Ng       @)r)   ÚT)r+   Úcaption_lossÚ
image_losss      r(   Úimage_text_contrastive_lossr0   3   s.   € Ý# JÑ/Ô/€LÝ! *¤,Ñ/Ô/€JØ˜:Ñ%¨Ñ,Ð,r*   Útensorc                 óˆ   — t          j        | d¦  «        }t          j        |dd¬¦  «        }t          j        |d¦  «        }|S )z½
    This method is equivalent to tensor.norm(p=2, dim=-1, keepdim=True) and used to make
    model `executorch` exportable. See issue https://github.com/pytorch/executorch/issues/3566
    é   éÿÿÿÿT)ÚdimÚkeepdimç      à?)r%   ÚpowÚsum)r1   Úsquare_tensorÚ
sum_tensorÚnormed_tensors       r(   Ú_get_vector_normr=   9   sB   € õ
 ”I˜f aÑ(Ô(€MÝ”˜=¨b¸$Ð?Ñ?Ô?€JÝ”I˜j¨#Ñ.Ô.€MØÐr*   z}
    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 )ÚCLIPVisionModelOutputzø
    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__rA   r%   ÚFloatTensorÚ__annotations__rB   rC   ÚtuplerD   © r*   r(   r@   r@   D   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 )ÚCLIPTextModelOutputzö
    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_embedsrB   .rC   rD   )rE   rF   rG   rH   rO   r%   rI   rJ   rB   rC   rK   rD   rL   r*   r(   rN   rN   V   s“   € € € € € € ðð ð
 -1€K�Ô" TÑ)Ð0Ð0Ñ0Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;r*   rN   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 )Ú
CLIPOutputa©  
    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 [`CLIPTextModel`].
    image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
        The image embeddings obtained by applying the projection layer to the pooled output of [`CLIPVisionModel`].
    text_model_output (`BaseModelOutputWithPooling`):
        The output of the [`CLIPTextModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`CLIPVisionModel`].
    NÚlossÚlogits_per_imageÚlogits_per_textrO   rA   Útext_model_outputÚvision_model_outputr   c                 ó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&CLIPOutput.to_tuple.<locals>.<genexpr>‡   s=   è è € Ð^Ð^È1¥Z°µ;Ñ%?Ô%?ÐF�Q—Z’Z‘\”\�\ÀQÐ^Ð^Ð^Ð^Ð^Ð^r*   )rK   Úvalues©Úselfs    r(   r[   zCLIPOutput.to_tuple†   s,   € ÝÐ^Ð^ÐPT×P[ÒP[ÑP]ÔP]Ð^Ñ^Ô^Ñ^Ô^Ð^r*   )rE   rF   rG   rH   rR   r%   rI   rJ   rS   rT   rO   rA   rU   r   rV   rK   r   r[   rL   r*   r(   rQ   rQ   h   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*   rQ   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 )ÚCLIPVisionEmbeddingsÚconfigc                 óz  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        |j        | _        t          j        t          j
        | j        ¦  «        ¦  «        | _        t          j        |j        | j        | j        | j        d¬¦  «        | _        | j        | j        z  dz  | _        | j        dz   | _        t          j        | j        | j        ¦  «        | _        |                      dt          j        | j        ¦  «                             d¦  «        d¬¦  «         d S )NF)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚbiasr3   r   Úposition_ids©r   r4   ©Ú
persistent)ÚsuperÚ__init__rd   Úhidden_sizeÚ	embed_dimÚ
image_sizeÚ
patch_sizer   Ú	Parameterr%   ÚrandnÚclass_embeddingÚConv2dÚnum_channelsÚpatch_embeddingÚnum_patchesÚnum_positionsÚ	EmbeddingÚposition_embeddingÚregister_bufferr&   Úexpand©ra   rd   Ú	__class__s     €r(   rp   zCLIPVisionEmbeddings.__init__‹   s  ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØ Ô+ˆŒØ Ô+ˆŒå!œ|­E¬K¸¼Ñ,GÔ,GÑHÔHˆÔå!œyØÔ+ØœØœØ”?Øð 
ñ  
ô  
ˆÔð !œO¨t¬Ñ>À1ÑDˆÔØ!Ô-°Ñ1ˆÔÝ"$¤,¨tÔ/AÀ4Ä>Ñ"RÔ"RˆÔØ×Ò˜^­U¬\¸$Ô:LÑ-MÔ-M×-TÒ-TÐU\Ñ-]Ô-]ÐjoÐÑpÔpÐpÐpÐpr*   Ú
embeddingsÚheightÚwidthr   c                 óÚ  — |j         d         dz
  }| j        j                             d¦  «        }|j         d         dz
  }t          j                             ¦   «         s&||k    r ||k    r|                      | j        ¦  «        S |dd…dd…f         }|dd…dd…f         }|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|	¦  «        }t	          j        ||f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.

        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   Nr4   r7   r   r3   ÚbicubicF)ÚsizeÚmodeÚalign_corners©r5   )Úshaper~   ÚweightÚ	unsqueezer%   ÚjitÚ
is_tracingrk   rt   r   ÚreshapeÚpermuter   r#   ÚinterpolateÚviewÚcat)ra   rƒ   r„   r…   r{   r~   r|   Úclass_pos_embedÚpatch_pos_embedr5   Ú
new_heightÚ	new_widthÚsqrt_num_positionss                r(   Úinterpolate_pos_encodingz-CLIPVisionEmbeddings.interpolate_pos_encoding¡   s‘  € ð !Ô& qÔ)¨AÑ-ˆØ!Ô4Ô;×EÒEÀaÑHÔHÐØ*Ô0°Ô3°aÑ7ˆõ Œy×#Ò#Ñ%Ô%ð 	>¨+¸Ò*FÐ*FÈ6ÐUZÊ?È?Ø×*Ò*¨4Ô+<Ñ=Ô=Ð=à,¨Q¨Q¨Q°°°¨UÔ3ˆØ,¨Q¨Q¨Q°°°¨UÔ3ˆàÔ˜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ˆåŒy˜/¨?Ð;ÀÐCÑCÔCÐCr*   FÚpixel_valuesc                 ó<  — |j         \  }}}}|s<|| j        k    s|| j        k    r&t          d|› d|› d| j        › d| j        › d�	¦  «        ‚| j        j        j        }|                      |                     |¬¦  «        ¦  «        }|                     d¦  «                             dd¦  «        }| j	         
                    |dd¦  «        }	t          j        |	|gd¬	¦  «        }
|r|
|                      |
||¦  «        z   }
n|
|                      | j        ¦  «        z   }
|
S )
NzInput image size (Ú*z) doesn't match model (z).)Údtyper3   r   r4   r‹   )rŒ   rs   Ú
ValueErrorrz   r�   rŸ   ÚtoÚflattenÚ	transposerw   r€   r%   r•   r›   r~   rk   )ra   rœ   r›   Ú
batch_sizeÚ_r„   r…   Útarget_dtypeÚpatch_embedsÚclass_embedsrƒ   s              r(   ÚforwardzCLIPVisionEmbeddings.forwardÊ   sD  € Ø'3Ô'9Ñ$ˆ
�A�v˜uØ'ð 	¨V°t´Ò-FÐ-FÈ%ÐSWÔSbÒJbÐJbÝØq VÐqÐq¨eÐqÐqÈDÌOÐqÐqÐ^bÔ^mÐqÐqÐqñô ð ð Ô+Ô2Ô8ˆØ×+Ò+¨L¯OªOÀ,¨OÑ,OÔ,OÑPÔPˆØ#×+Ò+¨AÑ.Ô.×8Ò8¸¸AÑ>Ô>ˆàÔ+×2Ò2°:¸qÀ"ÑEÔEˆÝ”Y ¨lÐ;ÀÐCÑCÔCˆ
Ø#ð 	QØ# d×&CÒ&CÀJÐPVÐX]Ñ&^Ô&^Ñ^ˆJˆJà# d×&=Ò&=¸dÔ>OÑ&PÔ&PÑPˆJØÐr*   ©F)rE   rF   rG   r   rp   r%   ÚTensorÚintr›   rI   r©   Ú__classcell__©r‚   s   @r(   rc   rc   Š   sº   ø€ € € € € ðqÐ/ð qð qð qð qð qð qð,'D°5´<ð 'DÈð 'DÐUXð 'DÐ]bÔ]ið 'Dð 'Dð 'Dð 'DðRð  EÔ$5ð ÐZ_ÔZfð ð ð ð ð ð ð ð r*   rc   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 )
ÚCLIPTextEmbeddingsrd   c                 óV  •— t          ¦   «                              ¦   «          |j        }t          j        |j        |¦  «        | _        t          j        |j        |¦  «        | _        |  	                    dt          j        |j        ¦  «                             d¦  «        d¬¦  «         d S )Nrk   rl   Frm   )ro   rp   rq   r   r}   Ú
vocab_sizeÚtoken_embeddingÚmax_position_embeddingsr~   r   r%   r&   r€   ©ra   rd   rr   r‚   s      €r(   rp   zCLIPTextEmbeddings.__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_idsrk   Úinputs_embedsr   c                 ó.  — |�|j         d         n|j         d         }| j        j        j         d         }||k    rt          d|› d|› �¦  «        ‚|€| j        d d …d |…f         }|€|                      |¦  «        }|                      |¦  «        }||z   }|S )Nr4   éþÿÿÿr   zRSequence length must be less than max_position_embeddings (got `sequence length`: z and max_position_embeddings: )rŒ   r~   r�   r    rk   r³   )ra   r¶   rk   r·   Ú
seq_lengthÚmax_position_embeddingÚposition_embeddingsrƒ   s           r(   r©   zCLIPTextEmbeddings.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)rE   rF   rG   r   rp   r%   Ú
LongTensorrI   r«   r©   r­   r®   s   @r(   r°   r°   Ý   s¨   ø€ € € € € ð

˜~ð 

ð 

ð 

ð 

ð 

ð 

ð .2Ø04Ø26ð	ð àÔ# dÑ*ðð Ô&¨Ñ-ðð Ô(¨4Ñ/ð	ð
 
Œðð ð ð ð ð ð ð r*   r°   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 óÀ  — t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |dt           j        ¬¦  «                             |j        ¦  «        }t          j         	                    ||| j
        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «                             ¦   «         }	|	|fS )Nr4   r¹   )r5   rŸ   )ÚpÚtrainingr   r3   )r%   Úmatmulr£   r   r#   ÚsoftmaxÚfloat32r¡   rŸ   rÆ   rÊ   Ú
contiguous)
rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   rÇ   Ú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deez  fˆ fd„Z	 d
dej        dej        dz  de	e
         deej        ej        dz  f         fd	„Zˆ xZS )ÚCLIPAttentionz=Multi-headed attention from 'Attention Is All You Need' paperrd   c                 ó  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        | j        | j        z  | _        | j        dz  | _        |j	        | _
        d| _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        d S )Nç      à¿F)ro   rp   rd   rq   rr   Únum_attention_headsÚ	num_headsÚhead_dimÚscaleÚattention_dropoutrÆ   Ú	is_causalr   ÚLinearÚk_projÚv_projÚq_projÚout_projr�   s     €r(   rp   zCLIPAttention.__init__  sÃ   ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØÔ3ˆŒØœ¨$¬.Ñ8ˆŒØ”] DÑ(ˆŒ
ØÔ/ˆŒØˆŒå”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝœ	 $¤.°$´.ÑAÔAˆŒˆˆr*   NrC   rÄ   rÇ   r   c                 ó¸  — |j         dd…         }g |¢d‘| j        ‘R }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                     |¦  «                             dd¦  «        }|                     |¦  «                             dd¦  «        }|                     |¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        }	 |	| ||||f| j        | j        sdn| j        dœ|¤Ž\  }
} |
j        g |¢d‘R Ž                      ¦   «         }
|                      |
¦  «        }
|
|fS )z#Input shape: Batch x Time x ChannelNr4   r   r3   r¿   )rÅ   rÆ   )rŒ   rØ   rß   rÝ   rÞ   r”   r£   r   Úget_interfacerd   Ú_attn_implementationrÑ   rÙ   rÊ   rÆ   r‘   rÎ   rà   )ra   rC   rÄ   rÇ   Úinput_shapeÚhidden_shapeÚqueriesÚkeysr_   Úattention_interfacerÐ   rÏ   s               r(   r©   zCLIPAttention.forward,  s|  € ð $Ô)¨#¨2¨#Ô.ˆà8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆØ—+’+˜mÑ,Ô,ˆØ�{Š{˜=Ñ)Ô)ˆØ—’˜]Ñ+Ô+ˆà—,’,˜|Ñ,Ô,×6Ò6°q¸!Ñ<Ô<ˆØ�yŠy˜Ñ&Ô&×0Ò0°°AÑ6Ô6ˆØ—’˜\Ñ*Ô*×4Ò4°Q¸Ñ:Ô:ˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð ”JØ#œ}Ð>�C�C°$´,ð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜LÐ(Ð(r*   rY   )rE   rF   rG   rH   r   r   rp   r%   r«   r   r   rK   r©   r­   r®   s   @r(   rÓ   rÓ     s½   ø€ € € € € ØGÐGðBÐ/°.Ñ@ð Bð 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 )ÚCLIPMLPc                 ó  •— t          ¦   «                              ¦   «          || _        t          |j                 | _        t          j        |j        |j	        ¦  «        | _
        t          j        |j	        |j        ¦  «        | _        d S rY   )ro   rp   rd   r	   Ú
hidden_actÚactivation_fnr   rÜ   rq   Úintermediate_sizeÚfc1Úfc2r�   s     €r(   rp   zCLIPMLP.__init__U  sf   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ# FÔ$5Ô6ˆÔÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝ”9˜VÔ5°vÔ7IÑJÔJˆŒˆˆr*   rC   r   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rY   )rï   rí   rð   )ra   rC   s     r(   r©   zCLIPMLP.forward\  s=   € ØŸš Ñ/Ô/ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš Ñ/Ô/ˆØÐr*   )rE   rF   rG   rp   r%   r«   r©   r­   r®   s   @r(   rê   rê   T  sc   ø€ € € € € ðKð Kð Kð Kð Kð U¤\ð °e´lð ð ð ð ð ð ð ð r*   rê   c                   ól   ‡ — e Zd Zdeez  fˆ fd„Zdej        dej        dee	         dej
        fd„Zˆ xZS )ÚCLIPEncoderLayerrd   c                 óD  •— t          ¦   «                              ¦   «          |j        | _        t	          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _	        t          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _        d S ©N)Úeps)ro   rp   rq   rr   rÓ   Ú	self_attnr   Ú	LayerNormÚlayer_norm_epsÚlayer_norm1rê   ÚmlpÚlayer_norm2r�   s     €r(   rp   zCLIPEncoderLayer.__init__d  s}   ø€ Ý‰Œ×ÒÑÔÐØÔ+ˆŒÝ& vÑ.Ô.ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÝ˜6‘?”?ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÐÐr*   rC   rÄ   rÇ   r   c                 óÆ   — |}|                       |¦  «        } | j        d||dœ|¤Ž\  }}||z   }|}|                      |¦  «        }|                      |¦  «        }||z   }|S )N)rC   rÄ   rL   )rú   r÷   rü   rû   )ra   rC   rÄ   rÇ   Úresidualr¥   s         r(   r©   zCLIPEncoderLayer.forwardl  s“   € ð !ˆà×(Ò(¨Ñ7Ô7ˆØ)˜4œ>ð 
Ø'Ø)ð
ð 
ð ð
ð 
Ñˆ�qð
 ! =Ñ0ˆà ˆØ×(Ò(¨Ñ7Ô7ˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆàÐr*   )rE   rF   rG   r   r   rp   r%   r«   r   r   rI   r©   r­   r®   s   @r(   ró   ró   c  s˜   ø€ € € € € ðSÐ/°.Ñ@ð Sð Sð Sð Sð Sð Sðà”|ðð œðð Ð+Ô,ð	ð
 
Ô	ðð ð ð ð ð ð ð r*   ró   c                   ó‚   ‡ — e Zd ZU eed<   dZdZg d¢ZdZdZ	dZ
dZdZeedœZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚCLIPPreTrainedModelrd   Úclip)ÚimageÚtext)r°   ró   rc   T)rC   rD   c                 ó®  •— t          ¦   «                              |¦  «         | j        j        }t	          |t
          ¦  «        r™t          j        |j        j	        d|dz  ¬¦  «         t          j        |j
        j	        d|dz  ¬¦  «         t          j        |j        t          j        |j        j        d         ¦  «                             d¦  «        ¦  «         d	S t	          |t"          ¦  «        rÇt          j        |j        d|j        dz  |z  ¬¦  «         t          j        |j        j	        |j        j        |z  ¬¦  «         t          j        |j
        j	        |j        j        |z  ¬¦  «         t          j        |j        t          j        |j        ¦  «                             d¦  «        ¦  «         d	S t	          |t.          ¦  «        r¯|j        dz  d|j        j        z  dz  z  |z  }|j        dz  |z  }t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         d	S t	          |t:          ¦  «        r||j        j        dz  d|j        j        z  dz  z  |z  }d|j        j        z  dz  |z  }t          j        |j        j	        |¬¦  «         t          j        |j         j	        |¬¦  «         d	S t	          |tB          ¦  «        rXt          j        |j"        j	        |j#        dz  |z  ¬¦  «         t          j        |j$        j	        |j%        dz  |z  ¬¦  «         d	S t	          |tL          ¦  «        r2t          j        |j$        j	        | j        j        dz  |z  ¬¦  «         d	S t	          |tN          ¦  «        r2t          j        |j"        j	        | j        j        dz  |z  ¬¦  «         d	S t	          |tP          ¦  «        r7t          j        |j)        j	        | j        j*        j        dz  |z  ¬¦  «         d	S d	S )
zInitialize the weightsr¿   g{®Gáz”?)ÚmeanÚstdr4   rl   rÕ   )r  r3   N)+ro   Ú_init_weightsrd   Úinitializer_factorrZ   r°   ÚinitÚnormal_r³   r�   r~   Úcopy_rk   r%   r&   rŒ   r€   rc   rw   rr   rz   Úinitializer_ranger|   rÓ   Únum_hidden_layersrß   rÝ   rÞ   rà   rê   rq   rï   rð   Ú	CLIPModelÚtext_projectionÚtext_embed_dimÚvisual_projectionÚvision_embed_dimÚCLIPVisionModelWithProjectionÚCLIPTextModelWithProjectionÚCLIPForImageClassificationÚ
classifierÚvision_config)ra   rÀ   ÚfactorÚin_proj_stdÚout_proj_stdÚfc_stdr‚   s         €r(   r  z!CLIPPreTrainedModel._init_weights•  sM  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ø”Ô/ˆÝ�fÕ0Ñ1Ô1ð ,	ÝŒL˜Ô/Ô6¸SÀfÈtÁmÐTÑTÔTÐTÝŒL˜Ô2Ô9ÀÈÐRVÉÐWÑWÔWÐWÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhÝ˜Õ 4Ñ5Ô5ð (	ÝŒL˜Ô/°c¸vÔ?OÐQUÑ?UÐX^Ñ?^Ð_Ñ_Ô_Ð_ÝŒL˜Ô/Ô6¸F¼MÔ<[Ð^dÑ<dÐeÑeÔeÐeÝŒL˜Ô2Ô9¸v¼}Ô?^ÐagÑ?gÐhÑhÔhÐhÝŒJ�vÔ*­E¬L¸Ô9MÑ,NÔ,N×,UÒ,UÐV]Ñ,^Ô,^Ñ_Ô_Ð_Ð_Ð_Ý˜¥Ñ.Ô.ð #	Ø!Ô+¨TÑ1°q¸6¼=Ô;ZÑ7ZÐ_cÑ6cÑdÐgmÑmˆKØ"Ô,¨dÑ2°fÑ<ˆLÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ/°\ÐBÑBÔBÐBÐBÐBÝ˜¥Ñ(Ô(ð 	Ø!œ=Ô4°dÑ:ÀÀFÄMÔDcÑ@cÐhlÑ?lÑmÐpvÑvˆKØ˜&œ-Ô3Ñ3¸Ñ<¸vÑEˆFÝŒL˜œÔ*°Ð7Ñ7Ô7Ð7ÝŒL˜œÔ*°Ð<Ñ<Ô<Ð<Ð<Ð<Ý˜¥	Ñ*Ô*ð 	ÝŒLØÔ&Ô-ØÔ)¨4Ñ/°&Ñ8ðñ ô ð õ ŒLØÔ(Ô/ØÔ+¨TÑ1°FÑ:ðñ ô ð ð ð õ ˜Õ =Ñ>Ô>ð 	ÝŒLØÔ(Ô/Ø”KÔ+¨TÑ1°FÑ:ðñ ô ð ð ð õ ˜Õ ;Ñ<Ô<ð 		ÝŒLØÔ&Ô-Ø”KÔ+¨TÑ1°FÑ:ðñ ô ð ð ð õ ˜Õ :Ñ;Ô;ð 	ÝŒLØÔ!Ô(Ø”KÔ-Ô9¸4Ñ?À&ÑHðñ ô ð ð ð ð	ð 	r*   )rE   rF   rG   r   rJ   Úbase_model_prefixÚinput_modalitiesÚ_no_split_modulesÚsupports_gradient_checkpointingÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendró   rÓ   Ú_can_record_outputsr%   Úno_gradr  r­   r®   s   @r(   r   r   „  s¢   ø€ € € € € € àÐÐÑØÐØ(ÐØZÐZÐZÐà&*Ð#Ø€NØÐØÐØ"&Ðà)Ø#ðð Ðð
 €U„]�_„_ð0ð 0ð 0ð 0ñ „_ð0ð 0ð 0ð 0ð 0r*   r   c                   ó\   ‡ — e Zd ZdZdefˆ fd„Z	 d	dej        dz  dee	         de
fd„Zˆ xZS )
ÚCLIPEncoderz­
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`CLIPEncoderLayer`].

    Args:
        config: CLIPConfig
    rd   c                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS rL   )ró   )r\   r¥   rd   s     €r(   ú
<listcomp>z(CLIPEncoder.__init__.<locals>.<listcomp>Õ  s"   ø€ Ð$gÐ$gÐ$gÀ!Õ%5°fÑ%=Ô%=Ð$gÐ$gÐ$gr*   F)	ro   rp   rd   r   Ú
ModuleListÚranger  ÚlayersÚgradient_checkpointingr�   s    `€r(   rp   zCLIPEncoder.__init__Ò  s`   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”mÐ$gÐ$gÐ$gÐ$gÅuÈVÔMeÑGfÔGfÐ$gÑ$gÔ$gÑhÔhˆŒØ&+ˆÔ#Ð#Ð#r*   NrÄ   rÇ   r   c                 óN   — |}| j         D ]} |||fi |¤Ž}Œt          |¬¦  «        S )N)rB   )r-  r   )ra   r·   rÄ   rÇ   rC   Úencoder_layers         r(   r©   zCLIPEncoder.forwardØ  s^   € ð &ˆØ!œ[ð 	ð 	ˆMØ)˜MØØðð ð ðð ˆMˆMõ Ø+ð
ñ 
ô 
ð 	
r*   rY   )rE   rF   rG   rH   r   rp   r%   r«   r   r   r   r©   r­   r®   s   @r(   r'  r'  É  s—   ø€ € € € € ðð ð,˜zð ,ð ,ð ,ð ,ð ,ð ,ð /3ð
ð 
ð œ tÑ+ð
ð Ð+Ô,ð	
ð
 
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r*   r'  zI
    The text model from CLIP without any head or projection on top.
    c                   óÜ   ‡ — e Zd ZU eed<   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 )ÚCLIPTextModelrd   ©r  r³   c                 ó(  •— t          ¦   «                              |¦  «         |j        }t          |¦  «        | _        t          |¦  «        | _        t          j        ||j	        ¬¦  «        | _
        |j        | _        |                      ¦   «          d S rõ   )ro   rp   rq   r°   rƒ   r'  Úencoderr   rø   rù   Úfinal_layer_normÚeos_token_idÚ	post_initrµ   s      €r(   rp   zCLIPTextModel.__init__õ  s~   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØÔ&ˆ	Ý,¨VÑ4Ô4ˆŒÝ" 6Ñ*Ô*ˆŒÝ "¤¨Y¸FÔ<QÐ RÑ RÔ RˆÔð #Ô/ˆÔØ�ŠÑÔÐÐÐr*   F©Útie_last_hidden_statesNr¶   rÄ   rk   rÇ   r   c                 óp  — |€t          d¦  «        ‚|                     ¦   «         }|                     d|d         ¦  «        }|                      ||¬¦  «        }t	          | j        ||d¬¦  «        }|                     dd¦  «          | j        d||ddœ|¤Ž}|j        }|  	                    |¦  «        }| j
        d	k    rg|t          j        |j        d
         |j        ¬¦  «        |                     t          j        |j        ¬¦  «                             d¬¦  «        f         }	n�|t          j        |j        d
         |j        ¬¦  «        |                     t          j        |j        ¬¦  «        | j
        k                         ¦   «                              d¬¦  «        f         }	t%          ||	¬¦  «        S )a9  
        Examples:

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

        >>> model = CLIPTextModel.from_pretrained("openai/clip-vit-base-patch32")
        >>> tokenizer = AutoTokenizer.from_pretrained("openai/clip-vit-base-patch32")

        >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, 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_idsr4   )r¶   rk   )rd   r·   rÄ   Úpast_key_valuesrÛ   T)r·   rÄ   rÛ   r3   r   r!   )rŸ   r"   r‹   ©rB   Úpooler_outputrL   )r    rˆ   r”   rƒ   r
   rd   Úpopr5  rB   r6  r7  r%   r&   rŒ   r"   r¡   r¬   Úargmaxr   )
ra   r¶   rÄ   rk   rÇ   rä   rC   Úencoder_outputsrB   Úpooled_outputs
             r(   r©   zCLIPTextModel.forward   sÑ  € ð2 ÐÝÐ<Ñ=Ô=Ð=à—n’nÑ&Ô&ˆØ—N’N 2 {°2¤Ñ7Ô7ˆ	àŸš°)È,˜ÑWÔWˆå+Ø”;Ø'Ø)Ø ð	
ñ 
ô 
ˆð 	�
Š
�; Ñ%Ô%Ð%Ø+7¨4¬<ð ,
Ø'Ø)Øð,
ð ,
ð ð	,
ð ,
ˆð ,Ô=ÐØ ×1Ò1Ð2CÑDÔDÐàÔ Ò!Ð!ð .Ý”Ð.Ô4°QÔ7Ð@QÔ@XÐYÑYÔYØ—’¥5¤9Ð5FÔ5M�ÑNÔN×UÒUÐZ\ÐUÑ]Ô]ð_ôˆMˆMð .Ý”Ð.Ô4°QÔ7Ð@QÔ@XÐYÑYÔYð —’¥E¤IÐ6GÔ6N�ÑOÔOÐSWÔSdÒdß’‘”ß’˜B�‘”ð!ôˆMõ *Ø/Ø'ð
ñ 
ô 
ð 	
r*   r½   )rE   rF   rG   r   rJ   r  Ú_input_embed_layerrp   r   r   r   r%   r«   r   r   r   r©   r­   r®   s   @r(   r2  r2  ë  s  ø€ € € € € € ð ÐÐÑØ ÐØ*Ðð	˜~ð 	ð 	ð 	ð 	ð 	ð 	ð  Ø€_¨EÐ2Ñ2Ô2Øð *.Ø.2Ø,0ð	I
ð I
à”< $Ñ&ðI
ð œ tÑ+ðI
ð ”l TÑ)ð	I
ð
 Ð+Ô,ðI
ð 
$ðI
ð I
ð I
ñ „^ñ 3Ô2ñ  ÔðI
ð I
ð I
ð I
ð I
r*   r2  zK
    The vision model from CLIP 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dz  d
ee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚCLIPVisionModelrd   rœ   ©r  rz   c                 óP  •— t          ¦   «                              |¦  «         |j        }t          |¦  «        | _        t          j        ||j        ¬¦  «        | _        t          |¦  «        | _
        t          j        ||j        ¬¦  «        | _        |                      ¦   «          d S rõ   )ro   rp   rq   rc   rƒ   r   rø   rù   Úpre_layrnormr'  r5  Úpost_layernormr8  rµ   s      €r(   rp   zCLIPVisionModel.__init__Z  s‹   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØÔ&ˆ	å.¨vÑ6Ô6ˆŒÝœL¨¸Ô8MÐNÑNÔNˆÔÝ" 6Ñ*Ô*ˆŒÝ œl¨9¸&Ô:OÐPÑPÔPˆÔØ�ŠÑÔÐÐÐr*   Fr9  Nr›   rÇ   r   c                 óð   — |                       ||¬¦  «        }|                      |¦  «        } | j        dd|i|¤Ž}|j        }|dd…ddd…f         }|                      |¦  «        }t          ||¬¦  «        S )a(  
        Example:

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

        >>> model = CLIPVisionModel.from_pretrained("openai/clip-vit-base-patch32")
        >>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")

        >>> 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 CLS states
        ```)r›   r·   Nr   r=  rL   )rƒ   rH  r5  rB   rI  r   )ra   rœ   r›   rÇ   rC   rA  rB   rB  s           r(   r©   zCLIPVisionModel.forwardd  s¨   € ð> Ÿš¨ÐOg˜ÑhÔhˆØ×)Ò)¨-Ñ8Ô8ˆà+7¨4¬<ð ,
ð ,
Ø'ð,
àð,
ð ,
ˆð
 ,Ô=ÐØ)¨!¨!¨!¨Q°°°¨'Ô2ˆØ×+Ò+¨MÑ:Ô:ˆå)Ø/Ø'ð
ñ 
ô 
ð 	
r*   ©NF)rE   rF   rG   r   rJ   Úmain_input_namer  rC  rp   r   r   r   r%   rI   Úboolr   r   r   r©   r­   r®   s   @r(   rE  rE  O  sî   ø€ € € € € € ð ÐÐÑØ$€OØ!ÐØ*ÐðÐ/ð ð ð ð ð ð ð  Ø€_¨EÐ2Ñ2Ô2Øð 26Ø05ð+
ð +
àÔ'¨$Ñ.ð+
ð #'¨¡+ð+
ð Ð+Ô,ð	+
ð
 
$ð+
ð +
ð +
ñ „^ñ 3Ô2ñ  Ôð+
ð +
ð +
ð +
ð +
r*   rE  c                   ó¢  ‡ — e Zd Zdefˆ 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  rd   c                 óT  •— t          ¦   «                              |¦  «         |j        }|j        }|j        | _        |j        | _        |j        | _        t           	                    |¦  «        | _
        t           	                    |¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        t%          j        | j        j        ¦  «        ¦  «        | _        |                      ¦   «          d S ©NF)rj   )ro   rp   Útext_configr  Úprojection_dimrq   r  r  r2  Ú_from_configÚ
text_modelrE  Úvision_modelr   rÜ   r  r  ru   r%   r1   rd   Úlogit_scale_init_valueÚlogit_scaler8  )ra   rd   rQ  r  r‚   s       €r(   rp   zCLIPModel.__init__—  sð   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ(ˆØÔ,ˆà$Ô3ˆÔØ)Ô5ˆÔØ -Ô 9ˆÔå'×4Ò4°[ÑAÔAˆŒÝ+×8Ò8¸ÑGÔGˆÔå!#¤¨4Ô+@À$ÔBUÐ\aÐ!bÑ!bÔ!bˆÔÝ!œy¨Ô)<¸dÔ>QÐX]Ð^Ñ^Ô^ˆÔÝœ<­¬°T´[Ô5WÑ(XÔ(XÑYÔYˆÔð 	�ŠÑÔÐÐÐr*   Nr¶   rÄ   rk   rÇ   r   c                 ól   —  | j         d|||ddœ|¤Ž}|j        }|                      |¦  «        |_        |S )a  
        Examples:

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

        >>> model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
        >>> tokenizer = AutoTokenizer.from_pretrained("openai/clip-vit-base-patch32")

        >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")

        >>> with torch.inference_mode():
        ...     text_features = model.get_text_features(**inputs)
        ```T)r¶   rÄ   rk   Úreturn_dictrL   )rT  r>  r  )ra   r¶   rÄ   rk   rÇ   Útext_outputsrB  s          r(   Úget_text_featureszCLIPModel.get_text_features«  s^   € ð0 4C°4´?ð 4
ØØ)Ø%Øð	4
ð 4
ð
 ð4
ð 4
ˆð %Ô2ˆØ%)×%9Ò%9¸-Ñ%HÔ%HˆÔ"àÐr*   Frœ   r›   c                 ój   —  | j         d||ddœ|¤Ž}|j        }|                      |¦  «        |_        |S )aŠ  
        Examples:

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

        >>> model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
        >>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")

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

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

        >>> with torch.inference_mode():
        ...     image_features = model.get_image_features(**inputs)
        ```T)rœ   r›   rY  rL   )rU  r>  r  )ra   rœ   r›   rÇ   Úvision_outputsrB  s         r(   Úget_image_featureszCLIPModel.get_image_featuresÏ  s\   € ð6 6G°TÔ5Fð 6
Ø%Ø%=Øð6
ð 6
ð ð	6
ð 6
ˆð 'Ô4ˆØ'+×'=Ò'=¸mÑ'LÔ'LˆÔ$àÐr*   Úreturn_lossc           	      ó  —  | j         d||dœ|¤Ž} | j        d|||dœ|¤Ž}	|j        }
|	j        }|
t          |
¦  «        z  }
|t          |¦  «        z  }t	          j        ||
                     ¦   «                              |j        ¦  «        ¦  «        }|| j	         
                    ¦   «                              |j        ¦  «        z  }|                     ¦   «         }d}|rt          |¦  «        }t          |||||
|	|¬¦  «        S )a  
        return_loss (`bool`, *optional*):
            Whether or not to return the contrastive loss.

        Examples:

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

        >>> model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
        >>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")

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

        >>> inputs = processor(
        ...     text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True
        ... )

        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)
        >>> logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
        >>> probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities
        ```©rœ   r›   ©r¶   rÄ   rk   N)rR   rS   rT   rO   rA   rU   rV   rL   )r^  r[  r>  r=   r%   rË   Útr¡   r"   rW  Úexpr0   rQ   )ra   r¶   rœ   rÄ   rk   r_  r›   rÇ   r]  rZ  rA   rO   rT   rS   rR   s                  r(   r©   zCLIPModel.forwardõ  sS  € ðL 6M°TÔ5Lð 6
Ø%Ø%=ð6
ð 6
ð ð6
ð 6
ˆð 4J°4Ô3Ið 4
ØØ)Ø%ð4
ð 4
ð ð	4
ð 4
ˆð &Ô3ˆØ"Ô0ˆð $Õ&6°|Ñ&DÔ&DÑDˆØ!Õ$4°[Ñ$AÔ$AÑAˆõ  œ, {°L·N²NÑ4DÔ4D×4GÒ4GÈÔHZÑ4[Ô4[Ñ\Ô\ˆØ)¨DÔ,<×,@Ò,@Ñ,BÔ,B×,EÒ,EÀkÔFXÑ,YÔ,YÑYˆà*×,Ò,Ñ.Ô.ÐàˆØð 	@Ý.¨Ñ?Ô?ˆDåØØ-Ø+Ø#Ø%Ø*Ø .ð
ñ 
ô 
ð 	
r*   ©NNrª   )NNNNNF)rE   rF   rG   r   rp   r   r   r%   r«   r   r   rK   r   r[  rI   rM  r^  r¾   rQ   r©   r­   r®   s   @r(   r  r  •  s   ø€ € € € € ð˜zð ð ð ð ð ð ð( Øð /3Ø,0ð	 ð  à”<ð ð œ tÑ+ð ð ”l TÑ)ð	 ð
 Ð+Ô,ð ð 
Ð+Ñ	+ð ð  ð  ñ „^ñ Ôð ðD Øð */ð"ð "àÔ'ð"ð #'ð"ð Ð+Ô,ð	"ð
 
Ð+Ñ	+ð"ð "ð "ñ „^ñ Ôð"ðH Øð .2Ø15Ø.2Ø04Ø#'Ø).ðJ
ð J
àÔ# dÑ*ðJ
ð Ô'¨$Ñ.ðJ
ð œ tÑ+ð	J
ð
 Ô&¨Ñ-ðJ
ð ˜D‘[ðJ
ð #'ðJ
ð Ð+Ô,ðJ
ð 
ðJ
ð J
ð J
ñ „^ñ ÔðJ
ð J
ð J
ð J
ð J
r*   r  c                   óÐ   ‡ — e Zd ZU eed<   dZdefˆ fd„Zdej        fd„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f
d„¦   «         ¦   «         Zˆ xZS )r  rd   r3  c                 óü   •— t          ¦   «                              |¦  «         t                               |¦  «        | _        t          j        |j        |j        d¬¦  «        | _	        |  
                    ¦   «          d S rP  )ro   rp   r2  rS  rT  r   rÜ   rq   rR  r  r8  r�   s     €r(   rp   z$CLIPTextModelWithProjection.__init__I  sh   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å'×4Ò4°VÑ<Ô<ˆŒÝ!œy¨Ô);¸VÔ=RÐY^Ð_Ñ_Ô_ˆÔð 	�ŠÑÔÐÐÐr*   r   c                 ó$   — | j         j        j        S rY   ©rT  rƒ   r³   r`   s    r(   Úget_input_embeddingsz0CLIPTextModelWithProjection.get_input_embeddingsR  s   € ØŒÔ)Ô9Ð9r*   c                 ó(   — || j         j        _        d S rY   ri  )ra   rÃ   s     r(   Úset_input_embeddingsz0CLIPTextModelWithProjection.set_input_embeddingsU  s   € Ø5:ˆŒÔ"Ô2Ð2Ð2r*   Nr¶   rÄ   rk   rÇ   c                 ó    —  | j         d|||dœ|¤Ž}|j        }|                      |¦  «        }t          ||j        |j        |j        ¬¦  «        S )a@  
        Examples:

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

        >>> model = CLIPTextModelWithProjection.from_pretrained("openai/clip-vit-base-patch32")
        >>> tokenizer = AutoTokenizer.from_pretrained("openai/clip-vit-base-patch32")

        >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")

        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)
        >>> text_embeds = outputs.text_embeds
        ```rb  )rO   rB   rC   rD   rL   )rT  r>  r  rN   rB   rC   rD   )ra   r¶   rÄ   rk   rÇ   rZ  rB  rO   s           r(   r©   z#CLIPTextModelWithProjection.forwardX  s~   € ð4 4C°4´?ð 4
ØØ)Ø%ð4
ð 4
ð ð	4
ð 4
ˆð %Ô2ˆØ×*Ò*¨=Ñ9Ô9ˆå"Ø#Ø*Ô<Ø&Ô4Ø#Ô.ð	
ñ 
ô 
ð 	
r*   r½   )rE   rF   rG   r   rJ   r  rp   r   ÚModulerj  rl  r   r   r%   r«   r   r   rN   r©   r­   r®   s   @r(   r  r  D  s
  ø€ € € € € € àÐÐÑØ Ðð˜~ð ð ð ð ð ð ð: b¤ið :ð :ð :ð :ð;ð ;ð ;ð Øð *.Ø.2Ø,0ð	&
ð &
à”< $Ñ&ð&
ð œ tÑ+ð&
ð ”l TÑ)ð	&
ð
 Ð+Ô,ð&
ð 
ð&
ð &
ð &
ñ „^ñ Ôð&
ð &
ð &
ð &
ð &
r*   r  c                   ó¨   ‡ — e Zd ZU eed<   dZdZdefˆ fd„Zdej	        fd„Z
ee	 	 ddej        dz  d	ed
ee         defd„¦   «         ¦   «         Zˆ xZS )r  rd   rœ   rF  c                 óü   •— t          ¦   «                              |¦  «         t                               |¦  «        | _        t          j        |j        |j        d¬¦  «        | _	        |  
                    ¦   «          d S rP  )ro   rp   rE  rS  rU  r   rÜ   rq   rR  r  r8  r�   s     €r(   rp   z&CLIPVisionModelWithProjection.__init__‰  si   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å+×8Ò8¸Ñ@Ô@ˆÔÝ!#¤¨6Ô+=¸vÔ?TÐ[`Ð!aÑ!aÔ!aˆÔð 	�ŠÑÔÐÐÐr*   r   c                 ó$   — | j         j        j        S rY   )rU  rƒ   rz   r`   s    r(   rj  z2CLIPVisionModelWithProjection.get_input_embeddings’  s   € ØÔ Ô+Ô;Ð;r*   NFr›   rÇ   c                 óž   —  | j         d||dœ|¤Ž}|j        }|                      |¦  «        }t          ||j        |j        |j        ¬¦  «        S )aÈ  
        Examples:

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

        >>> model = CLIPVisionModelWithProjection.from_pretrained("openai/clip-vit-base-patch32")
        >>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")

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

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

        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)
        >>> image_embeds = outputs.image_embeds
        ```ra  )rA   rB   rC   rD   rL   )rU  r>  r  r@   rB   rC   rD   )ra   rœ   r›   rÇ   r]  rB  rA   s          r(   r©   z%CLIPVisionModelWithProjection.forward•  s|   € ð: 6G°TÔ5Fð 6
Ø%Ø%=ð6
ð 6
ð ð6
ð 6
ˆð
 'Ô4ˆØ×-Ò-¨mÑ<Ô<ˆå$Ø%Ø,Ô>Ø(Ô6Ø%Ô0ð	
ñ 
ô 
ð 	
r*   rK  )rE   rF   rG   r   rJ   rL  r  rp   r   rn  rj  r   r   r%   rI   rM  r   r   r@   r©   r­   r®   s   @r(   r  r  ƒ  sç   ø€ € € € € € àÐÐÑØ$€OØ!ÐðÐ/ð ð ð ð ð ð ð< b¤ið <ð <ð <ð <ð Øð 26Ø).ð(
ð (
àÔ'¨$Ñ.ð(
ð #'ð(
ð Ð+Ô,ð	(
ð
 
ð(
ð (
ð (
ñ „^ñ Ôð(
ð (
ð (
ð (
ð (
r*   r  z«
    CLIP 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ee	 	 d
de	j
        dz  de	j
        dz  dee         defd	„¦   «         ¦   «         Zˆ xZS )r  rœ   rF  rd   r   Nc                 ó`  •— t          ¦   «                              |¦  «         |j        | _        t                               |j        ¦  «        | _        |j        dk    r$t          j        |j        j	        |j        ¦  «        nt          j
        ¦   «         | _        |                      ¦   «          d S )Nr   )ro   rp   Ú
num_labelsrE  rS  r  rU  r   rÜ   rq   ÚIdentityr  r8  r�   s     €r(   rp   z#CLIPForImageClassification.__init__Ì  s–   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ+×8Ò8¸Ô9MÑNÔNˆÔð OUÔN_ÐbcÒNcÐNc�BŒI�fÔ*Ô6¸Ô8IÑJÔJÐJÕikÔitÑivÔivð 	Œð
 	�ŠÑÔÐÐÐr*   ÚlabelsrÇ   c                 ó  —  | j         |fi |¤Ž}|j        }t          j        |dd…dd…dd…f         d¬¦  «        }|                      |¦  «        }d}|�|                      ||| j        ¦  «        }t          |||j        |j	        ¬¦  «        S )aŠ  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Nr   r‹   )rR   r   rC   rD   )
rU  rB   r%   r  r  Úloss_functionrd   r   rC   rD   )ra   rœ   rw  rÇ   ÚoutputsÚsequence_outputr   rR   s           r(   r©   z"CLIPForImageClassification.forwardÚ  s¼   € ð /@¨dÔ.?Øð/
ð /
àð/
ð /
ˆð
 "Ô3ˆåœ* _°Q°Q°Q¸¸¸¸A¸A¸A°XÔ%>ÀAÐFÑFÔFˆØ—’ Ñ1Ô1ˆàˆØÐØ×%Ò% f¨f°d´kÑBÔBˆDå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r*   re  )rE   rF   rG   rL  r  r   rp   r   r   r%   r«   r   r   r   r©   r­   r®   s   @r(   r  r  Â  sÊ   ø€ € € € € ð %€OØ!Ðð˜zð ¨dð ð ð ð ð ð ð Øð -1Ø&*ð
ð 
à”l TÑ)ð
ð ”˜tÑ#ð
ð Ð+Ô,ð	
ð
 
ð
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
r*   r  )r  r   r2  r  rE  r  r  )r¿   )ErH   Úcollections.abcr   Údataclassesr   Útypingr   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   r   Úutils.output_capturingr   Úconfiguration_clipr   r   r   Ú
get_loggerrE   Úloggerr«   r)   r0   r=   r@   rN   rQ   rn  rc   r°   ÚfloatrÑ   rÓ   rê   ró   r   r'  r2  rE  r  r  r  r  Ú__all__rL   r*   r(   ú<module>rŽ     sœ  ðð Ð à $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø /Ð /Ð /Ð /Ð /Ð /Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð JÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ Lð 
ˆÔ	˜HÑ	%Ô	%€ð
`˜Uœ\ð `¨e¬lð `ð `ð `ð `ð-¨E¬Lð -¸U¼\ð -ð -ð -ð -ð˜Uœ\ð ¨e¬lð ð ð ð ð €ððñ ô ð
 ð	<ð 	<ð 	<ð 	<ð 	<˜Kñ 	<ô 	<ñ „ñô ð	<ð €ððñ ô ð
 ð	<ð 	<ð 	<ð 	<ð 	<˜+ñ 	<ô 	<ñ „ñô ð	<ð Ø
ð_ð _ð _ð _ð _�ñ _ô _ñ „ñ „ð_ð@Pð Pð Pð Pð P˜2œ9ñ Pô Pð Pðf%ð %ð %ð %ð %˜œñ %ô %ð %ð^ ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð*7)ð 7)ð 7)ð 7)ð 7)�B”Iñ 7)ô 7)ð 7)ðtð ð ð ð ˆbŒiñ ô ð ðð ð ð ð Ð1ñ ô ð ðB ðAð Að Að Að A˜/ñ Aô Añ „ðAðH
ð 
ð 
ð 
ð 
�"”)ñ 
ô 
ð 
ðD €ððñ ô ð
\
ð \
ð \
ð \
ð \
Ð'ñ \
ô \
ñô ð
\
ð~ €ððñ ô ð
>
ð >
ð >
ð >
ð >
Ð)ñ >
ô >
ñô ð
>
ðB ðk
ð k
ð k
ð k
ð k
Ð#ñ k
ô k
ñ „ðk
ð\ ð;
ð ;
ð ;
ð ;
ð ;
Ð"5ñ ;
ô ;
ñ „ð;
ð| ð;
ð ;
ð ;
ð ;
ð ;
Ð$7ñ ;
ô ;
ñ „ð;
ð| €ððñ ô ð3
ð 3
ð 3
ð 3
ð 3
Ð!4ñ 3
ô 3
ñô ð3
ðlð ð €€€r*   