Ë
    ÛÓ^jÓ  ã                   óÌ  — d Z ddlZddlmZ ddlmZ ddlZddl	Z	ddl	m
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlmZmZmZmZm Z m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z)  e jT                  e+«      Z,de	jZ                  de	jZ                  fd„Z.de	jZ                  de	jZ                  fd„Z/de	jZ                  de0fd„Z1dHde	jZ                  de2de3de0de	jZ                  f
d„Z4dId„Z5d„ Z6 G d„ d e
jn                  «      Z8 G d!„ d"e
jn                  «      Z9 G d#„ d$e
jn                  «      Z:ee G d%„ d&e«      «       «       Z; G d'„ d(e
jn                  «      Z< G d)„ d*e
jn                  «      Z= G d+„ d,e
jn                  «      Z> G d-„ d.e
jn                  «      Z? G d/„ d0e
jn                  «      Z@ G d1„ d2e@«      ZA G d3„ d4e
jn                  «      ZB G d5„ d6e«      ZCe G d7„ d8e«      «       ZD G d9„ d:e
jn                  «      ZE G d;„ d<e
jn                  «      ZF G d=„ d>eD«      ZG G d?„ d@eD«      ZH G dA„ dBe
jn                  «      ZI G dC„ dDeD«      ZJe G dE„ dFeD«      «       ZKg dG¢ZLy)JzPyTorch GroupViT model.é    N)Ú	dataclass)ÚAny)Únné   )Úinitialization)ÚACT2FN)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPooling)ÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingÚ	torch_int)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚGroupViTConfigÚGroupViTTextConfigÚGroupViTVisionConfigÚlogitsÚreturnc                 ó’   — t         j                  j                  | t        j                  t        | «      | j                  ¬«      «      S )N©Údevice)r   Ú
functionalÚcross_entropyÚtorchÚarangeÚlenr   )r   s    úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/groupvit/modeling_groupvit.pyÚcontrastive_lossr&   *   s/   € Ü�=‰=×&Ñ& v¬u¯|©|¼CÀ»KÐPV×P]ÑP]Ô/^Ó_Ð_ó    Ú
similarityc                 óR   — t        | «      }t        | j                  «      }||z   dz  S )Ng       @)r&   ÚT)r(   Úcaption_lossÚ
image_losss      r%   Úimage_text_contrastive_lossr-   /   s*   € Ü# JÓ/€LÜ! *§,¡,Ó/€JØ˜:Ñ%¨Ñ,Ð,r'   Údimc                 óì   — | j                  |«      }|j                  |d¬«      d   }t        j                  | t        j                  ¬«      j                  ||d«      }||j                  «       z
  |z   }|S )NT©Úkeepdimr   ©Úmemory_formatç      ð?)ÚsoftmaxÚmaxr"   Ú
zeros_likeÚlegacy_contiguous_formatÚscatter_Údetach)r   r.   Úy_softÚindexÚy_hardÚrets         r%   Úhard_softmaxr?   5   sk   € Ø�^‰^˜CÓ €Fà�J‰J�s DˆJÓ)¨!Ñ,€EÜ×Ñ˜f´E×4RÑ4RÔS×\Ñ\Ð]`ÐbgÐilÓm€FØ
�6—=‘=“?Ñ
" VÑ
+€Cà€Jr'   ÚtauÚhardc                 ó:  — t         j                  j                  j                  t        j                  d| j
                  | j                  ¬«      t        j                  d| j
                  | j                  ¬«      «      }|j                  | j                  «      }| |z   |z  }|j                  |«      }|rd|j                  |d¬«      d   }t        j                  | t         j                  ¬«      j                  ||d«      }||j                  «       z
  |z   }	|	S |}	|	S )Nç        )r   Údtyper4   Tr0   r   r2   )r"   ÚdistributionsÚgumbelÚGumbelÚtensorr   rD   ÚsampleÚshaper5   r6   r7   r8   r9   r:   )
r   r@   rA   r.   Úgumbel_distÚgumbelsr;   r<   r=   r>   s
             r%   Úgumbel_softmaxrM   ?   sí   € ä×%Ñ%×,Ñ,×3Ñ3Ü�‰�S §¡°f·l±lÔCÜ�‰�S §¡°f·l±lÔCó€Kð × Ñ  §¡Ó.€Gà˜Ñ 3Ñ&€GØ�_‰_˜SÓ!€Fáà—
‘
˜3¨�
Ó-¨aÑ0ˆÜ×!Ñ! &¼×8VÑ8VÔW×`Ñ`ÐadÐfkÐmpÓqˆØ�v—}‘}“Ñ&¨Ñ/ˆð €Jð ˆØ€Jr'   c                 ó¼  — ||z  | j                   d   z  dz  }||kD  r4t        t        j                  ||z  «      «      }| j                   d   |z  }n3t        t        j                  ||z  «      «      }| j                   d   |z  }| j                   d   }| j                   d   }| j	                  ||||«      } t
        j                  j                  | ||fd|¬«      } | S )a¾  
    Args:
        attentions (`torch.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:
        `torch.Tensor`: resized attention map of shape [batch_size, groups, height, width]
    é   ç      à?r   r   Úbilinear©ÚsizeÚmodeÚalign_corners)rJ   ÚintÚnpÚroundÚreshaper   r    Úinterpolate)	Ú
attentionsÚheightÚwidthrU   ÚscaleÚ
feat_widthÚfeat_heightÚ
batch_sizeÚgroupss	            r%   Úresize_attention_maprc   U   så   € ð �e‰^˜z×/Ñ/°Ñ2Ñ2°sÑ:€EØ�‚~ÜœŸ™ %¨%¡-Ó0Ó1ˆ
Ø ×&Ñ& qÑ)¨ZÑ7‰äœ"Ÿ(™( 6¨E¡>Ó2Ó3ˆØ×%Ñ% aÑ(¨KÑ7ˆ
à×!Ñ! !Ñ$€JØ×Ñ˜aÑ €Fà×#Ñ# J°¸ÀZÓP€JÜ—‘×*Ñ*Ø˜& %˜¨zÈð +ó €Jð Ðr'   c           	      óH  — g }t        j                  «       5  d}| D ]i  }|j                  ddd«      j                  «       }|€|}n||z  }t	        |j                  ddd«      j                  «       g|¢­Ž }|j                  |«       Œk 	 ddd«       |d   }|S # 1 sw Y   ŒxY w)a1  
    Args:
        attentions (`tuple(torch.FloatTensor)`: tuple of attention maps returned by `GroupViTVisionTransformer`
        hw_shape (`tuple(int)`): height and width of the output attention map
    Returns:
        `torch.Tensor`: the attention map of shape [batch_size, groups, height, width]
    Nr   rO   r   éÿÿÿÿ)r"   Úno_gradÚpermuteÚ
contiguousrc   Úappend)r[   Úhw_shapeÚ	attn_mapsÚprev_attn_masksÚ
attn_masksÚcur_attn_mapÚfinal_groupings          r%   Úget_grouping_from_attentionsrp   s   s´   € ð €IÜ	�‰‹ñ +ØˆØ$ò 		+ˆJà#×+Ñ+¨A¨q°!Ó4×?Ñ?ÓAˆJØÐ&Ø",‘à"1°JÑ">�ä/°×0GÑ0GÈÈ1ÈaÓ0P×0[Ñ0[Ó0]ÐiÐ`hÒiˆLØ×Ñ˜\Õ*ñ		+÷+ð ˜r‘]€NàÐ÷!+ð +ús   —A1BÂB!c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚGroupViTCrossAttentionLayerÚconfigc                 ó"  •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  |j                  ¬«      | _        t        |«      | _
        t	        j
                  |j                  |j                  ¬«      | _        y ©N©Úeps)ÚsuperÚ__init__ÚGroupViTAttentionÚattnr   Ú	LayerNormÚhidden_sizeÚlayer_norm_epsÚnorm2ÚGroupViTMLPÚmlpÚ	norm_post©Úselfrs   Ú	__class__s     €r%   ry   z$GroupViTCrossAttentionLayer.__init__‘   sb   ø€ Ü‰ÑÔÜ% fÓ-ˆŒ	Ü—\‘\ &×"4Ñ"4¸&×:OÑ:OÔPˆŒ
Ü˜vÓ&ˆŒÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆ�r'   c                 ó¤   — |}|| j                  ||¬«      d   z   }|| j                  | j                  |«      «      z   }| j                  |«      }|S )N)Úencoder_hidden_statesr   )r{   r�   r   r‚   )r„   ÚqueryÚkeyÚxs       r%   Úforwardz#GroupViTCrossAttentionLayer.forward˜   sQ   € ØˆØ�—	‘	˜%°s�	Ó;¸AÑ>Ñ>ˆØ�—‘˜Ÿ™ A›Ó'Ñ'ˆØ�N‰N˜1ÓˆØˆr'   )Ú__name__Ú
__module__Ú__qualname__r   ry   r‹   Ú__classcell__©r…   s   @r%   rr   rr   �   s   ø„ ðUÐ3õ Uör'   rr   c                   ó2   ‡ — e Zd Zdefˆ fd„Zdd„Zd„ Zˆ xZS )ÚGroupViTAssignAttentionrs   c                 óä  •— t         ‰| �  «        |j                  dz  | _        t	        j
                  |j                  |j                  «      | _        t	        j
                  |j                  |j                  «      | _        t	        j
                  |j                  |j                  «      | _        t	        j
                  |j                  |j                  «      | _	        |j                  | _
        y )Nç      à¿)rx   ry   r}   r^   r   ÚLinearÚq_projÚk_projÚv_projÚprojÚ
assign_epsrƒ   s     €r%   ry   z GroupViTAssignAttention.__init__¡   s¥   ø€ Ü‰ÑÔØ×'Ñ'¨Ñ-ˆŒ
ä—i‘i × 2Ñ 2°F×4FÑ4FÓGˆŒÜ—i‘i × 2Ñ 2°F×4FÑ4FÓGˆŒÜ—i‘i × 2Ñ 2°F×4FÑ4FÓGˆŒÜ—I‘I˜f×0Ñ0°&×2DÑ2DÓEˆŒ	Ø ×+Ñ+ˆ�r'   c                 ó¦   — |r| j                   rt        |d|¬«      }|S |rt        |d¬«      }|S t        j                  j                  |d¬«      }|S )Néþÿÿÿ)r.   rA   ©r.   )ÚtrainingrM   r?   r   r    r5   )r„   r{   rF   rA   s       r%   Úget_attnz GroupViTAssignAttention.get_attn«   sX   € Ù�d—m’mÜ! $¨B°TÔ:ˆDð ˆñ Ü# D¨bÔ1�ð ˆô —}‘}×,Ñ,¨T°rÐ,Ó:�àˆr'   c                 ót  — |}| j                  |«      }| j                  |«      }| j                  |«      }||j                  dd«      z  | j                  z  }| j                  |«      }| j                  |dd¬«      }||j                  dd¬«      | j                  z   z  }||z  }| j                  |«      }||fS )Nrœ   re   F)rF   rA   T©r.   r1   )	r–   r—   r˜   Ú	transposer^   rŸ   Úsumrš   r™   )r„   rˆ   r‰   ÚvalueÚraw_attnr{   Ú	soft_attnÚouts           r%   r‹   zGroupViTAssignAttention.forward¶   s·   € Øˆà—‘˜EÓ"ˆð �k‰k˜#Óˆð —‘˜EÓ"ˆð ˜CŸM™M¨"¨bÓ1Ñ1°T·Z±ZÑ?ˆà�}‰}˜XÓ&ˆØ—M‘M (°5¸u�MÓEˆ	à�t—x‘x B°�xÓ5¸¿¹ÑGÑHˆà�U‰lˆà�i‰i˜‹nˆà�Iˆ~Ðr'   )TT)rŒ   r�   rŽ   r   ry   rŸ   r‹   r�   r�   s   @r%   r’   r’       s   ø„ ð,Ð3õ ,ó	ör'   r’   c                   ó0   ‡ — e Zd Zdefˆ fd„Zd„ Zd„ Zˆ xZS )ÚGroupViTTokenAssignrs   c                 ód  •— t         ‰| �  «        || _        t        j                  |j
                  |j                  ¬«      | _        t        |j                  t        j                  j                  «      r|j                  n|j                  |j                  f}|D �cg c]  }t        ||j
                  z  «      ‘Œ c}\  }}t        ||||«      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j
                  |j                  ¬«      | _        t%        |«      | _        t)        |«      | _        t        j                  |j
                  |j                  ¬«      | _        t/        ||j
                  ||j
                  «      | _        y c c}w ru   )rx   ry   Únum_output_groupr   r|   r}   r~   Únorm_tokensÚ
isinstanceÚassign_mlp_ratioÚcollectionsÚabcÚIterablerV   ÚGroupViTMixerMLPÚ	mlp_interÚnorm_post_tokensÚnorm_xrr   Úpre_assign_attnr’   ÚassignÚ
norm_new_xr€   Úmlp_channels)	r„   rs   Únum_group_tokenr«   r®   rŠ   Ú
tokens_dimÚchannels_dimr…   s	           €r%   ry   zGroupViTTokenAssign.__init__Ñ   sK  ø€ Ü‰ÑÔØ 0ˆÔäŸ<™<¨×(:Ñ(:À×@UÑ@UÔVˆÔô ˜&×1Ñ1´;·?±?×3KÑ3KÔLð ×#Ò#à×)Ñ)¨6×+BÑ+BÐCð 	ð
 JZÖ#ZÀA¤C¨¨F×,>Ñ,>Ñ(>Õ$?Ò#ZÑ ˆ
�LÜ)¨&°/À:ÐO_Ó`ˆŒÜ "§¡¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÔä—l‘l 6×#5Ñ#5¸6×;PÑ;PÔQˆŒÜ:¸6ÓBˆÔä-¨fÓ5ˆŒÜŸ,™, v×'9Ñ'9¸v×?TÑ?TÔUˆŒÜ'¨°×0BÑ0BÀLÐRX×RdÑRdÓeˆÕùò $[s   ÂF-c                 óJ   — | j                  |«      }| j                  |«      }|S )zæ
        Args:
            group_tokens (torch.Tensor): group tokens, [batch_size, num_group_tokens, channels]

        Returns:
            projected_group_tokens (torch.Tensor): [batch_size, num_output_groups, channels]
        )r³   r´   )r„   Úgroup_tokensÚprojected_group_tokenss      r%   Úproject_group_tokenz'GroupViTTokenAssign.project_group_tokenæ   s+   € ð "&§¡°Ó!=ÐØ!%×!6Ñ!6Ð7MÓ!NÐØ%Ð%r'   c                 ó  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  ||«      }| j	                  ||«      \  }}||z  }|| j                  | j                  |«      «      z   }||fS )zà
        Args:
            image_tokens (`torch.Tensor`): image tokens, of shape [batch_size, input_length, channels]
            group_tokens (`torch.Tensor`): group tokens, [batch_size, num_group_tokens, channels]
        )r¬   rµ   rÀ   r¶   r·   r¹   r¸   )r„   Úimage_tokensr¾   r¿   Únew_image_tokensÚ	attentions         r%   r‹   zGroupViTTokenAssign.forwardó   s•   € ð ×'Ñ'¨Ó5ˆØ—{‘{ <Ó0ˆà!%×!9Ñ!9¸,Ó!GÐØ!%×!5Ñ!5Ð6LÈlÓ![ÐØ&*§k¡kÐ2HÈ,Ó&WÑ#Ð˜)ØÐ2Ñ2Ðà+¨d×.?Ñ.?ÀÇÁÐP`Ó@aÓ.bÑbÐà Ð*Ð*r'   )rŒ   r�   rŽ   r   ry   rÀ   r‹   r�   r�   s   @r%   r©   r©   Ð   s   ø„ ðfÐ3õ fò*&ö+r'   r©   c                   ó0  — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	ej                  dz  ed<   dZ
ej                  dz  ed<   dZej                  dz  ed<   dZej                  dz  ed<   dZeed	<   dZeed
<   dee   fd„Zy)ÚGroupViTModelOutputaí  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `return_loss` is `True`):
        Contrastive loss for image-text similarity.
    logits_per_image (`torch.FloatTensor` of shape `(image_batch_size, text_batch_size)`):
        The scaled dot product scores between `image_embeds` and `text_embeds`. This represents the image-text
        similarity scores.
    logits_per_text (`torch.FloatTensor` of shape `(text_batch_size, image_batch_size)`):
        The scaled dot product scores between `text_embeds` and `image_embeds`. This represents the text-image
        similarity scores.
    segmentation_logits (`torch.FloatTensor` 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 (`torch.FloatTensor` of shape `(batch_size, output_dim`):
        The text embeddings obtained by applying the projection layer to the pooled output of
        [`GroupViTTextModel`].
    image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
        The image embeddings obtained by applying the projection layer to the pooled output of
        [`GroupViTVisionModel`].
    text_model_output (`BaseModelOutputWithPooling`):
        The output of the [`GroupViTTextModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`GroupViTVisionModel`].
    NÚlossÚlogits_per_imageÚlogits_per_textÚsegmentation_logitsÚtext_embedsÚimage_embedsÚtext_model_outputÚvision_model_outputr   c                 ó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Úkr„   s     €r%   ú	<genexpr>z/GroupViTModelOutput.to_tuple.<locals>.<genexpr>3  s=   øè ø€ ò 
àð Ð LÑLˆD�ŠGÔRYÐZ^Ð`aÓRb×RkÑRkÓRmÓmñ
ùs   ƒ-0)ÚtupleÚkeys©r„   s   `r%   rÒ   zGroupViTModelOutput.to_tuple2  s#   ø€ Üó 
à—Y‘Y“[ô
ó 
ð 	
r'   )rŒ   r�   rŽ   Ú__doc__rÇ   r"   ÚFloatTensorÚ__annotations__rÈ   rÉ   rÊ   rË   rÌ   rÍ   r   rÎ   rÖ   r   rÒ   © r'   r%   rÆ   rÆ     s±   … ñð> &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø15Ð�e×'Ñ'¨$Ñ.Ó5Ø04€O�U×&Ñ&¨Ñ-Ó4Ø48Ð˜×*Ñ*¨TÑ1Ó8Ø,0€K�×"Ñ" TÑ)Ó0Ø-1€L�%×#Ñ# dÑ*Ó1Ø48ÐÐ1Ó8Ø6:ÐÐ3Ó:ð
˜% ™*ô 
r'   rÆ   c            	       ó¨   ‡ — e Zd ZdZ	 	 	 	 ddeee   z  eeef   z  deeeef   z  dedefˆ fd„Zddej                  de
d	ej                  fd
„Zˆ xZS )ÚGroupViTPatchEmbeddingsz#
    Image to Patch Embedding.
    Ú
image_sizeÚ
patch_sizeÚnum_channelsÚ	embed_dimc                 ó^  •— t         ‰| �  «        t        |t        j                  j
                  «      r|n||f}t        |t        j                  j
                  «      r|n||f}|d   |d   z  |d   |d   z  z  }|| _        || _        || _        t        j                  ||||¬«      | _        y )Nr   r   )Úkernel_sizeÚstride)rx   ry   r­   r¯   r°   r±   rß   rà   Únum_patchesr   ÚConv2dÚ
projection)r„   rß   rà   rá   râ   ræ   r…   s         €r%   ry   z GroupViTPatchEmbeddings.__init__>  s¤   ø€ ô 	‰ÑÔÜ#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ&ˆÔäŸ)™) L°)ÈÐ\fÔgˆ�r'   Úpixel_valuesÚinterpolate_pos_encodingr   c                 ó8  — |j                   \  }}}}|sV|| j                  d   k7  s|| j                  d   k7  r2t        d|› d|› d| j                  d   › d| j                  d   › d�	«      ‚| j                  |«      j	                  d«      j                  dd«      }|S )Nr   r   zInput image size (Ú*z) doesn't match model (ú).rO   )rJ   rß   Ú
ValueErrorrè   Úflattenr¢   )r„   ré   rê   ra   rá   r\   r]   rŠ   s           r%   r‹   zGroupViTPatchEmbeddings.forwardO  s­   € Ø2>×2DÑ2DÑ/ˆ
�L &¨%Ù'Ø˜Ÿ™¨Ñ+Ò+¨u¸¿¹ÈÑ8JÒ/JÜ Ø(¨¨°°%°ð 9ØŸ™¨Ñ+Ð,¨A¨d¯o©o¸aÑ.@Ð-AÀðEóð ð �O‰O˜LÓ)×1Ñ1°!Ó4×>Ñ>¸qÀ!ÓDˆØˆr'   )éà   é   r   i   ©F)rŒ   r�   rŽ   rÙ   rV   ÚlistrÖ   ry   r"   ÚTensorÚboolr‹   r�   r�   s   @r%   rÞ   rÞ   9  s�   ø„ ñð 9<Ø,.ØØñhà˜$˜s™)‘O e¨C°¨H¡oÑ5ðhð ˜%  S ™/Ñ)ðhð ð	hð
 õhñ"	 E§L¡Lð 	ÈDð 	Ð]b×]iÑ]i÷ 	r'   rÞ   c                   ó¢   ‡ — e Zd Zdefˆ fd„Zdej                  dededej                  fd„Zddej                  d	e	dej                  fd
„Z
ˆ xZS )ÚGroupViTVisionEmbeddingsrs   c                 ó  •— t         ‰| �  «        t        |j                  |j                  |j
                  |j                  ¬«      | _        | j                  j                  }t        j                  t        j                  d||j                  «      «      | _        t        j                  |j                  «      | _        t        j                   |j                  |j"                  ¬«      | _        |j                  | _        || _        y )N)rß   rà   rá   râ   r   rv   )rx   ry   rÞ   rß   rà   rá   r}   Úpatch_embeddingsræ   r   Ú	Parameterr"   ÚzerosÚposition_embeddingsÚDropoutÚdropoutr|   r~   Ú	layernormrs   )r„   rs   ræ   r…   s      €r%   ry   z!GroupViTVisionEmbeddings.__init__\  s¼   ø€ Ü‰ÑÔä 7Ø×(Ñ(Ø×(Ñ(Ø×,Ñ,Ø×(Ñ(ô	!
ˆÔð ×+Ñ+×7Ñ7ˆÜ#%§<¡<´·±¸A¸{ÈF×L^ÑL^Ó0_Ó#`ˆÔ Ü—z‘z &§.¡.Ó1ˆŒÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒØ ×+Ñ+ˆŒØˆ�r'   Ú
embeddingsr\   r]   r   c                 ó0  — |j                   d   }| j                  j                   d   }t        j                  j	                  «       s||k(  r||k(  r| j                  S | j                  }|j                   d   }|| j
                  z  }|| j
                  z  }	t        |dz  «      }
|j                  d|
|
|«      }|j                  dddd«      }t        j                  j                  |||	fdd¬	«      }|j                  dddd«      j                  dd|«      }|S )
a  
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
        images. This method is also adapted to support torch.jit tracing and no class embeddings.

        Adapted from:
        - https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
        - https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
        r   re   rP   r   r   rO   ÚbicubicFrR   )rJ   rü   r"   ÚjitÚ
is_tracingrà   r   rY   rg   r   r    rZ   Úview)r„   r   r\   r]   ræ   Únum_positionsÚpatch_pos_embedr.   Ú
new_heightÚ	new_widthÚsqrt_num_positionss              r%   rê   z1GroupViTVisionEmbeddings.interpolate_pos_encodingl  s#  € ð !×&Ñ& qÑ)ˆØ×0Ñ0×6Ñ6°qÑ9ˆô �y‰y×#Ñ#Ô%¨+¸Ò*FÈ6ÐUZÊ?Ø×+Ñ+Ð+à×2Ñ2ˆà×Ñ˜rÑ"ˆà˜tŸ™Ñ.ˆ
Ø˜TŸ_™_Ñ,ˆ	ä& }°cÑ'9Ó:ÐØ)×1Ñ1°!Ð5GÐI[Ð]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØ˜iÐ(ØØð	 4ó 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆØÐr'   ré   rê   c                 ó
  — |j                   \  }}}}| j                  ||¬«      }| j                  |«      }|j                  «       \  }}}	|r|| j	                  |||«      z   }n|| j
                  z   }| j                  |«      }|S )N)rê   )rJ   rù   rÿ   rS   rê   rü   rþ   )
r„   ré   rê   ra   rá   r\   r]   r   Úseq_lenÚ_s
             r%   r‹   z GroupViTVisionEmbeddings.forward’  s‘   € Ø2>×2DÑ2DÑ/ˆ
�L &¨%Ø×*Ñ*¨<ÐRjÐ*Ókˆ
à—^‘^ JÓ/ˆ
à!+§¡Ó!2Ñˆ
�G˜Qñ $Ø# d×&CÑ&CÀJÐPVÐX]Ó&^Ñ^‰Jà# d×&>Ñ&>Ñ>ˆJà—\‘\ *Ó-ˆ
àÐr'   rò   )rŒ   r�   rŽ   r   ry   r"   rô   rV   rê   rõ   r‹   r�   r�   s   @r%   r÷   r÷   [  sc   ø„ ðÐ3õ ð $°5·<±<ð $Èð $ÐUXð $Ð]b×]iÑ]ió $ñL E§L¡Lð ÈDð Ð]b×]iÑ]i÷ r'   r÷   c            	       ó¦   ‡ — e Zd Zdefˆ fd„Z	 	 	 d	dej                  dz  dej                  dz  dej                  dz  dej                  fd„Z	ˆ xZ
S )
ÚGroupViTTextEmbeddingsrs   c                 óN  •— t         ‰| �  «        |j                  }t        j                  |j
                  |«      | _        t        j                  |j                  |«      | _        | j                  dt        j                  |j                  «      j                  d«      d¬«       y )NÚposition_ids©r   re   F)Ú
persistent)rx   ry   r}   r   Ú	EmbeddingÚ
vocab_sizeÚtoken_embeddingÚmax_position_embeddingsÚposition_embeddingÚregister_bufferr"   r#   Úexpand©r„   rs   râ   r…   s      €r%   ry   zGroupViTTextEmbeddings.__init__§  sƒ   ø€ Ü‰ÑÔØ×&Ñ&ˆ	ä!Ÿ|™|¨F×,=Ñ,=¸yÓIˆÔÜ"$§,¡,¨v×/MÑ/MÈyÓ"YˆÔð 	×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	õ 	
r'   NÚ	input_idsr  Úinputs_embedsr   c                 ó8  — |�|j                   d   n|j                   d   }| j                  j                  j                   d   }||kD  rt        d|› d|› �«      ‚|€| j                  d d …d |…f   }|€| j                  |«      }| j                  |«      }||z   }|S )Nre   rœ   r   zRSequence length must be less than max_position_embeddings (got `sequence length`: z and max_position_embeddings: )rJ   r  Úweightrî   r  r  )r„   r  r  r  Ú
seq_lengthÚmax_position_embeddingrü   r   s           r%   r‹   zGroupViTTextEmbeddings.forward³  sÇ   € ð -6Ð,A�Y—_‘_ RÒ(À}×GZÑGZÐ[]ÑG^ˆ
Ø!%×!8Ñ!8×!?Ñ!?×!EÑ!EÀaÑ!HÐàÐ.Ò.ÜØdØ�,Ð<Ð=SÐ<TðVóð ð
 ÐØ×,Ñ,ªQ°°°¨^Ñ<ˆLàÐ Ø ×0Ñ0°Ó;ˆMà"×5Ñ5°lÓCÐØ"Ð%8Ñ8ˆ
àÐr'   ©NNN)rŒ   r�   rŽ   r   ry   r"   Ú
LongTensorrÚ   rô   r‹   r�   r�   s   @r%   r  r  ¦  sk   ø„ ð

Ð1õ 

ð .2Ø04Ø26ñ	à×#Ñ# dÑ*ðð ×&Ñ&¨Ñ-ðð ×(Ñ(¨4Ñ/ð	ð
 
�‰÷r'   r  c            
       ó  ‡ — e Zd ZdZdededededef
ˆ fd„Zed„ «       Zd	„ Z	dde
j                  de
j                  d
z  de
j                  fd„Z	 	 dde
j                  de
j                  d
z  ded
z  dee
j                     fd„Zˆ xZS )ÚGroupViTStagezMThis corresponds to the `GroupingLayer` class in the GroupViT implementation.rs   ÚdepthÚnum_prev_group_tokenrº   r«   c           	      óf  •— t         ‰| �  «        || _        || _        |dkD  r:t	        j
                  t        j                  d||j                  «      «      | _	        nd | _	        t	        j                  t        |«      D �cg c]  }t        |«      ‘Œ c}«      | _        |dkD  rt        |||¬«      | _        nd | _        |dkD  rc|dkD  r^t	        j                   t	        j"                  |j                  |j$                  ¬«      t'        |||j                  dz  |«      «      | _        y d | _        y c c}w )Nr   r   )rs   rº   r«   rv   rO   )rx   ry   r&  rº   r   rú   r"   rû   r}   Úgroup_tokenÚ
ModuleListÚrangeÚGroupViTEncoderLayerÚlayersr©   Ú
downsampleÚ
Sequentialr|   r~   r²   Úgroup_projector)r„   rs   r&  r'  rº   r«   r  r…   s          €r%   ry   zGroupViTStage.__init__Ñ  s  ø€ ô 	‰ÑÔØˆŒ
Ø.ˆÔØ˜QÒÜ!Ÿ|™|¬E¯K©K¸¸?ÈF×L^ÑL^Ó,_Ó`ˆDÕà#ˆDÔÜ—m‘mÌ5ÐQVË<Ö$XÀaÔ%9¸&Õ%AÒ$XÓYˆŒà˜QÒÜ1ØØ /Ø!1ôˆD�Oð #ˆDŒOà !Ò#¨¸!Ò(;Ü#%§=¡=Ü—‘˜V×/Ñ/°V×5JÑ5JÔKÜ  Ð)=¸v×?QÑ?QÐUVÑ?VÐXgÓhó$ˆDÕ ð
 $(ˆDÕ ùò# %Ys   Â D.c                 ó   — | j                   d uS ©N)r)  rØ   s    r%   Úwith_group_tokenzGroupViTStage.with_group_tokenó  s   € à×Ñ tÐ+Ð+r'   c                 óz   — | j                   r,|d d …d | j                   …f   |d d …| j                   d …f   fS |d fS r2  )r3  rº   )r„   rŠ   s     r%   Úsplit_xzGroupViTStage.split_x÷  sN   € Ø× Ò Ø’QÐ/˜4×/Ñ/Ð/Ð/Ð/Ñ0°!²A¸×8LÑ8LÐ7LÑ7NÐ4NÑ2OÐOÐOà�d�7ˆNr'   NrŠ   r)  r   c                 ó<   — |€|S t        j                  ||gd¬«      S )Nr   r�   )r"   Úcat)r„   rŠ   r)  s      r%   Úconcat_xzGroupViTStage.concat_xý  s#   € ØÐØˆHÜ�y‰y˜!˜[Ð)¨qÔ1Ð1r'   Úhidden_statesÚprev_group_tokenÚoutput_attentionsc                 ó   — | j                   rM| j                  j                  |j                  d«      dd«      }| j                  �|| j	                  |«      z   }nd}|}| j                  ||«      }| j                  D ]  } ||d¬«      }Œ | j                  |«      \  }}d}| j                  �| j                  ||«      \  }}||f}	|r|	|fz   }	|	S )aø  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`): 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   re   N)Úattention_mask)	r3  r)  r  rS   r0  r8  r-  r5  r.  )
r„   r9  r:  r;  r)  rŠ   Úcat_xÚlayerrÄ   Úoutputss
             r%   r‹   zGroupViTStage.forward  sâ   € ð × Ò Ø×*Ñ*×1Ñ1°-×2DÑ2DÀQÓ2GÈÈRÓPˆKØ×#Ñ#Ð/Ø)¨D×,@Ñ,@ÐAQÓ,RÑR‘àˆKàˆà—‘˜a Ó-ˆØ—[‘[ò 	6ˆEÙ˜%°Ô5‰Eð	6ð Ÿ™ eÓ,‰ˆˆ;àˆ	Ø�?‰?Ð&ØŸ?™?¨1¨kÓ:‰LˆAˆyà�kÐ"ˆÙØ  Ñ,ˆGàˆr'   r2  ©NF)rŒ   r�   rŽ   rÙ   r   rV   ry   Úpropertyr3  r5  r"   rô   r8  rõ   rÖ   rÚ   r‹   r�   r�   s   @r%   r%  r%  Î  sÒ   ø„ ÙWð (à$ð (ð ð (ð "ð	 (ð
 ð (ð õ (ðD ñ,ó ð,òñ2˜%Ÿ,™,ð 2°U·\±\ÀDÑ5Hð 2ÐTY×T`ÑT`ó 2ð 15Ø).ñ	&à—|‘|ð&ð  Ÿ,™,¨Ñ-ð&ð   $™;ð	&ð
 
ˆu× Ñ Ñ	!÷&r'   r%  c            
       ó‚   ‡ — e Zd Z	 	 	 d
dededz  dedz  dedz  fˆ fd„Zdej                  dej                  fd	„Zˆ xZ	S )r€   Nrs   r}   Úintermediate_sizeÚoutput_sizec                 ó  •— t         ‰| �  «        || _        t        |j                     | _        |�|n|j                  }|�|n|j                  }|�|n|}t        j                  ||«      | _
        t        j                  ||«      | _        y r2  )rx   ry   rs   r   Ú
hidden_actÚactivation_fnr}   rD  r   r•   Úfc1Úfc2)r„   rs   r}   rD  rE  r…   s        €r%   ry   zGroupViTMLP.__init__,  sƒ   ø€ ô 	‰ÑÔØˆŒÜ# F×$5Ñ$5Ñ6ˆÔØ%0Ð%<‘kÀ&×BTÑBTˆØ1BÐ1NÑ-ÐTZ×TlÑTlÐØ%0Ð%<‘kÀ+ˆÜ—9‘9˜[Ð*;Ó<ˆŒÜ—9‘9Ð.°Ó<ˆ�r'   r9  r   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r2  )rI  rH  rJ  )r„   r9  s     r%   r‹   zGroupViTMLP.forward<  s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆØÐr'   r"  )
rŒ   r�   rŽ   r   rV   ry   r"   rô   r‹   r�   r�   s   @r%   r€   r€   +  s`   ø„ ð #'Ø(,Ø"&ñ=à$ð=ð ˜4‘Zð=ð  ™:ð	=ð
 ˜4‘Zõ=ð  U§\¡\ð °e·l±l÷ r'   r€   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )r²   c                 óf   •— t         ‰| �  |j                  dd«      «      }|j                  dd«      S ©Nr   rO   )rx   r‹   r¢   )r„   rŠ   r…   s     €r%   r‹   zGroupViTMixerMLP.forwardD  s-   ø€ Ü‰G‰O˜AŸK™K¨¨1Ó-Ó.ˆØ�{‰{˜1˜aÓ Ð r'   )rŒ   r�   rŽ   r‹   r�   r�   s   @r%   r²   r²   C  s   ø„ ÷!ð !r'   r²   c                   óè   ‡ — e Zd ZdZˆ fd„Zdej                  dedefd„Z	 	 ddej                  d	ej                  dz  d
ej                  dz  de
ej                  ej                  dz  f   fd„Zˆ xZS )rz   z=Multi-headed attention from 'Attention Is All You Need' paperc                 ó
  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        | j                  | j                  z  | _        | j                  | j                  z  | j                  k7  r&t        d| j                  › d| j                  › d�«      ‚| j                  dz  | _	        |j                  | _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: rí   r”   )rx   ry   rs   r}   râ   Únum_attention_headsÚ	num_headsÚhead_dimrî   r^   Úattention_dropoutrþ   r   r•   r—   r˜   r–   Úout_projrƒ   s     €r%   ry   zGroupViTAttention.__init__L  s  ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØ�=‰=˜4Ÿ>™>Ñ)¨T¯^©^Ò;ÜØMÈdÏnÉnÐM]ð ^Ø—N‘NÐ# 2ð'óð ð —]‘] DÑ(ˆŒ
Ø×/Ñ/ˆŒä—i‘i §¡°·±Ó?ˆŒÜ—i‘i §¡°·±Ó?ˆŒÜ—i‘i §¡°·±Ó?ˆŒÜŸ	™	 $§.¡.°$·.±.ÓAˆ�r'   rH   r  Úbszc                 óŽ   — |j                  ||| j                  | j                  «      j                  dd«      j	                  «       S rN  )r  rR  rS  r¢   rh   )r„   rH   r  rV  s       r%   Ú_shapezGroupViTAttention._shape_  s7   € Ø�{‰{˜3 ¨¯©¸¿¹ÓG×QÑQÐRSÐUVÓW×bÑbÓdÐdr'   Nr9  r=  r‡   r   c                 ó&  — |j                  «       \  }}}|du}| j                  |«      | j                  z  }	|rE| j                  | j	                  |«      d|«      }
| j                  | j                  |«      d|«      }nD| j                  | j	                  |«      d|«      }
| j                  | j                  |«      d|«      }|| j                  z  d| j                  f} | j                  |	||«      j                  |Ž }	 |
j                  |Ž }
 |j                  |Ž }|
j                  d«      }t        j                  |	|
j                  dd«      «      }|j                  «       || j                  z  ||fk7  r/t        d|| j                  z  ||f› d|j                  «       › �«      ‚|�{|j                  «       |d||fk7  r#t        d|d||f› d|j                  «       › �«      ‚|j                  || j                  ||«      |z   }|j                  || j                  z  ||«      }t        j                  j                  |d¬«      }|j                  || j                  ||«      }|j                  || j                  z  ||«      }t        j                  j!                  || j                   | j"                  ¬	«      }t        j                  ||«      }|j                  «       || j                  z  || j                  fk7  r7t        d
|| j                  || j                  f› d|j                  «       › �«      ‚|j                  || j                  || j                  «      }|j                  dd«      }|j%                  |||«      }| j'                  |«      }||fS )z#Input shape: Batch x Time x ChannelNre   r   rO   z$Attention weights should be of size z	, but is z!Attention mask should be of size r�   )Úprž   z `attn_output` should be of size )rS   r–   r^   rX  r—   r˜   rR  rS  r  r"   Úbmmr¢   rî   r   r    r5   rþ   rž   rY   rU  )r„   r9  r=  r‡   ÚkwargsrV  Útgt_lenrâ   Úis_cross_attentionÚquery_statesÚ
key_statesÚvalue_statesÚ
proj_shapeÚsrc_lenÚattn_weightsÚattn_weights_reshapedÚ
attn_probsÚattn_outputs                     r%   r‹   zGroupViTAttention.forwardb  s{  € ð #0×"4Ñ"4Ó"6ÑˆˆW�iØ2¸$Ð>Ðð —{‘{ =Ó1°D·J±JÑ>ˆÙØŸ™ T§[¡[Ð1FÓ%GÈÈSÓQˆJØŸ;™; t§{¡{Ð3HÓ'IÈ2ÈsÓS‰LàŸ™ T§[¡[°Ó%?ÀÀSÓIˆJØŸ;™; t§{¡{°=Ó'AÀ2ÀsÓKˆLà˜DŸN™NÑ*¨B°·±Ð>ˆ
ØC�t—{‘{ <°¸#Ó>×CÑCÀZÐPˆØ$�Z—_‘_ jÐ1ˆ
Ø(�|×(Ñ(¨*Ð5ˆà—/‘/ !Ó$ˆÜ—y‘y ¨z×/CÑ/CÀAÀqÓ/IÓJˆà×ÑÓ 3¨¯©Ñ#7¸À'Ð"JÒJÜØ6¸¸d¿n¹nÑ8LÈgÐW^Ð7_Ð6`ð aØ ×%Ñ%Ó'Ð(ð*óð ð
 Ð%Ø×"Ñ"Ó$¨¨a°¸'Ð(BÒBÜ Ø7¸¸aÀÈ'Ð8RÐ7SÐS\Ð]k×]pÑ]pÓ]rÐ\sÐtóð ð (×,Ñ,¨S°$·.±.À'È7ÓSÐVdÑdˆLØ'×,Ñ,¨S°4·>±>Ñ-AÀ7ÈGÓTˆLä—}‘}×,Ñ,¨\¸rÐ,ÓBˆð !-× 1Ñ 1°#°t·~±~ÀwÐPWÓ XÐØ,×1Ñ1°#¸¿¹Ñ2FÈÐQXÓYˆä—]‘]×*Ñ*¨<¸4¿<¹<ÐRV×R_ÑR_Ð*Ó`ˆ
ä—i‘i 
¨LÓ9ˆà×ÑÓ #¨¯©Ñ"6¸ÀÇÁÐ!OÒOÜØ2°C¸¿¹ÈÐRV×R_ÑR_Ð3`Ð2að bØ×$Ñ$Ó&Ð'ð)óð ð
 "×&Ñ& s¨D¯N©N¸GÀTÇ]Á]ÓSˆØ!×+Ñ+¨A¨qÓ1ˆØ!×)Ñ)¨#¨w¸	ÓBˆà—m‘m KÓ0ˆàÐ1Ð1Ð1r'   ©NN)rŒ   r�   rŽ   rÙ   ry   r"   rô   rV   rX  rÚ   rÖ   r‹   r�   r�   s   @r%   rz   rz   I  s•   ø„ ÙGôBð&e˜UŸ\™\ð e°Cð e¸có eð /3Ø:>ñ	D2à—|‘|ðD2ð Ÿ™ tÑ+ðD2ð  %×0Ñ0°4Ñ7ð	D2ð 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷D2r'   rz   c                   ó~   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  dee   dej                  fd„Z
ˆ xZS )r,  rs   c                 óD  •— t         ‰| �  «        |j                  | _        t	        |«      | _        t        j                  | j                  |j                  ¬«      | _	        t        |«      | _        t        j                  | j                  |j                  ¬«      | _        y ru   )rx   ry   r}   râ   rz   Ú	self_attnr   r|   r~   Úlayer_norm1r€   r�   Úlayer_norm2rƒ   s     €r%   ry   zGroupViTEncoderLayer.__init__«  sm   ø€ Ü‰ÑÔØ×+Ñ+ˆŒÜ*¨6Ó2ˆŒÜŸ<™<¨¯©¸F×<QÑ<QÔRˆÔÜ˜vÓ&ˆŒÜŸ<™<¨¯©¸F×<QÑ<QÔRˆÕr'   r9  r=  r\  r   c                 ó¸   — |}| j                  |«      } | j                  d||dœ|¤Ž\  }}||z   }|}| j                  |«      }| j                  |«      }||z   }|S )N)r9  r=  rÜ   )rl  rk  rm  r�   )r„   r9  r=  r\  Úresidualr  s         r%   r‹   zGroupViTEncoderLayer.forward³  s‚   € ð !ˆà×(Ñ(¨Ó7ˆØ)˜4Ÿ>™>ð 
Ø'Ø)ñ
ð ñ
Ñˆ�qð
 ! =Ñ0ˆà ˆØ×(Ñ(¨Ó7ˆØŸ™ Ó/ˆØ  =Ñ0ˆàÐr'   )rŒ   r�   rŽ   r   ry   r"   rô   r   r   rÚ   r‹   r�   r�   s   @r%   r,  r,  ª  sQ   ø„ ðSÐ3õ Sðà—|‘|ðð Ÿ™ðð Ð+Ñ,ð	ð
 
×	Ñ	÷r'   r,  c                   óh   ‡ — e Zd ZU eed<   dZdZdZee	dœZ
 ej                  «       ˆ fd„«       Zˆ xZS )ÚGroupViTPreTrainedModelrs   Úgroupvit)ÚimageÚtextT)r9  r[   c                 ó´  •— t         ‰| �  |«       | j                  j                  }t	        |t
        «      r¸t        j                  |j                  j                  d|dz  ¬«       t        j                  |j                  j                  d|dz  ¬«       t        j                  |j                  t        j                  |j                  j                  d   «      j!                  d«      «       y	t	        |t"        «      �r| j                  j                  }|j$                  dz  d|j                  j&                  z  dz  z  |z  }|j$                  dz  |z  }t        j                  |j(                  j                  |¬«       t        j                  |j*                  j                  |¬«       t        j                  |j,                  j                  |¬«       t        j                  |j.                  j                  |¬«       y	t	        |t0        «      rÅ| j                  j                  }|j                  j2                  dz  d|j                  j&                  z  dz  z  |z  }d|j                  j2                  z  dz  |z  }t        j                  |j4                  j                  |¬«       t        j                  |j6                  j                  |¬«       y	y	)
zInitialize the weightsrC   g{®Gáz”?)ÚmeanÚstdre   r  r”   rO   )rw  N)rx   Ú_init_weightsrs   Úinitializer_factorr­   r  ÚinitÚnormal_r  r  r  Úcopy_r  r"   r#   rJ   r  rz   râ   Únum_hidden_layersr–   r—   r˜   rU  r€   r}   rI  rJ  )r„   ÚmoduleÚfactorÚin_proj_stdÚout_proj_stdÚfc_stdr…   s         €r%   rx  z%GroupViTPreTrainedModel._init_weightsÖ  s  ø€ ô 	‰Ñ˜fÔ%Ø—‘×/Ñ/ˆÜ�fÔ4Ô5Ü�L‰L˜×/Ñ/×6Ñ6¸SÀfÈtÁmÕTÜ�L‰L˜×2Ñ2×9Ñ9ÀÈÐRVÉÕWÜ�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhÜ˜Ô 1Õ2Ø—[‘[×3Ñ3ˆFØ!×+Ñ+¨TÑ1°q¸6¿=¹=×;ZÑ;ZÑ7ZÐ_cÑ6cÑdÐgmÑmˆKØ"×,Ñ,¨dÑ2°fÑ<ˆLÜ�L‰L˜Ÿ™×-Ñ-°;Õ?Ü�L‰L˜Ÿ™×-Ñ-°;Õ?Ü�L‰L˜Ÿ™×-Ñ-°;Õ?Ü�L‰L˜Ÿ™×/Ñ/°\ÖBÜ˜¤Ô,Ø—[‘[×3Ñ3ˆFØ!Ÿ=™=×4Ñ4°dÑ:ÀÀFÇMÁM×DcÑDcÑ@cÐhlÑ?lÑmÐpvÑvˆKØ˜&Ÿ-™-×3Ñ3Ñ3¸Ñ<¸vÑEˆFÜ�L‰L˜Ÿ™×*Ñ*°Õ7Ü�L‰L˜Ÿ™×*Ñ*°Ö<ð -r'   )rŒ   r�   rŽ   r   rÛ   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingr,  rz   Ú_can_record_outputsr"   rf   rx  r�   r�   s   @r%   rq  rq  Ë  sE   ø… àÓØ"ÐØ(ÐØ&*Ð#à-Ø'ñÐð
 €U‡]�]ƒ_ó=ó ô=r'   rq  c                   óx   ‡ — e Zd Zdeddfˆ fd„Z	 	 	 d
dej                  dedz  dedz  dedz  dee	z  f
d	„Z
ˆ xZS )ÚGroupViTVisionEncoderrs   r   Nc                 óh  •— t         ‰| �  «        || _        t        j                  t        t        |j                  «      «      D �cg c]P  }t        ||j                  |   |j                  |   |j                  |   |dkD  r|j                  |dz
     nd¬«      ‘ŒR c}«      | _        d| _        y c c}w )Nr   r   )rs   r&  rº   r«   r'  F)rx   ry   rs   r   r*  r+  r$   Údepthsr%  Únum_group_tokensÚnum_output_groupsÚstagesÚgradient_checkpointing)r„   rs   Úir…   s      €r%   ry   zGroupViTVisionEncoder.__init__ñ  s¨   ø€ Ü‰ÑÔØˆŒÜ—m‘mô œs 6§=¡=Ó1Ó2ö	ð ô Ø!Ø Ÿ-™-¨Ñ*Ø$*×$;Ñ$;¸AÑ$>Ø%+×%=Ñ%=¸aÑ%@ØLMÐPQÊE¨×)AÑ)AÀ!ÀaÁ%Ò)HÐWXöò	ó
ˆŒð ',ˆÕ#ùò	s   ÁAB/r9  Úoutput_hidden_statesr;  Úreturn_dictc                 óª  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|rdnd }|rdnd }d }t	        | j
                  «      D ]3  \  }}	|r||fz   } |	|||«      }
|
d   }|
d   }|sŒ%|
d   €Œ+||
d   fz   }Œ5 |r||fz   }|st        d„ |||fD «       «      S t        |||¬«      S )NrÜ   r   r   rO   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr2  rÜ   )rÓ   Úvs     r%   rÕ   z0GroupViTVisionEncoder.forward.<locals>.<genexpr>$  s   è ø€ Òg˜qÐYZÑYfœÑgùs   ‚Š)Úlast_hidden_stater9  r[   )rs   r;  r�  r‘  Ú	enumerater�  rÖ   r   )r„   r9  r�  r;  r‘  Úall_hidden_statesÚall_groupingsr¾   r�  ÚstageÚlayer_outputss              r%   r‹   zGroupViTVisionEncoder.forward  s   € ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆá"6™B¸DÐÙ/™°Tˆàˆä! $§+¡+Ó.ò 
	D‰HˆAˆuÙ#Ø$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ô
ð 	
r'   r"  )rŒ   r�   rŽ   r   ry   r"   rô   rõ   rÖ   r   r‹   r�   r�   s   @r%   rˆ  rˆ  ð  sl   ø„ ð,Ð3ð ,¸õ ,ð( -1Ø)-Ø#'ñ%
à—|‘|ð%
ð # T™kð%
ð   $™;ð	%
ð
 ˜D‘[ð%
ð 
�Ñ	 ÷%
r'   rˆ  c                   óf   ‡ — e Zd ZdZdefˆ fd„Z	 d	dej                  dz  dee	   de
ez  fd„Zˆ xZS )
ÚGroupViTTextEncoderz¹
    Transformer encoder consisting of `config.num_hidden_layers` self-attention layers. Each layer is a
    [`GroupViTEncoderLayer`].

    Args:
        config: GroupViTTextConfig
    rs   c                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w rA  )
rx   ry   rs   r   r*  r+  r}  r,  r-  rŽ  )r„   rs   r  r…   s      €r%   ry   zGroupViTTextEncoder.__init__3  sP   ø€ Ü‰ÑÔØˆŒÜ—m‘mÌ5ÐQW×QiÑQiÓKjÖ$kÀaÔ%9¸&Õ%AÒ$kÓlˆŒØ&+ˆÕ#ùò %ls   ½A#Nr=  r\  r   c                 óT   — |}| j                   D ]  } |||fi |¤Ž}Œ t        |¬«      S )a7  
        Args:
            inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
                Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation.
                This is useful if you want more control over how to convert `input_ids` indices into associated vectors
                than the model's internal embedding lookup matrix.
            attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
                Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

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

                [What are attention masks?](../glossary#attention-mask)
        )r•  )r-  r   )r„   r  r=  r\  r9  Úencoder_layers         r%   r‹   zGroupViTTextEncoder.forward9  sH   € ð( &ˆØ!Ÿ[™[ò 	ˆMÙ)ØØñð ñ‰Mð	ô Ø+ô
ð 	
r'   r2  )rŒ   r�   rŽ   rÙ   r   ry   r"   rô   r   r   rÖ   r   r‹   r�   r�   s   @r%   rœ  rœ  *  sQ   ø„ ñð,Ð1õ ,ð /3ñ
ð Ÿ™ tÑ+ð
ð Ð+Ñ,ð	
ð
 
�Ñ	 ÷
r'   rœ  c                   óÈ   ‡ — e Zd Zdefˆ fd„Ze ed¬«      e	 	 	 ddej                  dz  dej                  dz  dej                  dz  d	e
e   d
ef
d„«       «       «       Zˆ xZS )ÚGroupViTTextTransformerrs   c                 ó
  •— t         ‰| �  |«       |j                  }t        |«      | _        t        |«      | _        t        j                  ||j                  ¬«      | _
        |j                  | _        | j                  «        y ru   )rx   ry   r}   r  r   rœ  Úencoderr   r|   r~   Úfinal_layer_normÚeos_token_idÚ	post_initr  s      €r%   ry   z GroupViTTextTransformer.__init__[  sf   ø€ Ü‰Ñ˜Ô Ø×&Ñ&ˆ	Ü0°Ó8ˆŒÜ*¨6Ó2ˆŒÜ "§¡¨Y¸F×<QÑ<QÔ RˆÔð #×/Ñ/ˆÔà�‰Õr'   F)Útie_last_hidden_statesNr  r=  r  r\  r   c                 óZ  — |€t        d«      ‚|j                  «       }|j                  d|d   «      }| j                  ||¬«      }t	        | j
                  ||d ¬«      }|j                  dd «        | j                  d||ddœ|¤Ž}|d   }| j                  |«      }| j                  d	k(  rm|t        j                  |j                  d   |j                  ¬
«      |j                  t        j                  |j                  ¬«      j!                  d¬«      f   }	n‡|t        j                  |j                  d   |j                  ¬
«      |j                  t        j                  |j                  ¬«      | j                  k(  j                  «       j!                  d¬«      f   }	t#        ||	¬«      S )NzYou have to specify input_idsre   )r  r  )rs   r  r=  Úpast_key_valuesÚ	is_causalT)r  r=  rª  r   rO   r   )rD   r   r�   )r•  Úpooler_outputrÜ   )rî   rS   r  r   r	   rs   Úpopr£  r¤  r¥  r"   r#   rJ   r   ÚtorV   Úargmaxr   )
r„   r  r=  r  r\  Úinput_shaper9  Úencoder_outputsr•  Úpooled_outputs
             r%   r‹   zGroupViTTextTransformer.forwardg  s¦  € ð ÐÜÐ<Ó=Ð=à—n‘nÓ&ˆØ—N‘N 2 {°2¡Ó7ˆ	àŸ™°)È,˜ÓWˆä+Ø—;‘;Ø'Ø)Ø ô	
ˆð 	�
‰
�; Ô%Ø+7¨4¯<©<ð ,
Ø'Ø)Øñ,
ð ñ	,
ˆð ,¨AÑ.ÐØ ×1Ñ1Ð2CÓDÐà×Ñ Ò!ð .Ü—‘Ð.×4Ñ4°QÑ7Ð@Q×@XÑ@XÔYØ—‘¤5§9¡9Ð5F×5MÑ5M�ÓN×UÑUÐZ\ÐUÓ]ð_ñ‰Mð .Ü—‘Ð.×4Ñ4°QÑ7Ð@Q×@XÑ@XÔYð —‘¤E§I¡IÐ6G×6NÑ6N�ÓOÐSW×SdÑSdÑdß‘“ß‘˜B�“ð!ñˆMô *Ø/Ø'ô
ð 	
r'   r"  )rŒ   r�   rŽ   r   ry   r   r   r   r"   rô   r   r   r   r‹   r�   r�   s   @r%   r¡  r¡  Z  s•   ø„ ð
Ð1õ 
ð  Ù¨EÔ2Øð *.Ø.2Ø,0ñ	:
à—<‘< $Ñ&ð:
ð Ÿ™ tÑ+ð:
ð —l‘l TÑ)ð	:
ð
 Ð+Ñ,ð:
ð 
$ò:
ó ó 3ó  ô:
r'   r¡  c                   óâ   ‡ — e Zd ZU eed<   dZdefˆ fd„Zdej                  fd„Z	d„ Z
e	 	 	 ddej                  dz  d	ej                  dz  d
ej                  dz  dee   deez  f
d„«       Zˆ xZS )ÚGroupViTTextModelrs   )rt  c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y r2  )rx   ry   r¡  Ú
text_modelr¦  rƒ   s     €r%   ry   zGroupViTTextModel.__init__«  s&   ø€ Ü‰Ñ˜Ô Ü1°&Ó9ˆŒà�‰Õr'   r   c                 óB   — | j                   j                  j                  S r2  ©rµ  r   r  rØ   s    r%   Úget_input_embeddingsz&GroupViTTextModel.get_input_embeddings±  s   € Ø�‰×)Ñ)×9Ñ9Ð9r'   c                 ó:   — || j                   j                  _        y r2  r·  )r„   r¤   s     r%   Úset_input_embeddingsz&GroupViTTextModel.set_input_embeddings´  s   € Ø5:ˆ�‰×"Ñ"Õ2r'   Nr  r=  r  r\  c                 ó.   —  | j                   d|||dœ|¤ŽS )a9  
        Examples:

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

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

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

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        >>> pooled_output = outputs.pooler_output  # pooled (EOS token) states
        ```©r  r=  r  rÜ   )rµ  )r„   r  r=  r  r\  s        r%   r‹   zGroupViTTextModel.forward·  s/   € ð. ˆt�‰ð 
ØØ)Ø%ñ
ð ñ	
ð 	
r'   r"  )rŒ   r�   rŽ   r   rÛ   r„  ry   r   ÚModuler¸  rº  r   r"   rô   r   r   rÖ   r   r‹   r�   r�   s   @r%   r³  r³  §  s§   ø… ØÓØ ÐðÐ1õ ð: b§i¡ió :ò;ð ð *.Ø.2Ø,0ñ	
à—<‘< $Ñ&ð
ð Ÿ™ tÑ+ð
ð —l‘l TÑ)ð	
ð
 Ð+Ñ,ð
ð 
Ð+Ñ	+ò
ó ô
r'   r³  c                   ó†   ‡ — e Zd Zdefˆ fd„Ze	 	 	 	 d
dej                  dz  dedz  dedz  dedz  de	e
z  f
d	„«       Zˆ xZS )ÚGroupViTVisionTransformerrs   c                 óÔ   •— t         ‰| �  «        || _        |j                  }t	        |«      | _        t        |«      | _        t        j                  ||j                  ¬«      | _        y ru   )rx   ry   rs   r}   r÷   r   rˆ  r£  r   r|   r~   rÿ   r  s      €r%   ry   z"GroupViTVisionTransformer.__init__×  sP   ø€ Ü‰ÑÔØˆŒØ×&Ñ&ˆ	ä2°6Ó:ˆŒÜ,¨VÓ4ˆŒÜŸ™ i°V×5JÑ5JÔKˆ�r'   Nré   r�  r;  r‘  r   c                 ó²  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|€t	        d«      ‚| j                  |«      }| j                  ||||¬«      }|d   }| j                  |«      }|j                  d¬«      }|s
||f|dd  z   S t        |||j                  |j                  ¬«      S )Nz You have to specify pixel_values)r9  r�  r;  r‘  r   r   r�   )r•  r«  r9  r[   )rs   r;  r�  r‘  rî   r   r£  rÿ   rv  r   r9  r[   )	r„   ré   r�  r;  r‘  r9  r°  r•  r±  s	            r%   r‹   z!GroupViTVisionTransformer.forwardà  s  € ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐÜÐ?Ó@Ð@àŸ™¨Ó5ˆàŸ,™,Ø'Ø!5Ø/Ø#ð	 'ó 
ˆð ,¨AÑ.Ðð !ŸN™NÐ+<Ó=ÐØ)×.Ñ.°1Ð.Ó5ˆáØ% }Ð5¸ÈÈÐ8KÑKÐKä)Ø/Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r'   ©NNNN)rŒ   r�   rŽ   r   ry   r   r"   rÚ   rõ   rÖ   r   r‹   r�   r�   s   @r%   r¿  r¿  Ö  s�   ø„ ðLÐ3õ Lð ð 26Ø,0Ø)-Ø#'ñ'
à×'Ñ'¨$Ñ.ð'
ð # T™kð'
ð   $™;ð	'
ð
 ˜D‘[ð'
ð 
Ð+Ñ	+ò'
ó ô'
r'   r¿  c                   óª   ‡ — e Zd ZU eed<   dZdZi Zdefˆ fd„Zde	fd„Z
e	 	 	 	 ddej                  dz  dedz  d	edz  d
edz  deez  f
d„«       Zˆ xZS )ÚGroupViTVisionModelrs   ré   )rs  c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y r2  )rx   ry   r¿  Úvision_modelr¦  rƒ   s     €r%   ry   zGroupViTVisionModel.__init__  s'   ø€ Ü‰Ñ˜Ô Ü5°fÓ=ˆÔà�‰Õr'   r   c                 óB   — | j                   j                  j                  S r2  )rÆ  r   rù   rØ   s    r%   r¸  z(GroupViTVisionModel.get_input_embeddings  s   € Ø× Ñ ×+Ñ+×<Ñ<Ð<r'   Nr;  r�  r‘  c                 ó,   — | j                  ||||¬«      S )a)  
        Examples:

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

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

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

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

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        >>> pooled_output = outputs.pooler_output  # pooled CLS states
        ```©ré   r;  r�  r‘  )rÆ  )r„   ré   r;  r�  r‘  r\  s         r%   r‹   zGroupViTVisionModel.forward  s(   € ð> × Ñ Ø%Ø/Ø!5Ø#ð	 !ó 
ð 	
r'   rÂ  )rŒ   r�   rŽ   r   rÛ   Úmain_input_namer„  r†  ry   rÞ   r¸  r   r"   rÚ   rõ   rÖ   r   r‹   r�   r�   s   @r%   rÄ  rÄ    s£   ø… Ø Ó Ø$€OØ!ÐØÐðÐ3õ ð=Ð&=ó =ð ð 26Ø)-Ø,0Ø#'ñ#
à×'Ñ'¨$Ñ.ð#
ð   $™;ð#
ð # T™kð	#
ð
 ˜D‘[ð#
ð 
Ð+Ñ	+ò#
ó ô#
r'   rÄ  c                   óä  ‡ — e Zd ZU eed<   defˆ fd„Zee	 	 ddej                  dej                  dz  dej                  dz  de
e   deez  f
d	„«       «       Zeed
ej                  de
e   deez  fd„«       «       Zee	 	 	 	 	 	 	 	 ddej                   dz  d
ej"                  dz  dej                  dz  dej                   dz  dedz  dedz  dedz  dedz  de
e   deez  fd„«       «       Zˆ xZS )ÚGroupViTModelrs   c           
      ó6  •— t         ‰| �  |«       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        |«      | _        t!        |«      | _        t%        j&                  t%        j(                  | j                  | j                  d¬«      t%        j*                  | j                  «      t%        j,                  d¬«      t%        j(                  | j                  | j                  d¬«      «      | _        t%        j&                  t%        j(                  | j                  | j                  d¬«      t%        j*                  | j                  «      t%        j,                  d¬«      t%        j(                  | j                  | j                  d¬«      «      | _        t%        j2                  t5        j6                  | j8                  j:                  «      «      | _        | j?                  «        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 T)Úbias)Úinplace) rx   ry   r­   Útext_configr   Ú	TypeErrorÚtypeÚvision_configr   Úprojection_dimÚprojection_intermediate_dimr}   Útext_embed_dimÚvision_embed_dimr¡  rµ  r¿  rÆ  r   r/  r•   ÚBatchNorm1dÚReLUÚvisual_projectionÚtext_projectionrú   r"   rH   rs   Úlogit_scale_init_valueÚlogit_scaler¦  )r„   rs   rÑ  rÔ  r…   s       €r%   ry   zGroupViTModel.__init__E  s÷  ø€ Ü‰Ñ˜Ô ä˜&×,Ñ,Ô.@ÔAÜðÜ˜×+Ñ+Ó,Ð-¨Qð0óð ô
 ˜&×.Ñ.Ô0DÔEÜðÜ˜×-Ñ-Ó.Ð/¨qð2óð ð
 ×(Ñ(ˆØ×,Ñ,ˆà$×3Ñ3ˆÔØ+1×+MÑ+MˆÔ(Ø)×5Ñ5ˆÔØ -× 9Ñ 9ˆÔä1°+Ó>ˆŒÜ5°mÓDˆÔä!#§¡Ü�I‰I�d×+Ñ+¨T×-MÑ-MÐTXÔYÜ�N‰N˜4×;Ñ;Ó<Ü�G‰G˜DÔ!Ü�I‰I�d×6Ñ6¸×8KÑ8KÐRVÔWó	"
ˆÔô  "Ÿ}™}Ü�I‰I�d×)Ñ)¨4×+KÑ+KÐRVÔWÜ�N‰N˜4×;Ñ;Ó<Ü�G‰G˜DÔ!Ü�I‰I�d×6Ñ6¸×8KÑ8KÐRVÔWó	 
ˆÔô Ÿ<™<¬¯©°T·[±[×5WÑ5WÓ(XÓYˆÔð 	�‰Õr'   Nr  r=  r  r\  r   c                 óx   —  | j                   d|||ddœ|¤Ž}|j                  }| j                  |«      |_        |S )a  
        Examples:

        ```python
        >>> import torch
        >>> from transformers import CLIPTokenizer, GroupViTModel

        >>> model = GroupViTModel.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="pt")
        >>> with torch.inference_mode():
        ...     text_features = model.get_text_features(**inputs)
        ```T)r  r=  r  r‘  rÜ   )rµ  r«  rÜ  )r„   r  r=  r  r\  Útext_outputsr±  s          r%   Úget_text_featureszGroupViTModel.get_text_featuresp  sV   € ð. 4C°4·?±?ð 4
ØØ)Ø%Øñ	4
ð
 ñ4
ˆð %×2Ñ2ˆØ%)×%9Ñ%9¸-Ó%HˆÔ"àÐr'   ré   c                 óp   —  | j                   |fddi|¤Ž}| j                  |j                  «      |_        |S )aŠ  
        Examples:

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

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

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

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

        >>> with torch.inference_mode():
        ...     image_features = model.get_image_features(**inputs)
        ```r‘  T)rÆ  rÛ  r«  )r„   ré   r\  Úvision_outputss       r%   Úget_image_featuresz GroupViTModel.get_image_features“  sB   € ð4 6G°T×5FÑ5FÀ|Ñ5pÐaeÐ5pÐioÑ5pˆØ'+×'=Ñ'=¸n×>ZÑ>ZÓ'[ˆÔ$àÐr'   Úreturn_lossr;  r�  Úoutput_segmentationc	           
      óˆ  — |�|n| j                   j                  }|�|n| j                   j                  }|rd}|�|n| j                   j                  }| j	                  |||d¬«      }
 | j
                  d|||dœ|	¤Ž}|
j                  }| j                  |«      }|j                  }| j                  |«      }||j                  dd¬«      z  }||j                  dd¬«      z  }| j                  j                  «       }t        j                  ||j                  «       «      |z  }|j                  «       }d}|�rh|
j                  }| j                  |j!                  d|j"                  d   «      «      }|
j$                  }t'        ||j"                  dd «      }||j                  dd¬«      z  }t        j                  ||j                  «       «      |z  }|j!                  |j"                  d   d|j"                  d   «      j)                  ddd	«      }|j!                  |j"                  d   |j"                  d	   d«      }t        j                  ||«      |z  }|j!                  |j"                  d   |j"                  d	   |j"                  d   |j"                  d
   «      }d}|rt+        |«      }t-        ||||||||
¬«      S )až  
        return_loss (`bool`, *optional*):
            Whether or not to return the contrastive loss.
        output_segmentation (`bool`, *optional*):
            Whether or not to return the segmentation logits.

        Examples:

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

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

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

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

        >>> outputs = model(**inputs)
        >>> logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
        >>> probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities
        ```NTrÉ  r¼  re   r¡   rO   r   r   r   )rÇ   rÈ   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÜ   )rs   r;  ræ  r�  rÆ  rµ  r«  rÛ  rÜ  ÚnormrÞ  Úexpr"   ÚmatmulÚtr•  rY   rJ   r[   rp   rg   r-   rÆ   )r„   r  ré   r=  r  rå  r;  r�  ræ  r\  rã  rà  rÌ   rË   rÞ  rÉ   rÈ   Ú
seg_logitsÚimage_group_embedsr[   ÚgroupingÚlogits_per_image_groupÚflatten_groupingrÇ   s                           r%   r‹   zGroupViTModel.forward²  s  € ðX 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà#6Ð#BÑÈÏÉ×HgÑHgð 	ñ Ø $Ðà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð
 ×*Ñ*Ø%Ø/Ø!5Øð	 +ó 
ˆð 4C°4·?±?ð 4
ØØ)Ø%ñ4
ð ñ	4
ˆð &×3Ñ3ˆØ×-Ñ-¨lÓ;ˆà"×0Ñ0ˆØ×*Ñ*¨;Ó7ˆð $ l×&7Ñ&7¸BÈÐ&7Ó&MÑMˆØ! K×$4Ñ$4¸ÀTÐ$4Ó$JÑJˆð ×&Ñ&×*Ñ*Ó,ˆÜŸ,™, {°L·N±NÓ4DÓEÈÑSˆØ*×,Ñ,Ó.Ðàˆ
Úð "0×!AÑ!AÐà!%×!7Ñ!7Ð8J×8RÑ8RÐSUÐWi×WoÑWoÐprÑWsÓ8tÓ!uÐØ'×2Ñ2ˆJä3°JÀ×@RÑ@RÐSTÐSUÐ@VÓWˆHð "4Ð6H×6MÑ6MÐRTÐ^bÐ6MÓ6cÑ!cÐä%*§\¡\Ð2DÀkÇmÁmÃoÓ%VÐYdÑ%dÐ"à%;×%CÑ%CØ×"Ñ" 1Ñ% r¨;×+<Ñ+<¸QÑ+?ó&ç‰g�a˜˜AÓð #ð
  (×/Ñ/°·±¸qÑ0AÀ8Ç>Á>ÐRSÑCTÐVXÓYÐô Ÿ™Ð&<Ð>NÓOÐR]Ñ]ˆJØ#×+Ñ+Ø× Ñ  Ñ# Z×%5Ñ%5°aÑ%8¸(¿.¹.ÈÑ:KÈXÏ^É^Ð\]ÑM^óˆJð ˆÙÜ.¨Ó?ˆDä"ØØ-Ø+Ø *Ø#Ø%Ø*Ø .ô	
ð 		
r'   rh  )NNNNNNNN)rŒ   r�   rŽ   r   rÛ   ry   r   r   r"   rô   r   r   rÖ   r   rá  rä  r#  rÚ   rõ   rÆ   r‹   r�   r�   s   @r%   rÌ  rÌ  A  s¿  ø… àÓð)˜~õ )ðV Øð /3Ø,0ñ	à—<‘<ðð Ÿ™ tÑ+ðð —l‘l TÑ)ð	ð
 Ð+Ñ,ðð 
Ð+Ñ	+òó ó ððB Øðà—l‘lðð Ð+Ñ,ðð 
Ð+Ñ	+ò	ó ó ðð: Øð .2Ø15Ø.2Ø04Ø#'Ø)-Ø,0Ø+/ñ|
à×#Ñ# dÑ*ð|
ð ×'Ñ'¨$Ñ.ð|
ð Ÿ™ tÑ+ð	|
ð
 ×&Ñ&¨Ñ-ð|
ð ˜D‘[ð|
ð   $™;ð|
ð # T™kð|
ð " D™[ð|
ð Ð+Ñ,ð|
ð 
Ð$Ñ	$ò|
ó ó ô|
r'   rÌ  )rÌ  rq  r³  rÄ  )r   Fre   rò   )MrÙ   Úcollections.abcr¯   Údataclassesr   Útypingr   ÚnumpyrW   r"   r   Ú r   rz  Úactivationsr   Úmasking_utilsr	   Úmodeling_layersr
   Úmodeling_outputsr   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_groupvitr   r   r   Ú
get_loggerrŒ   Úloggerrô   r&   r-   rV   r?   Úfloatrõ   rM   rc   rp   r½  rr   r’   r©   rÆ   rÞ   r÷   r  r%  r€   r²   rz   r,  rq  rˆ  rœ  r¡  r³  r¿  rÄ  rÌ  Ú__all__rÜ   r'   r%   ú<module>r     sc  ðñ ã Ý !Ý ã Û Ý å &Ý !Ý /Ý 9ß KÝ -Ý &ß j× jÝ 7Ý 5ß \Ñ \ð 
ˆ×	Ñ	˜HÓ	%€ð
`˜UŸ\™\ð `¨e¯l©ló `ð
-¨E¯L©Lð -¸U¿\¹\ó -ð˜Ÿ™ð ¨Có ñ˜5Ÿ<™<ð ¨eð ¸tð ÐRUð Ð_d×_kÑ_kó ó,ò<ô: "§)¡)ô ô -˜bŸi™iô -ô`4+˜"Ÿ)™)ô 4+ðn Ø
ô-
˜+ó -
ó ó ð-
ô`˜bŸi™iô ôDG˜rŸy™yô GôV%˜RŸY™Yô %ôPZ�B—I‘Iô Zôz�"—)‘)ô ô0!�{ô !ô]2˜Ÿ	™	ô ]2ôBÐ5ô ðB ô!=˜oó !=ó ð!=ôH7
˜BŸI™Iô 7
ôt-
˜"Ÿ)™)ô -
ô`J
Ð5ô J
ôZ,
Ð/ô ,
ô^2
 §	¡	ô 2
ôj3
Ð1ô 3
ðl ôn
Ð+ó n
ó ðn
òb c�r'   