Ë
    S^(hº` ã                  ó(  — d Z ddlmZ ddl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&m'Z' ddl(m)Z)m*Z*m+Z+  e&jX                  e-«      Z. e%«       r#	 ddl/Z0e0jb                  je                  dd¬«      Z3n"	 ddl/Z0e0jb                  je                  dd¬«      Z3dZ6dZ7dNdOd„Z8dPd„Z9dQd„Z:dRd„Z;dSdTd„Z<dUdVd„Z=dWd„Z>e G d„ de"«      «       Z? G d„ dej€                  j‚                  «      ZB G d„ d ej€                  j‚                  «      ZC G d!„ d"ej€                  j‚                  «      ZD G d#„ d$ej€                  j‚                  «      ZE G d%„ d&ej€                  j‚                  «      ZF G d'„ d(ej€                  j‚                  «      ZG G d)„ d*ej€                  j‚                  «      ZH G d+„ d,ej€                  j‚                  «      ZI G d-„ d.eI«      ZJ G d/„ d0ej€                  j‚                  «      ZK G d1„ d2ej€                  j‚                  «      ZL G d3„ d4ej€                  j‚                  «      ZM G d5„ d6ej€                  j‚                  «      ZN G d7„ d8ej€                  j‚                  «      ZO G d9„ d:ej€                  j‚                  «      ZPe G d;„ d<ej€                  j‚                  «      «       ZQe G d=„ d>ej€                  j‚                  «      «       ZRe G d?„ d@ej€                  j‚                  «      «       ZS G dA„ dBe«      ZTdCZUdDZVdEZWdFZX G dG„ dHeT«      ZY G dI„ dJeT«      ZZ e#eU«       G dK„ dLeT«      «       Z[g dM¢Z\y# e4$ r e.jk                  d«       Y �Œ¹w xY w# e4$ r Y �ŒÅw xY w)XzTF 2.0 GroupViT 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Ú#is_tensorflow_probability_availableÚloggingÚreplace_return_docstringsé   )ÚGroupViTConfigÚGroupViTTextConfigÚGroupViTVisionConfigç        ç      ð?)ÚlocÚscalea  GroupViT models are not usable since `tensorflow_probability` can't be loaded. It seems you have `tensorflow_probability` installed with the wrong tensorflow version.Please try to reinstall it following the instructions here: https://github.com/tensorflow/probability.znvidia/groupvit-gcc-yfccg    „×—Á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   Nr!   ©Údtype)r   ÚtfÚconstantÚcastr&   ÚtileÚLARGE_NEGATIVE)ÚmaskÚtgt_lenÚsrc_lenÚone_cstÚexpanded_masks        úo/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/groupvit/modeling_tf_groupvit.pyÚ_expand_maskr2   R   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    r1   Úcontrastive_lossr>   a   sJ   € Ü�7‰7×ÑÜ�‰×5Ñ5Ü—8‘8œJ vÓ.¨qÑ1Ó2¸6Ètð 	6ó 	
óð r3   c                ód   — t        | «      }t        t        j                  | «      «      }||z   dz  S )Ng       @)r>   r'   Ú	transpose)Ú
similarityÚcaption_lossÚ
image_losss      r1   Úgroupvit_lossrD   j   s/   € Ü# JÓ/€LÜ!¤"§,¡,¨zÓ":Ó;€JØ˜:Ñ%¨Ñ,Ð,r3   c                ó  — t        | |«      }t        j                  ||«      }t        j                  |t	        | «      |   t        t        t	        | «      «      «      |   |j                  ¬«      }|t        j                  |«      z
  |z   }|S )N©ÚdepthÚaxisr&   )	r   r'   ÚargmaxÚone_hotr   r<   Úlenr&   Ústop_gradient)r=   ÚdimÚy_softÚindexÚy_hardÚrets         r1   Úhard_softmaxrR   p   s}   € Ü˜F CÓ(€Fä�I‰I�f˜cÓ"€EÜ�Z‰ZØÜ˜Ó  Ñ%ô ”3”z &Ó)Ó*Ó+¨CÑ0Ø�l‰lô€Fð ”2×#Ñ# FÓ+Ñ
+¨fÑ
4€Cà€Jr3   c                óÖ  — t         j                  j                  dd«      }|j                  t	        j
                  | «      | j                  ¬«      }| |z   |z  }t        ||«      }|r€t	        j                  ||«      }t	        j                  |t        | «      |   t        t        t        | «      «      «      |   |j                  ¬«      }|t	        j                  |«      z
  |z   }	|	S |}	|	S )Nr    r!   r%   rF   )ÚtfpÚdistributionsÚGumbelÚsampler'   Úshaper&   r   rI   rJ   r   r<   rK   rL   )
r=   ÚtauÚhardrM   Úgumbel_distÚgumbelsrN   rO   rP   rQ   s
             r1   Úgumbel_softmaxr]   �   s×   € Ü×#Ñ#×*Ñ*¨3°Ó4€KØ× Ñ ¤§¡¨&Ó!1¸¿¹Ð ÓF€Gà˜Ñ 3Ñ&€GÜ˜G SÓ)€Fáä—	‘	˜& #Ó&ˆÜ—‘ØÜ˜VÓ$ SÑ)ô ”sœ: fÓ-Ó.Ó/°Ñ4Ø—,‘,ô
ˆð ”r×'Ñ'¨Ó/Ñ/°&Ñ8ˆð €Jð ˆØ€Jr3   c                ó’  — ||z  | j                   d   z  dz  }||kD  r3t        t        j                  ||z  «      «      }t	        | «      d   |z  }n2t        t        j                  ||z  «      «      }t	        | «      d   |z  }t	        | «      d   }t	        | «      d   }t        j                  | ||||f«      } t        j                  | d¬«      } |r:t
        j                  j                  j                  j                  | ||fd|¬«      } n$t
        j                  j                  | ||fd¬	«      } t        j                  | d
¬«      } | S )a¸  
    Args:
        attentions (`tf.Tensor`): attention map of shape [batch_size, groups, feat_height*feat_width]
        height (`int`): height of the output attention map
        width (`int`): width of the output attention map
        align_corners (`bool`, *optional*): the `align_corner` argument for `nn.functional.interpolate`.

    Returns:
        `tf.Tensor`: resized attention map of shape [batch_size, groups, height, width]
    é   g      à?r   r   ©r   r_   r	   r   ©ÚpermÚbilinear)ÚsizeÚmethodÚalign_corners)rd   re   )r   r	   r   r_   )rX   ÚintÚnpÚroundr   r'   Úreshaper@   ÚcompatÚv1ÚimageÚresize)	Ú
attentionsÚheightÚwidthrf   r#   Ú
feat_widthÚfeat_heightÚ
batch_sizeÚgroupss	            r1   Úresize_attention_maprv   š   s0  € ð �e‰^˜z×/Ñ/°Ñ2Ñ2°sÑ:€EØ�‚~ÜœŸ™ %¨%¡-Ó0Ó1ˆ
Ü  Ó,¨QÑ/°:Ñ=‰äœ"Ÿ(™( 6¨E¡>Ó2Ó3ˆÜ 
Ó+¨AÑ.°+Ñ=ˆ
ä˜JÓ'¨Ñ*€JÜ˜
Ó# AÑ&€Fä—‘˜J¨°V¸[È*Ð(UÓV€JÜ—‘˜j¨|Ô<€JÙÜ—Y‘Y—\‘\×'Ñ'×.Ñ.ØØ˜%�ØØ'ð	 /ó 
‰
ô —X‘X—_‘_ Z°v¸u°oÈj�_ÓYˆ
Ü—‘˜j¨|Ô<€JØÐr3   c                ó  — g }d}| D ]f  }t        j                  |d¬«      }|€|}nt        j                  ||«      }t        t        j                  |d¬«      g|¢­Ž }|j	                  |«       Œh |d   }t        j
                  |«      S )a(  
    Args:
        attentions (`tuple(tf.Tensor)`: tuple of attention maps returned by `TFGroupViTVisionTransformer`
        hw_shape (`tuple(int)`): height and width of the output attention map
    Returns:
        `tf.Tensor`: the attention map of shape [batch_size, groups, height, width]
    N©r   r_   r   ra   éÿÿÿÿ)r'   r@   Úmatmulrv   ÚappendrL   )ro   Úhw_shapeÚ	attn_mapsÚprev_attn_masksÚ
attn_masksÚcur_attn_mapÚfinal_groupings          r1   Úget_grouping_from_attentionsr‚   À   s�   € ð €IØ€OØ ò 	'ˆ
ä—\‘\ *°9Ô=ˆ
ØÐ"Ø(‰Oä Ÿi™i¨¸ÓDˆOä+¬B¯L©L¸ÈyÔ,YÐeÐ\dÒeˆØ×Ñ˜Õ&ð	'ð ˜r‘]€Nä×Ñ˜NÓ+Ð+r3   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Zded<   dd„Zy)ÚTFGroupViTModelOutputa8  
    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.
        segmentation_logits (`tf.Tensor` of shape `(batch_size, config.num_labels, logits_height, logits_width)`):
            Classification scores for each pixel.

            <Tip warning={true}>

            The logits returned do not necessarily have the same size as the `pixel_values` passed as inputs. This is
            to avoid doing two interpolations and lose some quality when a user needs to resize the logits to the
            original image size as post-processing. You should always check your logits shape and resize as needed.

            </Tip>

        text_embeds (`tf.Tensor` of shape `(batch_size, output_dim`):
            The text embeddings obtained by applying the projection layer to the pooled output of
            [`TFGroupViTTextModel`].
        image_embeds (`tf.Tensor` of shape `(batch_size, output_dim`):
            The image embeddings obtained by applying the projection layer to the pooled output of
            [`TFGroupViTVisionModel`].
        text_model_output (`TFBaseModelOutputWithPooling`):
            The output of the [`TFGroupViTTextModel`].
        vision_model_output (`TFBaseModelOutputWithPooling`):
            The output of the [`TFGroupViTVisionModel`].
    Nútf.Tensor | NoneÚlossúOptional[tf.Tensor]Úlogits_per_imageÚlogits_per_textÚsegmentation_logitsÚ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))r�   rŽ   N)ÚgetattrÚto_tuple)Ú.0ÚkÚselfs     €r1   ú	<genexpr>z1TFGroupViTModelOutput.to_tuple.<locals>.<genexpr>	  s=   øè ø€ ò 
àð Ð LÑLˆD�ŠGÔRYÐZ^Ð`aÓRb×RkÑRkÓRmÓmñ
ùs   ƒ-0)ÚtupleÚkeys©r•   s   `r1   r’   zTFGroupViTModelOutput.to_tuple  s#   ø€ Üó 
à—Y‘Y“[ô
ó 
ð 	
r3   )Úreturnz
Tuple[Any])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r†   Ú__annotations__rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r’   © r3   r1   r„   r„   Ü   sk   … ñðB "€DÐ
Ó!Ø,0ÐÐ)Ó0Ø+/€OÐ(Ó/Ø/3ÐÐ,Ó3Ø'+€KÐ$Ó+Ø(,€LÐ%Ó,Ø6:ÐÐ3Ó:Ø8<ÐÐ5Ó<ô
r3   r„   c                  ó2   ‡ — e Zd Zdˆ fd„Zddd„Zdd„Zˆ xZS )ÚTFGroupViTCrossAttentionLayerc                ó:  •— t        ‰| �  di |¤Ž t        |d¬«      | _        t        j
                  j                  |j                  d¬«      | _        t        |d¬«      | _
        t        j
                  j                  |j                  d¬«      | _        || _        y )NÚattn©ÚnameÚnorm2©Úepsilonr¦   ÚmlpÚ	norm_postr    )ÚsuperÚ__init__ÚTFGroupViTAttentionr¤   r   ÚlayersÚLayerNormalizationÚlayer_norm_epsr§   ÚTFGroupViTMLPrª   r«   Úconfig©r•   r³   ÚkwargsÚ	__class__s      €r1   r­   z&TFGroupViTCrossAttentionLayer.__init__  sz   ø€ Ü‰ÑÑ"˜6Ò"Ü'¨°VÔ<ˆŒ	Ü—\‘\×4Ñ4¸V×=RÑ=RÐY`Ð4ÓaˆŒ
Ü  ¨eÔ4ˆŒÜŸ™×8Ñ8À×AVÑAVÐ]hÐ8ÓiˆŒØˆ�r3   c                ó¤   — |}|| j                  ||¬«      d   z   }|| j                  | j                  |«      «      z   }| j                  |«      }|S )N)Úencoder_hidden_statesr   )r¤   rª   r§   r«   )r•   ÚqueryÚkeyÚtrainingÚxs        r1   Úcallz"TFGroupViTCrossAttentionLayer.call  sQ   € ØˆØ�—	‘	˜%°s�	Ó;¸AÑ>Ñ>ˆØ�—‘˜Ÿ™ A›Ó'Ñ'ˆØ�N‰N˜1ÓˆØˆr3   c                ó¼  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       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   �ŒHx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«   )Úbuiltr‘   r'   Ú
name_scoper¤   r¦   Úbuildr§   r³   Úhidden_sizerª   r«   ©r•   Úinput_shapes     r1   rÁ   z#TFGroupViTCrossAttentionLayer.build  sn  € Ø�:Š:ØØˆŒ
Ü�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ &Ø—	‘	—‘ Ô%÷&ä�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ HØ—
‘
× Ñ  $¨¨d¯k©k×.EÑ.EÐ!FÔG÷Hä�4˜ Ó%Ð1Ü—‘˜tŸx™xŸ}™}Ó-ñ %Ø—‘—‘˜tÔ$÷%ä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ LØ—‘×$Ñ$ d¨D°$·+±+×2IÑ2IÐ%JÔK÷Lð Lð 8÷&ñ &ú÷Hð Hú÷%ð %ú÷Lð Lús0   ÁF-Â%3F:ÄGÅ03GÆ-F7Æ:GÇGÇG©r³   r   ©F)r¹   ú	tf.Tensorrº   rÇ   r»   Úboolrš   rÇ   ©N©r›   rœ   r�   r­   r½   rÁ   Ú__classcell__©r¶   s   @r1   r¢   r¢     s   ø„ õô÷Lr3   r¢   c                  ó<   ‡ — e Zd Zdˆ fd„Zddd„Zdd	d„Zd
d„Zˆ xZS )ÚTFGroupViTAssignAttentionc                óü  •— t        ‰| �  di |¤Ž |j                  dz  | _        t        j
                  j                  |j                  d¬«      | _        t        j
                  j                  |j                  d¬«      | _        t        j
                  j                  |j                  d¬«      | _	        t        j
                  j                  |j                  d¬«      | _
        |j                  | _        || _        y )Nç      à¿Úq_projr¥   Úk_projÚv_projÚprojr    )r¬   r­   rÂ   r#   r   r¯   ÚDenserÑ   rÒ   rÓ   rÔ   Ú
assign_epsr³   r´   s      €r1   r­   z"TFGroupViTAssignAttention.__init__2  s½   ø€ Ü‰ÑÑ"˜6Ò"Ø×'Ñ'¨Ñ-ˆŒ
ä—l‘l×(Ñ(¨×);Ñ);À(Ð(ÓKˆŒÜ—l‘l×(Ñ(¨×);Ñ);À(Ð(ÓKˆŒÜ—l‘l×(Ñ(¨×);Ñ);À(Ð(ÓKˆŒÜ—L‘L×&Ñ& v×'9Ñ'9ÀÐ&ÓGˆŒ	Ø ×+Ñ+ˆŒØˆ�r3   c                ój   — |r|rt        |d|¬«      }|S |rt        |d¬«      }|S t        |d¬«      }|S )Néþÿÿÿ)rM   rZ   )rM   ©rH   )r]   rR   r   )r•   r¤   ÚgumbelrZ   r»   s        r1   Úget_attnz"TFGroupViTAssignAttention.get_attn=  sG   € Ù‘hÜ! $¨B°TÔ:ˆDð ˆñ Ü# D¨bÔ1�ð ˆô & d°Ô4�àˆr3   c                óÀ  — |}| j                  |«      }| j                  |«      }| j                  |«      }t        j                  ||d¬«      | j
                  z  }| j                  ||¬«      }| j                  ||dd¬«      }|t        j                  j                  |dd¬«      | j                  z   z  }t        j                  ||«      }| j                  |«      }||fS )NT©Útranspose_b)r»   F)r»   rÚ   rZ   ry   ©rH   Úkeepdims)rÑ   rÒ   rÓ   r'   rz   r#   rÛ   r8   Ú
reduce_sumrÖ   rÔ   )	r•   r¹   rº   r»   ÚvalueÚraw_attnr¤   Ú	soft_attnÚouts	            r1   r½   zTFGroupViTAssignAttention.callH  sË   € Øˆà—‘˜EÓ"ˆð �k‰k˜#Óˆð —‘˜EÓ"ˆô —9‘9˜U C°TÔ:¸T¿Z¹ZÑGˆà�}‰}˜X°ˆ}Ó9ˆØ—M‘M (°XÀeÐRW�MÓXˆ	à”r—w‘w×)Ñ)¨$°RÀ$Ð)ÓGÈ$Ï/É/ÑYÑZˆä�i‰i˜˜eÓ$ˆà�i‰i˜‹nˆà�Iˆ~Ðr3   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 «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d 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   Œú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Á   r³   rÂ   rÒ   rÓ   rÔ   rÃ   s     r1   rÁ   zTFGroupViTAssignAttention.builda  sž  € Ø�:Š:ØØˆŒ
Ü�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ IØ—‘×!Ñ! 4¨¨t¯{©{×/FÑ/FÐ"GÔH÷Iä�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ IØ—‘×!Ñ! 4¨¨t¯{©{×/FÑ/FÐ"GÔH÷Iä�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ IØ—‘×!Ñ! 4¨¨t¯{©{×/FÑ/FÐ"GÔH÷Iä�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ GØ—	‘	—‘  t¨T¯[©[×-DÑ-DÐ EÔF÷Gð Gð 3÷Iñ Iú÷Ið Iú÷Ið Iú÷Gð Gús0   Á3GÂ<3G(Ä-3G4Æ3H ÇG%Ç(G1Ç4G=È H	rÅ   )TTF)
r¤   rÇ   rÚ   rÈ   rZ   rÈ   r»   rÈ   rš   rÇ   rÆ   )r¹   rÇ   rº   rÇ   r»   rÈ   rÉ   )r›   rœ   r�   r­   rÛ   r½   rÁ   rË   rÌ   s   @r1   rÎ   rÎ   1  s   ø„ õ	ô	ô÷2Gr3   rÎ   c                  ó:   ‡ — e Zd Zdˆ fd„Zdd„Zddd„Zd	d„Zˆ xZS )
ÚTFGroupViTTokenAssignc                ó„  •— t        ‰	| �  di |¤Ž || _        t        j                  j                  |j                  d¬«      | _        t        |j                  t        j                  j                  «      r|j                  n|j                  |j                  f}|D �cg c]  }t        ||j                  z  «      ‘Œ c}\  }}t        ||||d¬«      | _        t        j                  j                  |j                  d¬«      | _        t        j                  j                  |j                  d¬«      | _        t'        |d¬«      | _        t+        |d¬«      | _        t        j                  j                  |j                  d	¬«      | _        t1        ||j                  ||j                  d
¬«      | _        || _        y c c}w )NÚnorm_tokensr¨   Ú	mlp_interr¥   Únorm_post_tokensÚnorm_xÚpre_assign_attnÚassignÚ
norm_new_xÚmlp_channelsr    )r¬   r­   Únum_output_groupr   r¯   r°   r±   rê   Ú
isinstanceÚassign_mlp_ratioÚcollectionsÚabcÚIterablerg   rÂ   ÚTFGroupViTMixerMLPrë   rì   rí   r¢   rî   rÎ   rï   rð   r²   rñ   r³   )
r•   r³   Únum_group_tokenrò   rµ   rô   r¼   Ú
tokens_dimÚchannels_dimr¶   s
            €r1   r­   zTFGroupViTTokenAssign.__init__t  su  ø€ Ü‰ÑÑ"˜6Ò"Ø 0ˆÔä Ÿ<™<×:Ñ:À6×CXÑCXÐ_lÐ:ÓmˆÔô ˜&×1Ñ1´;·?±?×3KÑ3KÔLð ×#Ò#à×)Ñ)¨6×+BÑ+BÐCð 	ð
 JZÖ#ZÀA¤C¨¨F×,>Ñ,>Ñ(>Õ$?Ò#ZÑ ˆ
�LÜ+¨F°OÀZÐQaÐhsÔtˆŒÜ %§¡× ?Ñ ?È×H]ÑH]ÐdvÐ ?Ó wˆÔä—l‘l×5Ñ5¸f×>SÑ>SÐZbÐ5ÓcˆŒÜ<¸VÐJ[Ô\ˆÔä/°¸XÔFˆŒÜŸ,™,×9Ñ9À&×BWÑBWÐ^jÐ9ÓkˆŒÜ)Ø�F×&Ñ&¨°f×6HÑ6HÈ~ô
ˆÔð ˆ�ùò $[s   ÂF=c                óJ   — | j                  |«      }| j                  |«      }|S )zà
        Args:
            group_tokens (tf.Tensor): group tokens, [batch_size, num_group_tokens, channels]

        Returns:
            projected_group_tokens (tf.Tensor): [batch_size, num_output_groups, channels]
        )rë   rì   )r•   Úgroup_tokensÚprojected_group_tokenss      r1   Úproject_group_tokenz)TFGroupViTTokenAssign.project_group_tokenŒ  s+   € ð "&§¡°Ó!=ÐØ!%×!6Ñ!6Ð7MÓ!NÐØ%Ð%r3   c                ó  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  ||«      }| j	                  ||«      \  }}||z  }|| j                  | j                  |«      «      z   }||fS )zÚ
        Args:
            image_tokens (`tf.Tensor`): image tokens, of shape [batch_size, input_length, channels]
            group_tokens (`tf.Tensor`): group tokens, [batch_size, num_group_tokens, channels]
        )rê   rí   rÿ   rî   rï   rñ   rð   )r•   Úimage_tokensrý   r»   rþ   Únew_image_tokensÚ	attentions          r1   r½   zTFGroupViTTokenAssign.call™  s•   € ð ×'Ñ'¨Ó5ˆØ—{‘{ <Ó0ˆà!%×!9Ñ!9¸,Ó!GÐØ!%×!5Ñ!5Ð6LÈlÓ![ÐØ&*§k¡kÐ2HÈ,Ó&WÑ#Ð˜)ØÐ2Ñ2Ðà+¨d×.?Ñ.?ÀÇÁÐP`Ó@aÓ.bÑbÐà Ð*Ð*r3   c                óR  — | 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 «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d 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 «      �dt        j                  | j                  j
                  «      5  | j                  j                  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   �ŒÇxY w# 1 sw Y   �ŒzxY w# 1 sw Y   �ŒxY w# 1 sw Y   �Œ²xY w# 1 sw Y   �Œex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'   rÀ   rê   r¦   rÁ   r³   rÂ   rë   rì   rí   rî   rï   rð   rñ   rÃ   s     r1   rÁ   zTFGroupViTTokenAssign.build¬  sã  € Ø�:Š:ØØˆŒ
Ü�4˜¨Ó-Ð9Ü—‘˜t×/Ñ/×4Ñ4Ó5ñ NØ× Ñ ×&Ñ&¨¨d°D·K±K×4KÑ4KÐ'LÔM÷Nä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ä�4Ð+¨TÓ2Ð>Ü—‘˜t×4Ñ4×9Ñ9Ó:ñ SØ×%Ñ%×+Ñ+¨T°4¸¿¹×9PÑ9PÐ,QÔR÷Sä�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ IØ—‘×!Ñ! 4¨¨t¯{©{×/FÑ/FÐ"GÔH÷Iä�4Ð*¨DÓ1Ð=Ü—‘˜t×3Ñ3×8Ñ8Ó9ñ 1Ø×$Ñ$×*Ñ*¨4Ô0÷1ä�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ (Ø—‘×!Ñ! $Ô'÷(ä�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ MØ—‘×%Ñ% t¨T°4·;±;×3JÑ3JÐ&KÔL÷Mä�4˜¨Ó.Ð:Ü—‘˜t×0Ñ0×5Ñ5Ó6ñ .Ø×!Ñ!×'Ñ'¨Ô-÷.ð .ð ;÷)Nñ Nú÷+ñ +ú÷Sñ Sú÷Iñ Iú÷1ñ 1ú÷(ñ (ú÷Mð Mú÷.ð .ús`   Á3MÂ<MÄ3MÆ3M*Ç8M7ÉNÊ,3NÌNÍMÍMÍM'Í*M4Í7NÎNÎNÎN&)r³   r   rù   rg   rò   rg   )rý   rÇ   rš   rÇ   rÆ   )r  rÇ   rý   rÇ   r»   rÈ   rÉ   )r›   rœ   r�   r­   rÿ   r½   rÁ   rË   rÌ   s   @r1   rè   rè   s  s   ø„ õó0&ô+÷&.r3   rè   c                  óF   ‡ — e Zd ZdZdˆ fd„Z	 d	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )	ÚTFGroupViTPatchEmbeddingszì
    This class turns `pixel_values` of shape `(batch_size, num_channels, height, width)` into the initial
    `hidden_states` (patch embeddings) of shape `(batch_size, seq_length, hidden_size)` to be consumed by a
    Transformer.
    c                óR  •— t        ‰| �  d	i |¤Ž |j                  |j                  }}|j                  }|j
                  | _        t        |t        j                  j                  «      r|n||f}t        |t        j                  j                  «      r|n||f}|d   |d   z  |d   |d   z  z  }|| _        || _        || _
        || _        || _        t        j                  j                  | j
                  ||dddt        | j                  j                   «      dd¬«	      | _        y )
Nr   r   ÚvalidÚchannels_lastTÚzerosÚ
projection)	ÚfiltersÚkernel_sizeÚstridesÚpaddingÚdata_formatÚuse_biasÚkernel_initializerÚbias_initializerr¦   r    )r¬   r­   Ú
image_sizeÚ
patch_sizeÚnum_channelsrÂ   ró   rõ   rö   r÷   Únum_patchesr³   r   r¯   ÚConv2Dr   Úinitializer_ranger  )r•   r³   rµ   r  r  r  r  r¶   s          €r1   r­   z"TFGroupViTPatchEmbeddings.__init__Ò  s  ø€ Ü‰ÑÑ"˜6Ò"Ø!'×!2Ñ!2°F×4EÑ4E�Jˆ
Ø×*Ñ*ˆà!×-Ñ-ˆÔä#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ&ˆÔØ(ˆÔØˆŒäŸ,™,×-Ñ-Ø×$Ñ$Ø"ØØØ'ØÜ.¨t¯{©{×/LÑ/LÓMØ$Øð .ó 

ˆ�r3   c                ó<  — t        |«      \  }}}}t        j                  «       r|| j                  k7  rt	        d«      ‚|sjt        j                  «       rV|| j
                  d   k7  s|| j
                  d   k7  r2t	        d|› d|› d| j
                  d   › d| j
                  d   › d�	«      ‚t        j                  |d¬	«      }| j                  |«      }|| j                  d   z  || j                  d   z  z  }	t        j                  |||	| j                  f¬
«      }
|
S )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.r   r   zInput image size (Ú*z) doesn't match model (ú).r`   ra   ©ÚtensorrX   )r   r'   Úexecuting_eagerlyr  Ú
ValueErrorr  r@   r  r  rj   rÂ   )r•   Úpixel_valuesÚinterpolate_pos_encodingr»   rt   r  rp   rq   r  r  Ú
embeddingss              r1   r½   zTFGroupViTPatchEmbeddings.callî  s(  € ô 3=¸\Ó2JÑ/ˆ
�L &¨%Ü×ÑÔ! l°d×6GÑ6GÒ&GÜØwóð ñ )Ü×$Ñ$Ô&Ø˜4Ÿ?™?¨1Ñ-Ò-°¸$¿/¹/È!Ñ:LÒ1LäØ$ V H¨A¨e¨WÐ4KÈDÏOÉOÐ\]ÑL^ÐK_Ð_`Ðae×apÑapÐqrÑasÐ`tÐtvÐwóð ô —|‘| L°|ÔDˆà—_‘_ \Ó2ˆ
ð  §¡°Ñ 2Ñ2°vÀÇÁÐQRÑASÑ7SÑTˆô —Z‘Z z¸*ÀkÐSW×ScÑScÐ9dÔeˆ
àÐr3   c                ó  — | j                   ry d| _         t        | dd «      �\t        j                  | j                  j
                  «      5  | j                  j                  d d d | j                  g«       d d d «       y y # 1 sw Y   y xY w)NTr  )r¿   r‘   r'   rÀ   r  r¦   rÁ   r  rÃ   s     r1   rÁ   zTFGroupViTPatchEmbeddings.build  s}   € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ MØ—‘×%Ñ% t¨T°4¸×9JÑ9JÐ&KÔL÷Mð Mð 9÷Mð Mús   Á*A?Á?B©r³   r   ©FF©r!  rÇ   r"  rÈ   r»   rÈ   rš   rÇ   rÉ   )r›   rœ   r�   rž   r­   r½   rÁ   rË   rÌ   s   @r1   r  r  Ë  s@   ø„ ñõ
ð: afð Ø%ð ØAEð ØY]ð à	ó ÷DMr3   r  c                  óN   ‡ — e Zd ZdZdˆ fd„Zdd„Zdd„Z	 d		 	 	 	 	 	 	 d
d„Zˆ xZS )ÚTFGroupViTVisionEmbeddingsz7
    Construct the position and patch embeddings.

    c                ó  •— t        ‰| �  di |¤Ž t        |d¬«      | _        t        j
                  j                  |j                  d¬«      | _        t        j
                  j                  |j                  d¬«      | _
        || _        y )NÚpatch_embeddingsr¥   Údropout)Úrater¦   Ú	layernormr¨   r    )r¬   r­   r  r+  r   r¯   ÚDropoutr,  r°   r±   r.  r³   r´   s      €r1   r­   z#TFGroupViTVisionEmbeddings.__init__   sk   ø€ Ü‰ÑÑ"˜6Ò"ä 9¸&ÐGYÔ ZˆÔÜ—|‘|×+Ñ+°·±ÀiÐ+ÓPˆŒÜŸ™×8Ñ8À×AVÑAVÐ]hÐ8ÓiˆŒØˆ�r3   c                óN  — | j                   j                  }| j                  d|| j                  j                  fd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 «      �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   ŒˆxY w# 1 sw Y   y xY w)	Nr   r
  TÚposition_embeddings©rX   ÚinitializerÚ	trainabler¦   r+  r,  r.  )r+  r  Ú
add_weightr³   rÂ   r1  r¿   r‘   r'   rÀ   r¦   rÁ   r,  r.  )r•   rÄ   r  s      r1   rÁ   z TFGroupViTVisionEmbeddings.build(  sb  € Ø×+Ñ+×7Ñ7ˆØ#'§?¡?Ø�k 4§;¡;×#:Ñ#:Ð;ØØØ&ð	 $3ó $
ˆÔ ð �:Š:ØØˆŒ
Ü�4Ð+¨TÓ2Ð>Ü—‘˜t×4Ñ4×9Ñ9Ó:ñ 2Ø×%Ñ%×+Ñ+¨DÔ1÷2ä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ LØ—‘×$Ñ$ d¨D°$·+±+×2IÑ2IÐ%JÔK÷Lð Lð 8÷2ð 2ú÷)ð )ú÷Lð Lús$   ÂFÃ,FÅ3FÆFÆFÆF$c                ó  — t        |«      \  }}}t        | j                  «      d   }||k(  r||k(  r| j                  S | j                  }|| j                  j                  z  }	|| j                  j                  z  }
t        j
                  j                  t	        j                  |dt        t        j                  |«      «      t        t        j                  |«      «      |f¬«      |	|
fd¬«      }t	        j                  |dd|f¬«      }|S )a#  
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher
        resolution images.

        Source:
        https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174
        r   ©rX   Úbicubic)Úimagesrd   re   ry   r  )r   r1  r³   r  r'   rm   rn   rj   rg   r8   Úsqrt)r•   r#  rp   rq   rt   r  rM   Únum_positionsÚpatch_pos_embedÚh0Úw0s              r1   r"  z3TFGroupViTVisionEmbeddings.interpolate_pos_encoding>  sð   € ô (2°*Ó'=Ñ$ˆ
�K Ü" 4×#;Ñ#;Ó<¸QÑ?ˆà˜-Ò'¨F°eªOØ×+Ñ+Ð+Ø×2Ñ2ˆØ�t—{‘{×-Ñ-Ñ-ˆØ�d—k‘k×,Ñ,Ñ,ˆÜŸ(™(Ÿ/™/Ü—:‘:Ø¨¬3¬t¯y©y¸Ó/GÓ+HÌ#ÌdÏiÉiÐXeÓNfÓJgÐilÐ'môð �b�Øð *ó 
ˆô Ÿ*™*¨OÀAÀrÈ3À<ÔPˆØÐr3   c                óà   — t        |«      \  }}}}| j                  ||¬«      }| j                  |«      }|r|| j                  |||«      z   }n|| j                  z   }| j                  |«      }|S )N)r"  )r   r+  r.  r"  r1  r,  )r•   r!  r"  r»   Ú_rp   rq   r#  s           r1   r½   zTFGroupViTVisionEmbeddings.callY  s   € ô )¨Ó6Ñˆˆ1ˆf�eØ×*Ñ*¨<ÐRjÐ*Ókˆ
Ø—^‘^ JÓ/ˆ
ñ $Ø# d×&CÑ&CÀJÐPVÐX]Ó&^Ñ^‰Jà# d×&>Ñ&>Ñ>ˆJà—\‘\ *Ó-ˆ
àÐr3   rÅ   rÉ   )rš   rÇ   r&  r'  )	r›   rœ   r�   rž   r­   rÁ   r"  r½   rË   rÌ   s   @r1   r)  r)    sD   ø„ ñõ
óLó,ð8 afðØ%ðØAEðØY]ðà	÷r3   r)  c                  óL   ‡ — e Zd Zdˆ fd„Zddˆ fd„Z	 	 	 d	 	 	 	 	 	 	 dd„Zˆ xZS )	ÚTFGroupViTTextEmbeddingsc                óT   •— t        ‰| �  di |¤Ž |j                  | _        || _        y )Nr    )r¬   r­   rÂ   Ú	embed_dimr³   r´   s      €r1   r­   z!TFGroupViTTextEmbeddings.__init__m  s'   ø€ Ü‰ÑÑ"˜6Ò"à×+Ñ+ˆŒàˆ�r3   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Úweightr2  Úposition_embeddingr#  )r'   rÀ   r5  r³   Ú
vocab_sizerD  r   Úinitializer_factorr  rG  Úmax_position_embeddingsrH  r¬   rÁ   )r•   rÄ   r¶   s     €r1   rÁ   zTFGroupViTTextEmbeddings.buildt  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Úindicesry   r   )ÚstartÚlimitrÙ   r   )ÚinputÚ	multiples)r   r   r³   rI  r'   ÚgatherrG  r   Úexpand_dimsr<   rH  r*   )r•   Ú	input_idsÚposition_idsÚinputs_embedsrÄ   Úposition_embedsÚfinal_embeddingss          r1   r½   zTFGroupViTTextEmbeddings.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ˆØ(¨?Ñ:ÐàÐr3   ©r³   r   rÉ   )rÄ   ztf.TensorShape©NNN)rV  r‡   rW  r‡   rX  r‡   rš   rÇ   )r›   rœ   r�   r­   rÁ   r½   rË   rÌ   s   @r1   rB  rB  l  sC   ø„ õö#ð* *.Ø,0Ø-1ð	 à&ð ð *ð ð +ð	 ð
 
÷ r3   rB  c                  ó„   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 dˆ fd„Zd	d„Zed„ «       Zd
d„Zd	dd„Z		 	 	 d	 	 	 	 	 	 	 	 	 dd„Z
ˆ xZS )ÚTFGroupViTStagezMThis corresponds to the `GroupingLayer` class in the GroupViT implementation.c                ó°  •— t        ‰| �  d
i |¤Ž || _        || _        || _        t        |«      D �cg c]  }t        |d|› �¬«      ‘Œ c}| _        |dkD  rt        |||d¬«      | _	        nd | _	        |dkD  rS|dkD  rNt        j                  j                  |j                  d¬«      t        |||j                  dz  |d	¬«      g| _        y d | _        y c c}w )Nú	layers_._r¥   r   Ú
downsample)r³   rù   rò   r¦   zgroup_projector.0r¨   r_   zgroup_projector.1r    )r¬   r­   r³   rG   rù   r<   ÚTFGroupViTEncoderLayerr¯   rè   ra  r   r°   r±   rø   rÂ   Úgroup_projector)	r•   r³   rG   Únum_prev_group_tokenrù   rò   rµ   Úir¶   s	           €r1   r­   zTFGroupViTStage.__init__©  sâ   ø€ ô 	‰ÑÑ"˜6Ò"ØˆŒØˆŒ
Ø.ˆÔÜUZÐ[`ÓUaÖbÐPQÔ-¨f¸YÀqÀc¸?ÖKÒbˆŒà˜QÒÜ3ØØ /Ø!1Ø!ô	ˆD�Oð #ˆDŒOà !Ò#¨¸!Ò(;ä—‘×/Ñ/¸×8MÑ8MÐTgÐ/ÓhÜ"ØÐ0°&×2DÑ2DÈÑ2IÈ?Ðatôð$ˆDÕ ð $(ˆDÕ ùò) cs   ³Cc                ó,  — | j                   dkD  r<| j                  d| j                   | j                  j                  fddd¬«      | _        nd | _        | j
                  ry d| _        t        | dd «      �Mt        j                  | j                  j                  «      5  | j                  j                  d «       d d d «       t        | dd «      �J| j                  D ];  }t        j                  |j                  «      5  |j                  d «       d d d «       Œ= t        | d	d «      �¾t        j                  | j                  d   j                  «      5  | j                  d   j                  d d | j                  j                  g«       d d d «       t        j                  | j                  d   j                  «      5  | j                  d   j                  d «       d d d «       y y # 1 sw Y   �Œ-xY w# 1 sw Y   �Œ!xY w# 1 sw Y   ŒxxY w# 1 sw Y   y xY w)
Nr   r   r
  TÚgroup_tokenr2  ra  r¯   rc  )rù   r5  r³   rÂ   rg  r¿   r‘   r'   rÀ   ra  r¦   rÁ   r¯   rc  ©r•   rÄ   Úlayers      r1   rÁ   zTFGroupViTStage.buildÌ  sÏ  € Ø×Ñ !Ò#Ø#Ÿ™Ø˜$×.Ñ.°·±×0GÑ0GÐHØ#ØØ"ð	  /ó  ˆDÕð  $ˆDÔà�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜ 4Ó(Ð4ØŸ™ò &�Ü—]‘] 5§:¡:Ó.ñ &Ø—K‘K Ô%÷&ð &ð&ô �4Ð*¨DÓ1Ð=Ü—‘˜t×3Ñ3°AÑ6×;Ñ;Ó<ñ UØ×$Ñ$ QÑ'×-Ñ-¨t°T¸4¿;¹;×;RÑ;RÐ.SÔT÷Uä—‘˜t×3Ñ3°AÑ6×;Ñ;Ó<ñ 4Ø×$Ñ$ QÑ'×-Ñ-¨dÔ3÷4ð 4ð >÷,ñ ,ú÷&ñ &ú÷Uð Uú÷4ð 4ús0   ÂG$Ã<G1Å6G>Æ;H
Ç$G.Ç1G;	Ç>HÈ
Hc                ó   — | j                   d uS rÉ   )rg  r™   s    r1   Úwith_group_tokenz TFGroupViTStage.with_group_tokenç  s   € à×Ñ tÐ+Ð+r3   c                óz   — | j                   r,|d d …d | j                   …f   |d d …| j                   d …f   fS |d fS rÉ   )rk  rù   )r•   r¼   s     r1   Úsplit_xzTFGroupViTStage.split_xë  sN   € Ø× Ò Ø’QÐ/˜4×/Ñ/Ð/Ð/Ð/Ñ0°!²A¸×8LÑ8LÐ7LÑ7NÐ4NÑ2OÐOÐOà�d�7ˆNr3   c                ó<   — |€|S t        j                  ||gd¬«      S )Nr   rÙ   )r'   Úconcat)r•   r¼   rg  s      r1   Úconcat_xzTFGroupViTStage.concat_xñ  s#   € ØÐØˆHÜ�y‰y˜!˜[Ð)°Ô2Ð2r3   c                óÊ  — | j                   r[t        j                  | j                  t	        |«      d   ddf¬«      }| j
                  �!| j
                  D ]
  } ||«      }Œ ||z   }nd}|}| j                  ||«      }| j                  D ]  } ||ddd¬«      }	|	d   }Œ | j                  |«      \  }}d}
| j                  �| j                  ||«      \  }}
||f}|r||
f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.
                `(config.encoder_attention_heads,)`.
            output_attentions (`bool`, *optional*):
                Whether or not to return the grouping tensors of Grouping block.
        r   r   )rS  N)Úattention_maskÚcausal_attention_maskÚoutput_attentions)
rk  r'   r*   rg  r   rc  rp  r¯   rm  ra  )r•   Úhidden_statesÚprev_group_tokenrt  r»   rg  ri  r¼   Úcat_xÚ	layer_outr  Úoutputss               r1   r½   zTFGroupViTStage.callö  s  € ð  × Ò ÜŸ'™' $×"2Ñ"2¼zÈ-Ó?XÐYZÑ?[Ð]^Ð`aÐ>bÔcˆKØ×#Ñ#Ð/Ø!×1Ñ1ò ?�EÙ',Ð-=Ó'>Ñ$ð?à)Ð,<Ñ<‘àˆKàˆà—‘˜a Ó-ˆØ—[‘[ò 	!ˆEÙØØ#Ø&*Ø"&ô	ˆIð ˜a‘L‰Eð	!ð Ÿ™ eÓ,‰ˆˆ;àˆ	Ø�?‰?Ð&ØŸ?™?¨1¨kÓ:‰LˆAˆyà�kÐ"ˆÙØ  Ñ,ˆGàˆr3   )
r³   r   rG   rg   rd  rg   rù   rg   rò   rg   rÉ   )r¼   rÇ   rš   rÇ   )r¼   rÇ   rg  r…   rš   rÇ   )NFF)
ru  rÇ   rv  r…   rt  rÈ   r»   rÈ   rš   úTuple[tf.Tensor])r›   rœ   r�   rž   r­   rÁ   Úpropertyrk  rm  rp  r½   rË   rÌ   s   @r1   r^  r^  ¦  sŸ   ø„ ÙWð!(à$ð!(ð ð!(ð "ð	!(ð
 ð!(ð õ!(óF4ð6 ñ,ó ð,óô3ð .2Ø"'Øð/à ð/ð +ð/ð  ð	/ð
 ð/ð 
÷/r3   r^  c                  óH   ‡ — e Zd Z	 	 	 d	 	 	 	 	 	 	 dˆ fd„Zddd„Zdd„Zˆ xZS )	r²   c                óf  •— t        ‰| �  di |¤Ž || _        t        |j                  «      | _        |�|n|j                  }|�|n|j                  }|�|n|}t        j                  j                  |d¬«      | _        t        j                  j                  |d¬«      | _        || _        || _        y )NÚfc1r¥   Úfc2r    )r¬   r­   r³   r
   Ú
hidden_actÚactivation_fnrÂ   Úintermediate_sizer   r¯   rÕ   r~  r  )r•   r³   rÂ   r‚  Úoutput_sizerµ   r¶   s         €r1   r­   zTFGroupViTMLP.__init__)  s©   ø€ ô 	‰ÑÑ"˜6Ò"ØˆŒÜ.¨v×/@Ñ/@ÓAˆÔØ%0Ð%<‘kÀ&×BTÑBTˆØ1BÐ1NÑ-ÐTZ×TlÑTlÐØ%0Ð%<‘kÀ+ˆÜ—<‘<×%Ñ%Ð&7¸eÐ%ÓDˆŒÜ—<‘<×%Ñ% k¸Ð%Ó>ˆŒØ!2ˆÔØ&ˆÕr3   c                ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rÉ   )r~  r�  r  )r•   ru  r»   s      r1   r½   zTFGroupViTMLP.call<  s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆØÐr3   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Á   rÂ   r  r‚  rÃ   s     r1   rÁ   zTFGroupViTMLP.buildB  sÌ   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó%Ð1Ü—‘˜tŸx™xŸ}™}Ó-ñ ?Ø—‘—‘  d¨D×,<Ñ,<Ð=Ô>÷?ä�4˜ Ó%Ð1Ü—‘˜tŸx™xŸ}™}Ó-ñ EØ—‘—‘  d¨D×,BÑ,BÐCÔD÷Eð Eð 2÷?ð ?ú÷Eð Eús   Á)C%Â2)C1Ã%C.Ã1C:r\  )r³   r   rÂ   úOptional[int]r‚  r†  rƒ  r†  rÆ   )ru  rÇ   r»   rÈ   rš   rÇ   rÉ   rÊ   rÌ   s   @r1   r²   r²   (  sD   ø„ ð &*Ø+/Ø%)ð'à$ð'ð #ð'ð )ð	'ð
 #õ'ô&÷	Er3   r²   c                  ó"   ‡ — e Zd Zddˆ fd„Zˆ xZS )rø   c                ó|   •— t         ‰| �  t        j                  |d¬«      ¬«      }t        j                  |d¬«      S )Nrx   ra   ©ru  )r¬   r½   r'   r@   )r•   r¼   r»   r¶   s      €r1   r½   zTFGroupViTMixerMLP.callO  s/   ø€ Ü‰G‰L¤r§|¡|°A¸IÔ'FˆLÓGˆÜ�|‰|˜A IÔ.Ð.r3   rÆ   )r»   rÈ   )r›   rœ   r�   r½   rË   rÌ   s   @r1   rø   rø   N  s   ø„ ÷/ò /r3   rø   c                  ób   ‡ — e Zd ZdZdˆ fd„Zdd„Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„Zd
d„Zˆ xZS )r®   z=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`: r  rÐ   r_   rÑ   )Úunitsr  r¦   rÒ   rÓ   )r-  Úout_projr    )r¬   r­   rÂ   rD  Únum_attention_headsÚattention_head_sizer   rJ  Únum_hidden_layersr8   r:  Úsqrt_att_head_sizer   r¯   rÕ   r   rÑ   rÒ   rÓ   r/  Úattention_dropoutr,  r�  )r•   r³   rµ   ÚfactorÚin_proj_stdÚout_proj_stdr¶   s         €r1   r­   zTFGroupViTAttention.__init__X  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ð +ó 
ˆ�r3   c                ó’   — t        j                  ||d| j                  | j                  f¬«      }t        j                  |g d¢¬«      S )Nry   r  ©r   r_   r   r	   ra   )r'   rj   rŽ  r�  r@   )r•   r  rt   s      r1   Útranspose_for_scoresz(TFGroupViTAttention.transpose_for_scores{  s;   € ä—‘ 6°*¸bÀ$×BZÑBZÐ\`×\tÑ\tÐ1uÔvˆô �|‰|˜FªÔ6Ð6r3   c                ó~  — t        |«      d   }|du}| j                  |¬«      }	|r%| j                  |¬«      }
| j                  |¬«      }n$| 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   N©ÚinputsTrÝ   r%   ry   )r=   rH   r—  ra   r  )r   rÑ   rÒ   rÓ   r˜  r'   rz   r)   r‘  r&   ÚdivideÚaddr   r,  r@   rj   rD  r�  )r•   ru  rr  rs  rt  r¸   r»   rt   Úis_cross_attentionÚmixed_query_layerÚmixed_key_layerÚmixed_value_layerÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚdkÚ_attention_probsÚattention_probsÚattention_outputry  s                        r1   r½   zTFGroupViTAttention.call‚  sÅ  € ô   Ó.¨qÑ1ˆ
Ø2¸$Ð>Ðà ŸK™K¨}˜KÓ=ÐÙØ"Ÿk™kÐ1F˜kÓGˆOØ $§¡Ð3H Ó IÑà"Ÿk™k°˜kÓ?ˆOØ $§¡°= Ó AÐà×/Ñ/Ð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Ðð Ÿ,™,Ð.>˜,Ó?ˆäŸ9™9 _°kÓBÐÜŸ<™<Ð(8º|ÔLÐô Ÿ:™:Ð-=ÀjÐRTÐVZ×VdÑVdÐEeÔfÐàŸ=™=Ð)9Ó:Ðñ ;LÐ#Ð%5Ð6ˆàˆð ScÐQdˆàˆr3   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¿   r‘   r'   rÀ   rÑ   r¦   rÁ   rD  rÒ   rÓ   r�  rÃ   s     r1   rÁ   zTFGroupViTAttention.build¿  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!r%  )r  rÇ   rt   rg   rš   rÇ   ©NNNNF)ru  rÇ   rr  r‡   rs  r‡   rt  úOptional[bool]r¸   r‡   r»   rÈ   rš   rz  rÉ   )	r›   rœ   r�   rž   r­   r˜  r½   rÁ   rË   rÌ   s   @r1   r®   r®   U  sr   ø„ ÙGõ 
óF7ð /3Ø59Ø,0Ø59Øð;à ð;ð ,ð;ð  3ð	;ð
 *ð;ð  3ð;ð ð;ð 
ó;÷zBr3   r®   c                  óJ   ‡ — e Zd Zdˆ fd„Z	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )rb  c                óN  •— t        ‰| �  di |¤Ž |j                  | _        t	        |d¬«      | _        t        j                  j                  |j                  d¬«      | _
        t        |d¬«      | _        t        j                  j                  |j                  d¬«      | _        y )NÚ	self_attnr¥   Úlayer_norm1r¨   rª   Úlayer_norm2r    )r¬   r­   rÂ   rD  r®   r¯  r   r¯   r°   r±   r°  r²   rª   r±  r´   s      €r1   r­   zTFGroupViTEncoderLayer.__init__Ó  s‚   ø€ Ü‰ÑÑ"˜6Ò"à×+Ñ+ˆŒÜ,¨V¸+ÔFˆŒÜ Ÿ<™<×:Ñ:À6×CXÑCXÐ_lÐ:ÓmˆÔÜ  ¨eÔ4ˆŒÜ Ÿ<™<×:Ñ:À6×CXÑCXÐ_lÐ:ÓmˆÕr3   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š  )ru  rr  rs  rt  r»   r   r‰  r   N)r°  r¯  r±  rª   )	r•   ru  rr  rs  rt  r»   ÚresidualÚattention_outputsry  s	            r1   r½   zTFGroupViTEncoderLayer.callÜ  s¡   € ð& !ˆà×(Ñ(°Ð(Ó>ˆØ ŸN™NØ'Ø)Ø"7Ø/Øð +ó 
Ðð *¨!Ñ,ˆØ  =Ñ0ˆà ˆØ×(Ñ(°Ð(Ó>ˆØŸ™¨}˜Ó=ˆØ  =Ñ0ˆà Ð"Ð%6°q°rÐ%:Ñ:ˆàˆr3   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¿   r‘   r'   rÀ   r¯  r¦   rÁ   r°  rD  rª   r±  rÃ   s     r1   rÁ   zTFGroupViTEncoderLayer.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Æ   )ru  rÇ   rr  rÇ   rs  rÇ   rt  rÈ   r»   rÈ   rš   rz  rÉ   rÊ   rÌ   s   @r1   rb  rb  Ò  sT   ø„ õnð ð'à ð'ð "ð'ð  )ð	'ð
  ð'ð ð'ð 
ó'÷REr3   rb  c                  óN   ‡ — e Zd Zdˆ fd„Z	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )ÚTFGroupViTTextEncoderc                óš   •— t        ‰| �  di |¤Ž t        |j                  «      D �cg c]  }t	        |d|› �¬«      ‘Œ c}| _        y c c}w )Nr`  r¥   r    )r¬   r­   r<   r�  rb  r¯   ©r•   r³   rµ   re  r¶   s       €r1   r­   zTFGroupViTTextEncoder.__init__  sC   ø€ Ü‰ÑÑ"˜6Ò"äUZÐ[a×[sÑ[sÓUtÖuÐPQÔ-¨f¸YÀqÀc¸?ÖKÒuˆ�ùÒus   ¨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    )rt  r   r   c              3  ó&   K  — | ]	  }|€Œ|–— Œ y ­wrÉ   r    ©r“   Úvs     r1   r–   z-TFGroupViTTextEncoder.call.<locals>.<genexpr>>  s   è ø€ Òe˜qÐWXÑWdœÑeùó   ‚Š©Úlast_hidden_stateru  ro   )Ú	enumerater¯   r—   r   )r•   ru  rr  rs  rt  Úoutput_hidden_statesÚreturn_dictr»   Úencoder_statesÚall_attentionsÚidxÚencoder_layerÚlayer_outputss                r1   r½   zTFGroupViTTextEncoder.call  s¾   € ñ  4™¸ˆÙ0™°dˆä"+¨D¯K©KÓ"8ò 	FÑˆC�Ù#Ø!/°=Ð2BÑ!B�á)ØØØ%Ø"3ô	ˆMð *¨!Ñ,ˆMâ Ø!/°=ÀÑ3CÐ2EÑ!E‘ð	Fñ  Ø+¨}Ð.>Ñ>ˆNáÜÑe ]°NÀNÐ$SÔeÓeÐeÜ Ø+¸>ÐVdô
ð 	
r3   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Á   rh  s      r1   rÁ   zTFGroupViTTextEncoder.buildC  óp   € Ø�:Š:ØØˆŒ
Ü�4˜ 4Ó(Ð4ØŸ™ò &�Ü—]‘] 5§:¡:Ó.ñ &Ø—K‘K Ô%÷&ð &ñ&ð 5÷&ð &úó   ÁA.Á.A7	r[  rÆ   )rr  rÇ   rs  rÇ   rt  rÈ   rÂ  rÈ   rÃ  rÈ   r»   rÈ   rš   zUnion[Tuple, TFBaseModelOutput]rÉ   rÊ   rÌ   s   @r1   r·  r·    s_   ø„ õvð ð#
ð "ð#
ð  )ð	#
ð
  ð#
ð #ð#
ð ð#
ð ð#
ð 
)ó#
÷J&r3   r·  c                  óJ   ‡ — e Zd Zdˆ fd„Z	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )ÚTFGroupViTVisionEncoderc                ó0  •— t        ‰| �  di |¤Ž t        t        |j                  «      «      D �cg c]T  }t        ||j                  |   |j                  |   |j                  |   |dkD  r|j                  |dz
     ndd|› �¬«      ‘ŒV c}| _        y c c}w )Nr   r   z	stages_._)r³   rG   rù   rò   rd  r¦   r    )	r¬   r­   r<   rK   Údepthsr^  Únum_group_tokensÚnum_output_groupsÚstagesr¹  s       €r1   r­   z TFGroupViTVisionEncoder.__init__N  s˜   ø€ Ü‰ÑÑ"˜6Ò"ô œ3˜vŸ}™}Ó-Ó.ö

ð ô ØØ—m‘m AÑ&Ø &× 7Ñ 7¸Ñ :Ø!'×!9Ñ!9¸!Ñ!<ØHIÈAÊ V×%=Ñ%=¸aÀ!¹eÒ%DÐSTØ   �_öò

ˆ�ùò 

s   ±ABc                óö   — |rdnd }|rdnd }d }| j                   D ]0  }	|r||fz   } |	|||«      }
|
d   }|
d   }|sŒ"|
d   €Œ(||
d   fz   }Œ2 |r||fz   }|st        d„ |||fD «       «      S t        |||¬«      S )Nr    r   r   r_   c              3  ó&   K  — | ]	  }|€Œ|–— Œ y ­wrÉ   r    r¼  s     r1   r–   z/TFGroupViTVisionEncoder.call.<locals>.<genexpr>z  s   è ø€ Òg˜qÐYZÑYfœÑgùr¾  r¿  )rÒ  r—   r   )r•   ru  rÂ  rt  rÃ  r»   Úall_hidden_statesÚall_groupingsrý   ÚstagerÈ  s              r1   r½   zTFGroupViTVisionEncoder.call]  sÉ   € ñ #7™B¸DÐÙ/™°Tˆàˆà—[‘[ò 
	DˆEÙ#Ø$5¸Ð8HÑ$HÐ!á! -°Ð?PÓQˆMà)¨!Ñ,ˆMØ(¨Ñ+ˆLâ  ]°1Ñ%5Ñ%AØ -°¸qÑ1AÐ0CÑ C‘ð
	Dñ  Ø 1°]Ð4DÑ DÐáÜÑg ]Ð4EÀ}Ð$UÔgÓgÐgÜ Ø+Ð;LÐYfô
ð 	
r3   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Á   rh  s      r1   rÁ   zTFGroupViTVisionEncoder.build  rÊ  rË  )r³   r   rš   ÚNonerÆ   )ru  rÇ   rÂ  rÈ   rt  rÈ   rÃ  rÈ   r»   rÈ   rš   zUnion[tuple, TFBaseModelOutput]rÉ   rÊ   rÌ   s   @r1   rÍ  rÍ  M  sR   ø„ õ
ð* ð 
à ð 
ð #ð 
ð  ð	 
ð
 ð 
ð ð 
ð 
)ó 
÷D&r3   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 )	ÚTFGroupViTTextTransformerc                ó  •— t        ‰| �  di |¤Ž t        |d¬«      | _        t	        |d¬«      | _        t        j                  j                  |j                  d¬«      | _
        |j                  | _        |j                  | _        y )Nr#  r¥   ÚencoderÚfinal_layer_normr¨   r    )r¬   r­   rB  r#  r·  rÝ  r   r¯   r°   r±   rÞ  Úeos_token_idrÂ   rD  r´   s      €r1   r­   z"TFGroupViTTextTransformer.__init__‹  so   ø€ Ü‰ÑÑ"˜6Ò"ä2°6ÀÔMˆŒÜ,¨V¸)ÔDˆŒÜ %§¡× ?Ñ ?È×H]ÑH]ÐdvÐ ?Ó wˆÔð #×/Ñ/ˆÔØ×+Ñ+ˆ�r3   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)rV  rW  r%   )ru  rr  rs  rt  rÂ  rÃ  r»   r   rš  r_   ry   rÙ   r   )ÚvaluesrH   rM  ©rÀ  Úpooler_outputru  ro   )r   r#  Ú_build_causal_attention_maskr&   r2   rÝ  rÞ  rß  r'   Ú	gather_ndÚstackr<   Úint64r8   rI   r)   Úint8r   ru  ro   )r•   rV  rr  rW  rt  rÂ  rÃ  r»   rÄ   Úembedding_outputrt   Ú
seq_lengthrs  Úencoder_outputsÚsequence_outputÚpooled_outputs                   r1   r½   zTFGroupViTTextTransformer.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ô	
ð 	
r3   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 )Nr    g     ˆÃÀr   ry   )Údiagonalr   )rR  rX   )r'   r)   ÚfillÚlinalgÚ	band_partÚset_diagÚbroadcast_to)r•   rt   rê  r&   ÚdiagÚto_masks         r1   rä  z6TFGroupViTTextTransformer._build_causal_attention_maskÝ  s‘   € ô
 �w‰w”r—w‘w 
˜}¨cÓ2°EÓ:ˆô —'‘'œ"Ÿ'™' :¨zÐ":¸HÓEÀuÓMˆô —)‘)×%Ñ% g¨q°"Ó5ˆä—)‘)×$Ñ$ W°tÐ$Ó<ˆä�‰ W°ZÀÀJÐPZÐ4[Ô\Ð\r3   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¿   r‘   r'   rÀ   r#  r¦   rÁ   rÝ  rÞ  rD  rÃ   s     r1   rÁ   zTFGroupViTTextTransformer.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úó$   ÁD2Â%D>Ã?)E
Ä2D;Ä>EÅ
Er[  rÆ   )rV  r   rr  rÇ   rW  rÇ   rt  rÈ   rÂ  rÈ   rÃ  rÈ   r»   rÈ   rš   ú5Union[TFBaseModelOutputWithPooling, Tuple[tf.Tensor]]rÉ   )
r›   rœ   r�   r­   r½   r'   Úfloat32rä  rÁ   rË   rÌ   s   @r1   rÛ  rÛ  Š  s�   ø„ õ	,ð& ðE
à#ðE
ð "ðE
ð  ð	E
ð
  ðE
ð #ðE
ð ðE
ð ðE
ð 
?óE
ðN JLÏÉó ]÷$Jr3   rÛ  c                  óJ   ‡ — e Zd Zdˆ fd„Z	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )ÚTFGroupViTVisionTransformerc                óî   •— t        ‰| �  di |¤Ž t        |d¬«      | _        t	        |d¬«      | _        t        j                  j                  |j                  d¬«      | _
        |j                  | _        y )Nr#  r¥   rÝ  r.  r¨   r    )r¬   r­   r)  r#  rÍ  rÝ  r   r¯   r°   r±   r.  rÂ   rD  r´   s      €r1   r­   z$TFGroupViTVisionTransformer.__init__   s^   ø€ Ü‰ÑÑ"˜6Ò"ä4°VÀ,ÔOˆŒÜ.¨v¸IÔFˆŒÜŸ™×8Ñ8À×AVÑAVÐ]hÐ8ÓiˆŒØ×+Ñ+ˆ�r3   c                ó  — | j                  |«      }| j                  ||||¬«      }|d   }| j                  |«      }t        j                  j                  |d¬«      }	|s
||	f|dd  z   S t        ||	|j                  |j                  ¬«      S )N)ru  rÂ  rt  rÃ  r   r   rÙ   râ  )	r#  rÝ  r.  r'   r8   r9   r   ru  ro   )
r•   r!  rt  rÂ  rÃ  r»   ré  rë  rÀ  rí  s
             r1   r½   z TFGroupViTVisionTransformer.call  sª   € ð  Ÿ?™?¨<Ó8ÐàŸ,™,Ø*Ø!5Ø/Ø#ð	 'ó 
ˆð ,¨AÑ.Ðð !ŸN™NÐ+<Ó=ÐÜŸ™×+Ñ+Ð,=ÀAÐ+ÓFˆáØ% }Ð5¸ÈÈÐ8KÑKÐKä+Ø/Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r3   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¿   r‘   r'   rÀ   r#  r¦   rÁ   rÝ  r.  rD  rÃ   s     r1   rÁ   z!TFGroupViTVisionTransformer.build)  s  € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ CØ—‘×$Ñ$ d¨D°$·.±.Ð%AÔB÷Cð Cð 8÷,ð ,ú÷)ð )ú÷Cð Cúrø  rÅ   rÆ   )r!  r   rt  rÈ   rÂ  rÈ   rÃ  rÈ   r»   rÈ   rš   z*Union[Tuple, TFBaseModelOutputWithPooling]rÉ   rÊ   rÌ   s   @r1   rü  rü  ÿ  sS   ø„ õ,ð ð
à&ð
ð  ð
ð #ð	
ð
 ð
ð ð
ð 
4ó
÷BCr3   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 )ÚTFGroupViTTextMainLayerc                óV   •— t        ‰| �  di |¤Ž || _        t        |d¬«      | _        y )NÚ
text_modelr¥   r    )r¬   r­   r³   rÛ  r  r´   s      €r1   r­   z TFGroupViTTextMainLayer.__init__=  s(   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒÜ3°FÀÔNˆ�r3   c                ó.   — | j                   j                  S rÉ   )r  r#  r™   s    r1   Úget_input_embeddingsz,TFGroupViTTextMainLayer.get_input_embeddingsB  s   € Ø�‰×)Ñ)Ð)r3   c                óˆ   — || j                   j                  _        t        |«      d   | j                   j                  _        y )Nr   )r  r#  rG  r   rI  )r•   râ   s     r1   Úset_input_embeddingsz,TFGroupViTTextMainLayer.set_input_embeddingsE  s0   € Ø,1ˆ�‰×"Ñ"Ô)Ü0:¸5Ó0AÀ!Ñ0Dˆ�‰×"Ñ"Õ-r3   c           	     ó˜   — |€t        d«      ‚t        |«      }|€t        j                  |d¬«      }| j	                  |||||||¬«      }	|	S )NzYou have to specify input_idsr   ©Údimsrâ   ©rV  rr  rW  rt  rÂ  rÃ  r»   )r   r   r'   rð  r  )
r•   rV  rr  rW  rt  rÂ  rÃ  r»   rÄ   Útext_model_outputss
             r1   r½   zTFGroupViTTextMainLayer.callI  sg   € ð ÐÜÐ<Ó=Ð=ä  Ó+ˆàÐ!ÜŸW™W¨+¸QÔ?ˆNà!Ÿ_™_ØØ)Ø%Ø/Ø!5Ø#Øð -ó 
Ðð "Ð!r3   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¿   r‘   r'   rÀ   r  r¦   rÁ   rÃ   s     r1   rÁ   zTFGroupViTTextMainLayer.buildh  si   € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ð ,ð 9÷,ð ,úó   ÁA1Á1A:r[  ©rš   zkeras.layers.Layer)râ   ztf.Variable©NNNNNNF©rV  úTFModelInputType | Nonerr  únp.ndarray | tf.Tensor | NonerW  r  rt  r¬  rÂ  r¬  rÃ  r¬  r»   rÈ   rš   rù  rÉ   )r›   rœ   r�   r   Úconfig_classr­   r  r  r   r½   rÁ   rË   rÌ   s   @r1   r  r  8  s™   ø„ ð &€LõOó
*óEð ð .2Ø8<Ø6:Ø,0Ø/3Ø&*Øð"à*ð"ð 6ð"ð 4ð	"ð
 *ð"ð -ð"ð $ð"ð ð"ð 
?ò"ó ð"÷<,r3   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 )
ÚTFGroupViTVisionMainLayerc                óV   •— t        ‰| �  di |¤Ž || _        t        |d¬«      | _        y )NÚvision_modelr¥   r    )r¬   r­   r³   rü  r  r´   s      €r1   r­   z"TFGroupViTVisionMainLayer.__init__v  s)   ø€ Ü‰ÑÑ"˜6Ò"ØˆŒÜ7¸À^ÔTˆÕr3   c                ó.   — | j                   j                  S rÉ   )r  r#  r™   s    r1   r  z.TFGroupViTVisionMainLayer.get_input_embeddings{  s   € Ø× Ñ ×+Ñ+Ð+r3   c                óL   — |€t        d«      ‚| j                  |||||¬«      }|S )Nú You have to specify pixel_values©r!  rt  rÂ  rÃ  r»   )r   r  )r•   r!  rt  rÂ  rÃ  r»   Úvision_model_outputss          r1   r½   zTFGroupViTVisionMainLayer.call~  sC   € ð ÐÜÐ?Ó@Ð@à#×0Ñ0Ø%Ø/Ø!5Ø#Øð  1ó  
Ðð $Ð#r3   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¿   r‘   r'   rÀ   r  r¦   rÁ   rÃ   s     r1   rÁ   zTFGroupViTVisionMainLayer.build”  sm   € Ø�:Š:ØØˆŒ
Ü�4˜¨Ó.Ð:Ü—‘˜t×0Ñ0×5Ñ5Ó6ñ .Ø×!Ñ!×'Ñ'¨Ô-÷.ð .ð ;÷.ð .úr  rÅ   r  r«  ©r!  r  rt  r¬  rÂ  r¬  rÃ  r¬  r»   rÈ   rš   rù  rÉ   )r›   rœ   r�   r   r  r­   r  r   r½   rÁ   rË   rÌ   s   @r1   r  r  q  sy   ø„ ð (€LõUó
,ð ð 15Ø,0Ø/3Ø&*Øð$à-ð$ð *ð$ð -ð	$ð
 $ð$ð ð$ð 
?ò$ó ð$÷*.r3   r  c                  óò   ‡ — e Zd ZeZdˆ fd„Zdd„Ze	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„«       Ze	 	 	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 dd„«       Z	e	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z
ˆ xZS )ÚTFGroupViTMainLayerc                óŽ  •— t        ‰| �  di |¤Ž t        |j                  t        «      s"t        dt        |j                  «      › d�«      ‚t        |j                  t        «      s"t        dt        |j                  «      › d�«      ‚|| _	        |j                  }|j                  }|j                  | _
        |j                  | _        |j                  | _        |j                  | _        t        |d¬«      | _        t#        |d¬«      | _        t&        j(                  j+                  | j                  d¬«      t&        j(                  j-                  dd	d
¬«      t&        j(                  j/                  d¬«      t&        j(                  j+                  | j                  d¬«      g| _        t&        j(                  j+                  | j                  d¬«      t&        j(                  j-                  dd	d
¬«      t&        j(                  j/                  d¬«      t&        j(                  j+                  | j                  d¬«      g| _        y )NzOconfig.text_config is expected to be of type GroupViTTextConfig but is of type ú.zSconfig.vision_config is expected to be of type GroupViTVisionConfig but is of type r  r¥   r  zvisual_projection.0zvisual_projection.1gÍÌÌÌÌÌì?gñhãˆµøä>)r¦   Úmomentumr©   zvisual_projection.2zvisual_projection.3ztext_projection.0ztext_projection.1ztext_projection.2ztext_projection.3r    )r¬   r­   ró   Útext_configr   Ú	TypeErrorÚtypeÚvision_configr   r³   Úprojection_dimÚprojection_intermediate_dimrÂ   Útext_embed_dimÚvision_embed_dimrÛ  r  rü  r  r   r¯   rÕ   ÚBatchNormalizationÚReLUÚvisual_projectionÚtext_projection)r•   r³   rµ   r%  r(  r¶   s        €r1   r­   zTFGroupViTMainLayer.__init__¢  sò  ø€ Ü‰ÑÑ"˜6Ò"ä˜&×,Ñ,Ô.@ÔAÜðÜ˜×+Ñ+Ó,Ð-¨Qð0óð ô
 ˜&×.Ñ.Ô0DÔEÜðÜ˜×-Ñ-Ó.Ð/¨qð2óð ð
 ˆŒà×(Ñ(ˆØ×,Ñ,ˆà$×3Ñ3ˆÔØ+1×+MÑ+MˆÔ(Ø)×5Ñ5ˆÔØ -× 9Ñ 9ˆÔä3°KÀlÔSˆŒÜ7¸ÈNÔ[ˆÔô �L‰L×Ñ˜t×?Ñ?ÐF[ÐÓ\Ü�L‰L×+Ñ+Ð1FÐQTÐ^bÐ+ÓcÜ�L‰L×ÑÐ#8ÐÓ9Ü�L‰L×Ñ˜t×2Ñ2Ð9NÐÓOð	"
ˆÔô �L‰L×Ñ˜t×?Ñ?ÐFYÐÓZÜ�L‰L×+Ñ+Ð1DÈsÐ\`Ð+ÓaÜ�L‰L×ÑÐ#6ÐÓ7Ü�L‰L×Ñ˜t×2Ñ2Ð9LÐÓMð	 
ˆÕr3   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 «      ��!t        j                  | j                  d   j                  «      5  | j                  d   j                  d d d | j                   g«       d d d «       t        j                  | j                  d	   j                  «      5  | j                  d	   j                  d | j"                  f«       d d d «       t        j                  | j                  d
   j                  «      5  | j                  d
   j                  d d d | j"                  g«       d d d «       t        | dd «      ��"t        j                  | j$                  d   j                  «      5  | j$                  d   j                  d d d | j&                  g«       d d d «       t        j                  | j$                  d	   j                  «      5  | j$                  d	   j                  d | j"                  f«       d d d «       t        j                  | j$                  d
   j                  «      5  | j$                  d
   j                  d d d | j"                  g«       d d d «       y y # 1 sw Y   �ŒÄxY w# 1 sw Y   �ŒwxY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒÃxY w# 1 sw Y   �Œox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_scaler2  r  r  r/  r   r   r	   r0  )r5  r   ÚinitializersÚConstantr³   Úlogit_scale_init_valuer2  r¿   r‘   r'   rÀ   r  r¦   rÁ   r  r/  r,  r*  r0  r+  rÃ   s     r1   rÁ   zTFGroupViTMainLayer.buildË  sE  € ØŸ?™?ØÜ×*Ñ*×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°aÑ8×=Ñ=Ó>ñ [Ø×&Ñ& qÑ)×/Ñ/°°t¸TÀ4×CXÑCXÐ0YÔZ÷[ä—‘˜t×5Ñ5°aÑ8×=Ñ=Ó>ñ ZØ×&Ñ& qÑ)×/Ñ/°°t×7WÑ7WÐ0XÔY÷Zä—‘˜t×5Ñ5°aÑ8×=Ñ=Ó>ñ fØ×&Ñ& qÑ)×/Ñ/°°t¸TÀ4×CcÑCcÐ0dÔe÷fä�4Ð*¨DÓ1Ñ=Ü—‘˜t×3Ñ3°AÑ6×;Ñ;Ó<ñ WØ×$Ñ$ QÑ'×-Ñ-¨t°T¸4À×ATÑATÐ.UÔV÷Wä—‘˜t×3Ñ3°AÑ6×;Ñ;Ó<ñ XØ×$Ñ$ QÑ'×-Ñ-¨t°T×5UÑ5UÐ.VÔW÷Xä—‘˜t×3Ñ3°AÑ6×;Ñ;Ó<ñ dØ×$Ñ$ QÑ'×-Ñ-¨t°T¸4À×AaÑAaÐ.bÔc÷dð dð >÷,ñ ,ú÷.ñ .ú÷[ñ [ú÷Zñ Zú÷fñ fú÷Wñ Wú÷Xð Xú÷dð dús`   ÂM4Ã0NÅ-NÆ/+NÈ-N(É=-N5Ë+OÌ=-OÍ4M>ÎNÎNÎN%Î(N2Î5N?ÏOÏOc           	     óØ   — |€t        d«      ‚t        |«      }|€t        j                  |d¬«      }| j	                  |||||||¬«      }	|	d   }
| j
                  D ]
  } ||
«      }
Œ |
}|S )Nú$You have to specify either input_idsr   r	  r  )r   r   r'   rð  r  r0  )r•   rV  rr  rW  rt  rÂ  rÃ  r»   rÄ   Útext_outputsrí  ri  Útext_featuress                r1   Úget_text_featuresz%TFGroupViTMainLayer.get_text_featuresë  s•   € ð ÐÜÐCÓDÐDä  Ó+ˆàÐ!ÜŸW™W¨+¸QÔ?ˆNà—‘ØØ)Ø%Ø/Ø!5Ø#Øð 'ó 
ˆð % Q™ˆØ×)Ñ)ò 	1ˆEÙ! -Ó0‰Mð	1ð &ˆØÐr3   c                óŒ   — |€t        d«      ‚| j                  |||||¬«      }|d   }| j                  D ]
  } ||«      }Œ |}	|	S )Nr  r  r   )r   r  r/  )
r•   r!  rt  rÂ  rÃ  r»   Úvision_outputsrí  ri  Úimage_featuress
             r1   Úget_image_featuresz&TFGroupViTMainLayer.get_image_features  sr   € ð ÐÜÐ?Ó@Ð@à×*Ñ*Ø%Ø/Ø!5Ø#Øð +ó 
ˆð ' qÑ)ˆØ×+Ñ+ò 	1ˆEÙ! -Ó0‰Mð	1ð 'ˆØÐr3   c           
     ó  — |€t        d«      ‚|€t        d«      ‚t        |«      }|€t        j                  |d¬«      }|rd}| j	                  ||||	|
¬«      }| j                  ||||||	|
¬«      }|d   }| j                  D ]
  } ||«      }Œ |d   }| j                  D ]
  } ||«      }Œ |t        j                  |dd¬	«      z  }|t        j                  |dd¬	«      z  }t        j                  j                  | j                  «      }t        j                  ||d¬
«      |z  }t        j                  |«      }d }|�r…|d   }t        j                  |dt        |«      d   f¬«      }| j                  D ]
  } ||«      }Œ |r|d   }n|d   }t        ||j                   dd  «      }|t        j                  |ddd¬«      z  }t        j                  ||d¬
«      |z  }t        j                  ||j                   d   d|j                   d   f¬«      }t        j                  |d¬«      }t        j                  |t        |«      d   t        |«      d   df¬«      }t        j                  ||«      |z  }t        j                  ||j                   d   |j                   d   |j                   d   |j                   d   f¬«      }d }|rt#        |«      d   }|	s|�
|||||||f}n||||||f}|�|f|z   S |S t%        ||||||||¬«      S )Nr7  r  r   r	  Tr  r  ry   rß   rÝ   r   r7  r	   r_   Ú	euclidean)r  ÚordrH   rà   rx   ra   )N.)r†   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   )r   r   r'   rð  r  r  r/  r0  Únormr8   Úexpr2  rz   r@   rj   r‚   rX   rD   r„   )r•   rV  r!  rr  rW  Úreturn_lossrt  rÂ  Úoutput_segmentationrÃ  r»   rÄ   r<  r8  rŒ   ri  r‹   r2  r‰   rˆ   Ú
seg_logitsÚimage_group_embedsro   ÚgroupingÚlogits_per_image_groupÚflatten_groupingr†   Úoutputs                               r1   r½   zTFGroupViTMainLayer.call*  s™  € ð ÐÜÐCÓDÐDØÐÜÐ?Ó@Ð@ä  Ó+ˆàÐ!ÜŸW™W¨+¸QÔ?ˆNÙØ $ÐØ×*Ñ*Ø%Ø/Ø!5Ø#Øð +ó 
ˆð —‘ØØ)Ø%Ø/Ø!5Ø#Øð 'ó 
ˆð & aÑ(ˆØ×+Ñ+ò 	/ˆEÙ  Ó.‰Lð	/ð # 1‘oˆØ×)Ñ)ò 	-ˆEÙ Ó,‰Kð	-ð $¤b§g¡g¨lÀÈdÔ&SÑSˆØ!¤B§G¡G¨K¸bÈ4Ô$PÑPˆô —g‘g—k‘k $×"2Ñ"2Ó3ˆÜŸ)™) K°È4ÔPÐS^Ñ^ˆÜŸ<™<¨Ó8Ðàˆ
Úð "0°Ñ!2Ðä!#§¡Ð,>ÀrÌ:ÐVhÓKiÐjlÑKmÐFnÔ!oÐØ×/Ñ/ò ?�Ù%*Ð+=Ó%>Ñ"ð?á#Ø+¨AÑ.‘
à+¨AÑ.�
ä3°JÀ×@RÑ@RÐSTÐSUÐ@VÓWˆHð "4´b·g±gØ)¨{ÀÈdô7ñ "Ðô &(§Y¡YÐ/AÀ;Ð\`Ô%aÐdoÑ%oÐ"ä%'§Z¡ZØ&¨|×/AÑ/AÀ!Ñ/DÀbÈ+×J[ÑJ[Ð\]ÑJ^Ð._ô&Ð"ô &(§\¡\Ð2HÈyÔ%YÐ"ô  "Ÿz™z¨(¼:ÀhÓ;OÐPQÑ;RÔT^Ð_gÓThÐijÑTkÐmoÐ:pÔqÐô Ÿ™Ð#9Ð;KÓLÈ{ÑZˆJÜŸ™Ø :×#3Ñ#3°AÑ#6¸
×8HÑ8HÈÑ8KÈXÏ^É^Ð\]ÑM^Ð`h×`nÑ`nÐopÑ`qÐ"rôˆJð ˆÙÜ  Ó1°)Ñ<ˆDáØÐ%à$Ø#ØØØ Ø Ø"ð‘ð +¨O¸[È,ÐXdÐftÐu�Ø)-Ð)9�T�G˜fÑ$ÐE¸vÐEä$ØØ-Ø+Ø *Ø#Ø%Ø*Ø .ô	
ð 		
r3   r%  rÉ   r  ©rV  r  rr  r  rW  r  rt  r¬  rÂ  r¬  rÃ  r¬  r»   rÈ   rš   rÇ   r«  ©r!  r  rt  r¬  rÂ  r¬  rÃ  r¬  r»   rÈ   rš   rÇ   ©
NNNNNNNNNF©rV  r  r!  r  rr  r  rW  r  rD  r¬  rt  r¬  rÂ  r¬  rE  r¬  rÃ  r¬  r»   rÈ   rš   z.Union[TFGroupViTModelOutput, Tuple[tf.Tensor]])r›   rœ   r�   r   r  r­   rÁ   r   r:  r>  r½   rË   rÌ   s   @r1   r!  r!  �  s�  ø„ ð "€Lõ'
óRdð@ ð .2Ø8<Ø6:Ø,0Ø/3Ø&*Øð!à*ð!ð 6ð!ð 4ð	!ð
 *ð!ð -ð!ð $ð!ð ð!ð 
ò!ó ð!ðF ð 15Ø,0Ø/3Ø&*Øðà-ðð *ðð -ð	ð
 $ðð ðð 
òó ðð4 ð .2Ø04Ø8<Ø6:Ø&*Ø,0Ø/3Ø.2Ø&*Øð|
à*ð|
ð .ð|
ð 6ð	|
ð
 4ð|
ð $ð|
ð *ð|
ð -ð|
ð ,ð|
ð $ð|
ð ð|
ð 
8ò|
ó ô|
r3   r!  c                  ó   — e Zd ZdZeZdZy)ÚTFGroupViTPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ÚgroupvitN)r›   rœ   r�   rž   r   r  Úbase_model_prefixr    r3   r1   rQ  rQ  ª  s   „ ñð
 "€LØ"Ñr3   rQ  aB  
    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>

    TF 2.0 models accepts two formats as inputs:

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

    This second option is useful when using [`keras.Model.fit`] method which currently requires having all the
    tensors in the first argument of the model call function: `model(inputs)`.

    If you choose this second option, 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})`

    </Tip>

    Args:
        config ([`GroupViTConfig`]): 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 [`~PreTrainedModel.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Zdˆ fd„Ze ee	j                  d«      «       eee¬«      	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„«       «       «       Zd
d„Zˆ xZS )ÚTFGroupViTTextModelrV  c                óP   •— t        ‰| �  |g|¢­i |¤Ž t        |d¬«      | _        y ©NrR  r¥   )r¬   r­   r  rR  ©r•   r³   r›  rµ   r¶   s       €r1   r­   zTFGroupViTTextModel.__init__A  s(   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3ä/°¸ZÔHˆ�r3   úbatch_size, sequence_length©Úoutput_typer  c           	     ó6   — | j                  |||||||¬«      }|S )aO  
        Returns:

        Examples:

        ```python
        >>> from transformers import CLIPTokenizer, TFGroupViTTextModel

        >>> tokenizer = CLIPTokenizer.from_pretrained("nvidia/groupvit-gcc-yfcc")
        >>> model = TFGroupViTTextModel.from_pretrained("nvidia/groupvit-gcc-yfcc")

        >>> 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
        ```r  ©rR  )	r•   rV  rr  rW  rt  rÂ  rÃ  r»   ry  s	            r1   r½   zTFGroupViTTextModel.callF  s3   € ð> —-‘-ØØ)Ø%Ø/Ø!5Ø#Øð  ó 
ˆð ˆr3   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©NTrR  ©r¿   r‘   r'   rÀ   rR  r¦   rÁ   rÃ   s     r1   rÁ   zTFGroupViTTextModel.buildq  ói   € Ø�:Š:ØØˆŒ
Ü�4˜ TÓ*Ð6Ü—‘˜tŸ}™}×1Ñ1Ó2ñ *Ø—‘×#Ñ# DÔ)÷*ð *ð 7÷*ð *úr  r[  r  r  rÉ   )r›   rœ   r�   r   r  Úmain_input_namer­   r   r   ÚGROUPVIT_TEXT_INPUTS_DOCSTRINGÚformatr   r   r½   rÁ   rË   rÌ   s   @r1   rU  rU  =  s¿   ø„ Ø%€LØ!€OõIð
 Ù*Ð+I×+PÑ+PÐQnÓ+oÓpÙÐ+GÐVhÔið .2Ø8<Ø6:Ø,0Ø/3Ø&*Øð&à*ð&ð 6ð&ð 4ð	&ð
 *ð&ð -ð&ð $ð&ð ð&ð 
?ò&ó jó qó ð&÷P*r3   rU  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 )
ÚTFGroupViTVisionModelr!  c                óP   •— t        ‰| �  |g|¢­i |¤Ž t        |d¬«      | _        y rW  )r¬   r­   r  rR  rX  s       €r1   r­   zTFGroupViTVisionModel.__init__~  s(   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3ä1°&¸zÔJˆ�r3   rZ  c                ó2   — | j                  |||||¬«      }|S )aî  
        Returns:

        Examples:

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

        >>> processor = AutoProcessor.from_pretrained("nvidia/groupvit-gcc-yfcc")
        >>> model = TFGroupViTVisionModel.from_pretrained("nvidia/groupvit-gcc-yfcc")

        >>> 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
        ```r  r]  )r•   r!  rt  rÂ  rÃ  r»   ry  s          r1   r½   zTFGroupViTVisionModel.callƒ  s.   € ðD —-‘-Ø%Ø/Ø!5Ø#Øð  ó 
ˆð ˆr3   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     r1   rÁ   zTFGroupViTVisionModel.build¯  ra  r  rÅ   r«  r  rÉ   )r›   rœ   r�   r   r  rb  r­   r   r   Ú GROUPVIT_VISION_INPUTS_DOCSTRINGr   r   r½   rÁ   rË   rÌ   s   @r1   rf  rf  z  s™   ø„ Ø'€LØ$€OõKð
 Ù*Ð+KÓLÙÐ+GÐVjÔkð 15Ø,0Ø/3Ø&*Øð'à-ð'ð *ð'ð -ð	'ð
 $ð'ð ð'ð 
?ò'ó ló Mó ð'÷R*r3   rf  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 )ÚTFGroupViTModelc                óP   •— t        ‰| �  |g|¢­i |¤Ž t        |d¬«      | _        y rW  )r¬   r­   r!  rR  rX  s       €r1   r­   zTFGroupViTModel.__init__¼  s(   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3ä+¨F¸ÔDˆ�r3   rY  c           	     óJ   — | 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 [`TFGroupViTTextModel`].

        Examples:

        ```python
        >>> from transformers import CLIPTokenizer, TFGroupViTModel

        >>> model = TFGroupViTModel.from_pretrained("nvidia/groupvit-gcc-yfcc")
        >>> tokenizer = CLIPTokenizer.from_pretrained("nvidia/groupvit-gcc-yfcc")

        >>> 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  )rR  r:  )	r•   rV  rr  rW  rt  rÂ  rÃ  r»   r9  s	            r1   r:  z!TFGroupViTModel.get_text_featuresÁ  s:   € ð: Ÿ™×7Ñ7ØØ)Ø%Ø/Ø!5Ø#Øð 8ó 
ˆð Ðr3   c                óF   — | j                   j                  |||||¬«      }|S )aF  
        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 [`TFGroupViTVisionModel`].

        Examples:

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

        >>> model = TFGroupViTModel.from_pretrained("nvidia/groupvit-gcc-yfcc")
        >>> processor = AutoProcessor.from_pretrained("nvidia/groupvit-gcc-yfcc")

        >>> 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  )rR  r>  )r•   r!  rt  rÂ  rÃ  r»   r=  s          r1   r>  z"TFGroupViTModel.get_image_featuresê  s5   € ðB Ÿ™×9Ñ9Ø%Ø/Ø!5Ø#Øð :ó 
ˆð Ðr3   rZ  c                ó<   — | j                  |||||||||	|
¬«
      }|S )a»  
        Returns:

        Examples:

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

        >>> model = TFGroupViTModel.from_pretrained("nvidia/groupvit-gcc-yfcc")
        >>> processor = AutoProcessor.from_pretrained("nvidia/groupvit-gcc-yfcc")

        >>> 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.math.softmax(logits_per_image, axis=1)  # we can take the softmax to get the label probabilities
        ```)
rV  r!  rr  rW  rD  rt  rÂ  rE  rÃ  r»   r]  )r•   rV  r!  rr  rW  rD  rt  rÂ  rE  rÃ  r»   ry  s               r1   r½   zTFGroupViTModel.call  s=   € ðT —-‘-ØØ%Ø)Ø%Ø#Ø/Ø!5Ø 3Ø#Øð  ó 
ˆð ˆr3   c                ó   — |S rÉ   r    )r•   rK  s     r1   Úserving_outputzTFGroupViTModel.serving_outputN  s	   € ð ˆr3   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     r1   rÁ   zTFGroupViTModel.buildT  ra  r  r%  r  rL  r«  rM  rN  rO  )rK  r„   rš   r„   rÉ   )r›   rœ   r�   r   r  r­   r   r   rc  rd  r:  rj  r>  ÚGROUPVIT_INPUTS_DOCSTRINGr   r„   r½   rr  rÁ   rË   rÌ   s   @r1   rl  rl  ¸  sé  ø„ à!€LõEð
 Ù*Ð+I×+PÑ+PÐQnÓ+oÓpð .2Ø8<Ø6:Ø,0Ø/3Ø&*Øð%à*ð%ð 6ð%ð 4ð	%ð
 *ð%ð -ð%ð $ð%ð ð%ð 
ò%ó qó ð%ðN Ù*Ð+KÓLð 15Ø,0Ø/3Ø&*Øð'à-ð'ð *ð'ð -ð	'ð
 $ð'ð ð'ð 
ò'ó Mó ð'ðR Ù*Ð+D×+KÑ+KÐLiÓ+jÓkÙÐ+@È~Ô^ð .2Ø04Ø8<Ø6:Ø&*Ø,0Ø/3Ø.2Ø&*Øð4à*ð4ð .ð4ð 6ð	4ð
 4ð4ð $ð4ð *ð4ð -ð4ð ,ð4ð $ð4ð ð4ð 
8ò4ó _ó ló ð4ól÷*r3   rl  )rl  rQ  rU  rf  rÉ   )r,   rÇ   r-   r†  )r=   rÇ   rš   rÇ   )rA   rÇ   rš   rÇ   )r=   rÇ   rM   rg   rš   rÇ   )r   Fry   )
r=   rÇ   rY   ÚfloatrZ   rÈ   rM   rg   rš   rÇ   rÆ   )
ro   rÇ   rp   rg   rq   rg   rf   rÈ   rš   rÇ   )ro   rz  r|   z
Tuple[int]rš   rÇ   )]rž   Ú
__future__r   Úcollections.abcrõ   r8   Údataclassesr   Útypingr   r   r   r   Únumpyrh   Ú
tensorflowr'   Úactivations_tfr
   Úmodeling_tf_outputsr   r   Úmodeling_tf_utilsr   r   r   r   r   r   Útf_utilsr   r   r   Úutilsr   r   r   r   r   r   Úconfiguration_groupvitr   r   r   Ú
get_loggerr›   ÚloggerÚtensorflow_probabilityrT   rU   ÚNormalr@  ÚImportErrorÚerrorÚ_CHECKPOINT_FOR_DOCr+   r2   r>   rD   rR   r]   rv   r‚   r„   r¯   ÚLayerr¢   rÎ   rè   r  r)  rB  r^  r²   rø   r®   rb  r·  rÍ  rÛ  rü  r  r  r!  rQ  ÚGROUPVIT_START_DOCSTRINGrc  rj  rt  rU  rf  rl  Ú__all__r    r3   r1   ú<module>rŒ     s–  ðñ å "ã Û Ý !ß .Ó .ã Û å /ß R÷÷ ÷ SÑ R÷÷ ÷ ]Ñ \ð 
ˆ×	Ñ	˜HÓ	%€ñ 'Ô(ð
Û,ð ×Ñ×$Ñ$¨°CÐ$Ó8‰ðÛ,ð ×Ñ×$Ñ$¨°CÐ$Ó8ˆð 1Ð ð €ô
6óó-óô"ô2#óL,ð8 ô/
˜Kó /
ó ð/
ôdL E§L¡L×$6Ñ$6ô LôD?G §¡× 2Ñ 2ô ?GôDT.˜EŸL™L×.Ñ.ô T.ôpKM §¡× 2Ñ 2ô KMô^N §¡×!3Ñ!3ô Nôd7 ˜uŸ|™|×1Ñ1ô 7 ôt�e—l‘l×(Ñ(ô ôD#E�E—L‘L×&Ñ&ô #EôL/˜ô /ôyB˜%Ÿ,™,×,Ñ,ô yBôzBE˜UŸ\™\×/Ñ/ô BEôL2&˜EŸL™L×.Ñ.ô 2&ôj9&˜eŸl™l×0Ñ0ô 9&ôzqJ §¡× 2Ñ 2ô qJôj6C %§,¡,×"4Ñ"4ô 6Cðr ô4,˜eŸl™l×0Ñ0ó 4,ó ð4,ðn ô'. §¡× 2Ñ 2ó '.ó ð'.ðT ôH
˜%Ÿ,™,×,Ñ,ó H
ó ðH
ôV#Ð 1ô #ð"Ð ðH#"Ð ðJ$Ð  ð*(Ð ôV:*Ð3ô :*ôz;*Ð5ô ;*ñ| Ð.Ó/ôa*Ð/ó a*ó 0ða*òH k�øðEA ò 
Ø�‰ðu÷	
ð
ûð ò Úðús$   Â!M+ Â*!N Í+NÎNÎNÎN