Ë
    T^(h¤e  ã                   ó€  — d Z ddlZddlmZ ddlmZmZmZ ddlZ	ddl
mZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZ  ej2                  e«      Ze G d„ de«      «       Z G d„ de	j:                  j<                  j>                  «      Z  G d„ de	j:                  j<                  j>                  «      Z! G d„ de	j:                  j<                  j>                  «      Z" G d„ de	j:                  j<                  j>                  «      Z# G d„ de	j:                  j<                  j>                  «      Z$ G d„ de«      Z%y)zOTF IdeficsVision model: a copy of CLIPVisionModel using a simpler config objecté    N)Ú	dataclass)ÚOptionalÚTupleÚUnioné   )Úget_tf_activation)ÚTFBaseModelOutputÚTFBaseModelOutputWithPooling)ÚTFPreTrainedModelÚ
shape_list)Úflatten)ÚModelOutputÚloggingé   )ÚIdeficsVisionConfigc                   ó¾   — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   dZ
eeej                        ed<   dZeeej                        ed<   y)ÚTFIdeficsVisionModelOutputa­  
    Base class for vision model's outputs that also contains image embeddings of the pooling of the last hidden states.

    Args:
        image_embeds (`tf.Tensor` 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.
        last_hidden_state (`tf.Tensor` of shape `(batch_size, sequence_length, hidden_size)`):
            Sequence of hidden-states at the output of the last layer of the model.
        hidden_states (`tuple(tf.Tensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `tf.Tensor` (one for the output of the embeddings, if the model has an embedding layer, +
            one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the optional initial embedding outputs.
        attentions (`tuple(tf.Tensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `tf.Tensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
    NÚimage_embedsÚlast_hidden_stateÚhidden_statesÚ
attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚtfÚTensorÚ__annotations__r   r   r   r   © ó    úc/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/idefics/vision_tf.pyr   r   "   s`   … ñð* )-€L�(˜2Ÿ9™9Ñ%Ó,Ø-1Ð�x §	¡	Ñ*Ó1Ø04€M�8˜E "§)¡)Ñ,Ñ-Ó4Ø-1€J�˜˜rŸy™yÑ)Ñ*Ô1r    r   c                   óª   ‡ — e Zd Zdefˆ fd„Zdej                  dededej                  fd„Zddej                  d	e	dej                  fd
„Z
dd„Zˆ xZS )ÚTFIdeficsVisionEmbeddingsÚconfigc           	      ó2  •— t        ‰| �  d
i |¤Ž || _        |j                  | _        |j
                  | _        |j                  | _        t        j                  j                  j                  | j                  | j                  | j                  dddd¬«      | _        | j
                  | j                  z  dz  | _        | j                  dz   | _        t        j                  j                  j                  | j                  | j                  d¬	«      | _        y )NFÚvalidÚchannels_lastÚpatch_embedding)ÚfiltersÚkernel_sizeÚstridesÚuse_biasÚpaddingÚdata_formatÚnameé   r   Úposition_embedding©r/   r   )ÚsuperÚ__init__r$   Úhidden_sizeÚ	embed_dimÚ
image_sizeÚ
patch_sizer   ÚkerasÚlayersÚConv2Dr(   Únum_patchesÚnum_positionsÚ	Embeddingr1   ©Úselfr$   ÚkwargsÚ	__class__s      €r!   r4   z"TFIdeficsVisionEmbeddings.__init__@   sã   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒØ×+Ñ+ˆŒØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒä!Ÿx™xŸ™×5Ñ5Ø—N‘NØŸ™Ø—O‘OØØØ'Ø"ð  6ó  
ˆÔð !ŸO™O¨t¯©Ñ>À1ÑDˆÔØ!×-Ñ-°Ñ1ˆÔÜ"$§(¡(§/¡/×";Ñ";Ø×Ñ §¡Ð5Ið #<ó #
ˆÕr    Ú
embeddingsÚheightÚwidthÚreturnc           	      ó~  — t        |«      d   dz
  }| j                  | j                  «      }t        |«      d   dz
  }||k(  r||k(  r|S |d d …df   }|d d …dd …f   }t        |«      d   }	|| j                  j                  z  }
|| j                  j                  z  }|
dz   |dz   }}
t        j                  t        |«      «      }t        j                  |dt        |«      t        |«      |	f«      }|
|z  }||z  }t        j                  t        j                  |«      d   t        j                  «      }t        j                  t        j                  |«      d   t        j                  «      }t        j                  ||z  t        j                  «      }t        j                  ||z  t        j                  «      }t        j                  j!                  |||gt        j                  j"                  j$                  ¬«      }t        |
«      t        |«      d   k7  st        |«      t        |«      d   k7  r@t'        d	t        |
«      t        |«      f› d
t        |«      d   t        |«      d   f› d�«      ‚t        j                  |dd|	f«      }t        j(                  |t        j*                  d d …f   |fd¬«      S )Nr   r   éÿÿÿÿgš™™™™™¹?r0   )ÚsizeÚmethodéýÿÿÿéþÿÿÿzNumber of patches for images (z/) don't match the shape of position embedding (ú)©Úaxis)r   r1   Úposition_idsr$   r8   ÚmathÚsqrtÚfloatr   ÚreshapeÚintÚcastÚshapeÚfloat32Úint32ÚimageÚresizeÚResizeMethodÚBICUBICÚ
ValueErrorÚconcatÚnewaxis)r@   rC   rD   rE   r<   Ú	pos_embedr=   Úclass_pos_embedÚpatch_pos_embedr6   Únum_h_patchesÚnum_w_patchesÚsqrt_num_positionsÚscale_heightÚscale_widthÚoriginal_heightÚoriginal_widthÚ
new_heightÚ	new_widths                      r!   Úinterpolate_pos_encodingz2TFIdeficsVisionEmbeddings.interpolate_pos_encodingX   sw  € Ü  Ó,¨QÑ/°!Ñ3ˆØ×+Ñ+¨D×,=Ñ,=Ó>ˆ	Ü" 9Ó-¨aÑ0°1Ñ4ˆØ˜-Ò'¨F°eªOØÐØ#¢A q D™/ˆØ#¢A q¡r EÑ*ˆä˜zÓ*¨2Ñ.ˆ	Ø $§+¡+×"8Ñ"8Ñ8ˆØ §¡×!7Ñ!7Ñ7ˆØ'4°sÑ':¸MÈCÑ<O�}ˆÜ!ŸY™Y¤u¨]Ó';Ó<ÐÜŸ*™* _°q¼#Ð>PÓ:QÔSVÐWiÓSjÐluÐ6vÓwˆà$Ð'9Ñ9ˆØ#Ð&8Ñ8ˆÜŸ'™'¤"§(¡(¨?Ó";¸AÑ">ÄÇ
Á
ÓKˆÜŸ™¤§¡¨/Ó!:¸1Ñ!=¼r¿z¹zÓJˆä—W‘W˜_¨|Ñ;¼R¿X¹XÓFˆ
Ü—G‘G˜N¨[Ñ8¼"¿(¹(ÓCˆ	äŸ(™(Ÿ/™/Ø :¨yÐ"9Ä"Ç(Á(×BWÑBW×B_ÑB_ð *ó 
ˆô
 �Ó¤*¨_Ó"=¸bÑ"AÒAÜ�=Ó!¤Z°Ó%@ÀÑ%DÒDäØ0´°]Ó1CÄSÈÓEWÐ1WÐ0Xð Y0Ü0:¸?Ó0KÈBÑ0OÔQ[Ð\kÓQlÐmoÑQpÐ0pÐ/qÐqrðtóð ô Ÿ*™* _°q¸"¸iÐ6HÓIˆÜ�y‰y˜/¬"¯*©*²a¨-Ñ8¸/ÐJÐQRÔSÐSr    Úpixel_valuesrm   c                 ó–  — t        |t        «      r|d   }t        j                  |d¬«      }t	        |«      \  }}}}|sJ|| j
                  k7  s|| j
                  k7  r,t        d|› d|› d| j
                  › d| j
                  › d�	«      ‚| j                  |«      }t        |dd	«      }t        j                  | j                  t        j                  t        j                  d d …f   |d| j                  g«      }t        j                  ||gd¬
«      }	|r|	| j                  |	||«      z   }	|	S |	| j                  | j                   «      z   }	|	S )Nrn   )r   r0   r   r   ©ÚpermzInput image size (Ú*z) doesn't match model (z8). You should try to set `interpolate_pos_encoding=True`r   r0   rN   )Ú
isinstanceÚdictr   Ú	transposer   r7   r^   r(   r   Úbroadcast_toÚclass_embeddingr`   r6   r_   rm   r1   rP   )
r@   rn   rm   Ú
batch_sizerD   rE   Únum_channelsÚpatch_embedsÚclass_embedsrC   s
             r!   ÚcallzTFIdeficsVisionEmbeddings.call   sN  € ô
 �l¤DÔ)Ø'¨Ñ7ˆLä—|‘| L°|ÔDˆÜ2<¸\Ó2JÑ/ˆ
�F˜E <Ù'Ø˜Ÿ™Ò(¨E°T·_±_Ò,DÜ Ø(¨¨°°%°ð 9ØŸ™Ð)¨¨4¯?©?Ð*;Ð;sðuóð ð
 ×+Ñ+¨LÓ9ˆô ˜|¨Q°Ó2ˆä—‘Ø× Ñ ¤§¡¬R¯Z©ZºÐ!:Ñ;¸jÈ!ÈTÏ^É^Ð=\ó
ˆô —Y‘Y ¨lÐ;À!ÔDˆ
ñ $Ø# d×&CÑ&CÀJÐPVÐX]Ó&^Ñ^ˆJð Ðð $ d×&=Ñ&=¸d×>OÑ>OÓ&PÑPˆJàÐr    c                 ó²  — | j                   ry d| _         t        j                  | j                  d¬«      t        j                  d d …f   | _        | j                  | j                  fd¬«      | _        t        | dd «      �et        j                  | j                  j                  «      5  | j                  j                  d d d | j                  j                  g«       d d d «       t        | dd «      �Nt        j                  | j                   j                  «      5  | j                   j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)NTzself.position_idsr2   rw   )rW   r/   r(   r1   )Úbuiltr   Úranger=   r`   rP   Ú
add_weightr6   rw   ÚgetattrÚ
name_scoper(   r/   Úbuildr$   ry   r1   ©r@   Úinput_shapes     r!   rƒ   zTFIdeficsVisionEmbeddings.build¢   s   € Ø�:Š:ØØˆŒ
ÜŸH™H T×%7Ñ%7Ð>QÔRÔSU×S]ÑS]Ò_`ÐS`ÑaˆÔØ#Ÿ™°d·n±nÐ5FÐM^˜Ó_ˆÔÜ�4Ð*¨DÓ1Ð=Ü—‘˜t×3Ñ3×8Ñ8Ó9ñ YØ×$Ñ$×*Ñ*¨D°$¸¸d¿k¹k×>VÑ>VÐ+WÔX÷Yä�4Ð-¨tÓ4Ð@Ü—‘˜t×6Ñ6×;Ñ;Ó<ñ 4Ø×'Ñ'×-Ñ-¨dÔ3÷4ð 4ð A÷Yð Yú÷4ð 4ús   Â)4EÄEÅE
ÅE©F©N)r   r   r   r   r4   r   r   rU   rm   Úboolr|   rƒ   Ú__classcell__©rB   s   @r!   r#   r#   ?   sn   ø„ ð
Ð2õ 
ð0%T°2·9±9ð %TÀcð %TÐRUð %TÐZ\×ZcÑZcó %TñN! §¡ð !Àdð !ÐWY×W`ÑW`ó !÷F4r    r#   c                   ó  ‡ — e Zd ZdZˆ fd„Zdej                  dedefd„Z	 	 	 ddej                  de	ej                     d	e	ej                     d
e	e
   deej                  e	ej                     e	eej                        f   f
d„Zdd„Zˆ xZS )ÚTFIdeficsVisionAttentionz=Multi-headed attention from 'Attention Is All You Need' paperc                 ód  •— t        ‰| �  d
i |¤Ž || _        |j                  | _        |j
                  | _        | j                  | j                  z  | _        | j                  | j                  z  | j                  k7  r&t        d| j                  › d| j                  › d�«      ‚| j                  dz  | _	        |j                  | _        t        j                  j                  j                  | j                  d¬«      | _        t        j                  j                  j                  | j                  d¬«      | _        t        j                  j                  j                  | j                  d¬«      | _        t        j                  j                  j                  | j                  d	¬«      | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).g      à¿Úk_projr2   Úv_projÚq_projÚout_projr   )r3   r4   r$   r5   r6   Únum_attention_headsÚ	num_headsÚhead_dimr^   ÚscaleÚattention_dropoutÚdropoutr   r9   r:   ÚDenserŽ   r�   r�   r‘   r?   s      €r!   r4   z!TFIdeficsVisionAttention.__init__³   s<  ø€ Ü‰ÑÑ"˜6Ò"ØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØ�=‰=˜4Ÿ>™>Ñ)¨T¯^©^Ò;ÜØMÈdÏnÉnÐM]ð ^Ø—N‘NÐ# 2ð'óð ð —]‘] DÑ(ˆŒ
Ø×/Ñ/ˆŒä—h‘h—o‘o×+Ñ+¨D¯N©NÀÐ+ÓJˆŒÜ—h‘h—o‘o×+Ñ+¨D¯N©NÀÐ+ÓJˆŒÜ—h‘h—o‘o×+Ñ+¨D¯N©NÀÐ+ÓJˆŒÜŸ™Ÿ™×-Ñ-¨d¯n©nÀ:Ð-ÓNˆ�r    ÚtensorÚseq_lenÚbszc           	      óŒ   — t        j                  t        j                  |||| j                  | j                  f«      g d¢¬«      S )N©r   r0   r   r   rp   )r   ru   rT   r“   r”   )r@   r™   rš   r›   s       r!   Ú_shapezTFIdeficsVisionAttention._shapeÆ   s0   € Ü�|‰|œBŸJ™J v°°W¸d¿n¹nÈdÏmÉmÐ/\Ó]ÒdpÔqÐqr    r   Úattention_maskÚcausal_attention_maskÚoutput_attentionsrF   c           
      ó^  — t        |«      \  }}}| j                  |«      | j                  z  }| j                  | j	                  |«      d|«      }	| j                  | j                  |«      d|«      }
|| j                  z  d| j                  f}t        j                  | j                  |||«      |«      }t        j                  |	|«      }	t        j                  |
|«      }
t        |	«      d   }t        j                  j                  ||	d¬«      }t        j                  j                  t        j                  |«      || j                  z  ||gd|| j                  z  ||g› dt        j                  |«      › �¬«       |�}t        |«      |d||gk7  rt        d	|d||f› dt        |«      › �«      ‚t        j                  ||| j                  ||f«      |z   }t        j                  ||| j                  z  ||f«      }|�}t        |«      |d||gk7  rt        d	|d||f› dt        |«      › �«      ‚t        j                  ||| j                  ||f«      |z   }t        j                  ||| j                  z  ||f«      }t        j                   j#                  |d¬
«      }|rKt        j                  ||| j                  ||f«      }t        j                  ||| j                  z  ||f«      }nd}t        j                   j%                  || j$                  ¬«      }t        j                  j                  ||
«      }t        j                  j                  t        j                  |«      || j                  z  || j                  gd|| j                  z  || j                  g› dt        j                  |«      › �¬«       t        j                  ||| j                  || j                  f«      }t        j&                  |g d¢¬«      }t        j                  ||||f«      }| j)                  |«      }||fS )z#Input shape: Batch x Time x ChannelrH   r   T)Útranspose_bz$Attention weights should be of size z	, but is )ÚmessageNz!Attention mask should be of size rN   )Úrater�   rp   )r   r�   r•   rž   rŽ   r�   r“   r”   r   rT   ÚlinalgÚmatmulÚ	debuggingÚassert_equalrW   r^   ÚnnÚsoftmaxr—   ru   r‘   )r@   r   rŸ   r    r¡   r›   Útgt_lenr6   Úquery_statesÚ
key_statesÚvalue_statesÚ
proj_shapeÚsrc_lenÚattn_weightsÚattn_weights_reshapedÚ
attn_probsÚattn_outputs                    r!   r|   zTFIdeficsVisionAttention.callÉ   s  € ô #-¨]Ó";ÑˆˆW�ið —{‘{ =Ó1°D·J±JÑ>ˆØ—[‘[ §¡¨]Ó!;¸RÀÓEˆ
Ø—{‘{ 4§;¡;¨}Ó#=¸rÀ3ÓGˆà˜DŸN™NÑ*¨B°·±Ð>ˆ
Ü—z‘z $§+¡+¨l¸GÀSÓ"IÈ:ÓVˆÜ—Z‘Z 
¨JÓ7ˆ
Ü—z‘z ,°
Ó;ˆä˜ZÓ(¨Ñ+ˆÜ—y‘y×'Ñ'¨°jÈdÐ'ÓSˆä
�‰×!Ñ!Ü�H‰H�\Ó"Ø�4—>‘>Ñ! 7¨GÐ4Ø:¸CÀ$Ç.Á.Ñ<PÐRYÐ[bÐ;cÐ:dÐdmÔnp×nvÑnvð  xDó  oEð  nFð  Gð 	"ô 	
ð !Ð,ÜÐ/Ó0°S¸!¸WÀgÐ4NÒNÜ Ø7¸¸aÀÈ'Ð8RÐ7Sð TÜ"Ð#8Ó9Ð:ð<óð ô Ÿ:™: l°S¸$¿.¹.È'ÐSZÐ4[Ó\Ð_tÑtˆLÜŸ:™: l°S¸4¿>¹>Ñ5IÈ7ÐT[Ð4\Ó]ˆLàÐ%Ü˜.Ó)¨c°1°g¸wÐ-GÒGÜ Ø7¸¸aÀÈ'Ð8RÐ7SÐS\Ô]gÐhvÓ]wÐ\xÐyóð ô Ÿ:™: l°S¸$¿.¹.È'ÐSZÐ4[Ó\Ð_mÑmˆLÜŸ:™: l°S¸4¿>¹>Ñ5IÈ7ÐT[Ð4\Ó]ˆLä—u‘u—}‘} \¸�}Ó;ˆáô
 %'§J¡J¨|¸cÀ4Ç>Á>ÐSZÐ\cÐ=dÓ$eÐ!ÜŸ:™:Ð&;¸cÀDÇNÁNÑ>RÐT[Ð]dÐ=eÓf‰Là$(Ð!ä—U‘U—]‘] <°d·l±l�]ÓCˆ
ä—i‘i×&Ñ& z°<Ó@ˆä
�‰×!Ñ!Ü�H‰H�[Ó!Ø�4—>‘>Ñ! 7¨D¯M©MÐ:Ø:¸CÀ$Ç.Á.Ñ<PÐRYÐ[_×[hÑ[hÐ;iÐ:jÐjsÔtv×t|Ñt|ð  ~Ió  uJð  tKð  Lð 	"ô 	
ô —j‘j ¨s°D·N±NÀGÈTÏ]É]Ð.[Ó\ˆÜ—l‘l ;²\ÔBˆÜ—j‘j ¨s°G¸YÐ.GÓHˆà—m‘m KÓ0ˆàÐ1Ð1Ð1r    c                 ó  — | j                   ry d| _         t        | dd «      �ct        j                  | j                  j
                  «      5  | j                  j                  | j                  | j                  f«       d d d «       t        | dd «      �ct        j                  | j                  j
                  «      5  | j                  j                  | j                  | j                  f«       d d d «       t        | dd «      �ct        j                  | j                  j
                  «      5  | j                  j                  | j                  | j                  f«       d d d «       t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  | j                  | j                  f«       d d d «       y y # 1 sw Y   �Œ\x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~   r�   r   r‚   rŽ   r/   rƒ   r6   r�   r�   r‘   r„   s     r!   rƒ   zTFIdeficsVisionAttention.build  s’  € Ø�:Š:ØØˆŒ
Ü�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ DØ—‘×!Ñ! 4§>¡>°4·>±>Ð"BÔC÷Dä�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ DØ—‘×!Ñ! 4§>¡>°4·>±>Ð"BÔC÷Dä�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ DØ—‘×!Ñ! 4§>¡>°4·>±>Ð"BÔC÷Dä�4˜ TÓ*Ð6Ü—‘˜tŸ}™}×1Ñ1Ó2ñ FØ—‘×#Ñ# T§^¡^°T·^±^Ð$DÔE÷Fð Fð 7÷Dñ Dú÷Dð Dú÷Dð Dú÷Fð Fús0   Á2GÂ;2G$Ä+2G0Æ2G<ÇG!Ç$G-Ç0G9Ç<H)NNFr‡   )r   r   r   r   r4   r   r   rU   rž   r   rˆ   r   r|   rƒ   r‰   rŠ   s   @r!   rŒ   rŒ   °   s¼   ø„ ÙGôOð&r˜RŸY™Yð r°ð r¸3ó rð /3Ø59Ø,1ñL2à—y‘yðL2ð ! §¡Ñ+ðL2ð  (¨¯	©	Ñ2ð	L2ð
 $ D™>ðL2ð 
ˆr�y‰y˜( 2§9¡9Ñ-¨x¸¸b¿i¹iÑ8HÑ/IÐIÑ	JóL2÷\Fr    rŒ   c                   ó^   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zdd„Zˆ xZS )ÚTFIdeficsVisionMLPc                 óN  •— t        ‰| �  di |¤Ž || _        t        |j                  «      | _        t        j                  j                  j                  |j                  d¬«      | _        t        j                  j                  j                  |j                  d¬«      | _        y )NÚfc1r2   Úfc2r   )r3   r4   r$   r   Ú
hidden_actÚactivation_fnr   r9   r:   r˜   Úintermediate_sizerº   r5   r»   r?   s      €r!   r4   zTFIdeficsVisionMLP.__init__*  sw   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒÜ.¨v×/@Ñ/@ÓAˆÔÜ—8‘8—?‘?×(Ñ(¨×)AÑ)AÈÐ(ÓNˆŒÜ—8‘8—?‘?×(Ñ(¨×);Ñ);À%Ð(ÓHˆ�r    r   rF   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r‡   )rº   r½   r»   )r@   r   s     r!   r|   zTFIdeficsVisionMLP.call1  s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆØÐr    c                 ó  — | j                   ry d| _         t        | dd «      �at        j                  | j                  j
                  «      5  | j                  j                  | j                  j                  «       d d d «       t        | dd «      �bt        j                  | j                  j
                  «      5  | j                  j                  | j                  j                  «       d d d «       y y # 1 sw Y   ŒyxY w# 1 sw Y   y xY w)NTrº   r»   )r~   r�   r   r‚   rº   r/   rƒ   r$   r5   r»   r¾   r„   s     r!   rƒ   zTFIdeficsVisionMLP.build7  sÁ   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó%Ð1Ü—‘˜tŸx™xŸ}™}Ó-ñ 8Ø—‘—‘˜tŸ{™{×6Ñ6Ô7÷8ä�4˜ Ó%Ð1Ü—‘˜tŸx™xŸ}™}Ó-ñ >Ø—‘—‘˜tŸ{™{×<Ñ<Ô=÷>ð >ð 2÷8ð 8ú÷>ð >ús   Á0C3Â90C?Ã3C<Ã?Dr‡   )	r   r   r   r4   r   r   r|   rƒ   r‰   rŠ   s   @r!   r¸   r¸   )  s)   ø„ ôIð "§)¡)ð °·	±	ó ÷	>r    r¸   c                   ó¨   ‡ — e Zd Zdefˆ fd„Z	 d
dej                  dej                  dej                  dee   de	ej                     f
d„Z
dd	„Zˆ xZS )ÚTFIdeficsVisionEncoderLayerr$   c                 óv  •— t        ‰| �  di |¤Ž |j                  | _        t	        |d¬«      | _        t        j                  j                  j                  |j                  d¬«      | _        t        |d¬«      | _        t        j                  j                  j                  |j                  d¬«      | _        y )NÚ	self_attnr2   Úlayer_norm1©Úepsilonr/   ÚmlpÚlayer_norm2r   )r3   r4   r5   r6   rŒ   rÄ   r   r9   r:   ÚLayerNormalizationÚlayer_norm_epsrÅ   r¸   rÈ   rÉ   r?   s      €r!   r4   z$TFIdeficsVisionEncoderLayer.__init__D  sŠ   ø€ Ü‰ÑÑ"˜6Ò"Ø×+Ñ+ˆŒÜ1°&¸{ÔKˆŒÜŸ8™8Ÿ?™?×=Ñ=Àf×F[ÑF[ÐboÐ=ÓpˆÔÜ% f°5Ô9ˆŒÜŸ8™8Ÿ?™?×=Ñ=Àf×F[ÑF[ÐboÐ=ÓpˆÕr    r   rŸ   r    r¡   rF   c                 óÎ   — |}| j                  |«      }| j                  ||||¬«      \  }}||z   }|}| j                  |«      }| j                  |«      }||z   }|f}|r||fz  }|S )a9  
        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.
                `(config.encoder_attention_heads,)`.
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
        )r   rŸ   r    r¡   )rÅ   rÄ   rÉ   rÈ   )r@   r   rŸ   r    r¡   Úresidualr²   Úoutputss           r!   r|   z TFIdeficsVisionEncoderLayer.callL  s’   € ð" !ˆà×(Ñ(¨Ó7ˆØ&*§n¡nØ'Ø)Ø"7Ø/ð	 '5ó '
Ñ#ˆ�|ð ! =Ñ0ˆà ˆØ×(Ñ(¨Ó7ˆØŸ™ Ó/ˆØ  =Ñ0ˆà Ð"ˆáØ˜�Ñ&ˆGàˆ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 «      �[t        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       y y # 1 sw Y   ŒrxY w# 1 sw Y   y xY w)NTrÅ   rÉ   )	r~   r�   r   r‚   rÅ   r/   rƒ   r6   rÉ   r„   s     r!   rƒ   z!TFIdeficsVisionEncoderLayer.buildt  sÜ   € Ø�:Š:ØØˆŒ
Ü�4˜¨Ó-Ð9Ü—‘˜t×/Ñ/×4Ñ4Ó5ñ EØ× Ñ ×&Ñ&¨¨d°D·N±NÐ'CÔD÷Eä�4˜¨Ó-Ð9Ü—‘˜t×/Ñ/×4Ñ4Ó5ñ EØ× Ñ ×&Ñ&¨¨d°D·N±NÐ'CÔD÷Eð Eð :÷Eð Eú÷Eð Eús   Á)C%Â2)C1Ã%C.Ã1C:r†   r‡   )r   r   r   r   r4   r   r   r   rˆ   r   r|   rƒ   r‰   rŠ   s   @r!   rÂ   rÂ   C  sl   ø„ ðqÐ2õ qð -2ñ&à—y‘yð&ð Ÿ	™	ð&ð  "Ÿy™yð	&ð
 $ D™>ð&ð 
ˆr�y‰yÑ	ó&÷P	Er    rÂ   c                   ó¸   ‡ — e Zd ZdZdefˆ fd„Z	 	 	 	 	 	 ddeej                     deej                     dee	   dee	   dee	   d	ee	   d
e
eef   fd„Zdd„Zˆ xZS )ÚTFIdeficsVisionEncoderzÁ
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`TFIdeficsVisionEncoderLayer`].

    Args:
        config: IdeficsVisionConfig
    r$   c                 ó¶   •— t        ‰| �  di |¤Ž || _        t        |j                  «      D �cg c]  }t        |d|› �¬«      ‘Œ c}| _        d| _        y c c}w )Nzlayers.r2   Fr   )r3   r4   r$   r   Únum_hidden_layersrÂ   r:   Úgradient_checkpointing)r@   r$   rA   ÚirB   s       €r!   r4   zTFIdeficsVisionEncoder.__init__‰  sZ   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒäMRÐSY×SkÑSkÓMlö
ØHIÔ'¨°w¸q¸c°]ÖCò
ˆŒð ',ˆÕ#ùò
s   ¯ArŸ   r    r¡   Úoutput_hidden_statesÚreturn_dictÚtrainingrF   c                 óþ  ‡— ‰�‰n| j                   j                  Š|�|n| j                   j                  }|�|n| j                   j                  }|rdnd}‰rdnd}	|}
t	        | j
                  «      D ]\  \  }}|r||
fz   }| j                  r&|r$ˆfd„}t        j                   ||«      |
||«      }n ||
||‰¬«      }|d   }
‰sŒT|	|d   fz   }	Œ^ |r||
fz   }|st        d„ |
||	fD «       «      S t        |
||	¬«      S )	aÇ  
        Args:
            inputs_embeds (`tf.Tensor` of shape `(batch_size, sequence_length, hidden_size)`):
                Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation.
                This is useful if you want more control over how to convert `input_ids` indices into associated vectors
                than the model's internal embedding lookup matrix.
            attention_mask (`tf.Tensor` of shape `(batch_size, sequence_length)`, *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)
            causal_attention_mask (`tf.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
                Causal mask for the text model. 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)
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
            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.
            return_dict (`bool`, *optional*):
                Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
        Nr   c                 ó   •‡ — ˆ ˆfd„}|S )Nc                  ó   •—  ‰g | ¢‰‘­Ž S r‡   r   )ÚinputsÚmoduler¡   s    €€r!   Úcustom_forwardzRTFIdeficsVisionEncoder.call.<locals>.create_custom_forward.<locals>.custom_forwardÈ  s   ø€ Ù%ÐA vÐAÐ/@ÒAÐAr    r   )rÝ   rÞ   r¡   s   ` €r!   Úcreate_custom_forwardz:TFIdeficsVisionEncoder.call.<locals>.create_custom_forwardÇ  s   ù€ õBð *Ð)r    )r¡   r   r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr‡   r   )Ú.0Úvs     r!   ú	<genexpr>z.TFIdeficsVisionEncoder.call.<locals>.<genexpr>ä  s   è ø€ Òe˜qÐWXÑWdœÑeùs   ‚Š)r   r   r   )r$   r¡   rÖ   Úuse_return_dictÚ	enumerater:   rÔ   r   Úrecompute_gradÚtupler	   )r@   Úinputs_embedsrŸ   r    r¡   rÖ   r×   rØ   Úencoder_statesÚall_attentionsr   ÚidxÚencoder_layerrß   Úlayer_outputss       `          r!   r|   zTFIdeficsVisionEncoder.call‘  sH  ø€ ðN 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆá3™¸ˆÙ0™°dˆà%ˆÜ"+¨D¯K©KÓ"8ò 	FÑˆC�Ù#Ø!/°=Ð2BÑ!B�Ø×*Ò*©xô*ô !#× 1Ñ 1Ù)¨-Ó8Ø!Ø"Ø)ó	!‘ñ !.Ø!Ø"Ø)Ø&7ô	!�ð *¨!Ñ,ˆMâ Ø!/°=ÀÑ3CÐ2EÑ!E‘ð9	Fñ<  Ø+¨}Ð.>Ñ>ˆNáÜÑe ]°NÀNÐ$SÔeÓeÐeÜ Ø+¸>ÐVdô
ð 	
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)NTr:   )r~   r�   r:   r   r‚   r/   rƒ   )r@   r…   Úlayers      r!   rƒ   zTFIdeficsVisionEncoder.buildé  sp   € Ø�:Š:ØØˆŒ
Ü�4˜ 4Ó(Ð4ØŸ™ò &�Ü—]‘] 5§:¡:Ó.ñ &Ø—K‘K Ô%÷&ð &ñ&ð 5÷&ð &ús   ÁA.Á.A7	)NNNNNNr‡   )r   r   r   r   r   r4   r   r   r   rˆ   r   r   r	   r|   rƒ   r‰   rŠ   s   @r!   rÑ   rÑ   €  s¯   ø„ ñð,Ð2õ ,ð /3Ø59Ø,0Ø/3Ø&*Ø#'ñV
ð ! §¡Ñ+ðV
ð  (¨¯	©	Ñ2ð	V
ð
 $ D™>ðV
ð ' t™nðV
ð ˜d‘^ðV
ð ˜4‘.ðV
ð 
ˆuÐ'Ð'Ñ	(óV
÷p&r    rÑ   c                   ó    ‡ — e Zd Zdefˆ fd„Z	 	 	 	 	 	 ddeej                     dee   dee   dee   dee   dee   d	e	e
ef   fd
„Zdd„Zˆ xZS )ÚTFIdeficsVisionTransformerr$   c                 ó†  •— t        ‰| �  |fi |¤Ž || _        |j                  | _        t        |d¬«      | _        t        j                  j                  j                  |j                  d¬«      | _        t        |d¬«      | _        t        j                  j                  j                  |j                  d¬«      | _        y )NrC   r2   Úpre_layrnormrÆ   ÚencoderÚpost_layernorm)r3   r4   r$   r5   r6   r#   rC   r   r9   r:   rÊ   rË   ró   rÑ   rô   rõ   r?   s      €r!   r4   z#TFIdeficsVisionTransformer.__init__ô  s“   ø€ Ü‰Ñ˜Ñ* 6Ò*ØˆŒØ×+Ñ+ˆŒä3°FÀÔNˆŒÜŸH™HŸO™O×>Ñ>Àv×G\ÑG\ÐcqÐ>ÓrˆÔÜ-¨f¸9ÔEˆŒÜ Ÿh™hŸo™o×@Ñ@È×I^ÑI^ÐeuÐ@ÓvˆÕr    rn   r¡   rÖ   rm   r×   rØ   rF   c                 óÎ  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|€t	        d«      ‚| j                  ||¬«      }| j                  |«      }| j                  |||||¬«      }|d   }	|	dd…ddd…f   }
| j                  |
«      }
|s
|	|
f|dd z   S t        |	|
|j                  |j                  ¬«      S )z
        Returns:

        Nz You have to specify pixel_values)rm   )rè   r¡   rÖ   r×   rØ   r   r   )r   Úpooler_outputr   r   )r$   r¡   rÖ   rä   r^   rC   ró   rô   rõ   r
   r   r   )r@   rn   r¡   rÖ   rm   r×   rØ   r   Úencoder_outputsr   Úpooled_outputs              r!   r|   zTFIdeficsVisionTransformer.callÿ  s  € ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐÜÐ?Ó@Ð@àŸ™¨ÐOg˜ÓhˆØ×)Ñ)¨-Ó8ˆØŸ,™,Ø'Ø/Ø!5Ø#Øð 'ó 
ˆð ,¨AÑ.ÐØ)ª!¨Q²¨'Ñ2ˆØ×+Ñ+¨MÓ:ˆáØ% }Ð5¸ÈÈÐ8KÑKÐKä+Ø/Ø'Ø)×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)NTrC   ró   rô   rõ   )r~   r�   r   r‚   rC   r/   rƒ   ró   r6   rô   rõ   r„   s     r!   rƒ   z TFIdeficsVisionTransformer.build-  ss  € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜¨Ó.Ð:Ü—‘˜t×0Ñ0×5Ñ5Ó6ñ FØ×!Ñ!×'Ñ'¨¨t°T·^±^Ð(DÔE÷Fä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ä�4Ð)¨4Ó0Ð<Ü—‘˜t×2Ñ2×7Ñ7Ó8ñ BØ×#Ñ#×)Ñ)¨4°·±Ð*@ÔA÷Bð Bð =÷,ñ ,ú÷Fð Fú÷)ð )ú÷Bð Bús0   ÁFÂ%)F%ÄF1Å&(F=ÆF"Æ%F.Æ1F:Æ=G)NNNFNFr‡   )r   r   r   r   r4   r   r   r   rˆ   r   r   r
   r|   rƒ   r‰   rŠ   s   @r!   rñ   rñ   ó  sž   ø„ ðwÐ2õ wð -1Ø,0Ø/3Ø38Ø&*Ø#(ñ,
à˜rŸy™yÑ)ð,
ð $ D™>ð,
ð ' t™nð	,
ð
 #+¨4¡.ð,
ð ˜d‘^ð,
ð ˜4‘.ð,
ð 
ˆuÐ2Ð2Ñ	3ó,
÷\Br    rñ   )&r   rQ   Údataclassesr   Útypingr   r   r   Ú
tensorflowr   Úactivations_tfr   Úmodeling_tf_outputsr	   r
   Úmodeling_tf_utilsr   r   Útf_utilsr   Úutilsr   r   Úconfiguration_ideficsr   Ú
get_loggerr   Úloggerr   r9   r:   ÚLayerr#   rŒ   r¸   rÂ   rÑ   rñ   r   r    r!   ú<module>r     sü   ðñ Vã Ý !ß )Ñ )ã å /ß Rß >Ý ß )Ý 6ð 
ˆ×	Ñ	˜HÓ	%€ð ô2 ó 2ó ð2ô8n4 §¡§¡× 5Ñ 5ô n4ôbvF˜rŸx™xŸ™×4Ñ4ô vFôr>˜Ÿ™Ÿ™×.Ñ.ô >ô4:E "§(¡(§/¡/×"7Ñ"7ô :Eôzp&˜RŸX™XŸ_™_×2Ñ2ô p&ôfIBÐ!2õ IBr    