Ë
    ÛÓ^j «  ã                   óB  — d Z ddl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mZ ddlmZmZ ddlmZ ddlmZ ddlm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z,  e#jZ                  e.«      Z/ e"d¬«      e G d„ de «      «       «       Z0 e"d¬«      e G d„ de «      «       «       Z1e"e G d„ de «      «       «       Z2dejf                  dejf                  fd „Z4d!ejf                  dejf                  fd"„Z5d#e,d$e6fd%„Z7d^d&e6e8z  d'e9fd(„Z: G d)„ d*e	jv                  «      Z< G d+„ d,e	jz                  «      Z> G d-„ d.e	jv                  «      Z? G d/„ d0e	jv                  «      Z@ G d1„ d2e	jv                  «      ZA G d3„ d4e	jv                  «      ZB G d5„ d6e	jv                  «      ZC G d7„ d8e	jv                  «      ZD G d9„ d:e	jv                  «      ZE	 d_d;e	jv                  d<ejf                  d=ejf                  d>ejf                  d?ejf                  dz  d@eFdAeFfdB„ZG G dC„ dDe	jv                  «      ZH G dE„ dFe	jv                  «      ZI G dG„ dHe	jv                  «      ZJ G dI„ dJe	jv                  «      ZK G dK„ dLe	jv                  «      ZL G dM„ dNe«      ZM G dO„ dPe	jv                  «      ZN G dQ„ dRe	jv                  «      ZOe" G dS„ dTe«      «       ZP e"dU¬«       G dV„ dWeP«      «       ZQ e"dX¬«       G dY„ dZeP«      «       ZRe" G d[„ d\eP«      «       ZSg d]¢ZTy)`zPyTorch ALIGN model.é    N)ÚCallable)Ú	dataclass)ÚAny)Únné   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithNoAttentionÚBaseModelOutputWithPoolingÚ(BaseModelOutputWithPoolingAndNoAttention)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚModelOutputÚTransformersKwargsÚauto_docstringÚlogging)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚAlignConfigÚAlignTextConfigÚAlignVisionConfigz}
    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z  ed<   y)ÚAlignVisionModelOutputzø
    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)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   ÚtorchÚFloatTensorÚ__annotations__r#   r$   Útuple© ó    ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/align/modeling_align.pyr!   r!   .   sN   … ñð
 .2€L�%×#Ñ# dÑ*Ó1Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ô9r.   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z  ed<   dZe
ej                     dz  ed<   y)ÚAlignTextModelOutputzö
    text_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim)` *optional* returned when model is initialized with `with_projection=True`):
        The text embeddings obtained by applying the projection layer to the pooler_output.
    NÚtext_embedsr#   r$   Ú
attentions)r%   r&   r'   r(   r2   r)   r*   r+   r#   r$   r,   r3   r-   r.   r/   r1   r1   ?   sh   … ñð
 -1€K�×"Ñ" TÑ)Ó0Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ô6r.   r1   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y)ÚAlignOutputar  
    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 [`AlignTextModel`].
    image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
        The output of [`AlignVisionModel`].
    text_model_output (`BaseModelOutputWithPooling`):
        The output of the [`AlignTextModel`].
    vision_model_output (`BaseModelOutputWithPoolingAndNoAttention`):
        The output of the [`AlignVisionModel`].
    NÚlossÚlogits_per_imageÚlogits_per_textr2   r"   Útext_model_outputÚvision_model_outputÚreturnc                 óH   ‡ — t        ˆ fd„‰ j                  «       D «       «      S )Nc              3   ód   •K  — | ]'  }|d vr‰|   nt        ‰|«      j                  «       –— Œ) y­w))r9   r:   N)ÚgetattrÚto_tuple)Ú.0ÚkÚselfs     €r/   ú	<genexpr>z'AlignOutput.to_tuple.<locals>.<genexpr>p   s=   øè ø€ ò 
àð Ð LÑLˆD�ŠGÔRYÐZ^Ð`aÓRb×RkÑRkÓRmÓmñ
ùs   ƒ-0)r,   Úkeys©rB   s   `r/   r?   zAlignOutput.to_tupleo   s#   ø€ Üó 
à—Y‘Y“[ô
ó 
ð 	
r.   )r%   r&   r'   r(   r6   r)   r*   r+   r7   r8   r2   r"   r9   r   r:   r   r,   r   r?   r-   r.   r/   r5   r5   Q   s›   … ñð& &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø15Ð�e×'Ñ'¨$Ñ.Ó5Ø04€O�U×&Ñ&¨Ñ-Ó4Ø,0€K�×"Ñ" TÑ)Ó0Ø-1€L�%×#Ñ# dÑ*Ó1Ø48ÐÐ1Ó8ØDHÐÐAÓHð
˜% ™*ô 
r.   r5   Úlogitsr;   c                 ó–   — t         j                  j                  | t        j                  t        | «      | j                  ¬«      d¬«      S )N©Údevicegš™™™™™¹?)Úlabel_smoothing)r   Ú
functionalÚcross_entropyr)   ÚarangeÚlenrI   )rF   s    r/   Úcontrastive_lossrO   x   s5   € Ü�=‰=×&Ñ& v¬u¯|©|¼CÀ»KÐPV×P]ÑP]Ô/^ÐpsÐ&ÓtÐtr.   Ú
similarityc                 óZ   — t        | «      }t        | j                  «       «      }||z   dz  S )Ng       @)rO   Út)rP   Úcaption_lossÚ
image_losss      r/   Ú
align_lossrU   |   s,   € Ü# JÓ/€LÜ! *§,¡,£.Ó1€JØ˜:Ñ%¨Ñ,Ð,r.   ÚconfigÚnum_channelsc                 óª   — | j                   }|| j                  z  }t        |t        ||dz  z   «      |z  |z  «      }|d|z  k  r||z  }t        |«      S )z<
    Round number of filters based on depth multiplier.
    é   gÍÌÌÌÌÌì?)Údepth_divisorÚwidth_coefficientÚmaxÚint)rV   rW   ÚdivisorÚnew_dims       r/   Úround_filtersr`   ƒ   sf   € ð ×"Ñ"€GØ�F×,Ñ,Ñ,€LÜ�'œ3˜|¨g¸©kÑ9Ó:¸gÑEÈÑOÓP€Gð ��|Ñ#Ò#Ø�7Ñˆäˆw‹<Ðr.   Úkernel_sizeÚadjustc                 ó¢   — t        | t        «      r| | f} | d   dz  | d   dz  f}|r|d   dz
  |d   |d   dz
  |d   fS |d   |d   |d   |d   fS )aJ  
    Utility function to get the tuple padding value for the depthwise convolution.

    Args:
        kernel_size (`int` or `tuple`):
            Kernel size of the convolution layers.
        adjust (`bool`, *optional*, defaults to `True`):
            Adjusts padding value to apply to right and bottom sides of the input.
    r   rY   r   )Ú
isinstancer]   )ra   rb   Úcorrects      r/   Úcorrect_padrf   “   s}   € ô �+œsÔ#Ø" KÐ0ˆà˜1‰~ Ñ" K°¡N°aÑ$7Ð8€GÙØ˜‘
˜Q‘ ¨¡
¨G°A©J¸©N¸GÀA¹JÐGÐGà˜‘
˜G A™J¨°©
°G¸A±JÐ?Ð?r.   c                   ó`   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚAlignVisionEmbeddingszL
    A module that corresponds to the stem module of the original work.
    rV   c                 óˆ  •— t         ‰| �  «        t        |d«      | _        t	        j
                  d¬«      | _        t	        j                  |j                  | j                  dddd¬«      | _	        t	        j                  | j                  |j                  |j                  ¬	«      | _        t        |j                     | _        y )
Né    )r   r   r   r   ©Úpaddingr   rY   ÚvalidF©ra   Ústriderl   Úbias)ÚepsÚmomentum)ÚsuperÚ__init__r`   Úout_dimr   Ú	ZeroPad2drl   ÚConv2drW   ÚconvolutionÚBatchNorm2dÚbatch_norm_epsÚbatch_norm_momentumÚ	batchnormr	   Ú
hidden_actÚ
activation©rB   rV   Ú	__class__s     €r/   rt   zAlignVisionEmbeddings.__init__­   s�   ø€ Ü‰ÑÔä$ V¨RÓ0ˆŒÜ—|‘|¨LÔ9ˆŒÜŸ9™9Ø×Ñ §¡¸1ÀQÐPWÐ^cô
ˆÔô Ÿ™¨¯©¸&×:OÑ:OÐZ`×ZtÑZtÔuˆŒÜ  ×!2Ñ!2Ñ3ˆ�r.   Úpixel_valuesr;   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S ©N)rl   rx   r|   r~   )rB   r�   Úfeaturess      r/   ÚforwardzAlignVisionEmbeddings.forward¸   sA   € Ø—<‘< Ó-ˆØ×#Ñ# HÓ-ˆØ—>‘> (Ó+ˆØ—?‘? 8Ó,ˆàˆr.   )
r%   r&   r'   r(   r   rt   r)   ÚTensorr…   Ú__classcell__©r€   s   @r/   rh   rh   ¨   s0   ø„ ñð	4Ð0õ 	4ð E§L¡Lð °U·\±\÷ r.   rh   c                   ó.   ‡ — e Zd Z	 	 	 	 	 	 	 dˆ fd„	Zˆ xZS )ÚAlignVisionDepthwiseConv2dc	                 ó@   •— ||z  }	t         ‰
| �  ||	|||||||¬«	       y )N)	Úin_channelsÚout_channelsra   ro   rl   ÚdilationÚgroupsrp   Úpadding_mode)rs   rt   )rB   rŒ   Údepth_multiplierra   ro   rl   rŽ   rp   r�   r�   r€   s             €r/   rt   z#AlignVisionDepthwiseConv2d.__init__Ã   s=   ø€ ð #Ð%5Ñ5ˆÜ‰ÑØ#Ø%Ø#ØØØØØØ%ð 	õ 
	
r.   )r   r   r   r   r   TÚzeros)r%   r&   r'   rt   r‡   rˆ   s   @r/   rŠ   rŠ   Â   s$   ø„ ð ØØØØØØ÷
ñ 
r.   rŠ   c                   ól   ‡ — e Zd ZdZdedededefˆ fd„Zdej                  dej                  fd	„Z
ˆ xZS )
ÚAlignVisionExpansionLayerz_
    This corresponds to the expansion phase of each block in the original implementation.
    rV   Úin_dimru   ro   c                 óÜ   •— t         ‰| �  «        t        j                  ||ddd¬«      | _        t        j
                  ||j                  ¬«      | _        t        |j                     | _
        y )Nr   ÚsameF©rŒ   r�   ra   rl   rp   )Únum_featuresrq   )rs   rt   r   rw   Úexpand_convry   rz   Ú	expand_bnr	   r}   Ú
expand_act)rB   rV   r•   ru   ro   r€   s        €r/   rt   z"AlignVisionExpansionLayer.__init__â   sZ   ø€ Ü‰ÑÔÜŸ9™9ØØ ØØØô
ˆÔô Ÿ™°WÀ&×BWÑBWÔXˆŒÜ  ×!2Ñ!2Ñ3ˆ�r.   r$   r;   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rƒ   )rš   r›   rœ   ©rB   r$   s     r/   r…   z!AlignVisionExpansionLayer.forwardî   s4   € à×(Ñ(¨Ó7ˆØŸ™ }Ó5ˆØŸ™¨Ó6ˆàÐr.   )r%   r&   r'   r(   r   r]   rt   r)   r*   r†   r…   r‡   rˆ   s   @r/   r”   r”   Ý   sH   ø„ ñð
4Ð0ð 
4¸#ð 
4Èð 
4ÐUXõ 
4ð U×%6Ñ%6ð ¸5¿<¹<÷ r.   r”   c            
       óp   ‡ — e Zd ZdZdededededef
ˆ fd„Zdej                  d	ej                  fd
„Zˆ xZS )ÚAlignVisionDepthwiseLayerzk
    This corresponds to the depthwise convolution phase of each block in the original implementation.
    rV   r•   ro   ra   Úadjust_paddingc                 ób  •— t         ‰| �  «        || _        | j                  dk(  rdnd}t        ||¬«      }t	        j
                  |¬«      | _        t        ||||d¬«      | _        t	        j                  ||j                  |j                  ¬«      | _        t        |j                     | _        y )	NrY   rm   r—   )rb   rk   Frn   ©r™   rq   rr   )rs   rt   ro   rf   r   rv   Údepthwise_conv_padrŠ   Údepthwise_convry   rz   r{   Údepthwise_normr	   r}   Údepthwise_act)	rB   rV   r•   ro   ra   r¡   Úconv_padrl   r€   s	           €r/   rt   z"AlignVisionDepthwiseLayer.__init__ý   sš   ø€ ô 	‰ÑÔØˆŒØ"Ÿk™k¨QÒ.‘7°FˆÜ˜k°.ÔAˆä"$§,¡,°wÔ"?ˆÔÜ8Ø °FÀHÐSXô
ˆÔô !Ÿn™nØ V×%:Ñ%:ÀV×E_ÑE_ô
ˆÔô $ F×$5Ñ$5Ñ6ˆÕr.   r$   r;   c                 ó¬   — | j                   dk(  r| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|S )NrY   )ro   r¤   r¥   r¦   r§   rž   s     r/   r…   z!AlignVisionDepthwiseLayer.forward  sT   € à�;‰;˜!ÒØ ×3Ñ3°MÓBˆMà×+Ñ+¨MÓ:ˆØ×+Ñ+¨MÓ:ˆØ×*Ñ*¨=Ó9ˆàÐr.   ©r%   r&   r'   r(   r   r]   Úboolrt   r)   r*   r†   r…   r‡   rˆ   s   @r/   r    r    ø   sZ   ø„ ñð7à!ð7ð ð7ð ð	7ð
 ð7ð õ7ð,	 U×%6Ñ%6ð 	¸5¿<¹<÷ 	r.   r    c            	       ón   ‡ — e Zd ZdZd
dedededefˆ fd„Zdej                  dej                  fd	„Zˆ xZS )ÚAlignVisionSqueezeExciteLayerzl
    This corresponds to the Squeeze and Excitement phase of each block in the original implementation.
    rV   r•   Ú
expand_dimÚexpandc                 óæ  •— t         ‰| �  «        |r|n|| _        t        dt	        ||j
                  z  «      «      | _        t        j                  d¬«      | _	        t        j                  | j                  | j                  dd¬«      | _        t        j                  | j                  | j                  dd¬«      | _        t        |j                     | _        t        j                   «       | _        y )Nr   )Úoutput_sizer—   )rŒ   r�   ra   rl   )rs   rt   Údimr\   r]   Úsqueeze_expansion_ratioÚdim_ser   ÚAdaptiveAvgPool2dÚsqueezerw   Úreducer¯   r	   r}   Ú
act_reduceÚSigmoidÚ
act_expand)rB   rV   r•   r®   r¯   r€   s        €r/   rt   z&AlignVisionSqueezeExciteLayer.__init__%  s´   ø€ Ü‰ÑÔÙ!'‘:¨VˆŒÜ˜!œS ¨&×*HÑ*HÑ!HÓIÓJˆŒä×+Ñ+¸Ô:ˆŒÜ—i‘iØŸ™ØŸ™ØØô	
ˆŒô —i‘iØŸ™ØŸ™ØØô	
ˆŒô ! ×!2Ñ!2Ñ3ˆŒÜŸ*™*›,ˆ�r.   r$   r;   c                 óà   — |}| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }t        j                  ||«      }|S rƒ   )r¶   r·   r¸   r¯   rº   r)   Úmul)rB   r$   Úinputss      r/   r…   z%AlignVisionSqueezeExciteLayer.forward:  sc   € ØˆØŸ™ ]Ó3ˆØŸ™ MÓ2ˆØŸ™¨Ó6ˆàŸ™ MÓ2ˆØŸ™¨Ó6ˆÜŸ	™	 &¨-Ó8ˆàÐr.   )Frª   rˆ   s   @r/   r­   r­      sH   ø„ ññ'Ð0ð '¸#ð 'È3ð 'ÐX\õ 'ð*
 U×%6Ñ%6ð 
¸5¿<¹<÷ 
r.   r­   c                   óŒ   ‡ — e Zd ZdZdedededededefˆ fd„Zd	e	j                  d
e	j                  de	j                  fd„Zˆ xZS )ÚAlignVisionFinalBlockLayerz[
    This corresponds to the final phase of each block in the original implementation.
    rV   r•   ru   ro   Ú	drop_rateÚid_skipc                 ó  •— t         ‰| �  «        |dk(  xr | | _        t        j                  ||ddd¬«      | _        t        j                  ||j                  |j                  ¬«      | _	        t        j                  |¬«      | _        y )Nr   r—   Fr˜   r£   )Úp)rs   rt   Úapply_dropoutr   rw   Úproject_convry   rz   r{   Ú
project_bnÚDropoutÚdropout)rB   rV   r•   ru   ro   rÀ   rÁ   r€   s          €r/   rt   z#AlignVisionFinalBlockLayer.__init__L  sz   ø€ ô 	‰ÑÔØ# q™[Ò8°¨[ˆÔÜŸI™IØØ ØØØô
ˆÔô Ÿ.™.Ø  f×&;Ñ&;Àf×F`ÑF`ô
ˆŒô —z‘z IÔ.ˆ�r.   Ú
embeddingsr$   r;   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  r| j                  |«      }||z   }|S rƒ   )rÅ   rÆ   rÄ   rÈ   )rB   rÉ   r$   s      r/   r…   z"AlignVisionFinalBlockLayer.forward]  sG   € Ø×)Ñ)¨-Ó8ˆØŸ™¨Ó6ˆà×ÒØ ŸL™L¨Ó7ˆMØ)¨JÑ6ˆMàÐr.   ©r%   r&   r'   r(   r   r]   Úfloatr«   rt   r)   r*   r†   r…   r‡   rˆ   s   @r/   r¿   r¿   G  sj   ø„ ñð/Ø'ð/Ø14ð/Ø?Bð/ØLOð/Ø\að/Ølpõ/ð" %×"3Ñ"3ð ÀE×DUÑDUð ÐZ_×ZfÑZf÷ r.   r¿   c                   ó€   ‡ — e Zd ZdZdededededededed	ed
efˆ fd„Zde	j                  de	j                  fd„Zˆ xZS )ÚAlignVisionBlocka�  
    This corresponds to the block module of original the EfficientNet vision encoder implementation.

    Args:
        config ([`AlignVisionConfig`]):
            Model configuration class.
        in_dim (`int`):
            Number of input channels.
        out_dim (`int`):
            Number of output channels.
        stride (`int`):
            Stride size to be used in convolution layers.
        expand_ratio (`int`):
            Expand ratio to set the output dimensions for the expansion and squeeze-excite layers.
        kernel_size (`int`):
            Kernel size for the depthwise convolution layer.
        drop_rate (`float`):
            Dropout rate to be used in the final phase of each block.
        id_skip (`bool`):
            Whether to apply dropout and sum the final hidden states with the input embeddings during the final phase
            of each block. Set to `True` for the first block of each stage.
        adjust_padding (`bool`):
            Whether to apply padding to only right and bottom side of the input kernel before the depthwise convolution
            operation, set to `True` for inputs with odd input sizes.
    rV   r•   ru   ro   Úexpand_ratiora   rÀ   rÁ   r¡   c
                 ól  •— t         ‰| �  «        || _        | j                  dk7  | _        ||z  }
| j                  rt	        |||
|¬«      | _        t        || j                  r|
n||||	¬«      | _        t        |||
| j                  ¬«      | _	        t        || j                  r|
n|||||¬«      | _        y )Nr   )rV   r•   ru   ro   )rV   r•   ro   ra   r¡   )rV   r•   r®   r¯   )rV   r•   ru   ro   rÀ   rÁ   )rs   rt   rÏ   r¯   r”   Ú	expansionr    r¥   r­   Úsqueeze_exciter¿   Ú
projection)rB   rV   r•   ru   ro   rÏ   ra   rÀ   rÁ   r¡   Úexpand_in_dimr€   s              €r/   rt   zAlignVisionBlock.__init__ƒ  sº   ø€ ô 	‰ÑÔØ(ˆÔØ×'Ñ'¨1Ñ,ˆŒØ Ñ-ˆà�;Š;Ü6Ø f°mÈFôˆDŒNô 8ØØ$(§K¢K‘=°VØØ#Ø)ô
ˆÔô <Ø &°]È4Ï;É;ô
ˆÔô 5ØØ$(§K¢K‘=°VØØØØô
ˆ�r.   r$   r;   c                 ó²   — |}| j                   dk7  r| j                  |«      }| j                  |«      }| j                  |«      }| j	                  ||«      }|S ©Nr   )rÏ   rÑ   r¥   rÒ   rÓ   )rB   r$   rÉ   s      r/   r…   zAlignVisionBlock.forward¬  s[   € Ø"ˆ
à×Ñ Ò!Ø ŸN™N¨=Ó9ˆMØ×+Ñ+¨MÓ:ˆð ×+Ñ+¨MÓ:ˆØŸ™¨
°MÓBˆØÐr.   rË   rˆ   s   @r/   rÎ   rÎ   h  sƒ   ø„ ñð4'
à!ð'
ð ð'
ð ð	'
ð
 ð'
ð ð'
ð ð'
ð ð'
ð ð'
ð õ'
ðR
 U×%6Ñ%6ð 
¸5¿<¹<÷ 
r.   rÎ   c                   óV   ‡ — e Zd ZdZdefˆ fd„Zdej                  dee	   de
fd„Zˆ xZS )ÚAlignVisionEncoderz·
    Forward propagates the embeddings through each vision encoder (EfficientNet) block.

    Args:
        config ([`AlignVisionConfig`]):
            Model configuration class.
    rV   c                 óÚ  •‡ ‡— t         ‰‰ �  «        |j                  ‰ _        ˆ fd„Št        |j                  «      }t        ˆfd„|j                  D «       «      }d}g }t        |«      D ]å  }t        ||j                  |   «      }t        ||j                  |   «      }|j                  |   }	|j                  |   }
|j                  |   }t         ‰|j                  |   «      «      D ]c  }|dk(  }|dkD  rdn|	}	|dkD  r|n|}||j                  v}|j                  |z  |z  }t        ||||	|
||||¬«	      }|j!                  |«       |dz  }Œe Œç t#        j$                  |«      ‰ _        y )Nc                 óZ   •— t        t        j                  ‰j                  | z  «      «      S rƒ   )r]   ÚmathÚceilÚdepth_coefficient)ÚrepeatsrB   s    €r/   Úround_repeatsz2AlignVisionEncoder.__init__.<locals>.round_repeatsÆ  s"   ø€ ä”t—y‘y ×!7Ñ!7¸'Ñ!AÓBÓCÐCr.   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrƒ   r-   )r@   Únrß   s     €r/   rC   z.AlignVisionEncoder.__init__.<locals>.<genexpr>Ë  s   øè ø€ ÒL¨a™ q×)ÑLùs   ƒr   r   )	rV   r•   ru   ro   ra   rÏ   rÀ   rÁ   r¡   )rs   rt   rÝ   rN   rŒ   ÚsumÚnum_block_repeatsÚranger`   r�   ÚstridesÚkernel_sizesÚexpand_ratiosÚdepthwise_paddingÚdrop_connect_raterÎ   Úappendr   Ú
ModuleListÚblocks)rB   rV   Únum_base_blocksÚ
num_blocksÚcurr_block_numrì   Úir•   ru   ro   ra   rÏ   ÚjrÁ   r¡   rÀ   Úblockrß   r€   s   `                @€r/   rt   zAlignVisionEncoder.__init__Â  s  ú€ Ü‰ÑÔØ!'×!9Ñ!9ˆÔô	Dô ˜f×0Ñ0Ó1ˆÜÓL°6×3KÑ3KÔLÓLˆ
àˆØˆÜ�Ó'ò 	$ˆAÜ" 6¨6×+=Ñ+=¸aÑ+@ÓAˆFÜ# F¨F×,?Ñ,?ÀÑ,BÓCˆGØ—^‘^ AÑ&ˆFØ ×-Ñ-¨aÑ0ˆKØ!×/Ñ/°Ñ2ˆLä™=¨×)AÑ)AÀ!Ñ)DÓEÓFò $�Ø˜q™&�Ø !še™¨�Ø$%¨¢E™¨v�Ø!/°v×7OÑ7OÐ!O�Ø"×4Ñ4°~ÑEÈ
ÑR�	ä(Ø!Ø!Ø#Ø!Ø +Ø!-Ø'Ø#Ø#1ô
�ð —‘˜eÔ$Ø !Ñ#‘ñ'$ð	$ô8 —m‘m FÓ+ˆ�r.   r$   Úkwargsr;   c                 óL   — | j                   D ]
  } ||«      }Œ t        |¬«      S ©N)r#   )rì   r   )rB   r$   ró   rò   s       r/   r…   zAlignVisionEncoder.forwardí  s3   € ð
 —[‘[ò 	1ˆEÙ! -Ó0‰Mð	1ô .Ø+ô
ð 	
r.   )r%   r&   r'   r(   r   rt   r)   r*   r   r   r   r…   r‡   rˆ   s   @r/   rØ   rØ   ¹  sC   ø„ ñð),Ð0õ ),ðV

à×(Ñ(ð

ð Ð+Ñ,ð

ð 
(÷	

r.   rØ   c                   óÄ   ‡ — e Zd ZdZˆ fd„Z	 	 	 	 d
dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  f
d	„Z	ˆ xZ
S )ÚAlignTextEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        | j#                  dt%        j&                  |j                  «      j)                  d«      d¬«       | j#                  dt%        j*                  | j,                  j/                  «       t$        j0                  ¬«      d¬«       y )	N)Úpadding_idx©rq   Úposition_ids©r   éÿÿÿÿF)Ú
persistentÚtoken_type_ids)Údtype)rs   rt   r   Ú	EmbeddingÚ
vocab_sizeÚhidden_sizeÚpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚ	LayerNormÚlayer_norm_epsrÇ   Úhidden_dropout_probrÈ   Úregister_bufferr)   rM   r¯   r’   rû   ÚsizeÚlongr   s     €r/   rt   zAlignTextEmbeddings.__init__ý  s  ø€ Ü‰ÑÔÜ!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¡<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ Ü%'§\¡\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"äŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒà×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	ô 	
ð 	×ÑØœeŸk™k¨$×*;Ñ*;×*@Ñ*@Ó*BÌ%Ï*É*ÔUÐbgð 	õ 	
r.   NÚ	input_idsrÿ   rû   Úinputs_embedsr;   c                 ó6  — |�|j                  «       }n|j                  «       d d }|d   }|€| j                  d d …d |…f   }|€st        | d«      r-| j                  d d …d |…f   }|j	                  |d   |«      }|}n:t        j                  |t
        j                  | j                  j                  ¬«      }|€| j                  |«      }| j                  |«      }	||	z   }
| j                  |«      }|
|z  }
| j                  |
«      }
| j                  |
«      }
|
S )Nrý   r   rÿ   r   )r   rI   )r  rû   Úhasattrrÿ   r¯   r)   r’   r  rI   r  r	  r  r
  rÈ   )rB   r  rÿ   rû   r  Úinput_shapeÚ
seq_lengthÚbuffered_token_type_idsÚ buffered_token_type_ids_expandedr	  rÉ   r  s               r/   r…   zAlignTextEmbeddings.forward  s1  € ð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
àÐØ×,Ñ,ªQ°°°¨^Ñ<ˆLð
 Ð!Ü�tÐ-Ô.Ø*.×*=Ñ*=ºaÀÀ*À¸nÑ*MÐ'Ø3J×3QÑ3QÐR]Ð^_ÑR`ÐblÓ3mÐ0Ø!A‘ä!&§¡¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÔ!l�àÐ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐØ"Ð%:Ñ:ˆ
à"×6Ñ6°|ÓDÐØÐ)Ñ)ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr.   )NNNN)r%   r&   r'   r(   rt   r)   Ú
LongTensorr*   r†   r…   r‡   rˆ   s   @r/   r÷   r÷   ú  s~   ø„ ÙQô
ð$ .2Ø26Ø04Ø26ñ&à×#Ñ# dÑ*ð&ð ×(Ñ(¨4Ñ/ð&ð ×&Ñ&¨Ñ-ð	&ð
 ×(Ñ(¨4Ñ/ð&ð 
�‰÷&r.   r÷   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingrÈ   c                 óÀ  — t        j                  ||j                  dd«      «      |z  }|�||z   }t        j                  j                  |dt         j                  ¬«      j                  |j                  «      }t        j                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )NrY   r   rý   )r²   r   )rÃ   Útrainingr   )r)   ÚmatmulÚ	transposer   rK   ÚsoftmaxÚfloat32Útor   rÈ   r   Ú
contiguous)
r  r  r  r  r  r  rÈ   ró   Úattn_weightsÚattn_outputs
             r/   Úeager_attention_forwardr)  6  sº   € ô —<‘<  s§}¡}°Q¸Ó':Ó;¸gÑE€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KØ˜Ð$Ð$r.   c                   ó¦   ‡ — e Zd Zˆ 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 )	ÚAlignTextSelfAttentionc                 ó$  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |d«      s&t        d|j                  › d|j                  › d�«      ‚|| _        |j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _	        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                   «      | _        |j                   | _        | j                  dz  | _        y )Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú)g      à¿)rs   rt   r  Únum_attention_headsr  Ú
ValueErrorrV   r]   Úattention_head_sizeÚall_head_sizer   ÚLinearr  r  r  rÇ   Úattention_probs_dropout_probrÈ   Úattention_dropoutr  r   s     €r/   rt   zAlignTextSelfAttention.__init__M  sC  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5°Qð8óð ð
 ˆŒØ#)×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ä—z‘z &×"EÑ"EÓFˆŒØ!'×!DÑ!DˆÔØ×/Ñ/°Ñ5ˆ�r.   Nr$   r  ró   r;   c                 óx  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }t        j                  | j                  j                  t        «      }	 |	| ||||f| j                  sdn| j                  | j                  dœ|¤Ž\  }
} |
j                  g |¢d‘­Ž j!                  «       }
|
|fS )Nrý   r   rY   ç        )rÈ   r  )Úshaper1  r  Úviewr"  r  r  r   Úget_interfacerV   Ú_attn_implementationr)  r   r5  r  Úreshaper&  )rB   r$   r  ró   r  Úhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacer(  r'  s               r/   r…   zAlignTextSelfAttention.forwardb  s>  € ð $×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆà—z‘z -Ó0×5Ñ5°lÓC×MÑMÈaÐQRÓSˆØ—X‘X˜mÓ,×1Ñ1°,Ó?×IÑIÈ!ÈQÓOˆ
Ø—z‘z -Ó0×5Ñ5°lÓC×MÑMÈaÐQRÓSˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ˜LÐ(Ð(r.   rƒ   )r%   r&   r'   rt   r)   r†   r*   r   r   r,   r…   r‡   rˆ   s   @r/   r+  r+  L  sd   ø„ ô6ð0 48ñ)à—|‘|ð)ð ×)Ñ)¨DÑ0ð)ð Ð+Ñ,ð	)ð
 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷)r.   r+  c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚAlignTextSelfOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _
        y ©Nrú   )rs   rt   r   r3  r  Údenser
  r  rÇ   r  rÈ   r   s     €r/   rt   zAlignTextSelfOutput.__init__„  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r.   r$   Úinput_tensorr;   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rƒ   ©rF  rÈ   r
  ©rB   r$   rG  s      r/   r…   zAlignTextSelfOutput.forwardŠ  ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐr.   ©r%   r&   r'   rt   r)   r†   r…   r‡   rˆ   s   @r/   rC  rC  ƒ  ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r.   rC  c            	       ó‚   ‡ — e Zd Zˆ fd„Z	 ddej
                  dej                  dz  dee   dej
                  fd„Z	ˆ xZ
S )	ÚAlignTextAttentionc                 ób   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        y rƒ   )rs   rt   r+  rB   rC  Úoutputr   s     €r/   rt   zAlignTextAttention.__init__’  s&   ø€ Ü‰ÑÔÜ*¨6Ó2ˆŒ	Ü)¨&Ó1ˆ�r.   Nr$   r  ró   r;   c                 ó^   — |} | j                   |fd|i|¤Ž\  }}| j                  ||«      }|S ©Nr  )rB   rQ  )rB   r$   r  ró   ÚresidualÚ_s         r/   r…   zAlignTextAttention.forward—  sK   € ð !ˆØ$˜4Ÿ9™9Øñ
à)ð
ð ñ
Ñˆ�qð
 Ÿ™ M°8Ó<ˆØÐr.   rƒ   )r%   r&   r'   rt   r)   r†   r*   r   r   r…   r‡   rˆ   s   @r/   rO  rO  ‘  sQ   ø„ ô2ð 48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
�‰÷r.   rO  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚAlignTextIntermediatec                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y rƒ   )rs   rt   r   r3  r  Úintermediate_sizerF  rd   r}   Ústrr	   Úintermediate_act_fnr   s     €r/   rt   zAlignTextIntermediate.__init__©  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r.   r$   r;   c                 óJ   — | j                  |«      }| j                  |«      }|S rƒ   )rF  r[  rž   s     r/   r…   zAlignTextIntermediate.forward±  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr.   rL  rˆ   s   @r/   rW  rW  ¨  s#   ø„ ô9ð U§\¡\ð °e·l±l÷ r.   rW  c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚAlignTextOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y rE  )rs   rt   r   r3  rY  r  rF  r
  r  rÇ   r  rÈ   r   s     €r/   rt   zAlignTextOutput.__init__¹  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r.   r$   rG  r;   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rƒ   rI  rJ  s      r/   r…   zAlignTextOutput.forward¿  rK  r.   rL  rˆ   s   @r/   r^  r^  ¸  rM  r.   r^  c            	       óˆ   ‡ — e Zd Zˆ fd„Z	 d	dej
                  dej                  dz  dee   dej
                  fd„Z	d„ Z
ˆ xZS )
ÚAlignTextLayerc                 ó²   •— t         ‰| �  «        |j                  | _        d| _        t	        |«      | _        t        |«      | _        t        |«      | _	        y rÖ   )
rs   rt   Úchunk_size_feed_forwardÚseq_len_dimrO  Ú	attentionrW  Úintermediater^  rQ  r   s     €r/   rt   zAlignTextLayer.__init__Ç  sI   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ+¨FÓ3ˆŒÜ1°&Ó9ˆÔÜ% fÓ-ˆ�r.   Nr$   r  ró   r;   c                 óˆ   —  | j                   |fd|i|¤Ž}t        | j                  | j                  | j                  |«      }|S rS  )rf  r   Úfeed_forward_chunkrd  re  )rB   r$   r  ró   s       r/   r…   zAlignTextLayer.forwardÏ  sY   € ð '˜Ÿ™Øñ
à)ð
ð ñ
ˆô 2Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUbó
ˆð Ðr.   c                 óL   — | j                  |«      }| j                  ||«      }|S rƒ   )rg  rQ  )rB   Úattention_outputÚintermediate_outputÚlayer_outputs       r/   ri  z!AlignTextLayer.feed_forward_chunká  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐr.   rƒ   )r%   r&   r'   rt   r)   r†   r*   r   r   r…   ri  r‡   rˆ   s   @r/   rb  rb  Æ  sV   ø„ ô.ð 48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
�‰óö$r.   rb  c            	       ón   ‡ — e Zd Zˆ fd„Z	 ddej
                  dej                  dz  dee   de	fd„Z
ˆ xZS )	ÚAlignTextEncoderc                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w )NF)
rs   rt   rV   r   rë   rä   Únum_hidden_layersrb  ÚlayerÚgradient_checkpointing)rB   rV   rð   r€   s      €r/   rt   zAlignTextEncoder.__init__è  sN   ø€ Ü‰ÑÔØˆŒÜ—]‘]ÄEÈ&×JbÑJbÓDcÖ#d¸q¤N°6Õ$:Ò#dÓeˆŒ
Ø&+ˆÕ#ùò $es   ½A#Nr$   r  ró   r;   c                 óP   — | j                   D ]  } |||fi |¤Ž}Œ t        |¬«      S rõ   )rr  r   )rB   r$   r  ró   Úlayer_modules        r/   r…   zAlignTextEncoder.forwardî  sC   € ð !ŸJ™Jò 	ˆLÙ(ØØñð ñ‰Mð	ô Ø+ô
ð 	
r.   rƒ   )r%   r&   r'   rt   r)   r†   r*   r   r   r   r…   r‡   rˆ   s   @r/   ro  ro  ç  sM   ø„ ô,ð 48ñ
à—|‘|ð
ð ×)Ñ)¨DÑ0ð
ð Ð+Ñ,ð	
ð
 
÷
r.   ro  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚAlignTextPoolerc                 ó²   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  «       | _        y rƒ   )rs   rt   r   r3  r  rF  ÚTanhr~   r   s     €r/   rt   zAlignTextPooler.__init__  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�r.   r$   r;   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S )Nr   )rF  r~   )rB   r$   Úfirst_token_tensorÚpooled_outputs       r/   r…   zAlignTextPooler.forward  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr.   rL  rˆ   s   @r/   rw  rw    s#   ø„ ô$ð
 U§\¡\ð °e·l±l÷ r.   rw  c                   óx   ‡ — e Zd ZU eed<   dZdZdZ ej                  «       de
j                  fˆ fd„«       Zˆ xZS )ÚAlignPreTrainedModelrV   Úalign)ÚimageÚtextTr  c                 ód  •— t         ‰| �  |«       t        |t        «      r‡t	        j
                  |j                  j                  «       t	        j                  |j                  j                  «       t	        j                  |j                  | j                  j                  «       yt        |t        «      ryt	        j                  |j                   t#        j$                  |j                   j&                  d   «      j)                  d«      «       t	        j                  |j*                  «       yy)zInitialize the weightsrý   rü   N)rs   Ú_init_weightsrd   Ú
AlignModelÚinitÚxavier_uniform_Útext_projectionÚweightÚzeros_rp   Ú	constant_ÚtemperaturerV   Útemperature_init_valuer÷   Úcopy_rû   r)   rM   r8  r¯   rÿ   )rB   r  r€   s     €r/   rƒ  z"AlignPreTrainedModel._init_weights  sÉ   ø€ ô 	‰Ñ˜fÔ%Ü�fœjÔ)Ü× Ñ  ×!7Ñ!7×!>Ñ!>Ô?Ü�K‰K˜×.Ñ.×3Ñ3Ô4Ü�N‰N˜6×-Ñ-¨t¯{©{×/QÑ/QÕRÜ˜Ô 3Ô4Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÔhÜ�K‰K˜×-Ñ-Õ.ð 5r.   )r%   r&   r'   r   r+   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingr)   Úno_gradr   ÚModulerƒ  r‡   rˆ   s   @r/   r~  r~    s@   ø… àÓØÐØ(ÐØ&*Ð#à€U‡]�]ƒ_ð	/ B§I¡Iô 	/ó ô	/r.   r~  zJ
    The text model from ALIGN without any head or projection on top.
    c                   ó2  ‡ — e Zd ZU eed<   dZdgZeedœZ	ddede
fˆ fd„Zd„ Zd„ Zeee	 	 	 	 	 dd
ej$                  d	z  dej$                  d	z  dej$                  d	z  dej$                  d	z  dej$                  d	z  dee   deez  fd„«       «       «       Zˆ xZS )ÚAlignTextModelrV   )r�  r÷   )r$   r3   Úadd_pooling_layerc                 óº   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        |rt        |«      nd| _        | j                  «        y)zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        N)
rs   rt   rV   r÷   rÉ   ro  Úencoderrw  ÚpoolerÚ	post_init)rB   rV   r•  r€   s      €r/   rt   zAlignTextModel.__init__2  sM   ø€ ô
 	‰Ñ˜Ô ØˆŒä-¨fÓ5ˆŒÜ'¨Ó/ˆŒá1B”o fÔ-ÈˆŒð 	�‰Õr.   c                 ó.   — | j                   j                  S rƒ   ©rÉ   r  rE   s    r/   Úget_input_embeddingsz#AlignTextModel.get_input_embeddingsB  s   € Ø�‰×.Ñ.Ð.r.   c                 ó&   — || j                   _        y rƒ   r›  )rB   r  s     r/   Úset_input_embeddingsz#AlignTextModel.set_input_embeddingsE  s   € Ø*/ˆ�‰Õ'r.   Nr  r  rÿ   rû   r  ró   r;   c                 ó  — |�|�t        d«      ‚|�#| j                  ||«       |j                  «       }n!|�|j                  «       dd }nt        d«      ‚|\  }}	|�|j                  n|j                  }
|€t	        j
                  ||	f|
¬«      }| j                  ||||¬«      }t        | j                  ||¬«      } | j                  |fd|i|¤Ž}|d	   }| j                  �| j                  |«      nd}t        ||¬
«      S )a-  
        Examples:

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

        >>> model = AlignTextModel.from_pretrained("kakaobrain/align-base")
        >>> tokenizer = AutoTokenizer.from_pretrained("kakaobrain/align-base")

        >>> 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
        ```NzDYou cannot specify both input_ids and inputs_embeds at the same timerý   z5You have to specify either input_ids or inputs_embedsrH   )r  rû   rÿ   r  )rV   r  r  r  r   ©r#   Úpooler_output)r0  Ú%warn_if_padding_and_no_attention_maskr  rI   r)   ÚonesrÉ   r
   rV   r—  r˜  r   )rB   r  r  rÿ   rû   r  ró   r  Ú
batch_sizer  rI   Úembedding_outputÚencoder_outputsÚsequence_outputr|  s                  r/   r…   zAlignTextModel.forwardH  s:  € ð6 Ð  ]Ð%>ÜÐcÓdÐdØÐ"Ø×6Ñ6°yÀ.ÔQØ#Ÿ.™.Ó*‰KØÐ&Ø'×,Ñ,Ó.¨s°Ð3‰KäÐTÓUÐUà!,Ñˆ
�JØ%.Ð%:�×!Ò!À×@TÑ@TˆàÐ!Ü"ŸZ™Z¨*°jÐ)AÈ6ÔRˆNàŸ?™?ØØ%Ø)Ø'ð	 +ó 
Ðô 3Ø—;‘;Ø*Ø)ô
ˆð '˜$Ÿ,™,Øñ
à)ð
ð ñ
ˆð
 *¨!Ñ,ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆä)Ø-Ø'ô
ð 	
r.   ©T©NNNNN)r%   r&   r'   r   r+   r�  Ú_no_split_modulesrb  r+  Ú_can_record_outputsr«   rt   rœ  rž  r   r   r   r)   r†   r   r   r,   r   r…   r‡   rˆ   s   @r/   r”  r”  $  s   ø… ð ÓØ ÐØ.Ð/Ðà'Ø,ñÐñ
˜ð À4õ ò /ò0ð  ØØð *.Ø.2Ø.2Ø,0Ø-1ñ@
à—<‘< $Ñ&ð@
ð Ÿ™ tÑ+ð@
ð Ÿ™ tÑ+ð	@
ð
 —l‘l TÑ)ð@
ð —|‘| dÑ*ð@
ð Ð+Ñ,ð@
ð 
Ð+Ñ	+ò@
ó ó ó  ô@
r.   r”  zL
    The vision model from ALIGN without any head or projection on top.
    c                   óª   ‡ — e Zd ZU eed<   dZdZdZdZdgZ	de
iZdefˆ fd„Zeee	 ddej"                  d	z  d
ee   deez  fd„«       «       «       Zˆ xZS )ÚAlignVisionModelrV   r�   )r€  Frx   rÎ   r$   c                 óš  •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        |j                  dk(  r't        j                  |j                  d¬«      | _        nN|j                  dk(  r't        j                  |j                  d¬«      | _        nt        d|j                  › �«      ‚| j                  «        y )NÚmeanT)Ú	ceil_moder\   z2config.pooling must be one of ['mean', 'max'] got )rs   rt   rV   rh   rÉ   rØ   r—  Úpooling_typer   Ú	AvgPool2dÚ
hidden_dimr˜  Ú	MaxPool2dr0  Úpoolingr™  r   s     €r/   rt   zAlignVisionModel.__init__ž  s¤   ø€ Ü‰Ñ˜Ô ØˆŒÜ/°Ó7ˆŒÜ)¨&Ó1ˆŒð ×Ñ &Ò(ÜŸ,™, v×'8Ñ'8ÀDÔIˆD�KØ× Ñ  EÒ)ÜŸ,™, v×'8Ñ'8ÀDÔIˆD�KäÐQÐRX×R`ÑR`ÐQaÐbÓcÐcð 	�‰Õr.   Nró   r;   c                 óæ   — |€t        d«      ‚| j                  |«      } | j                  |fi |¤Ž}|d   }| j                  |«      }|j	                  |j
                  dd «      }t        ||¬«      S )a  
        Examples:

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

        >>> model = AlignVisionModel.from_pretrained("kakaobrain/align-base")
        >>> processor = AutoProcessor.from_pretrained("kakaobrain/align-base")

        >>> 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
        ```Nz You have to specify pixel_valuesr   rY   r   )r0  rÉ   r—  r˜  r<  r8  r   )rB   r�   ró   r¥  r¦  r#   r|  s          r/   r…   zAlignVisionModel.forward¯  sŒ   € ð< ÐÜÐ?Ó@Ð@àŸ?™?¨<Ó8ÐØ&˜$Ÿ,™,Øñ
àñ
ˆð ,¨AÑ.ÐØŸ™Ð$5Ó6ˆØ%×-Ñ-¨m×.AÑ.AÀ"À1Ð.EÓFˆä7Ø/Ø'ô
ð 	
r.   rƒ   )r%   r&   r'   r   r+   Úmain_input_namer�  r�  Ú_input_embed_layerrª  rÎ   r«  rt   r   r   r   r)   r*   r   r   r,   r   r…   r‡   rˆ   s   @r/   r­  r­  Ž  s¢   ø… ð ÓØ$€OØ!ÐØ&+Ð#Ø&ÐØ+Ð,ÐàÐ)ðÐðÐ0õ ð"  ØØð 26ñ*
à×'Ñ'¨$Ñ.ð*
ð Ð+Ñ,ð*
ð 
Ð9Ñ	9ò	*
ó ó ó  ô*
r.   r­  c                   óH  ‡ — e Zd ZU eed<   defˆ fd„Zee	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	e
e   d
eez  fd„«       «       Zeedej                  d	e
e   d
eez  fd„«       «       Zee	 	 	 	 	 	 	 ddej"                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dedz  d	e
e   d
eez  fd„«       «       Zˆ xZS )r„  rV   c                 óÈ  •— t         ‰| �  |«       t        |j                  t        «      s"t        dt        |j                  «      › d�«      ‚t        |j                  t        «      s"t        dt        |j                  «      › d�«      ‚|j                  }|j                  }|j                  | _	        |j                  | _        t        |«      | _        t        |«      | _        t!        j"                  | j                  | j                  «      | _        t!        j&                  t)        j*                  | j,                  j.                  «      «      | _        | j3                  «        y )NzLconfig.text_config is expected to be of type AlignTextConfig but is of type ú.zPconfig.vision_config is expected to be of type AlignVisionConfig but is of type )rs   rt   rd   Útext_configr   Ú	TypeErrorÚtypeÚvision_configr   Úprojection_dimr  Útext_embed_dimr”  Ú
text_modelr­  Úvision_modelr   r3  r‡  Ú	Parameterr)   ÚtensorrV   rŒ  r‹  r™  )rB   rV   r¼  r¿  r€   s       €r/   rt   zAlignModel.__init__ã  s#  ø€ Ü‰Ñ˜Ô ä˜&×,Ñ,¬oÔ>ÜðÜ˜×+Ñ+Ó,Ð-¨Qð0óð ô
 ˜&×.Ñ.Ô0AÔBÜðÜ˜×-Ñ-Ó.Ð/¨qð2óð ð
 ×(Ñ(ˆØ×,Ñ,ˆà$×3Ñ3ˆÔØ)×5Ñ5ˆÔä(¨Ó5ˆŒÜ,¨]Ó;ˆÔä!Ÿy™y¨×)<Ñ)<¸d×>QÑ>QÓRˆÔÜŸ<™<¬¯©°T·[±[×5WÑ5WÓ(XÓYˆÔð 	�‰Õr.   Nr  r  rÿ   rû   r  ró   r;   c           	      ó€   —  | j                   d|||||dœ|¤Ž}|d   dd…ddd…f   }| j                  |«      |_        |S )aù  
        Examples:

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

        >>> model = AlignModel.from_pretrained("kakaobrain/align-base")
        >>> tokenizer = AutoTokenizer.from_pretrained("kakaobrain/align-base")

        >>> 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)
        ```©r  r  rÿ   rû   r  r   Nr-   )rÂ  r‡  r¡  )	rB   r  r  rÿ   rû   r  ró   Útext_outputsr#   s	            r/   Úget_text_featureszAlignModel.get_text_features  sd   € ð2 4C°4·?±?ð 4
ØØ)Ø)Ø%Ø'ñ4
ð ñ4
ˆð )¨™OªA¨q²!¨GÑ4ÐØ%)×%9Ñ%9Ð:KÓ%LˆÔ"àÐr.   r�   c                 ó*   —  | j                   dd|i|¤ŽS )a}  
        Examples:

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

        >>> model = AlignModel.from_pretrained("kakaobrain/align-base")
        >>> processor = AutoProcessor.from_pretrained("kakaobrain/align-base")

        >>> 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)
        ```r�   r-   )rÃ  )rB   r�   ró   s      r/   Úget_image_featureszAlignModel.get_image_features'  s   € ð. !ˆt× Ñ ÑE¨lÐE¸fÑEÐEr.   Úreturn_lossc           	      óÄ  —  | j                   dd|i|¤Ž}	 | j                  d|||||dœ|¤Ž}
|	d   }|
d   dd…ddd…f   }| j                  |«      }||j                  ddd¬	«      z  }||j                  ddd¬	«      z  }t	        j
                  ||j                  «       «      | j                  z  }|j                  «       }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, AlignModel
        >>> from transformers.image_utils import load_image

        >>> model = AlignModel.from_pretrained("kakaobrain/align-base")
        >>> processor = AutoProcessor.from_pretrained("kakaobrain/align-base")

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

        >>> inputs = processor(
        ...     images=image, text=["a photo of a cat", "a photo of a dog"], 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   NrY   rý   T)rÃ   r²   Úkeepdim)r6   r7   r8   r2   r"   r9   r:   r-   )
rÃ  rÂ  r‡  Únormr)   r!  rR   r‹  rU   r5   )rB   r  r�   r  rÿ   rû   r  rÌ  ró   Úvision_outputsrÈ  r"   r2   r8   r7   r6   s                   r/   r…   zAlignModel.forward@  s(  € ðN +˜×*Ñ*ñ 
Ø%ð
àñ
ˆð
 '�t—‘ð 
ØØ)Ø)Ø%Ø'ñ
ð ñ
ˆð & aÑ(ˆØ" 1‘o¢a¨ªA gÑ.ˆØ×*Ñ*¨;Ó7ˆð $ l×&7Ñ&7¸!ÀÈTÐ&7Ó&RÑRˆØ! K×$4Ñ$4°q¸bÈ$Ð$4Ó$OÑOˆô  Ÿ,™, {°L·N±NÓ4DÓEÈ×HXÑHXÑXˆØ*×,Ñ,Ó.ÐàˆÙÜ˜oÓ.ˆDäØØ-Ø+Ø#Ø%Ø*Ø .ô
ð 	
r.   r©  )NNNNNNN)r%   r&   r'   r   r+   rt   r   r   r)   r†   r   r   r,   r   rÉ  r*   rË  r  r«   r5   r…   r‡   rˆ   s   @r/   r„  r„  ß  sê  ø… àÓð˜{õ ð< Øð *.Ø.2Ø.2Ø,0Ø-1ñ"à—<‘< $Ñ&ð"ð Ÿ™ tÑ+ð"ð Ÿ™ tÑ+ð	"ð
 —l‘l TÑ)ð"ð —|‘| dÑ*ð"ð Ð+Ñ,ð"ð 
Ð+Ñ	+ò"ó ó ð"ðH ØðFØ!×-Ñ-ðFØ9?Ð@RÑ9SðFà	Ð+Ñ	+òFó ó ðFð. Øð .2Ø15Ø.2Ø.2Ø,0Ø-1Ø#'ñK
à×#Ñ# dÑ*ðK
ð ×'Ñ'¨$Ñ.ðK
ð Ÿ™ tÑ+ð	K
ð
 Ÿ™ tÑ+ðK
ð —l‘l TÑ)ðK
ð —|‘| dÑ*ðK
ð ˜D‘[ðK
ð Ð+Ñ,ðK
ð 
�Ñ	òK
ó ó ôK
r.   r„  )r~  r”  r­  r„  r¨  )r7  )Ur(   rÛ   Úcollections.abcr   Údataclassesr   Útypingr   r)   r   Ú r   r…  Úactivationsr	   Úmasking_utilsr
   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_alignr   r   r   Ú
get_loggerr%   Úloggerr!   r1   r5   r†   rO   rU   r]   r`   r,   r«   rf   r’  rh   rw   rŠ   r”   r    r­   r¿   rÎ   rØ   r÷   rÌ   r)  r+  rC  rO  rW  r^  rb  ro  rw  r~  r”  r­  r„  Ú__all__r-   r.   r/   ú<module>rã     s`  ðñ ã Ý $Ý !Ý ã Ý å &Ý !Ý 6Ý 9÷ó ÷ GÝ &Ý 6ß MÓ Mß IÝ 5ß PÑ Pð 
ˆ×	Ñ	˜HÓ	%€ñ ðôð
 ô:˜[ó :ó óð:ñ ðôð
 ô	7˜;ó 	7ó óð	7ð Ø
ô 
�+ó  
ó ó ð 
ðJu˜UŸ\™\ð u¨e¯l©ló uð-˜5Ÿ<™<ð -¨E¯L©Ló -ðÐ+ð ¸3ó ñ @˜S 5™[ð @°$ó @ô*˜BŸI™Iô ô4
 §¡ô 
ô6 §	¡	ô ô6$ §	¡	ô $ôP$ B§I¡Iô $ôN §¡ô ôBN�r—y‘yô Nôb>
˜Ÿ™ô >
ôB9˜"Ÿ)™)ô 9ðF ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ó%ô,3)˜RŸY™Yô 3)ôn˜"Ÿ)™)ô ô˜Ÿ™ô ô.˜BŸI™Iô ô �b—i‘iô ôÐ/ô ôB
�r—y‘yô 
ô4�b—i‘iô ð ô/˜?ó /ó ð/ñ& ðôô
b
Ð)ó b
óð
b
ñJ ðôô
I
Ð+ó I
óð
I
ðX ôm
Ð%ó m
ó ðm
ò` W�r.   