Ë
    S^(hiì  ã                  ó„  — d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
 ddlZddlZddlmZ ddlmZmZ dd	lmZmZmZmZmZmZ dd
lmZmZmZ ddlm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z(  e#jR                  e*«      Z+dZ,dZ-d8d9d„Z.d:d„Z/d;d„Z0e G d„ de «      «       Z1 G d„ dejd                  jf                  «      Z4 G d„ dejd                  jf                  «      Z5 G d„ dejd                  jf                  «      Z6 G d„ dejd                  jf                  «      Z7 G d„ dejd                  jf                  «      Z8 G d„ d ejd                  jf                  «      Z9 G d!„ d"ejd                  jf                  «      Z:e G d#„ d$ejd                  jf                  «      «       Z; G d%„ d&ejd                  jf                  «      Z<e G d'„ d(ejd                  jf                  «      «       Z=e G d)„ d*ejd                  jf                  «      «       Z> G d+„ d,e«      Z?d-Z@d.ZAd/ZBd0ZC G d1„ d2e?«      ZD G d3„ d4e?«      ZE e!e@«       G d5„ d6e?«      «       ZFg d7¢ZGy)<zTF 2.0 CLIP model.é    )ÚannotationsN)Ú	dataclass)ÚAnyÚOptionalÚTupleÚUnioné   )Úget_tf_activation)ÚTFBaseModelOutputÚTFBaseModelOutputWithPooling)ÚTFModelInputTypeÚTFPreTrainedModelÚget_initializerÚkerasÚkeras_serializableÚunpack_inputs)Úcheck_embeddings_within_boundsÚ
shape_listÚstable_softmax)ÚModelOutputÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstringsé   )Ú
CLIPConfigÚCLIPTextConfigÚCLIPVisionConfigzopenai/clip-vit-base-patch32g    „×—Ác                óø   — t        | «      d   }|�|n|}t        j                  d«      }t        j                  | |j                  ¬«      } t        j
                  | dd…dddd…f   dd|df«      }||z
  t        z  S )z_
    Expands attention_mask from `[bsz, seq_len]` to `[bsz, 1, tgt_seq_len, src_seq_len]`.
    r   Ng      ð?©Údtype)r   ÚtfÚconstantÚcastr!   ÚtileÚLARGE_NEGATIVE)ÚmaskÚtgt_lenÚsrc_lenÚone_cstÚexpanded_masks        úg/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/clip/modeling_tf_clip.pyÚ_expand_maskr-   :   sx   € ô ˜Ó˜qÑ!€GØ Ð,‰g°'€GÜ�k‰k˜#Ó€GÜ�7‰7�4˜wŸ}™}Ô-€DÜ—G‘G˜D¢ D¨$²Ð!1Ñ2°Q¸¸7ÀAÐ4FÓG€Mà�mÑ#¤~Ñ5Ð5ó    c           	     ó¾   — t         j                  j                  t        j                  j                  t        j                  t        | «      d   «      | d¬«      «      S )Nr   T)Úy_trueÚy_predÚfrom_logits)r"   ÚmathÚreduce_meanr   ÚmetricsÚsparse_categorical_crossentropyÚranger   )Úlogitss    r,   Úcontrastive_lossr9   I   sJ   € Ü�7‰7×ÑÜ�‰×5Ñ5Ü—8‘8œJ vÓ.¨qÑ1Ó2¸6Ètð 	6ó 	
óð r.   c                ód   — t        | «      }t        t        j                  | «      «      }||z   dz  S )Ng       @)r9   r"   Ú	transpose)Ú
similarityÚcaption_lossÚ
image_losss      r,   Ú	clip_lossr?   Q   s/   € Ü# JÓ/€LÜ!¤"§,¡,¨zÓ":Ó;€JØ˜:Ñ%¨Ñ,Ð,r.   c                  ó|   — e Zd ZU dZdZded<   dZded<   dZded<   dZded<   dZ	ded	<   dZ
d
ed<   dZd
ed<   dd„Zy)ÚTFCLIPOutputa	  
    Args:
        loss (`tf.Tensor` of shape `(1,)`, *optional*, returned when `return_loss` is `True`):
            Contrastive loss for image-text similarity.
        logits_per_image:(`tf.Tensor` 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:(`tf.Tensor` 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(`tf.Tensor` of shape `(batch_size, output_dim`):
            The text embeddings obtained by applying the projection layer to the pooled output of [`TFCLIPTextModel`].
        image_embeds(`tf.Tensor` of shape `(batch_size, output_dim`):
            The image embeddings obtained by applying the projection layer to the pooled output of
            [`TFCLIPVisionModel`].
        text_model_output([`~modeling_tf_utils.TFBaseModelOutputWithPooling`]):
            The output of the [`TFCLIPTextModel`].
        vision_model_output([`~modeling_tf_utils.TFBaseModelOutputWithPooling`]):
            The output of the [`TFCLIPVisionModel`].
    Nztf.Tensor | NoneÚlossúOptional[tf.Tensor]Úlogits_per_imageÚlogits_per_textÚtext_embedsÚimage_embedsr   Útext_model_outputÚvision_model_outputc                óH   ‡ — t        ˆ fd„‰ j                  «       D «       «      S )Nc              3  ód   •K  — | ]'  }|d vr‰|   nt        ‰|«      j                  «       –— Œ) y­w))rH   rI   N)ÚgetattrÚto_tuple)Ú.0ÚkÚselfs     €r,   ú	<genexpr>z(TFCLIPOutput.to_tuple.<locals>.<genexpr>w   s=   øè ø€ ò 
àð Ð LÑLˆD�ŠGÔRYÐZ^Ð`aÓRb×RkÑRkÓRmÓmñ
ùs   ƒ-0)ÚtupleÚkeys©rP   s   `r,   rM   zTFCLIPOutput.to_tuplev   s#   ø€ Üó 
à—Y‘Y“[ô
ó 
ð 	
r.   )Úreturnz
Tuple[Any])Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   Ú__annotations__rD   rE   rF   rG   rH   rI   rM   © r.   r,   rA   rA   W   s^   … ñð* "€DÐ
Ó!Ø,0ÐÐ)Ó0Ø+/€OÐ(Ó/Ø'+€KÐ$Ó+Ø(,€LÐ%Ó,Ø6:ÐÐ3Ó:Ø8<ÐÐ5Ó<ô
r.   rA   c                  ó2   ‡ — e Zd Zdˆ fd„Zddd„Zdd„Zˆ xZS )ÚTFCLIPVisionEmbeddingsc                óþ  •— t        ‰| �  di |¤Ž |j                  | _        |j                  | _        |j
                  | _        | j                  | j
                  z  dz  | _        | j                  dz   | _        || _        t        j                  j                  | j                  | j
                  | j
                  dddt        | j                  j                  | j                  j                  z  «      d¬«      | _        y )	Né   r   ÚvalidÚchannels_lastFÚpatch_embedding)ÚfiltersÚkernel_sizeÚstridesÚpaddingÚdata_formatÚuse_biasÚkernel_initializerÚnamer[   )ÚsuperÚ__init__Úhidden_sizeÚ	embed_dimÚ
image_sizeÚ
patch_sizeÚnum_patchesÚnum_positionsÚconfigr   ÚlayersÚConv2Dr   Úinitializer_rangeÚinitializer_factorrb   ©rP   rs   ÚkwargsÚ	__class__s      €r,   rl   zTFCLIPVisionEmbeddings.__init__~   sÌ   ø€ Ü‰ÑÑ"˜6Ò"à×+Ñ+ˆŒØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒà ŸO™O¨t¯©Ñ>À1ÑDˆÔØ!×-Ñ-°Ñ1ˆÔàˆŒä$Ÿ|™|×2Ñ2Ø—N‘NØŸ™Ø—O‘OØØ'ØÜ.¨t¯{©{×/LÑ/LÈtÏ{É{×OmÑOmÑ/mÓnØ"ð  3ó 	 
ˆÕr.   c                óÆ  — | j                   j                  }| j                  | j                  ft	        | j                  dz  |z  «      dd¬«      | _        t        j                  d«      5  | j                  | j                  | j                  ft	        | j                   j                  |z  «      dd¬«      | _
        d d d «       | j                  ry d| _        t        | dd «      �ft        j                  | j                  j                  «      5  | j                  j                  d d d | j                   j                   g«       d d d «       y y # 1 sw Y   Œ‘xY w# 1 sw Y   y xY w)Nç      à¿TÚclass_embedding©ÚshapeÚinitializerÚ	trainablerj   Úposition_embeddingÚ
embeddingsrb   )rs   rw   Ú
add_weightrn   r   r}   r"   Ú
name_scoperr   rv   r‚   ÚbuiltrL   rb   rj   ÚbuildÚnum_channels)rP   Úinput_shapeÚfactors      r,   r‡   zTFCLIPVisionEmbeddings.build•   s<  € Ø—‘×/Ñ/ˆà#Ÿ™Ø—>‘>Ð#Ü'¨¯©¸Ñ(<¸vÑ(EÓFØØ"ð	  /ó  
ˆÔô �]‰]Ð/Ó0ñ 	Ø&*§o¡oØ×)Ñ)¨4¯>©>Ð:Ü+¨D¯K©K×,IÑ,IÈFÑ,RÓSØØ!ð	 '6ó 'ˆDÔ#÷	ð �:Š:ØØˆŒ
Ü�4Ð*¨DÓ1Ð=Ü—‘˜t×3Ñ3×8Ñ8Ó9ñ YØ×$Ñ$×*Ñ*¨D°$¸¸d¿k¹k×>VÑ>VÐ+WÔX÷Yð Yð >÷	ð 	ú÷Yð Yús   Á*AEÄ4EÅEÅE c                ój  — t        |«      \  }}}}t        j                  |d¬«      }| j                  |«      }t        j                  ||| j
                  df¬«      }t        j                  | j                  |d| j                  f¬«      }t        j                  ||fd¬«      }|| j                  z   }|S )z0`pixel_values` is expected to be of NCHW format.)r   r_   r	   r   ©Úperméÿÿÿÿ©Útensorr   r   )r   ©Úaxis)r   r"   r;   rb   Úreshaperq   Úbroadcast_tor}   rn   Úconcatr‚   )	rP   Úpixel_valuesÚ
batch_sizerˆ   ÚheightÚwidthÚpatch_embedsÚclass_embedsrƒ   s	            r,   ÚcallzTFCLIPVisionEmbeddings.call®   s«   € ô 3=¸\Ó2JÑ/ˆ
�L &¨%ô
 —|‘| L°|ÔDˆà×+Ñ+¨LÓ9ˆô —z‘z¨¸jÈ$×JZÑJZÐ\^Ð=_Ô`ˆô —‘ t×';Ñ';ÀJÐPQÐSW×SaÑSaÐCbÔcˆÜ—Y‘Y ¨lÐ;À!ÔDˆ
à $×"9Ñ"9Ñ9ˆ
àÐr.   ©rs   r   ©N©r‰   ztf.TensorShape)r–   ú	tf.TensorrU   r    ©rV   rW   rX   rl   r‡   rœ   Ú__classcell__©rz   s   @r,   r]   r]   }   s   ø„ õ
ô.Y÷2r.   r]   c                  óL   ‡ — e Zd Zdˆ fd„Zddˆ fd„Z	 	 	 d	 	 	 	 	 	 	 dd„Zˆ xZS )	ÚTFCLIPTextEmbeddingsc                óT   •— t        ‰| �  di |¤Ž |j                  | _        || _        y )Nr[   )rk   rl   rm   rn   rs   rx   s      €r,   rl   zTFCLIPTextEmbeddings.__init__È   s'   ø€ Ü‰ÑÑ"˜6Ò"à×+Ñ+ˆŒàˆ�r.   c                ó„  •— t        j                  d«      5  | j                  | j                  j                  | j
                  ft        | j                  j                  | j                  j                  z  «      dd¬«      | _	        d d d «       t        j                  d«      5  | j                  | j                  j                  | j
                  ft        | j                  j                  | j                  j                  z  «      dd¬«      | _        d d d «       t        ‰| �5  |«       y # 1 sw Y   Œ¥xY w# 1 sw Y   Œ%xY w)NÚtoken_embeddingTÚweightr~   r‚   rƒ   )r"   r…   r„   rs   Ú
vocab_sizern   r   rw   rv   r©   Úmax_position_embeddingsr‚   rk   r‡   )rP   r‰   rz   s     €r,   r‡   zTFCLIPTextEmbeddings.buildÏ   sü   ø€ Ü�]‰]Ð,Ó-ñ 	ØŸ/™/Ø—{‘{×-Ñ-¨t¯~©~Ð>Ü+¨D¯K©K×,JÑ,JÈTÏ[É[×MjÑMjÑ,jÓkØØð	 *ó ˆDŒK÷	ô �]‰]Ð/Ó0ñ 	Ø&*§o¡oØ—{‘{×:Ñ:¸D¿N¹NÐKÜ+¨D¯K©K×,JÑ,JÈTÏ[É[×MjÑMjÑ,jÓkØØ!ð	 '6ó 'ˆDÔ#÷	ô 	‰‰�kÕ"÷!	ð 	ú÷	ð 	ús   —A/D*Â#A/D6Ä*D3Ä6D?c                ó®  — |€|€t        d«      ‚|€At        || j                  j                  «       t	        j
                  | j                  |¬«      }t        |«      dd }|€/t	        j                  t	        j                  d|d   ¬«      d¬«      }t	        j
                  | j                  |¬«      }t	        j                  ||d   ddf¬	«      }||z   }|S )
z’
        Applies embedding based on inputs tensor.

        Returns:
            final_embeddings (`tf.Tensor`): output embedding tensor.
        Nz5You have to specify either input_ids or inputs_embeds©ÚparamsÚindicesrŽ   r   )ÚstartÚlimitr‘   r   )ÚinputÚ	multiples)Ú
ValueErrorr   rs   rª   r"   Úgatherr©   r   Úexpand_dimsr7   r‚   r%   )rP   Ú	input_idsÚposition_idsÚinputs_embedsr‰   Úposition_embedsÚfinal_embeddingss          r,   rœ   zTFCLIPTextEmbeddings.callâ   sÅ   € ð Ð Ð!6ÜÐTÓUÐUàÐ Ü*¨9°d·k±k×6LÑ6LÔMÜŸI™I¨T¯[©[À)ÔLˆMä  Ó/°°Ð4ˆàÐÜŸ>™>¬"¯(©(¸À+ÈbÁ/Ô*RÐYZÔ[ˆLäŸ)™)¨4×+BÑ+BÈLÔYˆÜŸ'™'¨ÀKÐPQÁNÐTUÐWXÐCYÔZˆØ(¨?Ñ:ÐàÐr.   ©rs   r   rž   rŸ   )NNN)r·   rC   r¸   rC   r¹   rC   rU   r    r¡   r£   s   @r,   r¥   r¥   Ç   sC   ø„ õö#ð* *.Ø,0Ø-1ð	 à&ð ð *ð ð +ð	 ð
 
÷ r.   r¥   c                  óV   ‡ — e Zd ZdZdˆ fd„Zdd„Z	 d	 	 	 	 	 	 	 	 	 	 	 d	d„Zd
d„Zˆ xZS )ÚTFCLIPAttentionz=Multi-headed attention from 'Attention Is All You Need' paperc                ó8  •— t        ‰| �  di |¤Ž |j                  | _        |j                  | _        | j                  | j                  z  | _        | j
                  | j                  z  | j                  k7  r&t        d| j                  › d| j                  › d�«      ‚|j                  }| j                  dz  d|j                  z  dz  z  |z  }| j                  dz  |z  }t        j                  | j
                  «      | _        t        j                  j                  | j                  t        |«      d¬«      | _        t        j                  j                  | j                  t        |«      d¬«      | _        t        j                  j                  | j                  t        |«      d	¬«      | _        t        j                  j'                  |j(                  ¬
«      | _        t        j                  j                  | j                  t        |«      d¬«      | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).r|   r_   Úq_proj©Úunitsri   rj   Úk_projÚv_proj)ÚrateÚout_projr[   )rk   rl   rm   rn   Únum_attention_headsÚattention_head_sizer´   rw   Únum_hidden_layersr3   ÚsqrtÚsqrt_att_head_sizer   rt   ÚDenser   rÀ   rÃ   rÄ   ÚDropoutÚattention_dropoutÚdropoutrÆ   )rP   rs   ry   rŠ   Úin_proj_stdÚout_proj_stdrz   s         €r,   rl   zTFCLIPAttention.__init__  sÊ  ø€ Ü‰ÑÑ"˜6Ò"à×+Ñ+ˆŒØ#)×#=Ñ#=ˆÔ Ø#'§>¡>°T×5MÑ5MÑ#MˆÔ Ø×#Ñ# d×&>Ñ&>Ñ>À$Ç.Á.ÒPÜØMÈdÏnÉnÐM]ð ^Ø×,Ñ,Ð-¨Rð1óð ð
 ×*Ñ*ˆØ—~‘~ tÑ+°°V×5MÑ5MÑ1MÐRVÑ0VÑWÐZ`Ñ`ˆØŸ™¨Ñ,°Ñ6ˆä"&§)¡)¨D×,DÑ,DÓ"EˆÔä—l‘l×(Ñ(Ø—.‘.´_À[Ó5QÐX`ð )ó 
ˆŒô —l‘l×(Ñ(Ø—.‘.´_À[Ó5QÐX`ð )ó 
ˆŒô —l‘l×(Ñ(Ø—.‘.´_À[Ó5QÐX`ð )ó 
ˆŒô —|‘|×+Ñ+°×1IÑ1IÐ+ÓJˆŒäŸ™×*Ñ*Ø—.‘.´_À\Ó5RÐYcð +ó 
ˆ�r.   c                ó’   — t        j                  ||d| j                  | j                  f¬«      }t        j                  |g d¢¬«      S )NrŽ   r�   ©r   r_   r   r	   rŒ   )r"   r“   rÇ   rÈ   r;   )rP   r�   r—   s      r,   Útranspose_for_scoresz$TFCLIPAttention.transpose_for_scores'  s;   € ä—‘ 6°*¸bÀ$×BZÑBZÐ\`×\tÑ\tÐ1uÔvˆô �|‰|˜FªÔ6Ð6r.   c                ó.  — t        |«      d   }| j                  |¬«      }| j                  |¬«      }| j                  |¬«      }	| j	                  ||«      }
| j	                  ||«      }| j	                  |	|«      }t        j                  |
|d¬«      }t        j                  | j                  |j                  ¬«      }t        j                  ||«      }|�t        j                  ||«      }|�t        j                  ||«      }t        |d¬«      }| j                  ||¬«      }t        j                  ||«      }t        j                  |g d	¢¬
«      }t        j                  ||d| j                   f¬«      }| j#                  ||¬«      }|r||f}|S |f}|S )z#Input shape: Batch x Time x Channelr   ©ÚinputsT©Útranspose_br    rŽ   )r8   r’   )r×   ÚtrainingrÓ   rŒ   r�   )rÚ   )r   rÀ   rÃ   rÄ   rÔ   r"   Úmatmulr$   rË   r!   ÚdivideÚaddr   rÏ   r;   r“   rn   rÆ   )rP   Úhidden_statesÚattention_maskÚcausal_attention_maskÚoutput_attentionsrÚ   r—   Úmixed_query_layerÚmixed_key_layerÚmixed_value_layerÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚdkÚ_attention_probsÚattention_probsÚattention_outputÚoutputss                      r,   rœ   zTFCLIPAttention.call.  sš  € ô   Ó.¨qÑ1ˆ
Ø ŸK™K¨}˜KÓ=ÐØŸ+™+¨]˜+Ó;ˆØ ŸK™K¨}˜KÓ=ÐØ×/Ñ/Ð0AÀ:ÓNˆØ×-Ñ-¨o¸zÓJˆ	Ø×/Ñ/Ð0AÀ:ÓNˆô Ÿ9™9 [°)ÈÔNÐÜ�W‰W�T×,Ñ,Ð4D×4JÑ4JÔKˆÜŸ9™9Ð%5°rÓ:Ðð !Ð,ä!Ÿv™vÐ&6Ð8MÓNÐàÐ%ä!Ÿv™vÐ&6¸ÓGÐô *Ð1AÈÔKÐð Ÿ,™,Ð.>È˜,ÓRˆäŸ9™9 _°kÓBÐÜŸ<™<Ð(8º|ÔLÐô Ÿ:™:Ð-=ÀjÐRTÐVZ×VdÑVdÐEeÔfÐàŸ=™=Ð)9ÀH˜=ÓMÐñ ;LÐ#Ð%5Ð6ˆàˆð ScÐQdˆàˆr.   c                óÈ  — | j                   ry d| _         t        | dd «      �Zt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       t        | dd «      �Zt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       t        | dd «      �Zt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       t        | dd «      �[t        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       y y # 1 sw Y   �ŒAxY w# 1 sw Y   ŒæxY w# 1 sw Y   Œ‹xY w# 1 sw Y   y xY w)NTrÀ   rÃ   rÄ   rÆ   )r†   rL   r"   r…   rÀ   rj   r‡   rn   rÃ   rÄ   rÆ   ©rP   r‰   s     r,   r‡   zTFCLIPAttention.buildc  sŠ  € Ø�:Š:ØØˆŒ
Ü�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ @Ø—‘×!Ñ! 4¨¨t¯~©~Ð">Ô?÷@ä�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ @Ø—‘×!Ñ! 4¨¨t¯~©~Ð">Ô?÷@ä�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ @Ø—‘×!Ñ! 4¨¨t¯~©~Ð">Ô?÷@ä�4˜ TÓ*Ð6Ü—‘˜tŸ}™}×1Ñ1Ó2ñ BØ—‘×#Ñ# T¨4°·±Ð$@ÔA÷Bð Bð 7÷@ñ @ú÷@ð @ú÷@ð @ú÷Bð Bús0   Á)F3Â2)G Ä)GÆ )GÆ3F=Ç G	ÇGÇG!©rs   r   )r�   r    r—   ÚintrU   r    ©F©rÞ   r    rß   r    rà   r    rá   ÚboolrÚ   rô   rU   zTuple[tf.Tensor]rž   )	rV   rW   rX   rY   rl   rÔ   rœ   r‡   r¢   r£   s   @r,   r¾   r¾     s\   ø„ ÙGõ 
óF7ð ð3à ð3ð "ð3ð  )ð	3ð
  ð3ð ð3ð 
ó3÷jBr.   r¾   c                  ó0   ‡ — e Zd Zdˆ fd„Zdd„Zdd„Zˆ xZS )Ú	TFCLIPMLPc                óÚ  •— t        ‰| �  di |¤Ž t        |j                  «      | _        |j
                  }|j                  dz  d|j                  z  dz  z  |z  }d|j                  z  dz  |z  }t        j                  j                  |j                  t        |«      d¬«      | _        t        j                  j                  |j                  t        |«      d¬«      | _        || _        y )Nr|   r_   Úfc1rÁ   Úfc2r[   )rk   rl   r
   Ú
hidden_actÚactivation_fnrw   rm   rÉ   r   rt   rÌ   Úintermediate_sizer   rø   rù   rs   )rP   rs   ry   rŠ   rÐ   Úfc_stdrz   s         €r,   rl   zTFCLIPMLP.__init__v  sÞ   ø€ Ü‰ÑÑ"˜6Ò"ä.¨v×/@Ñ/@ÓAˆÔà×*Ñ*ˆØ×)Ñ)¨4Ñ/°Q¸×9QÑ9QÑ5QÐVZÑ4ZÑ[Ð^dÑdˆØ�f×(Ñ(Ñ(¨TÑ1°FÑ:ˆä—<‘<×%Ñ%Ø×*Ñ*¼ÈvÓ?VÐ]bð &ó 
ˆŒô —<‘<×%Ñ%Ø×$Ñ$¼ÈÓ9UÐ\að &ó 
ˆŒð ˆ�r.   c                óp   — | j                  |¬«      }| j                  |«      }| j                  |¬«      }|S )NrÖ   )rø   rû   rù   )rP   rÞ   s     r,   rœ   zTFCLIPMLP.call‡  s8   € ØŸ™¨˜Ó6ˆØ×*Ñ*¨=Ó9ˆØŸ™¨˜Ó6ˆØÐr.   c                ó"  — | j                   ry d| _         t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   Œ|xY w# 1 sw Y   y xY w)NTrø   rù   )r†   rL   r"   r…   rø   rj   r‡   rs   rm   rù   rü   rï   s     r,   r‡   zTFCLIPMLP.build�  sØ   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó%Ð1Ü—‘˜tŸx™xŸ}™}Ó-ñ FØ—‘—‘  d¨D¯K©K×,CÑ,CÐDÔE÷Fä�4˜ Ó%Ð1Ü—‘˜tŸx™xŸ}™}Ó-ñ LØ—‘—‘  d¨D¯K©K×,IÑ,IÐJÔK÷Lð Lð 2÷Fð Fú÷Lð Lús   Á3C9Â<3DÃ9DÄDrð   )rÞ   r    rU   r    rž   ©rV   rW   rX   rl   rœ   r‡   r¢   r£   s   @r,   rö   rö   u  s   ø„ õó"÷	Lr.   rö   c                  óJ   ‡ — e Zd Zdˆ fd„Z	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )ÚTFCLIPEncoderLayerc                óN  •— t        ‰| �  di |¤Ž |j                  | _        t	        |d¬«      | _        t        j                  j                  |j                  d¬«      | _
        t        |d¬«      | _        t        j                  j                  |j                  d¬«      | _        y )NÚ	self_attn©rj   Úlayer_norm1©Úepsilonrj   ÚmlpÚlayer_norm2r[   )rk   rl   rm   rn   r¾   r  r   rt   ÚLayerNormalizationÚlayer_norm_epsr  rö   r	  r
  rx   s      €r,   rl   zTFCLIPEncoderLayer.__init__š  s‚   ø€ Ü‰ÑÑ"˜6Ò"à×+Ñ+ˆŒÜ(¨°kÔBˆŒÜ Ÿ<™<×:Ñ:À6×CXÑCXÐ_lÐ:ÓmˆÔÜ˜V¨%Ô0ˆŒÜ Ÿ<™<×:Ñ:À6×CXÑCXÐ_lÐ:ÓmˆÕr.   c                óÖ   — |}| j                  |¬«      }| j                  |||||¬«      }|d   }||z   }|}| j                  |¬«      }| j                  |¬«      }||z   }|f|dd z   }|S )a·  
        Args:
            hidden_states (`tf.Tensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`tf.Tensor`): attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
            causal_attention_mask (`tf.Tensor`): causal attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
            output_attentions (`bool`):
                Whether or not to return the attentions tensors of all attention layers. See `outputs` under returned
                tensors for more detail.
        rÖ   ©rÞ   rß   rà   rá   rÚ   r   )rÞ   r   N)r  r  r
  r	  )	rP   rÞ   rß   rà   rá   rÚ   ÚresidualÚattention_outputsrí   s	            r,   rœ   zTFCLIPEncoderLayer.call£  s¡   € ð& !ˆà×(Ñ(°Ð(Ó>ˆØ ŸN™NØ'Ø)Ø"7Ø/Øð +ó 
Ðð *¨!Ñ,ˆØ  =Ñ0ˆà ˆØ×(Ñ(°Ð(Ó>ˆØŸ™¨}˜Ó=ˆØ  =Ñ0ˆà Ð"Ð%6°q°rÐ%:Ñ:ˆàˆr.   c                ó”  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Zt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �[t        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       y y # 1 sw Y   �Œ4xY w# 1 sw Y   ŒÙxY w# 1 sw Y   Œ‹xY w# 1 sw Y   y xY w)NTr  r  r	  r
  )r†   rL   r"   r…   r  rj   r‡   r  rn   r	  r
  rï   s     r,   r‡   zTFCLIPEncoderLayer.buildÌ  sp  € Ø�:Š:ØØˆŒ
Ü�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ä�4˜¨Ó-Ð9Ü—‘˜t×/Ñ/×4Ñ4Ó5ñ EØ× Ñ ×&Ñ&¨¨d°D·N±NÐ'CÔD÷Eä�4˜ Ó%Ð1Ü—‘˜tŸx™xŸ}™}Ó-ñ %Ø—‘—‘˜tÔ$÷%ä�4˜¨Ó-Ð9Ü—‘˜t×/Ñ/×4Ñ4Ó5ñ EØ× Ñ ×&Ñ&¨¨d°D·N±NÐ'CÔD÷Eð Eð :÷+ñ +ú÷Eð Eú÷%ð %ú÷Eð Eús0   ÁFÂ%)F&ÄF2Å&)F>ÆF#Æ&F/Æ2F;Æ>Grð   rò   ró   rž   r   r£   s   @r,   r  r  ™  sT   ø„ õnð ð'à ð'ð "ð'ð  )ð	'ð
  ð'ð ð'ð 
ó'÷REr.   r  c                  óV   ‡ — e Zd ZdZdˆ fd„Z	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )	ÚTFCLIPEncoderz¯
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`TFCLIPEncoderLayer`].

    Args:
        config: CLIPConfig
    c                óš   •— t        ‰| �  di |¤Ž t        |j                  «      D �cg c]  }t	        |d|› �¬«      ‘Œ c}| _        y c c}w )Nz	layers_._r  r[   )rk   rl   r7   rÉ   r  rt   )rP   rs   ry   Úirz   s       €r,   rl   zTFCLIPEncoder.__init__ç  sB   ø€ Ü‰ÑÑ"˜6Ò"äQVÐW]×WoÑWoÓQpÖqÈAÔ)¨&¸À1À#°ÖGÒqˆ�ùÒqs   ¨Ac                óú   — |rdnd }|rdnd }	t        | j                  «      D ]+  \  }
}|r||fz   } ||||||¬«      }|d   }|sŒ#|	|d   fz   }	Œ- |r||fz   }|st        d„ |||	fD «       «      S t        |||	¬«      S )Nr[   r  r   r   c              3  ó&   K  — | ]	  }|€Œ|–— Œ y ­wrž   r[   )rN   Úvs     r,   rQ   z%TFCLIPEncoder.call.<locals>.<genexpr>  s   è ø€ Òh˜qÐZ[ÑZgœÑhùs   ‚Š)Úlast_hidden_staterÞ   Ú
attentions)Ú	enumeratert   rR   r   )rP   rÞ   rß   rà   rá   Úoutput_hidden_statesÚreturn_dictrÚ   Úall_hidden_statesÚall_attentionsr  Úlayer_moduleÚlayer_outputss                r,   rœ   zTFCLIPEncoder.callì  sÅ   € ñ #7™B¸DÐÙ0™°dˆä(¨¯©Ó5ò 	F‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!á(Ø+Ø-Ø&;Ø"3Ø!ôˆMð *¨!Ñ,ˆMâ Ø!/°=ÀÑ3CÐ2EÑ!E‘ð	Fñ"  Ø 1°]Ð4DÑ DÐáÜÑh ]Ð4EÀ~Ð$VÔhÓhÐhä Ø+Ð;LÐYgô
ð 	
r.   c                óô   — | j                   ry d| _         t        | dd «      �K| j                  D ];  }t        j                  |j
                  «      5  |j                  d «       d d d «       Œ= y y # 1 sw Y   ŒIxY w)NTrt   )r†   rL   rt   r"   r…   rj   r‡   )rP   r‰   Úlayers      r,   r‡   zTFCLIPEncoder.build  sp   € Ø�:Š:ØØˆŒ
Ü�4˜ 4Ó(Ð4ØŸ™ò &�Ü—]‘] 5§:¡:Ó.ñ &Ø—K‘K Ô%÷&ð &ñ&ð 5÷&ð &ús   ÁA.Á.A7	rð   rò   )rÞ   r    rß   r    rà   r    rá   rô   r  rô   r  rô   rÚ   rô   rU   z*Union[TFBaseModelOutput, Tuple[tf.Tensor]]rž   )rV   rW   rX   rY   rl   rœ   r‡   r¢   r£   s   @r,   r  r  Þ  sl   ø„ ñõrð ð&
à ð&
ð "ð&
ð  )ð	&
ð
  ð&
ð #ð&
ð ð&
ð ð&
ð 
4ó&
÷P&r.   r  c                  óp   ‡ — e Zd Zdˆ fd„Z	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zej                  fd„Zdd„Zˆ xZ	S )	ÚTFCLIPTextTransformerc                ó  •— t        ‰| �  di |¤Ž t        |d¬«      | _        t	        |d¬«      | _        t        j                  j                  |j                  d¬«      | _
        |j                  | _        |j                  | _        y )Nrƒ   r  ÚencoderÚfinal_layer_normr  r[   )rk   rl   r¥   rƒ   r  r'  r   rt   r  r  r(  Úeos_token_idrm   rn   rx   s      €r,   rl   zTFCLIPTextTransformer.__init__  so   ø€ Ü‰ÑÑ"˜6Ò"ä.¨v¸LÔIˆŒÜ$ V°)Ô<ˆŒÜ %§¡× ?Ñ ?È×H]ÑH]ÐdvÐ ?Ó wˆÔð #×/Ñ/ˆÔØ×+Ñ+ˆ�r.   c                ó¢  — t        |«      }| j                  ||¬«      }	|\  }
}| j                  |
||	j                  ¬«      }t	        |«      }| j                  |	||||||¬«      }|d   }| j                  |¬«      }| j                  dk(  rtt        j                  |t        j                  t        j                  |d   t        j                  ¬«      t        j                  j                  |d¬«      fd	¬
«      ¬«      }n£t        j                  |t        j                  t        j                  |d   t        j                  ¬«      t        j                  j                  t        j                  || j                  k(  t        j                   ¬«      d¬«      fd	¬
«      ¬«      }|s
||f|d	d  z   S t#        |||j$                  |j&                  ¬«      S )N)r·   r¸   r    ©rÞ   rß   rà   rá   r  r  rÚ   r   rÖ   r_   rŽ   r‘   r   )Úvaluesr’   r­   ©r  Úpooler_outputrÞ   r  )r   rƒ   Ú_build_causal_attention_maskr!   r-   r'  r(  r)  r"   Ú	gather_ndÚstackr7   Úint64r3   Úargmaxr$   Úint8r   rÞ   r  )rP   r·   rß   r¸   rá   r  r  rÚ   r‰   Úembedding_outputr—   Ú
seq_lengthrà   Úencoder_outputsÚsequence_outputÚpooled_outputs                   r,   rœ   zTFCLIPTextTransformer.call*  s¯  € ô ! Ó+ˆàŸ?™?°YÈ\˜?ÓZÐà!,Ñˆ
�Jð !%× AÑ AÀ*ÈjÐ`p×`vÑ`vÐ AÓ wÐô & nÓ5ˆàŸ,™,Ø*Ø)Ø"7Ø/Ø!5Ø#Øð 'ó 
ˆð *¨!Ñ,ˆØ×/Ñ/°Ð/ÓGˆà×Ñ Ò!ô ŸL™LØ&ÜŸ™ÜŸH™H [°¡^¼2¿8¹8ÔDÄbÇgÁgÇnÁnÐU^ÐegÀnÓFhÐiÐpqôô‰Mô ŸL™LØ&ÜŸ™äŸ™ ¨Q¡´r·x±xÔ@ÜŸ™Ÿ™¤r§w¡w¨y¸D×<MÑ<MÑ/MÔUW×U\ÑU\Ô']Ðdf˜Ógðð ôô	ˆMñ Ø# ]Ð3°oÀaÀbÐ6IÑIÐIä+Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r.   c                ój  — t        j                  t        j                  |fd«      |«      }t        j                  t        j                  ||fd«      |«      }t         j                  j	                  |dd«      }t         j                  j                  ||¬«      }t        j                  ||d||f¬«      S )Ng        g     ˆÃÀr   rŽ   )Údiagonalr   )r²   r   )r"   r$   ÚfillÚlinalgÚ	band_partÚset_diagr”   )rP   r—   r6  r!   ÚdiagÚto_masks         r,   r/  z2TFCLIPTextTransformer._build_causal_attention_maskq  s‘   € ô
 �w‰w”r—w‘w 
˜}¨cÓ2°EÓ:ˆô —'‘'œ"Ÿ'™' :¨zÐ":¸HÓEÀuÓMˆô —)‘)×%Ñ% g¨q°"Ó5ˆä—)‘)×$Ñ$ W°tÐ$Ó<ˆä�‰ W°ZÀÀJÐPZÐ4[Ô\Ð\r.   c                ó¬  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �[t        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       y y # 1 sw Y   ŒÌxY w# 1 sw Y   Œ~xY w# 1 sw Y   y xY w)NTrƒ   r'  r(  )
r†   rL   r"   r…   rƒ   rj   r‡   r'  r(  rn   rï   s     r,   r‡   zTFCLIPTextTransformer.buildƒ  s  € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ä�4Ð+¨TÓ2Ð>Ü—‘˜t×4Ñ4×9Ñ9Ó:ñ JØ×%Ñ%×+Ñ+¨T°4¸¿¹Ð,HÔI÷Jð Jð ?÷,ð ,ú÷)ð )ú÷Jð Jús$   ÁD2Â%D>Ã?)E
Ä2D;Ä>EÅ
Er¼   rò   )r·   r   rß   r    r¸   r    rá   rô   r  rô   r  rô   rÚ   rô   rU   ú5Union[TFBaseModelOutputWithPooling, Tuple[tf.Tensor]]rž   )
rV   rW   rX   rl   rœ   r"   Úfloat32r/  r‡   r¢   r£   s   @r,   r%  r%    s�   ø„ õ	,ð& ðE
à#ðE
ð "ðE
ð  ð	E
ð
  ðE
ð #ðE
ð ðE
ð ðE
ð 
?óE
ðN JLÏÉó ]÷$Jr.   r%  c                  ó|   ‡ — e Zd ZeZdˆ fd„Zdd„Zdd„Ze	 	 	 	 	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
d„«       Z	dd„Z
ˆ xZS )ÚTFCLIPTextMainLayerc                óV   •— t        ‰| �  di |¤Ž || _        t        |d¬«      | _        y )NÚ
text_modelr  r[   )rk   rl   rs   r%  rH  rx   s      €r,   rl   zTFCLIPTextMainLayer.__init__–  s(   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒÜ/°¸\ÔJˆ�r.   c                ó.   — | j                   j                  S rž   )rH  rƒ   rT   s    r,   Úget_input_embeddingsz(TFCLIPTextMainLayer.get_input_embeddings›  s   € Ø�‰×)Ñ)Ð)r.   c                óˆ   — || j                   j                  _        t        |«      d   | j                   j                  _        y )Nr   )rH  rƒ   r©   r   rª   )rP   Úvalues     r,   Úset_input_embeddingsz(TFCLIPTextMainLayer.set_input_embeddingsž  s0   € Ø,1ˆ�‰×"Ñ"Ô)Ü0:¸5Ó0AÀ!Ñ0Dˆ�‰×"Ñ"Õ-r.   c           	     ó˜   — |€t        d«      ‚t        |«      }|€t        j                  |d¬«      }| j	                  |||||||¬«      }	|	S )NzYou have to specify input_idsr   ©ÚdimsrL  ©r·   rß   r¸   rá   r  r  rÚ   )r´   r   r"   r<  rH  )
rP   r·   rß   r¸   rá   r  r  rÚ   r‰   Útext_model_outputss
             r,   rœ   zTFCLIPTextMainLayer.call¢  sg   € ð ÐÜÐ<Ó=Ð=ä  Ó+ˆàÐ!ÜŸW™W¨+¸QÔ?ˆNà!Ÿ_™_ØØ)Ø%Ø/Ø!5Ø#Øð -ó 
Ðð "Ð!r.   c                óú   — | j                   ry d| _         t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   y xY w)NTrH  )r†   rL   r"   r…   rH  rj   r‡   rï   s     r,   r‡   zTFCLIPTextMainLayer.buildÁ  si   € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ð ,ð 9÷,ð ,úó   ÁA1Á1A:r¼   ©rU   zkeras.layers.Layer)rL  ztf.Variable©NNNNNNF)r·   úTFModelInputType | Nonerß   únp.ndarray | tf.Tensor | Noner¸   rX  rá   úOptional[bool]r  rY  r  rY  rÚ   rô   rU   rC  rž   )rV   rW   rX   r   Úconfig_classrl   rJ  rM  r   rœ   r‡   r¢   r£   s   @r,   rF  rF  ’  s—   ø„ à!€LõKó
*óEð ð .2Ø8<Ø6:Ø,0Ø/3Ø&*Øð"à*ð"ð 6ð"ð 4ð	"ð
 *ð"ð -ð"ð $ð"ð ð"ð 
?ò"ó ð"÷<,r.   rF  c                  óJ   ‡ — e Zd Zdˆ fd„Z	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )ÚTFCLIPVisionTransformerc                óN  •— t        ‰| �  di |¤Ž t        |d¬«      | _        t        j
                  j                  |j                  d¬«      | _        t        |d¬«      | _
        t        j
                  j                  |j                  d¬«      | _        |j                  | _        y )Nrƒ   r  Úpre_layrnormr  r'  Úpost_layernormr[   )rk   rl   r]   rƒ   r   rt   r  r  Úpre_layernormr  r'  r_  rm   rn   rx   s      €r,   rl   z TFCLIPVisionTransformer.__init__Ë  s‚   ø€ Ü‰ÑÑ"˜6Ò"ä0°¸lÔKˆŒÜ"Ÿ\™\×<Ñ<ÀV×EZÑEZÐaoÐ<ÓpˆÔÜ$ V°)Ô<ˆŒÜ#Ÿl™l×=Ñ=Àf×F[ÑF[ÐbrÐ=ÓsˆÔØ×+Ñ+ˆ�r.   c           	     ó  — | j                  |¬«      }| j                  |¬«      }| j                  |d d ||||¬«      }|d   }|d d …dd d …f   }	| j                  |	¬«      }	|s
||	f|dd  z   S t	        ||	|j
                  |j                  ¬«      S )N)r–   rÖ   r+  r   r   r-  )rƒ   r`  r'  r_  r   rÞ   r  )
rP   r–   rá   r  r  rÚ   r5  r7  r8  r9  s
             r,   rœ   zTFCLIPVisionTransformer.callÔ  sÀ   € ð  Ÿ?™?¸˜?ÓEÐØ×-Ñ-Ð5EÐ-ÓFÐàŸ,™,Ø*ØØ"&Ø/Ø!5Ø#Øð 'ó 
ˆð *¨!Ñ,ˆØ'ª¨1ªa¨Ñ0ˆØ×+Ñ+°=Ð+ÓAˆáØ# ]Ð3°oÀaÀbÐ6IÑIÐIä+Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r.   c                ó’  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Zt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Zt        j                  | j                  j
                  «      5  | j                  j                  d | j                  g«       d d d «       y y # 1 sw Y   �Œ3xY w# 1 sw Y   ŒØxY w# 1 sw Y   ŒŠxY w# 1 sw Y   y xY w)NTrƒ   r`  r'  r_  )r†   rL   r"   r…   rƒ   rj   r‡   r`  rn   r'  r_  rï   s     r,   r‡   zTFCLIPVisionTransformer.build÷  ss  € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜¨$Ó/Ð;Ü—‘˜t×1Ñ1×6Ñ6Ó7ñ GØ×"Ñ"×(Ñ(¨$°°d·n±nÐ)EÔF÷Gä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ä�4Ð)¨4Ó0Ð<Ü—‘˜t×2Ñ2×7Ñ7Ó8ñ BØ×#Ñ#×)Ñ)¨4°·±Ð*@ÔA÷Bð Bð =÷,ñ ,ú÷Gð Gú÷)ð )ú÷Bð Bús0   ÁFÂ%)F%ÄF1Å&(F=ÆF"Æ%F.Æ1F:Æ=Gr�   rò   )r–   r   rá   rô   r  rô   r  rô   rÚ   rô   rU   rC  rž   r   r£   s   @r,   r\  r\  Ê  sS   ø„ õ,ð ð!
à&ð!
ð  ð!
ð #ð	!
ð
 ð!
ð ð!
ð 
?ó!
÷FBr.   r\  c                  óh   ‡ — e Zd ZeZdˆ fd„Zdd„Ze	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„«       Zd	d„Z	ˆ xZ
S )
ÚTFCLIPVisionMainLayerc                óV   •— t        ‰| �  di |¤Ž || _        t        |d¬«      | _        y )NÚvision_modelr  r[   )rk   rl   rs   r\  rf  rx   s      €r,   rl   zTFCLIPVisionMainLayer.__init__  s)   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒÜ3°FÀÔPˆÕr.   c                ó.   — | j                   j                  S rž   )rf  rƒ   rT   s    r,   rJ  z*TFCLIPVisionMainLayer.get_input_embeddings  s   € Ø× Ñ ×+Ñ+Ð+r.   c                óL   — |€t        d«      ‚| j                  |||||¬«      }|S )Nú You have to specify pixel_values©r–   rá   r  r  rÚ   )r´   rf  )rP   r–   rá   r  r  rÚ   Úvision_model_outputss          r,   rœ   zTFCLIPVisionMainLayer.call  sC   € ð ÐÜÐ?Ó@Ð@à#×0Ñ0Ø%Ø/Ø!5Ø#Øð  1ó  
Ðð $Ð#r.   c                óú   — | j                   ry d| _         t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   y xY w)NTrf  )r†   rL   r"   r…   rf  rj   r‡   rï   s     r,   r‡   zTFCLIPVisionMainLayer.build+  sm   € Ø�:Š:ØØˆŒ
Ü�4˜¨Ó.Ð:Ü—‘˜t×0Ñ0×5Ñ5Ó6ñ .Ø×!Ñ!×'Ñ'¨Ô-÷.ð .ð ;÷.ð .úrT  r�   rU  ©NNNNF)r–   rW  rá   rY  r  rY  r  rY  rÚ   rô   rU   rC  rž   )rV   rW   rX   r   rZ  rl   rJ  r   rœ   r‡   r¢   r£   s   @r,   rd  rd  	  sw   ø„ à#€LõQó
,ð ð 15Ø,0Ø/3Ø&*Øð$à-ð$ð *ð$ð -ð	$ð
 $ð$ð ð$ð 
?ò$ó ð$÷*.r.   rd  c                  óî   ‡ — e Zd ZeZdˆ fd„Zddd„Ze	 	 	 	 	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
d„«       Ze	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„«       Z	e	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z
ˆ xZS )ÚTFCLIPMainLayerc                ó|  •— t        ‰| �  di |¤Ž t        |j                  t        «      s"t        dt        |j                  «      › d�«      ‚t        |j                  t        «      s"t        dt        |j                  «      › d�«      ‚|| _	        |j                  }|j                  }|j                  | _
        t        |d¬«      | _        t        |d¬«      | _        t        j                   j#                  | j                  t%        |j&                  dz  | j                  j(                  z  «      dd	¬
«      | _        t        j                   j#                  | j                  t%        |j&                  dz  | j                  j(                  z  «      dd¬
«      | _        |j&                  | _        |j&                  | _        y )NzKconfig.text_config is expected to be of type CLIPTextConfig but is of type ú.zOconfig.vision_config is expected to be of type CLIPVisionConfig but is of type rH  r  rf  r|   FÚvisual_projection)rÂ   ri   rh   rj   Útext_projectionr[   )rk   rl   Ú
isinstanceÚtext_configr   Ú	TypeErrorÚtypeÚvision_configr   rs   Úprojection_dimr%  rH  r\  rf  r   rt   rÌ   r   rm   rw   rr  rs  Útext_embed_dimÚvision_embed_dim)rP   rs   ry   ru  rx  rz   s        €r,   rl   zTFCLIPMainLayer.__init__8  s‘  ø€ Ü‰ÑÑ"˜6Ò"ä˜&×,Ñ,¬nÔ=ÜðÜ˜×+Ñ+Ó,Ð-¨Qð0óð ô
 ˜&×.Ñ.Ô0@ÔAÜðÜ˜×-Ñ-Ó.Ð/¨qð2óð ð
 ˆŒà×(Ñ(ˆØ×,Ñ,ˆà$×3Ñ3ˆÔä/°À,ÔOˆŒÜ3°MÈÔWˆÔä!&§¡×!3Ñ!3Ø×%Ñ%Ü.¨}×/HÑ/HÈ$Ñ/NÐQU×Q\ÑQ\×QoÑQoÑ/oÓpØØ$ð	 "4ó "
ˆÔô  %Ÿ|™|×1Ñ1Ø×%Ñ%Ü.¨{×/FÑ/FÈÑ/LÈtÏ{É{×OmÑOmÑ/mÓnØØ"ð	  2ó  
ˆÔð *×5Ñ5ˆÔØ -× 9Ñ 9ˆÕr.   c                ó*  — | j                  dt        j                  j                  | j                  j
                  «      dd¬«      | _        | j                  ry d| _        t        | dd «      �Mt        j                  | j                  j                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Mt        j                  | j                  j                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Zt        j                  | j                  j                  «      5  | j                  j                  d d | j                   g«       d d d «       t        | dd «      �[t        j                  | j"                  j                  «      5  | j"                  j                  d d | j$                  g«       d d d «       y y # 1 sw Y   �Œ4xY w# 1 sw Y   ŒæxY w# 1 sw Y   Œ‹xY w# 1 sw Y   y xY w)	N©r   TÚlogit_scaler~   rH  rf  rr  rs  )r„   r   ÚinitializersÚConstantrs   Úlogit_scale_init_valuer~  r†   rL   r"   r…   rH  rj   r‡   rf  rr  r{  rs  rz  rï   s     r,   r‡   zTFCLIPMainLayer.builda  s½  € ØŸ?™?ØÜ×*Ñ*×3Ñ3°D·K±K×4VÑ4VÓWØØð	 +ó 
ˆÔð �:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜¨Ó.Ð:Ü—‘˜t×0Ñ0×5Ñ5Ó6ñ .Ø×!Ñ!×'Ñ'¨Ô-÷.ä�4Ð,¨dÓ3Ð?Ü—‘˜t×5Ñ5×:Ñ:Ó;ñ RØ×&Ñ&×,Ñ,¨d°D¸$×:OÑ:OÐ-PÔQ÷Rä�4Ð*¨DÓ1Ð=Ü—‘˜t×3Ñ3×8Ñ8Ó9ñ NØ×$Ñ$×*Ñ*¨D°$¸×8KÑ8KÐ+LÔM÷Nð Nð >÷,ñ ,ú÷.ð .ú÷Rð Rú÷Nð Nús0   ÂG$Ã0G1Å
)G=Æ1)H	Ç$G.Ç1G:Ç=HÈ	Hc           	     óÆ   — |€t        d«      ‚t        |«      }|€t        j                  |d¬«      }| j	                  |||||||¬«      }	|	d   }
| j                  |
¬«      }|S )Nú$You have to specify either input_idsr   rO  rQ  rÖ   )r´   r   r"   r<  rH  rs  )rP   r·   rß   r¸   rá   r  r  rÚ   r‰   Útext_outputsr9  Útext_featuress               r,   Úget_text_featuresz!TFCLIPMainLayer.get_text_featuresy  s‚   € ð ÐÜÐCÓDÐDä  Ó+ˆàÐ!ÜŸW™W¨+¸QÔ?ˆNà—‘ØØ)Ø%Ø/Ø!5Ø#Øð 'ó 
ˆð % Q™ˆØ×,Ñ,°MÐ,ÓBˆàÐr.   c                óz   — |€t        d«      ‚| j                  |||||¬«      }|d   }| j                  |¬«      }|S )Nri  rj  r   rÖ   )r´   rf  rr  )	rP   r–   rá   r  r  rÚ   Úvision_outputsr9  Úimage_featuress	            r,   Úget_image_featuresz"TFCLIPMainLayer.get_image_features›  s_   € ð ÐÜÐ?Ó@Ð@à×*Ñ*Ø%Ø/Ø!5Ø#Øð +ó 
ˆð ' qÑ)ˆØ×/Ñ/°}Ð/ÓEˆàÐr.   c
           	     óî  — |€t        d«      ‚|€t        d«      ‚t        |«      }
|€t        j                  |
d¬«      }| j	                  |||||	¬«      }| j                  |||||||	¬«      }|d   }| j                  |¬«      }|d   }| j                  |¬«      }|t        j                  |dd	d
¬«      z  }|t        j                  |dd	d
¬«      z  }t        j                  j                  | j                  «      }t        j                  ||d
¬«      |z  }t        j                  |«      }d }|r!t        |«      }t        j                  |d«      }|s||||||f}|�|f|z   S |S t!        |||||||¬«      S )Nrƒ  ri  r   rO  rj  rQ  rÖ   Ú	euclideanrŽ   T)r�   Úordr’   ÚkeepdimsrØ   r}  )rB   rD   rE   rF   rG   rH   rI   )r´   r   r"   r<  rf  rH  rr  rs  Únormr3   Úexpr~  rÛ   r;   r?   r“   rA   )rP   r·   r–   rß   r¸   Úreturn_lossrá   r  r  rÚ   r‰   rˆ  r„  rG   rF   r~  rE   rD   rB   Úoutputs                       r,   rœ   zTFCLIPMainLayer.call´  s¼  € ð ÐÜÐCÓDÐDØÐÜÐ?Ó@Ð@ä  Ó+ˆàÐ!ÜŸW™W¨+¸QÔ?ˆNà×*Ñ*Ø%Ø/Ø!5Ø#Øð +ó 
ˆð —‘ØØ)Ø%Ø/Ø!5Ø#Øð 'ó 
ˆð & aÑ(ˆØ×-Ñ-°\Ð-ÓBˆà" 1‘oˆØ×*Ñ*°+Ð*Ó>ˆð $¤b§g¡g°\À{ÐY[ÐfjÔ&kÑkˆØ!¤B§G¡G°;ÀKÐVXÐcgÔ$hÑhˆô —g‘g—k‘k $×"2Ñ"2Ó3ˆÜŸ)™) K°È4ÔPÐS^Ñ^ˆÜŸ<™<¨Ó8ÐàˆÙÜ˜_Ó-ˆDÜ—:‘:˜d DÓ)ˆDáØ&¨¸ÀlÐT`ÐbpÐqˆFØ'+Ð'7�D�7˜VÑ#ÐC¸VÐCäØØ-Ø+Ø#Ø%Ø*Ø .ô
ð 	
r.   rð   rž   rŸ   rV  ©r·   rW  rß   rX  r¸   rX  rá   rY  r  rY  r  rY  rÚ   rô   rU   r    rm  ©r–   rW  rá   rY  r  rY  r  rY  rÚ   rô   rU   r    ©	NNNNNNNNF©r·   rW  r–   rW  rß   rX  r¸   rX  r‘  rY  rá   rY  r  rY  r  rY  rÚ   rô   rU   z%Union[TFCLIPOutput, Tuple[tf.Tensor]])rV   rW   rX   r   rZ  rl   r‡   r   r†  rŠ  rœ   r¢   r£   s   @r,   ro  ro  4  sŒ  ø„ à€Lõ':ôRNð0 ð .2Ø8<Ø6:Ø,0Ø/3Ø&*Øðà*ðð 6ðð 4ð	ð
 *ðð -ðð $ðð ðð 
òó ððB ð 15Ø,0Ø/3Ø&*Øðà-ðð *ðð -ð	ð
 $ðð ðð 
òó ðð0 ð .2Ø04Ø8<Ø6:Ø&*Ø,0Ø/3Ø&*ØðH
à*ðH
ð .ðH
ð 6ð	H
ð
 4ðH
ð $ðH
ð *ðH
ð -ðH
ð $ðH
ð ðH
ð 
/òH
ó ôH
r.   ro  c                  ó$   — e Zd ZdZeZdZdgZdgZy)ÚTFCLIPPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Úclipr¸   N)	rV   rW   rX   rY   r   rZ  Úbase_model_prefixÚ_keys_to_ignore_on_load_missingÚ"_keys_to_ignore_on_load_unexpectedr[   r.   r,   r˜  r˜     s&   „ ñð
 €LØÐØ'6Ð&7Ð#Ø*9Ð):Ñ&r.   r˜  av	  

    This model inherits from [`TFPreTrainedModel`]. Check the superclass documentation for the generic methods the
    library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads
    etc.)

    This model is also a [keras.Model](https://www.tensorflow.org/api_docs/python/tf/keras/Model) subclass. Use it
    as a regular TF 2.0 Keras Model and refer to the TF 2.0 documentation for all matter related to general usage and
    behavior.

    <Tip>

    TensorFlow models and layers in `transformers` accept two formats as input:

    - having all inputs as keyword arguments (like PyTorch models), or
    - having all inputs as a list, tuple or dict in the first positional argument.

    The reason the second format is supported is that Keras methods prefer this format when passing inputs to models
    and layers. Because of this support, when using methods like `model.fit()` things should "just work" for you - just
    pass your inputs and labels in any format that `model.fit()` supports! If, however, you want to use the second
    format outside of Keras methods like `fit()` and `predict()`, such as when creating your own layers or models with
    the Keras `Functional` API, there are three possibilities you can use to gather all the input Tensors in the first
    positional argument:

    - a single Tensor with `input_ids` only and nothing else: `model(input_ids)`
    - a list of varying length with one or several input Tensors IN THE ORDER given in the docstring:
    `model([input_ids, attention_mask])` or `model([input_ids, attention_mask, token_type_ids])`
    - a dictionary with one or several input Tensors associated to the input names given in the docstring:
    `model({"input_ids": input_ids, "token_type_ids": token_type_ids})`

    Note that when creating models and layers with
    [subclassing](https://keras.io/guides/making_new_layers_and_models_via_subclassing/) then you don't need to worry
    about any of this, as you can just pass inputs like you would to any other Python function!

    </Tip>

    Args:
        config ([`CLIPConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~TFPreTrainedModel.from_pretrained`] method to load the model weights.
a­  
    Args:
        input_ids (`np.ndarray`, `tf.Tensor`, `List[tf.Tensor]` ``Dict[str, tf.Tensor]` or `Dict[str, np.ndarray]` and each example must have the shape `({0})`):
            Indices of input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.__call__`] and
            [`PreTrainedTokenizer.encode`] for details.

            [What are input IDs?](../glossary#input-ids)
        attention_mask (`np.ndarray` or `tf.Tensor` of shape `({0})`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            [What are attention masks?](../glossary#attention-mask)
        position_ids (`np.ndarray` or `tf.Tensor` of shape `({0})`, *optional*):
            Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
            config.max_position_embeddings - 1]`.

            [What are position IDs?](../glossary#position-ids)
        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail. This argument can be used only in eager mode, in graph mode the value in the
            config will be used instead.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail. This argument can be used only in eager mode, in graph mode the value in the config will be
            used instead.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple. This argument can be used in
            eager mode, in graph mode the value will always be set to True.
        training (`bool`, *optional*, defaults to `False``):
            Whether or not to use the model in training mode (some modules like dropout modules have different
            behaviors between training and evaluation).
a¤  
    Args:
        pixel_values (`np.ndarray`, `tf.Tensor`, `List[tf.Tensor]` ``Dict[str, tf.Tensor]` or `Dict[str, np.ndarray]` and each example must have the shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See
            [`CLIPImageProcessor.__call__`] for details. output_attentions (`bool`, *optional*): Whether or not to
            return the attentions tensors of all attention layers. See `attentions` under returned tensors for more
            detail. This argument can be used only in eager mode, in graph mode the value in the config will be used
            instead.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail. This argument can be used only in eager mode, in graph mode the value in the config will be
            used instead.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple. This argument can be used in
            eager mode, in graph mode the value will always be set to True.
        training (`bool`, *optional*, defaults to `False``):
            Whether or not to use the model in training mode (some modules like dropout modules have different
            behaviors between training and evaluation).
al
  
    Args:
        input_ids (`np.ndarray`, `tf.Tensor`, `List[tf.Tensor]` ``Dict[str, tf.Tensor]` or `Dict[str, np.ndarray]` and each example must have the shape `({0})`):
            Indices of input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.__call__`] and
            [`PreTrainedTokenizer.encode`] for details.

            [What are input IDs?](../glossary#input-ids)
        pixel_values (`np.ndarray`, `tf.Tensor`, `List[tf.Tensor]` `Dict[str, tf.Tensor]` or `Dict[str, np.ndarray]` and each example must have the shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See
            [`CLIPImageProcessor.__call__`] for details.
        attention_mask (`np.ndarray` or `tf.Tensor` of shape `({0})`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            [What are attention masks?](../glossary#attention-mask)
        position_ids (`np.ndarray` or `tf.Tensor` of shape `({0})`, *optional*):
            Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
            config.max_position_embeddings - 1]`.

            [What are position IDs?](../glossary#position-ids)
        return_loss (`bool`, *optional*):
            Whether or not to return the contrastive loss.
        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail. This argument can be used only in eager mode, in graph mode the value in the
            config will be used instead.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail. This argument can be used only in eager mode, in graph mode the value in the config will be
            used instead.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple. This argument can be used in
            eager mode, in graph mode the value will always be set to True.
        training (`bool`, *optional*, defaults to `False``):
            Whether or not to use the model in training mode (some modules like dropout modules have different
            behaviors between training and evaluation).
c                  óº   ‡ — e Zd ZeZdˆ fd„Ze eej                  d«      «       e
ee¬«      	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       «       «       Zd	d„Zˆ xZS )
ÚTFCLIPTextModelc                óP   •— t        ‰| �  |g|¢­i |¤Ž t        |d¬«      | _        y ©Nr™  r  )rk   rl   rF  r™  ©rP   rs   r×   ry   rz   s       €r,   rl   zTFCLIPTextModel.__init__�  s(   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3ä'¨°VÔ<ˆ�	r.   úbatch_size, sequence_length©Úoutput_typerZ  c           	     ó6   — | j                  |||||||¬«      }|S )aO  
        Returns:

        Examples:

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

        >>> model = TFCLIPTextModel.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="tf")

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        >>> pooled_output = outputs.pooler_output  # pooled (EOS token) states
        ```rQ  ©r™  )	rP   r·   rß   r¸   rá   r  r  rÚ   rí   s	            r,   rœ   zTFCLIPTextModel.call¢  s3   € ð> —)‘)ØØ)Ø%Ø/Ø!5Ø#Øð ó 
ˆð ˆr.   c                óú   — | j                   ry d| _         t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   y xY w©NTr™  ©r†   rL   r"   r…   r™  rj   r‡   rï   s     r,   r‡   zTFCLIPTextModel.buildÍ  óe   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ &Ø—	‘	—‘ Ô%÷&ð &ð 3÷&ð &úrT  r¼   rV  )r·   rW  rß   rX  r¸   rX  rá   rY  r  rY  r  rY  rÚ   rY  rU   rC  rž   )rV   rW   rX   r   rZ  rl   r   r   ÚCLIP_TEXT_INPUTS_DOCSTRINGÚformatr   r   rœ   r‡   r¢   r£   s   @r,   rž  rž  š  s¹   ø„ Ø!€Lõ=ð
 Ù*Ð+E×+LÑ+LÐMjÓ+kÓlÙÐ+GÐVdÔeð .2Ø8<Ø6:Ø,0Ø/3Ø&*Ø#(ð&à*ð&ð 6ð&ð 4ð	&ð
 *ð&ð -ð&ð $ð&ð !ð&ð 
?ò&ó fó mó ð&÷P&r.   rž  c                  ó”   ‡ — e Zd ZeZdZdˆ fd„Ze ee	«       e
ee¬«      	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„«       «       «       Zd	d„Zˆ xZS )
ÚTFCLIPVisionModelr–   c                óP   •— t        ‰| �  |g|¢­i |¤Ž t        |d¬«      | _        y r   )rk   rl   rd  r™  r¡  s       €r,   rl   zTFCLIPVisionModel.__init__Ú  s(   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3ä)¨&°vÔ>ˆ�	r.   r£  c                ó2   — | j                  |||||¬«      }|S )aî  
        Returns:

        Examples:

        ```python
        >>> from PIL import Image
        >>> import requests
        >>> from transformers import AutoProcessor, TFCLIPVisionModel

        >>> model = TFCLIPVisionModel.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 = Image.open(requests.get(url, stream=True).raw)

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

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        >>> pooled_output = outputs.pooler_output  # pooled CLS states
        ```rj  r¦  )rP   r–   rá   r  r  rÚ   rí   s          r,   rœ   zTFCLIPVisionModel.callß  s.   € ðD —)‘)Ø%Ø/Ø!5Ø#Øð ó 
ˆð ˆr.   c                óú   — | j                   ry d| _         t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   y xY wr¨  r©  rï   s     r,   r‡   zTFCLIPVisionModel.build  rª  rT  r�   rm  )r–   rW  rá   rY  r  rY  r  rY  rÚ   rY  rU   rC  rž   )rV   rW   rX   r   rZ  Úmain_input_namerl   r   r   ÚCLIP_VISION_INPUTS_DOCSTRINGr   r   rœ   r‡   r¢   r£   s   @r,   r®  r®  Ö  s˜   ø„ Ø#€LØ$€Oõ?ð
 Ù*Ð+GÓHÙÐ+GÐVfÔgð 15Ø,0Ø/3Ø&*Ø#(ð'à-ð'ð *ð'ð -ð	'ð
 $ð'ð !ð'ð 
?ò'ó hó Ió ð'÷R&r.   r®  c                  óŒ  ‡ — e Zd ZeZd	ˆ fd„Ze eej                  d«      «      	 	 	 	 	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       «       Z
e ee«      	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„«       «       Ze eej                  d«      «       eee¬«      	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       «       «       Zdd„Zdd„Zˆ xZS )ÚTFCLIPModelc                óP   •— t        ‰| �  |g|¢­i |¤Ž t        |d¬«      | _        y r   )rk   rl   ro  r™  r¡  s       €r,   rl   zTFCLIPModel.__init__  s(   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3ä# F°Ô8ˆ�	r.   r¢  c                óH   — | j                   j                  ||||||¬«      }|S )a˜  
        Returns:
            text_features (`tf.Tensor` of shape `(batch_size, output_dim`): The text embeddings obtained by applying
            the projection layer to the pooled output of [`TFCLIPTextModel`].

        Examples:

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

        >>> model = TFCLIPModel.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="tf")
        >>> text_features = model.get_text_features(**inputs)
        ```)r·   rß   r¸   rá   r  r  )r™  r†  )	rP   r·   rß   r¸   rá   r  r  rÚ   r…  s	            r,   r†  zTFCLIPModel.get_text_features  s7   € ð: Ÿ	™	×3Ñ3ØØ)Ø%Ø/Ø!5Ø#ð 4ó 
ˆð Ðr.   c                óD   — | j                   j                  ||||¬«      }|S )aB  
        Returns:
            image_features (`tf.Tensor` of shape `(batch_size, output_dim`): The image embeddings obtained by applying
            the projection layer to the pooled output of [`TFCLIPVisionModel`].

        Examples:

        ```python
        >>> from PIL import Image
        >>> import requests
        >>> from transformers import AutoProcessor, TFCLIPModel

        >>> model = TFCLIPModel.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 = Image.open(requests.get(url, stream=True).raw)

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

        >>> image_features = model.get_image_features(**inputs)
        ```)r–   rá   r  r  )r™  rŠ  )rP   r–   rá   r  r  rÚ   r‰  s          r,   rŠ  zTFCLIPModel.get_image_featuresE  s2   € ðB Ÿ™×5Ñ5Ø%Ø/Ø!5Ø#ð	 6ó 
ˆð Ðr.   r£  c
           
     ó8   — | j                  ||||||||¬«      }
|
S )a¹  
        Returns:

        Examples:

        ```python
        >>> import tensorflow as tf
        >>> from PIL import Image
        >>> import requests
        >>> from transformers import AutoProcessor, TFCLIPModel

        >>> model = TFCLIPModel.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 = Image.open(requests.get(url, stream=True).raw)

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

        >>> outputs = model(**inputs)
        >>> logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
        >>> probs = tf.nn.softmax(logits_per_image, axis=1)  # we can take the softmax to get the label probabilities
        ```)r·   r–   rß   r¸   r‘  rá   r  r  r¦  )rP   r·   r–   rß   r¸   r‘  rá   r  r  rÚ   rí   s              r,   rœ   zTFCLIPModel.callo  s7   € ðR —)‘)ØØ%Ø)Ø%Ø#Ø/Ø!5Ø#ð ó 	
ˆð ˆr.   c                ó   — |S rž   r[   )rP   r’  s     r,   Úserving_outputzTFCLIPModel.serving_output¥  s	   € ð ˆr.   c                óú   — | j                   ry d| _         t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   y xY wr¨  r©  rï   s     r,   r‡   zTFCLIPModel.build«  rª  rT  rð   rV  r“  rm  r”  r•  r–  )r’  rA   rU   rA   rž   )rV   rW   rX   r   rZ  rl   r   r   r«  r¬  r†  r³  rŠ  ÚCLIP_INPUTS_DOCSTRINGr   rA   rœ   r»  r‡   r¢   r£   s   @r,   rµ  rµ    sÚ  ø„ à€Lõ9ð
 Ù*Ð+E×+LÑ+LÐMjÓ+kÓlð .2Ø8<Ø6:Ø,0Ø/3Ø&*Øð$à*ð$ð 6ð$ð 4ð	$ð
 *ð$ð -ð$ð $ð$ð ð$ð 
ò$ó mó ð$ðL Ù*Ð+GÓHð 15Ø,0Ø/3Ø&*Øð&à-ð&ð *ð&ð -ð	&ð
 $ð&ð ð&ð 
ò&ó Ió ð&ðP Ù*Ð+@×+GÑ+GÐHeÓ+fÓgÙ¨<ÀjÔQð .2Ø04Ø8<Ø6:Ø&*Ø,0Ø/3Ø&*Øð1à*ð1ð .ð1ð 6ð	1ð
 4ð1ð $ð1ð *ð1ð -ð1ð $ð1ð ð1ð 
/ò1ó Ró hó ð1óf÷&r.   rµ  )rµ  r˜  rž  r®  rž   )r'   r    r(   zOptional[int])r8   r    rU   r    )r<   r    rU   r    )HrY   Ú
__future__r   r3   Údataclassesr   Útypingr   r   r   r   ÚnumpyÚnpÚ
tensorflowr"   Úactivations_tfr
   Úmodeling_tf_outputsr   r   Úmodeling_tf_utilsr   r   r   r   r   r   Útf_utilsr   r   r   Úutilsr   r   r   r   r   Úconfiguration_clipr   r   r   Ú
get_loggerrV   ÚloggerÚ_CHECKPOINT_FOR_DOCr&   r-   r9   r?   rA   rt   ÚLayerr]   r¥   r¾   rö   r  r  r%  rF  r\  rd  ro  r˜  ÚCLIP_START_DOCSTRINGr«  r³  r½  rž  r®  rµ  Ú__all__r[   r.   r,   ú<module>rÐ     sP  ðñ å "ã Ý !ß .Ó .ã Û å /ß R÷÷ ÷ SÑ R÷õ ÷ MÑ Lð 
ˆ×	Ñ	˜HÓ	%€à4Ð ð €ô
6óó-ð ô"
�;ó "
ó ð"
ôJG˜UŸ\™\×/Ñ/ô GôT7 ˜5Ÿ<™<×-Ñ-ô 7 ôtqB�e—l‘l×(Ñ(ô qBôh!L�—‘×"Ñ"ô !LôHBE˜Ÿ™×+Ñ+ô BEôJ=&�E—L‘L×&Ñ&ô =&ô@qJ˜EŸL™L×.Ñ.ô qJðh ô4,˜%Ÿ,™,×,Ñ,ó 4,ó ð4,ôn<B˜eŸl™l×0Ñ0ô <Bð~ ô'.˜EŸL™L×.Ñ.ó '.ó ð'.ðT ôH
�e—l‘l×(Ñ(ó H
ó ðH
ôV	;Ð-ô 	;ð(Ð ðT#Ð ðJ Ð ð((Ð ôV9&Ð+ô 9&ôx;&Ð-ô ;&ñ| Ð*Ó+ô\&Ð'ó \&ó ,ð\&ò~ [�r.   