Ë
    S^(hÃ ã                   ó   — d 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 ddlmZmZ dd	lmZmZ dd
lmZ ddlmZmZmZmZmZmZ ddlmZm Z m!Z!  ejD                  e#«      Z$dZ%de
jL                  de
jL                  fd„Z'de
jL                  de
jL                  fd„Z(e G d„ de«      «       Z)e G d„ de«      «       Z*e G d„ de«      «       Z+ G d„ dejX                  «      Z- G d„ dejX                  «      Z. G d„ dejX                  «      Z/ G d „ d!ejX                  «      Z0 G d"„ d#ejX                  «      Z1 G d$„ d%e«      Z2d&Z3d'Z4d(Z5d)Z6 G d*„ d+ejX                  «      Z7 G d,„ d-ejX                  «      Z8 G d.„ d/e2«      Z9 G d0„ d1ejX                  «      Z: G d2„ d3e2«      Z; ee3«       G d4„ d5e2«      «       Z< G d6„ d7ejX                  «      Z= G d8„ d9e2«      Z> ed:e3«       G d;„ d<e2«      «       Z?g d=¢Z@y)>zPyTorch CLIPSeg model.é    N)Ú	dataclass)ÚAnyÚOptionalÚTupleÚUnion)Únné   )ÚACT2FN)Ú _create_4d_causal_attention_maskÚ_prepare_4d_attention_mask)ÚBaseModelOutputÚBaseModelOutputWithPooling)ÚPreTrainedModel)ÚModelOutputÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstringsÚ	torch_inté   )ÚCLIPSegConfigÚCLIPSegTextConfigÚCLIPSegVisionConfigzCIDAS/clipseg-rd64-refinedÚlogitsÚreturnc                 ó’   — t         j                  j                  | t        j                  t        | «      | j                  ¬«      «      S )N©Údevice)r   Ú
functionalÚcross_entropyÚtorchÚarangeÚlenr   )r   s    új/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/clipseg/modeling_clipseg.pyÚcontrastive_lossr%   1   s/   € Ü�=‰=×&Ñ& v¬u¯|©|¼CÀ»KÐPV×P]ÑP]Ô/^Ó_Ð_ó    Ú
similarityc                 óZ   — t        | «      }t        | j                  «       «      }||z   dz  S )Ng       @)r%   Út)r'   Úcaption_lossÚ
image_losss      r$   Úclipseg_lossr,   6   s,   € Ü# JÓ/€LÜ! *§,¡,£.Ó1€JØ˜:Ñ%¨Ñ,Ð,r&   c                   ó  — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   dZ
eej                     ed<   dZeej                     ed<   dZeej                     ed<   dZeed<   dZeed	<   d
ee   fd„Zy)ÚCLIPSegOutputaÿ  
    Args:
        loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `return_loss` is `True`):
            Contrastive loss for image-text similarity.
        logits_per_image (`torch.FloatTensor` of shape `(image_batch_size, text_batch_size)`):
            The scaled dot product scores between `image_embeds` and `text_embeds`. This represents the image-text
            similarity scores.
        logits_per_text (`torch.FloatTensor` of shape `(text_batch_size, image_batch_size)`):
            The scaled dot product scores between `text_embeds` and `image_embeds`. This represents the text-image
            similarity scores.
        text_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
            The text embeddings obtained by applying the projection layer to the pooled output of [`CLIPSegTextModel`].
        image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
            The image embeddings obtained by applying the projection layer to the pooled output of [`CLIPSegVisionModel`].
        text_model_output (`BaseModelOutputWithPooling`):
            The output of the [`CLIPSegTextModel`].
        vision_model_output (`BaseModelOutputWithPooling`):
            The output of the [`CLIPSegVisionModel`].
    NÚlossÚlogits_per_imageÚlogits_per_textÚ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))r4   r5   N©ÚgetattrÚto_tuple©Ú.0ÚkÚselfs     €r$   ú	<genexpr>z)CLIPSegOutput.to_tuple.<locals>.<genexpr>\   s=   øè ø€ ò 
àð Ð LÑLˆD�ŠGÔRYÐZ^Ð`aÓRb×RkÑRkÓRmÓmñ
ùó   ƒ-0©ÚtupleÚkeys©r>   s   `r$   r:   zCLIPSegOutput.to_tuple[   ó#   ø€ Üó 
à—Y‘Y“[ô
ó 
ð 	
r&   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   r   r!   ÚFloatTensorÚ__annotations__r0   r1   r2   r3   r4   r   r5   r   r   r:   © r&   r$   r.   r.   <   s›   … ñð( )-€Dˆ(�5×$Ñ$Ñ
%Ó,Ø48Ð�h˜u×0Ñ0Ñ1Ó8Ø37€O�X˜e×/Ñ/Ñ0Ó7Ø/3€K�˜%×+Ñ+Ñ,Ó3Ø04€L�(˜5×,Ñ,Ñ-Ó4Ø48ÐÐ1Ó8Ø6:ÐÐ3Ó:ð
˜% ™*ô 
r&   r.   c                   ó–   — e Zd ZU dZdZeej                     ed<   dZ	ee
ej                        ed<   dZee
ej                        ed<   y)ÚCLIPSegDecoderOutputa¯  
    Args:
        logits (`torch.FloatTensor` of shape `(batch_size, height, width)`):
            Classification scores for each pixel.
        hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
            one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`.
        attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`. Attentions weights after the attention softmax, used to compute the weighted average in
            the self-attention heads.
    Nr   Úhidden_statesÚ
attentions)rF   rG   rH   rI   r   r   r!   rJ   rK   rO   r   rP   rL   r&   r$   rN   rN   b   sR   … ñð +/€FˆH�U×&Ñ&Ñ'Ó.Ø8<€M�8˜E %×"3Ñ"3Ñ4Ñ5Ó<Ø59€J�˜˜u×0Ñ0Ñ1Ñ2Ô9r&   rN   c                   óà   — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   dZ
eej                     ed<   dZeej                     ed<   dZeed<   dZeed<   d	ee   fd
„Zy)ÚCLIPSegImageSegmentationOutputa,  
    Args:
        loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `return_loss` is `True`):
            Contrastive loss for image-text similarity.
        ...
        vision_model_output (`BaseModelOutputWithPooling`):
            The output of the [`CLIPSegVisionModel`].
    Nr/   r   Úconditional_embeddingsÚpooled_outputr5   Údecoder_outputr   c                 óH   ‡ — t        ˆ fd„‰ j                  «       D «       «      S )Nc              3   ód   •K  — | ]'  }|d vr‰|   nt        ‰|«      j                  «       –— Œ) y­w))r5   rU   Nr8   r;   s     €r$   r?   z:CLIPSegImageSegmentationOutput.to_tuple.<locals>.<genexpr>‰   s<   øè ø€ ò 
àð Ð IÑIˆD�ŠGÌwÐW[Ð]^ÓO_×OhÑOhÓOjÓjñ
ùr@   rA   rD   s   `r$   r:   z'CLIPSegImageSegmentationOutput.to_tupleˆ   rE   r&   )rF   rG   rH   rI   r/   r   r!   rJ   rK   r   rS   rT   r5   r   rU   rN   r   r   r:   rL   r&   r$   rR   rR   v   s…   … ñð )-€Dˆ(�5×$Ñ$Ñ
%Ó,Ø*.€FˆH�U×&Ñ&Ñ'Ó.Ø:>Ð˜H U×%6Ñ%6Ñ7Ó>Ø15€M�8˜E×-Ñ-Ñ.Ó5Ø6:ÐÐ3Ó:Ø+/€NÐ(Ó/ð
˜% ™*ô 
r&   rR   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j                  fd	„Z
ˆ xZS )ÚCLIPSegVisionEmbeddingsÚconfigc                 óÚ  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        |j                  | _        t        j                  t        j                  | j                  «      «      | _        t        j                  |j                  | j                  | j                  | j                  d¬«      | _        | j
                  | j                  z  dz  | _        | j                  dz   | _        t        j"                  | j                   | j                  «      | _        | j'                  dt        j(                  | j                   «      j+                  d«      d¬«       y )NF)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚbiasé   r   Úposition_ids©r   éÿÿÿÿ©Ú
persistent)ÚsuperÚ__init__rZ   Úhidden_sizeÚ	embed_dimÚ
image_sizeÚ
patch_sizer   Ú	Parameterr!   ÚrandnÚclass_embeddingÚConv2dÚnum_channelsÚpatch_embeddingÚnum_patchesÚnum_positionsÚ	EmbeddingÚposition_embeddingÚregister_bufferr"   Úexpand©r>   rZ   Ú	__class__s     €r$   rh   z CLIPSegVisionEmbeddings.__init__‘   s	  ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒä!Ÿ|™|¬E¯K©K¸¿¹Ó,GÓHˆÔä!Ÿy™yØ×+Ñ+ØŸ™ØŸ™Ø—?‘?Øô 
ˆÔð !ŸO™O¨t¯©Ñ>À1ÑDˆÔØ!×-Ñ-°Ñ1ˆÔÜ"$§,¡,¨t×/AÑ/AÀ4Ç>Á>Ó"RˆÔØ×Ñ˜^¬U¯\©\¸$×:LÑ:LÓ-M×-TÑ-TÐU\Ó-]ÐjoÐÕpr&   Ú
embeddingsÚheightÚwidthr   c                 óÒ  — |j                   d   dz
  }| j                  j                  j                  d«      }|j                   d   dz
  }t        j
                  j                  «       s%||k(  r ||k(  r| j                  | j                  «      S |dd…dd…f   }|dd…dd…f   }|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|	«      }t	        j                   ||f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.

        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   r   Nrd   g      à?r	   ra   ÚbicubicF)ÚsizeÚmodeÚalign_corners©Údim)Úshaperv   ÚweightÚ	unsqueezer!   ÚjitÚ
is_tracingrb   rl   r   ÚreshapeÚpermuter   r   ÚinterpolateÚviewÚcat)r>   r{   r|   r}   rs   rv   rt   Úclass_pos_embedÚpatch_pos_embedr„   Ú
new_heightÚ	new_widthÚsqrt_num_positionss                r$   Úinterpolate_pos_encodingz0CLIPSegVisionEmbeddings.interpolate_pos_encoding§   sv  € ð !×&Ñ& qÑ)¨AÑ-ˆØ!×4Ñ4×;Ñ;×EÑEÀaÓHÐØ*×0Ñ0°Ñ3°aÑ7ˆô �y‰y×#Ñ#Ô%¨+¸Ò*FÈ6ÐUZÊ?Ø×*Ñ*¨4×+<Ñ+<Ó=Ð=à,ªQ°°°¨UÑ3ˆØ,ªQ°±¨UÑ3ˆà×Ñ˜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ˆä�y‰y˜/¨?Ð;ÀÔCÐCr&   Úpixel_valuesc                 ó   — |j                   \  }}}}|sJ|| j                  k7  s|| j                  k7  r,t        d|› d|› d| j                  › d| j                  › d�	«      ‚| j                  |«      }|j	                  d«      j                  dd«      }| j                  j                  |dd«      }t        j                  ||gd¬«      }	|r|	| j                  |	||«      z   }	|	S |	| j                  | j                  «      z   }	|	S )	NzInput image size (Ú*z) doesn't match model (ú).ra   r   rd   rƒ   )r…   rk   Ú
ValueErrorrr   ÚflattenÚ	transposero   rx   r!   rŽ   r”   rv   rb   )
r>   r•   r”   Ú
batch_sizeÚ_r|   r}   Úpatch_embedsÚclass_embedsr{   s
             r$   ÚforwardzCLIPSegVisionEmbeddings.forwardÐ   s  € Ø'3×'9Ñ'9Ñ$ˆ
�A�v˜uÙ'¨V°t·±Ò-FÈ%ÐSW×SbÑSbÒJbÜØ$ V H¨A¨e¨WÐ4KÈDÏOÉOÐK\Ð\]Ð^b×^mÑ^mÐ]nÐnpÐqóð ð ×+Ñ+¨LÓ9ˆØ#×+Ñ+¨AÓ.×8Ñ8¸¸AÓ>ˆà×+Ñ+×2Ñ2°:¸qÀ"ÓEˆÜ—Y‘Y ¨lÐ;ÀÔCˆ
Ù#Ø# d×&CÑ&CÀJÐPVÐX]Ó&^Ñ^ˆJð Ðð $ d×&=Ñ&=¸d×>OÑ>OÓ&PÑPˆJØÐr&   )T)rF   rG   rH   r   rh   r!   ÚTensorÚintr”   rJ   r    Ú__classcell__©rz   s   @r$   rY   rY   �   se   ø„ ðqÐ2õ qð,'D°5·<±<ð 'DÈð 'DÐUXð 'DÐ]b×]iÑ]ió 'DñR E×$5Ñ$5ð ÐY^×YeÑYe÷ r&   rY   c            	       ó¦   ‡ — e Zd Zdefˆ fd„Z	 	 	 ddeej                     deej                     deej                     dej                  fd„Z
ˆ xZS )	ÚCLIPSegTextEmbeddingsrZ   c                 óN  •— t         ‰| �  «        |j                  }t        j                  |j
                  |«      | _        t        j                  |j                  |«      | _        | j                  dt        j                  |j                  «      j                  d«      d¬«       y )Nrb   rc   Fre   )rg   rh   ri   r   ru   Ú
vocab_sizeÚtoken_embeddingÚmax_position_embeddingsrv   rw   r!   r"   rx   ©r>   rZ   rj   rz   s      €r$   rh   zCLIPSegTextEmbeddings.__init__ä   sƒ   ø€ Ü‰ÑÔØ×&Ñ&ˆ	ä!Ÿ|™|¨F×,=Ñ,=¸yÓIˆÔÜ"$§,¡,¨v×/MÑ/MÈyÓ"YˆÔð 	×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	õ 	
r&   Ú	input_idsrb   Ú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 )Nrd   éþÿÿÿr   zRSequence length must be less than max_position_embeddings (got `sequence length`: z and max_position_embeddings: )r…   rv   r†   r™   rb   r©   )r>   r¬   rb   r­   Ú
seq_lengthÚmax_position_embeddingÚposition_embeddingsr{   s           r$   r    zCLIPSegTextEmbeddings.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)rF   rG   rH   r   rh   r   r!   Ú
LongTensorrJ   r¡   r    r£   r¤   s   @r$   r¦   r¦   ã   sk   ø„ ð

Ð0õ 

ð 15Ø37Ø59ñ	à˜E×,Ñ,Ñ-ðð ˜u×/Ñ/Ñ0ðð   × 1Ñ 1Ñ2ð	ð
 
�‰÷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	ej                     d	e	ej                     d
e	e
   deej                  e	ej                     f   f
d„Zˆ xZS )ÚCLIPSegAttentionz=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˜   ç      à¿)rg   rh   rZ   ri   rj   Únum_attention_headsÚ	num_headsÚhead_dimr™   ÚscaleÚattention_dropoutÚdropoutr   ÚLinearÚk_projÚv_projÚq_projÚout_projry   s     €r$   rh   zCLIPSegAttention.__init__  s  ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØ�=‰=˜4Ÿ>™>Ñ)¨T¯^©^Ò;ÜØMÈdÏnÉnÐM]ð ^Ø—N‘NÐ# 2ð'óð ð —]‘] DÑ(ˆŒ
Ø×/Ñ/ˆŒä—i‘i §¡°·±Ó?ˆŒÜ—i‘i §¡°·±Ó?ˆŒÜ—i‘i §¡°·±Ó?ˆŒÜŸ	™	 $§.¡.°$·.±.ÓAˆ�r&   ÚtensorÚseq_lenÚbszc                 óŽ   — |j                  ||| j                  | j                  «      j                  dd«      j	                  «       S )Nr   ra   )r�   r¹   rº   r›   Ú
contiguous)r>   rÃ   rÄ   rÅ   s       r$   Ú_shapezCLIPSegAttention._shape"  s7   € Ø�{‰{˜3 ¨¯©¸¿¹ÓG×QÑQÐRSÐUVÓW×bÑbÓdÐdr&   rO   Úattention_maskÚcausal_attention_maskÚoutput_attentionsr   c                 ó”  — |j                  «       \  }}}| j                  |«      | j                  z  }| 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  ||«      }|�{|j                  «       |d||fk7  r#t        d|d||f› d|j                  «       › �«      ‚|j                  || j                  ||«      |z   }|j                  || j                  z  ||«      }t        j                  j                  |d¬«      }|r?|j                  || j                  ||«      }|j                  || j                  z  ||«      }nd}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 Channelrd   r   ra   z$Attention weights should be of size z	, but is Nz!Attention mask should be of size rƒ   )ÚpÚtrainingz `attn_output` should be of size )r€   rÁ   r»   rÈ   r¿   rÀ   r¹   rº   r�   r!   Úbmmr›   r™   r   r   Úsoftmaxr½   rÎ   rŠ   rÂ   )r>   rO   rÉ   rÊ   rË   rÅ   Útgt_lenrj   Úquery_statesÚ
key_statesÚvalue_statesÚ
proj_shapeÚsrc_lenÚattn_weightsÚattn_weights_reshapedÚ
attn_probsÚattn_outputs                    r$   r    zCLIPSegAttention.forward%  sÕ  € ð #0×"4Ñ"4Ó"6ÑˆˆW�ið —{‘{ =Ó1°D·J±JÑ>ˆØ—[‘[ §¡¨]Ó!;¸RÀÓEˆ
Ø—{‘{ 4§;¡;¨}Ó#=¸rÀ3ÓGˆà˜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Ø ×%Ñ%Ó'Ð(ð*óð ð !Ð,Ø$×)Ñ)Ó+°°Q¸ÀÐ/IÒIÜ Ø7¸¸aÀÈ'Ð8RÐ7Sð TØ-×2Ñ2Ó4Ð5ð7óð ð (×,Ñ,¨S°$·.±.À'È7ÓSÐVkÑkˆLØ'×,Ñ,¨S°4·>±>Ñ-AÀ7ÈGÓTˆLàÐ%Ø×"Ñ"Ó$¨¨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×$5Ñ$5°c¸4¿>¹>È7ÐT[Ó$\Ð!Ø0×5Ñ5°c¸D¿N¹NÑ6JÈGÐU\Ó]‰Là$(Ð!ä—]‘]×*Ñ*¨<¸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&   )NNF)rF   rG   rH   rI   rh   r!   r¡   r¢   rÈ   r   Úboolr   r    r£   r¤   s   @r$   rµ   rµ     s¥   ø„ ÙGôBð&e˜UŸ\™\ð e°Cð e¸có eð 26Ø8<Ø,1ñL2à—|‘|ðL2ð ! §¡Ñ.ðL2ð  (¨¯©Ñ5ð	L2ð
 $ D™>ðL2ð 
ˆu�|‰|˜X e§l¡lÑ3Ð3Ñ	4÷L2r&   rµ   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )Ú
CLIPSegMLPc                 ó  •— t         ‰| �  «        || _        t        |j                     | _        t        j                  |j                  |j                  «      | _
        t        j                  |j                  |j                  «      | _        y ©N)rg   rh   rZ   r
   Ú
hidden_actÚactivation_fnr   r¾   ri   Úintermediate_sizeÚfc1Úfc2ry   s     €r$   rh   zCLIPSegMLP.__init__v  sd   ø€ Ü‰ÑÔØˆŒÜ# F×$5Ñ$5Ñ6ˆÔÜ—9‘9˜V×/Ñ/°×1IÑ1IÓJˆŒÜ—9‘9˜V×5Ñ5°v×7IÑ7IÓJˆ�r&   rO   r   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rß   )rã   rá   rä   )r>   rO   s     r$   r    zCLIPSegMLP.forward}  s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆØÐr&   )rF   rG   rH   rh   r!   r¡   r    r£   r¤   s   @r$   rÝ   rÝ   u  s$   ø„ ôKð U§\¡\ð °e·l±l÷ r&   rÝ   c                   ó    ‡ — e Zd Zdefˆ fd„Z	 d	dej                  dej                  dej                  dee   de	ej                     f
d„Zˆ xZS )
ÚCLIPSegEncoderLayerrZ   c                 óD  •— t         ‰| �  «        |j                  | _        t	        |«      | _        t        j                  | j                  |j                  ¬«      | _	        t        |«      | _        t        j                  | j                  |j                  ¬«      | _        y ©N)Úeps©rg   rh   ri   rj   rµ   Ú	self_attnr   Ú	LayerNormÚlayer_norm_epsÚlayer_norm1rÝ   ÚmlpÚlayer_norm2ry   s     €r$   rh   zCLIPSegEncoderLayer.__init__†  óm   ø€ Ü‰ÑÔØ×+Ñ+ˆŒÜ)¨&Ó1ˆŒÜŸ<™<¨¯©¸F×<QÑ<QÔRˆÔÜ˜fÓ%ˆŒÜŸ<™<¨¯©¸F×<QÑ<QÔRˆÕr&   rO   rÉ   rÊ   rË   r   c                 óÎ   — |}| j                  |«      }| j                  ||||¬«      \  }}||z   }|}| j                  |«      }| j                  |«      }||z   }|f}|r||fz  }|S ©aI  
        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 attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
        )rO   rÉ   rÊ   rË   )rï   rì   rñ   rð   ©r>   rO   rÉ   rÊ   rË   Úresidualr×   Úoutputss           r$   r    zCLIPSegEncoderLayer.forwardŽ  s’   € ð" !ˆà×(Ñ(¨Ó7ˆØ&*§n¡nØ'Ø)Ø"7Ø/ð	 '5ó '
Ñ#ˆ�|ð ! =Ñ0ˆà ˆØ×(Ñ(¨Ó7ˆØŸ™ Ó/ˆØ  =Ñ0ˆà Ð"ˆáØ˜�Ñ&ˆGàˆr&   ©F)rF   rG   rH   r   rh   r!   r¡   r   rÛ   r   rJ   r    r£   r¤   s   @r$   rç   rç   …  sf   ø„ ðS˜}õ Sð -2ñ&à—|‘|ð&ð Ÿ™ð&ð  %Ÿ|™|ð	&ð
 $ D™>ð&ð 
ˆu× Ñ Ñ	!÷&r&   rç   c                   ó"   — e Zd ZdZeZdZdZd„ Zy)ÚCLIPSegPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ÚclipTc                 óL
  — | j                   j                  }t        |t        «      rj|j                  j
                  j                  j                  d|dz  ¬«       |j                  j
                  j                  j                  d|dz  ¬«       �nåt        |t        «      rì| j                   j                  }t        j                  j                  |j                  d|j                  dz  |z  ¬«       t        j                  j                  |j                  j
                  |j                   j                  |z  ¬«       t        j                  j                  |j                  j
                  |j                   j                  |z  ¬«       �nét        |t         «      �r-| j                   j                  }|j                  dz  d|j                   j"                  z  dz  z  |z  }|j                  dz  |z  }t        j                  j                  |j$                  j
                  |¬«       t        j                  j                  |j&                  j
                  |¬«       t        j                  j                  |j(                  j
                  |¬«       t        j                  j                  |j*                  j
                  |¬«       �n«t        |t,        «      rÙ| j                   j                  }|j                   j.                  dz  d|j                   j"                  z  dz  z  |z  }d|j                   j.                  z  dz  |z  }t        j                  j                  |j0                  j
                  |¬«       t        j                  j                  |j2                  j
                  |¬«       nÂt        |t4        «      r²t        j                  j                  |j6                  j
                  |j8                  dz  | j                   j                  z  ¬«       t        j                  j                  |j:                  j
                  |j<                  dz  | j                   j                  z  ¬«       t        |t        j>                  «      rI|j@                  j                  jC                  «        |j
                  j                  jE                  d«       t        |t        jF                  «      r2|j@                  �%|j@                  j                  jC                  «        yyy)	zInitialize the weightsg        g{®Gáz”?)ÚmeanÚstdr·   )rþ   ra   g      ð?N)$rZ   Úinitializer_factorÚ
isinstancer¦   r©   r†   ÚdataÚnormal_rv   rY   r   Úinitro   rj   rr   Úinitializer_rangerµ   Únum_hidden_layersrÁ   r¿   rÀ   rÂ   rÝ   ri   rã   rä   ÚCLIPSegModelÚtext_projectionÚtext_embed_dimÚvisual_projectionÚvision_embed_dimrí   r`   Úzero_Úfill_r¾   )r>   ÚmoduleÚfactorÚin_proj_stdÚout_proj_stdÚfc_stds         r$   Ú_init_weightsz$CLIPSegPreTrainedModel._init_weightsÁ  s—  € à—‘×/Ñ/ˆÜ�fÔ3Ô4Ø×"Ñ"×)Ñ)×.Ñ.×6Ñ6¸CÀVÈdÁ]Ð6ÔSØ×%Ñ%×,Ñ,×1Ñ1×9Ñ9¸sÈÐQUÉÐ9ÖVÜ˜Ô 7Ô8Ø—[‘[×3Ñ3ˆFÜ�G‰G�O‰O˜F×2Ñ2¸À&×BRÑBRÐTXÑBXÐ[aÑBaˆOÔbÜ�G‰G�O‰O˜F×2Ñ2×9Ñ9¸v¿}¹}×?^Ñ?^ÐagÑ?gˆOÔhÜ�G‰G�O‰O˜F×5Ñ5×<Ñ<À&Ç-Á-×BaÑBaÐdjÑBjˆOÖkÜ˜Ô 0Õ1Ø—[‘[×3Ñ3ˆFØ!×+Ñ+¨TÑ1°q¸6¿=¹=×;ZÑ;ZÑ7ZÐ_cÑ6cÑdÐgmÑmˆKØ"×,Ñ,¨dÑ2°fÑ<ˆLÜ�G‰G�O‰O˜FŸM™M×0Ñ0°kˆOÔBÜ�G‰G�O‰O˜FŸM™M×0Ñ0°kˆOÔBÜ�G‰G�O‰O˜FŸM™M×0Ñ0°kˆOÔBÜ�G‰G�O‰O˜FŸO™O×2Ñ2¸ˆOÖEÜ˜¤
Ô+Ø—[‘[×3Ñ3ˆFØ!Ÿ=™=×4Ñ4°dÑ:ÀÀFÇMÁM×DcÑDcÑ@cÐhlÑ?lÑmÐpvÑvˆKØ˜&Ÿ-™-×3Ñ3Ñ3¸Ñ<¸vÑEˆFÜ�G‰G�O‰O˜FŸJ™J×-Ñ-°6ˆOÔ:Ü�G‰G�O‰O˜FŸJ™J×-Ñ-°;ˆOÕ?Ü˜¤Ô-Ü�G‰G�O‰OØ×&Ñ&×-Ñ-Ø×)Ñ)¨4Ñ/°$·+±+×2PÑ2PÑPð ô ô �G‰G�O‰OØ×(Ñ(×/Ñ/Ø×+Ñ+¨TÑ1°D·K±K×4RÑ4RÑRð ô ô
 �fœbŸl™lÔ+Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÔ)Ü�fœbŸi™iÔ(¨V¯[©[Ð-DØ�K‰K×Ñ×"Ñ"Õ$ð .EÐ(r&   N)	rF   rG   rH   rI   r   Úconfig_classÚbase_model_prefixÚsupports_gradient_checkpointingr  rL   r&   r$   rú   rú   ·  s   „ ñð
 !€LØÐØ&*Ð#ó'%r&   rú   aI  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass. Use it
    as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`CLIPSegConfig`]): 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 (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide
            it.

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

            [What are input IDs?](../glossary#input-ids)
        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)
        position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *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.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
a×  
    Args:
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Padding will be ignored by default should you provide it. 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.
        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.
        interpolate_pos_encoding (`bool`, *optional*, defaults to `True`):
            Whether to interpolate the pre-trained position encodings.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
a§  
    Args:
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide
            it.

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

            [What are input IDs?](../glossary#input-ids)
        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)
        position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *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)
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Padding will be ignored by default should you provide it. Pixel values can be obtained using
            [`AutoImageProcessor`]. See [`CLIPImageProcessor.__call__`] for details.
        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.
        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.
        interpolate_pos_encoding (`bool`, *optional*, defaults to `True`):
            Whether to interpolate the pre-trained position encodings.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
c                   ó¤   ‡ — e Zd ZdZdefˆ fd„Z	 	 	 	 	 ddeej                     deej                     dee	   dee	   dee	   d	e
eef   fd
„Zˆ xZS )ÚCLIPSegEncoderz³
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`CLIPSegEncoderLayer`].

    Args:
        config: CLIPSegConfig
    rZ   c                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w )NF)
rg   rh   rZ   r   Ú
ModuleListÚranger  rç   ÚlayersÚgradient_checkpointing)r>   rZ   r�   rz   s      €r$   rh   zCLIPSegEncoder.__init__Y  sP   ø€ Ü‰ÑÔØˆŒÜ—m‘mÌ%ÐPV×PhÑPhÓJiÖ$jÀQÔ%8¸Õ%@Ò$jÓkˆŒØ&+ˆÕ#ùò %ks   ½A#rÉ   rÊ   rË   Úoutput_hidden_statesÚreturn_dictr   c                 ó  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|rdnd}|rdnd}|}	t	        | j
                  «      D ]b  \  }
}|r||	fz   }| j                  r,| j                  r | j                  |j                  |	|||«      }n ||	|||¬«      }|d   }	|sŒZ||d   fz   }Œd |r||	fz   }|st        d„ |	||fD «       «      S t        |	||¬«      S )aÕ  
        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)
            causal_attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
                Causal mask for the text model. Mask values selected in `[0, 1]`:

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

                [What are attention masks?](../glossary#attention-mask)
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
            output_hidden_states (`bool`, *optional*):
                Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors
                for more detail.
            return_dict (`bool`, *optional*):
                Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
        NrL   )rË   r   r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrß   rL   ©r<   Úvs     r$   r?   z)CLIPSegEncoder.forward.<locals>.<genexpr>«  s   è ø€ Òe˜qÐWXÑWdœÑeùó   ‚Š)Úlast_hidden_staterO   rP   )rZ   rË   r  Úuse_return_dictÚ	enumerater  r  rÎ   Ú_gradient_checkpointing_funcÚ__call__rB   r   )r>   r­   rÉ   rÊ   rË   r  r  Úencoder_statesÚall_attentionsrO   ÚidxÚencoder_layerÚlayer_outputss                r$   r    zCLIPSegEncoder.forward_  sH  € ðL 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆá3™¸ˆÙ0™°dˆà%ˆÜ"+¨D¯K©KÓ"8ò 	FÑˆC�Ù#Ø!/°=Ð2BÑ!B�Ø×*Ò*¨t¯}ª}Ø $× AÑ AØ!×*Ñ*Ø!Ø"Ø)Ø%ó!‘ñ !.Ø!Ø"Ø)Ø&7ô	!�ð *¨!Ñ,ˆMâ Ø!/°=ÀÑ3CÐ2EÑ!E‘ð-	Fñ0  Ø+¨}Ð.>Ñ>ˆNáÜÑe ]°NÀNÐ$SÔeÓeÐeÜØ+¸>ÐVdô
ð 	
r&   ©NNNNN)rF   rG   rH   rI   r   rh   r   r!   r¡   rÛ   r   r   r   r    r£   r¤   s   @r$   r  r  P  s•   ø„ ñð,˜}õ ,ð 26Ø8<Ø,0Ø/3Ø&*ñO
ð ! §¡Ñ.ðO
ð  (¨¯©Ñ5ð	O
ð
 $ D™>ðO
ð ' t™nðO
ð ˜d‘^ðO
ð 
ˆu�oÐ%Ñ	&÷O
r&   r  c                   óð   ‡ — e Zd Zdefˆ fd„Z ee«       eee¬«      	 	 	 	 	 	 dde	e
j                     de	e
j                     de	e
j                     de	e   de	e   d	e	e   d
eeef   fd„«       «       Zˆ xZS )ÚCLIPSegTextTransformerrZ   c                 óö   •— t         ‰| �  «        || _        |j                  }t	        |«      | _        t        |«      | _        t        j                  ||j                  ¬«      | _        |j                  | _        y ré   )rg   rh   rZ   ri   r¦   r{   r  Úencoderr   rí   rî   Úfinal_layer_normÚeos_token_idr«   s      €r$   rh   zCLIPSegTextTransformer.__init__²  sa   ø€ Ü‰ÑÔØˆŒØ×&Ñ&ˆ	Ü/°Ó7ˆŒÜ% fÓ-ˆŒÜ "§¡¨Y¸F×<QÑ<QÔ RˆÔð #×/Ñ/ˆÕr&   ©Úoutput_typer  r¬   rÉ   rb   rË   r  r  r   c                 óZ  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|€t	        d«      ‚|j                  «       }|j                  d|d   «      }| j                  ||¬«      }t        ||j                  |j                  ¬«      }	|�t        ||j                  «      }| j                  |||	|||¬«      }
|
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   }|s
||f|
dd z   S t+        |||
j,                  |
j.                  ¬«      S )ú
        Returns:

        NzYou have to specify input_idsrd   )r¬   rb   r   )r­   rÉ   rÊ   rË   r  r  r   ra   )Údtyper   rƒ   r   ©r$  Úpooler_outputrO   rP   )rZ   rË   r  r%  r™   r€   r�   r{   r   r9  r   r   r2  r3  r4  r!   r"   r…   Útor¢   Úargmaxr   rO   rP   )r>   r¬   rÉ   rb   rË   r  r  Úinput_shaperO   rÊ   Úencoder_outputsr$  rT   s                r$   r    zCLIPSegTextTransformer.forward½  s.  € ð  2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐÜÐ<Ó=Ð=à—n‘nÓ&ˆØ—N‘N 2 {°2¡Ó7ˆ	àŸ™°)È,˜ÓWˆô !AØ˜×,Ñ,°]×5IÑ5Iô!
Ðð Ð%ä7¸È×H[ÑH[Ó\ˆNàŸ,™,Ø'Ø)Ø"7Ø/Ø!5Ø#ð 'ó 
ˆð ,¨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ñ Ø% }Ð5¸ÈÈÐ8KÑKÐKä)Ø/Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r&   ©NNNNNN)rF   rG   rH   r   rh   r   ÚCLIPSEG_TEXT_INPUTS_DOCSTRINGr   r   r   r!   r¡   rÛ   r   r   r    r£   r¤   s   @r$   r0  r0  ±  sÐ   ø„ ð	0Ð0õ 	0ñ +Ð+HÓIÙÐ+EÐTeÔfð -1Ø15Ø/3Ø,0Ø/3Ø&*ñO
à˜EŸL™LÑ)ðO
ð ! §¡Ñ.ðO
ð ˜uŸ|™|Ñ,ð	O
ð
 $ D™>ðO
ð ' t™nðO
ð ˜d‘^ðO
ð 
ˆuÐ0Ð0Ñ	1òO
ó gó JôO
r&   r0  c                   ó"  ‡ — e Zd ZeZddgZdefˆ fd„Zdej                  fd„Z	d„ Z
 ee«       eee¬«      	 	 	 	 	 	 dd	eej"                     d
eej"                     deej"                     dee   dee   dee   deeef   fd„«       «       Zˆ xZS )ÚCLIPSegTextModelr¦   rç   rZ   c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y rß   )rg   rh   r0  Ú
text_modelÚ	post_initry   s     €r$   rh   zCLIPSegTextModel.__init__  s&   ø€ Ü‰Ñ˜Ô Ü0°Ó8ˆŒà�‰Õr&   r   c                 óB   — | j                   j                  j                  S rß   ©rE  r{   r©   rD   s    r$   Úget_input_embeddingsz%CLIPSegTextModel.get_input_embeddings  s   € Ø�‰×)Ñ)×9Ñ9Ð9r&   c                 ó:   — || j                   j                  _        y rß   rH  )r>   Úvalues     r$   Úset_input_embeddingsz%CLIPSegTextModel.set_input_embeddings   s   € Ø5:ˆ�‰×"Ñ"Õ2r&   r5  r¬   rÉ   rb   rË   r  r  c                 ó0   — | j                  ||||||¬«      S )aM  
        Returns:

        Examples:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("CIDAS/clipseg-rd64-refined")
        >>> model = CLIPSegTextModel.from_pretrained("CIDAS/clipseg-rd64-refined")

        >>> 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É   rb   rË   r  r  )rE  )r>   r¬   rÉ   rb   rË   r  r  s          r$   r    zCLIPSegTextModel.forward#  s,   € ð8 �‰ØØ)Ø%Ø/Ø!5Ø#ð ó 
ð 	
r&   r@  )rF   rG   rH   r   r  Ú_no_split_modulesrh   r   ÚModulerI  rL  r   rA  r   r   r   r!   r¡   rÛ   r   r   r    r£   r¤   s   @r$   rC  rC    sí   ø„ Ø$€Là0Ð2GÐHÐðÐ0õ ð: b§i¡ió :ò;ñ +Ð+HÓIÙÐ+EÐTeÔfð -1Ø15Ø/3Ø,0Ø/3Ø&*ñ!
à˜EŸL™LÑ)ð!
ð ! §¡Ñ.ð!
ð ˜uŸ|™|Ñ,ð	!
ð
 $ D™>ð!
ð ' t™nð!
ð ˜d‘^ð!
ð 
ˆuÐ0Ð0Ñ	1ò!
ó gó Jô!
r&   rC  c                   óº   ‡ — e Zd Zdefˆ fd„Z ee«       eee¬«      	 	 	 	 dde	e
j                     de	e   de	e   de	e   de	e   d	eeef   fd
„«       «       Zˆ xZS )ÚCLIPSegVisionTransformerrZ   c                 ó   •— t         ‰| �  «        || _        |j                  }t	        |«      | _        t        j                  ||j                  ¬«      | _	        t        |«      | _        t        j                  ||j                  ¬«      | _        y ré   )rg   rh   rZ   ri   rY   r{   r   rí   rî   Úpre_layrnormr  r2  Úpost_layernormr«   s      €r$   rh   z!CLIPSegVisionTransformer.__init__K  sj   ø€ Ü‰ÑÔØˆŒØ×&Ñ&ˆ	ä1°&Ó9ˆŒÜŸL™L¨¸×8MÑ8MÔNˆÔÜ% fÓ-ˆŒÜ Ÿl™l¨9¸&×:OÑ:OÔPˆÕr&   r5  r•   rË   r  r  r”   r   c                 ó²  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  ||¬«      }| j                  |«      }| j                  ||||¬«      }|d   }|dd…ddd…f   }	| j                  |	«      }	|s
||	f|dd z   S t        ||	|j                  |j                  ¬«      S )r8  N)r”   )r­   rË   r  r  r   r   r:  )rZ   rË   r  r%  r{   rT  r2  rU  r   rO   rP   )
r>   r•   rË   r  r  r”   rO   r?  r$  rT   s
             r$   r    z CLIPSegVisionTransformer.forwardU  s   € ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàŸ™¨ÐOg˜ÓhˆØ×)Ñ)¨-Ó8ˆàŸ,™,Ø'Ø/Ø!5Ø#ð	 'ó 
ˆð ,¨AÑ.ÐØ)ª!¨Q²¨'Ñ2ˆØ×+Ñ+¨MÓ:ˆáØ% }Ð5¸ÈÈÐ8KÑKÐKä)Ø/Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r&   )NNNT)rF   rG   rH   r   rh   r   ÚCLIPSEG_VISION_INPUTS_DOCSTRINGr   r   r   r!   rJ   rÛ   r   r   r    r£   r¤   s   @r$   rR  rR  I  s­   ø„ ðQÐ2õ Qñ +Ð+JÓKÙÐ+EÐTgÔhð -1Ø/3Ø&*Ø37ñ(
à˜u×0Ñ0Ñ1ð(
ð $ D™>ð(
ð ' t™nð	(
ð
 ˜d‘^ð(
ð #+¨4¡.ð(
ð 
ˆuÐ0Ð0Ñ	1ò(
ó ió Lô(
r&   rR  c                   óä   ‡ — e Zd ZeZdZdefˆ fd„Zdej                  fd„Z	 e
e«       eee¬«      	 	 	 	 	 ddeej                      dee   dee   d	ee   d
ee   deeef   fd„«       «       Zˆ xZS )ÚCLIPSegVisionModelr•   rZ   c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y rß   )rg   rh   rR  Úvision_modelrF  ry   s     €r$   rh   zCLIPSegVisionModel.__init__†  s'   ø€ Ü‰Ñ˜Ô Ü4°VÓ<ˆÔà�‰Õr&   r   c                 óB   — | j                   j                  j                  S rß   )r[  r{   rr   rD   s    r$   rI  z'CLIPSegVisionModel.get_input_embeddingsŒ  s   € Ø× Ñ ×+Ñ+×;Ñ;Ð;r&   r5  rË   r  r”   r  c                 ó.   — | j                  |||||¬«      S )aì  
        Returns:

        Examples:

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

        >>> processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
        >>> model = CLIPSegVisionModel.from_pretrained("CIDAS/clipseg-rd64-refined")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> 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”   r  s         r$   r    zCLIPSegVisionModel.forward�  s,   € ð@ × Ñ Ø%Ø/Ø!5Ø%=Ø#ð !ó 
ð 	
r&   ©NNNTN)rF   rG   rH   r   r  Úmain_input_namerh   r   rP  rI  r   rW  r   r   r   r!   rJ   rÛ   r   r   r    r£   r¤   s   @r$   rY  rY  ‚  sÈ   ø„ Ø&€LØ$€OðÐ2õ ð< b§i¡ió <ñ +Ð+JÓKÙÐ+EÐTgÔhð 59Ø,0Ø/3Ø37Ø&*ñ$
à˜u×0Ñ0Ñ1ð$
ð $ D™>ð$
ð ' t™nð	$
ð
 #+¨4¡.ð$
ð ˜d‘^ð$
ð 
ˆuÐ0Ð0Ñ	1ò$
ó ió Lô$
r&   rY  c                   ód  ‡ — e Zd ZeZdefˆ fd„Z ee«      	 	 	 	 	 	 ddee	j                     dee	j                     dee	j                     dee   dee   dee   d	e	j                  fd
„«       Z ee«      	 	 	 	 	 ddee	j                     dee   dee   dedee   d	e	j                  fd„«       Z ee«       eee¬«      	 	 	 	 	 	 	 	 	 ddee	j&                     dee	j                     dee	j                     dee	j&                     dee   dee   dee   dedee   d	eeef   fd„«       «       Zˆ xZS )r  rZ   c                 óP  •— t         ‰| �  |«       t        |j                  t        «      s"t        dt        |j                  «      › d�«      ‚t        |j                  t        «      s"t        dt        |j                  «      › d�«      ‚|j                  }|j                  }|j                  | _	        |j                  | _        |j                  | _        t        |«      | _        t        |«      | _        t#        j$                  | j                  | j                  d¬«      | _        t#        j$                  | j                  | j                  d¬«      | _        t#        j*                  t-        j.                  | j0                  j2                  «      «      | _        | j7                  «        y )NzNconfig.text_config is expected to be of type CLIPSegTextConfig but is of type ú.zRconfig.vision_config is expected to be of type CLIPSegVisionConfig but is of type F)r`   )rg   rh   r   Útext_configr   Ú	TypeErrorÚtypeÚvision_configr   Úprojection_dimri   r  r
  r0  rE  rR  r[  r   r¾   r	  r  rm   r!   rÃ   rZ   Úlogit_scale_init_valueÚlogit_scalerF  )r>   rZ   rd  rg  rz   s       €r$   rh   zCLIPSegModel.__init__¼  sW  ø€ Ü‰Ñ˜Ô ä˜&×,Ñ,Ô.?Ô@ÜðÜ˜×+Ñ+Ó,Ð-¨Qð0óð ô
 ˜&×.Ñ.Ô0CÔDÜðÜ˜×-Ñ-Ó.Ð/¨qð2óð ð
 ×(Ñ(ˆØ×,Ñ,ˆà$×3Ñ3ˆÔØ)×5Ñ5ˆÔØ -× 9Ñ 9ˆÔä0°Ó=ˆŒÜ4°]ÓCˆÔä!#§¡¨4×+@Ñ+@À$×BUÑBUÐ\aÔ!bˆÔÜ!Ÿy™y¨×)<Ñ)<¸d×>QÑ>QÐX]Ô^ˆÔÜŸ<™<¬¯©°T·[±[×5WÑ5WÓ(XÓYˆÔð 	�‰Õr&   r¬   rÉ   rb   rË   r  r  r   c                 óü   — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  ||||||¬«      }|d   }| j                  |«      }	|	S )aŸ  
        Returns:
            text_features (`torch.FloatTensor` of shape `(batch_size, output_dim`): The text embeddings obtained by
            applying the projection layer to the pooled output of [`CLIPSegTextModel`].

        Examples:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("CIDAS/clipseg-rd64-refined")
        >>> model = CLIPSegModel.from_pretrained("CIDAS/clipseg-rd64-refined")

        >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")
        >>> text_features = model.get_text_features(**inputs)
        ```rN  r   )rZ   rË   r  r%  rE  r  )
r>   r¬   rÉ   rb   rË   r  r  Útext_outputsrT   Útext_featuress
             r$   Úget_text_featureszCLIPSegModel.get_text_featuresÜ  s˜   € ð6 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—‘ØØ)Ø%Ø/Ø!5Ø#ð 'ó 
ˆð % Q™ˆØ×,Ñ,¨]Ó;ˆàÐr&   r•   r”   c                 óú   — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  |||||¬«      }|d   }| j                  |«      }|S )aI  
        Returns:
            image_features (`torch.FloatTensor` of shape `(batch_size, output_dim`): The image embeddings obtained by
            applying the projection layer to the pooled output of [`CLIPSegVisionModel`].

        Examples:

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

        >>> processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
        >>> model = CLIPSegModel.from_pretrained("CIDAS/clipseg-rd64-refined")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

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

        >>> image_features = model.get_image_features(**inputs)
        ```r^  r   )rZ   rË   r  r%  r[  r	  )	r>   r•   rË   r  r”   r  Úvision_outputsrT   Úimage_featuress	            r$   Úget_image_featureszCLIPSegModel.get_image_features  s™   € ð@ 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà×*Ñ*Ø%Ø/Ø!5Ø%=Ø#ð +ó 
ˆð ' qÑ)ˆØ×/Ñ/°Ó>ˆàÐr&   r5  Úreturn_lossc
           	      ó¸  — |�|n| j                   j                  }|�|n| j                   j                  }|	�|	n| j                   j                  }	| j	                  |||||	¬«      }
| j                  ||||||	¬«      }|
d   }| j                  |«      }|d   }| j                  |«      }||j                  ddd¬«      z  }||j                  ddd¬«      z  }| j                  j                  «       }t        j                  ||j                  «       «      |z  }|j                  «       }d}|rt        |«      }|	s||||||
f}|�|f|z   S |S t        |||||||
¬	«      S )
a‹  
        Returns:

        Examples:

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

        >>> processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
        >>> model = CLIPSegModel.from_pretrained("CIDAS/clipseg-rd64-refined")

        >>> 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="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
        ```Nr^  rN  r   ra   rd   T)rÍ   r„   Úkeepdim)r/   r0   r1   r2   r3   r4   r5   )rZ   rË   r  r%  r[  rE  r	  r  Únormrj  Úexpr!   Úmatmulr)   r,   r.   )r>   r¬   r•   rÉ   rb   rs  rË   r  r”   r  rp  rl  r3   r2   rj  r1   r0   r/   Úoutputs                      r$   r    zCLIPSegModel.forward>  s°  € ðN 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà×*Ñ*Ø%Ø/Ø!5Ø%=Ø#ð +ó 
ˆð —‘ØØ)Ø%Ø/Ø!5Ø#ð 'ó 
ˆð & aÑ(ˆØ×-Ñ-¨lÓ;ˆà" 1‘oˆØ×*Ñ*¨;Ó7ˆð $ l×&7Ñ&7¸!ÀÈTÐ&7Ó&RÑRˆØ! K×$4Ñ$4°q¸bÈ$Ð$4Ó$OÑOˆð ×&Ñ&×*Ñ*Ó,ˆÜŸ,™, {°L·N±NÓ4DÓEÈÑSˆØ*×,Ñ,Ó.ÐàˆÙÜ Ó0ˆDáØ&¨¸ÀlÐT`ÐbpÐqˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEäØØ-Ø+Ø#Ø%Ø*Ø .ô
ð 	
r&   r@  r_  )	NNNNNNNTN)rF   rG   rH   r   r  rh   r   rA  r   r!   r¡   rÛ   rJ   rn  rW  rr  ÚCLIPSEG_INPUTS_DOCSTRINGr   r.   r³   r   r   r    r£   r¤   s   @r$   r  r  ¸  s4  ø„ à €Lð˜}õ ñ@ +Ð+HÓIð -1Ø15Ø/3Ø,0Ø/3Ø&*ñ,à˜EŸL™LÑ)ð,ð ! §¡Ñ.ð,ð ˜uŸ|™|Ñ,ð	,ð
 $ D™>ð,ð ' t™nð,ð ˜d‘^ð,ð 
×	Ñ	ò,ó Jð,ñ\ +Ð+JÓKð 59Ø,0Ø/3Ø)-Ø&*ñ0à˜u×0Ñ0Ñ1ð0ð $ D™>ð0ð ' t™nð	0ð
 #'ð0ð ˜d‘^ð0ð 
×	Ñ	ò0ó Lð0ñd +Ð+CÓDÙ¨=À}ÔUð 15Ø48Ø15Ø37Ø&*Ø,0Ø/3Ø)-Ø&*ñ[
à˜E×,Ñ,Ñ-ð[
ð ˜u×0Ñ0Ñ1ð[
ð ! §¡Ñ.ð	[
ð
 ˜u×/Ñ/Ñ0ð[
ð ˜d‘^ð[
ð $ D™>ð[
ð ' t™nð[
ð #'ð[
ð ˜d‘^ð[
ð 
ˆu�mÐ#Ñ	$ò[
ó Vó Eô[
r&   r  c                   ó¤   ‡ — e Zd ZdZdefˆ fd„Z	 d
dej                  dej                  dej                  dee	   de
ej                     f
d	„Zˆ xZS )ÚCLIPSegDecoderLayerz¤
    CLIPSeg decoder layer, which is identical to `CLIPSegEncoderLayer`, except that normalization is applied after
    self-attention/MLP, rather than before.
    rZ   c                 óD  •— t         ‰| �  «        |j                  | _        t	        |«      | _        t        j                  | j                  |j                  ¬«      | _	        t        |«      | _        t        j                  | j                  |j                  ¬«      | _        y ré   rë   ry   s     €r$   rh   zCLIPSegDecoderLayer.__init__¥  rò   r&   rO   rÉ   rÊ   rË   r   c                 óÎ   — |}| j                  ||||¬«      \  }}||z   }| j                  |«      }|}| j                  |«      }||z   }| j                  |«      }|f}|r||fz  }|S rô   )rì   rï   rð   rñ   rõ   s           r$   r    zCLIPSegDecoderLayer.forward­  s’   € ð" !ˆà&*§n¡nØ'Ø)Ø"7Ø/ð	 '5ó '
Ñ#ˆ�|ð ! =Ñ0ˆØ×(Ñ(¨Ó7ˆà ˆØŸ™ Ó/ˆØ  =Ñ0ˆØ×(Ñ(¨Ó7ˆà Ð"ˆáØ˜�Ñ&ˆGàˆr&   rø   )rF   rG   rH   rI   r   rh   r!   r¡   r   rÛ   r   rJ   r    r£   r¤   s   @r$   r|  r|  ž  sk   ø„ ñðS˜}õ Sð -2ñ'à—|‘|ð'ð Ÿ™ð'ð  %Ÿ|™|ð	'ð
 $ D™>ð'ð 
ˆu× Ñ Ñ	!÷'r&   r|  c                   óˆ   ‡ — e Zd Zdefˆ fd„Z	 	 	 d	deej                     dej                  dee	   dee	   dee	   f
d„Z
ˆ xZS )
ÚCLIPSegDecoderrZ   c                 ó  •— t         ‰| �  |«       |j                  | _        t        j                  |j
                  |j                  «      | _        t        j                  |j
                  |j                  «      | _        |j                  rþ|j                  j                  dz  |j                  j                  dz  f}t        j                  t        j                  |j                  |j                  dd¬«      t        j                  «       t        j                  |j                  |j                  dz  |d   |d   ¬«      t        j                  «       t        j                  |j                  dz  d|d   |d   ¬«      «      | _        nPt        j                  |j                  d|j                  j                  |j                  j                  ¬«      | _        t#        |j$                  «      }t        j&                  t)        |«      D �cg c]6  }t        j                  |j                  j*                  |j                  «      ‘Œ8 c}«      | _        t/        j0                  |j                  «      }|j                  |_        |j2                  |_        |j6                  |_        d	|_        t        j&                  t)        t#        |j$                  «      «      D �cg c]  }t=        |«      ‘Œ c}«      | _        y c c}w c c}w )
Né   r	   r   )r^   Úpaddingra   r   )r^   r_   )r_   Úrelu) rg   rh   Úconditional_layerr   r¾   rh  Ú
reduce_dimÚfilm_mulÚfilm_addÚ"use_complex_transposed_convolutionrg  rl   Ú
Sequentialrp   ÚReLUÚConvTranspose2dÚtransposed_convolutionr#   Úextract_layersr  r  ri   ÚreducesÚcopyÚdeepcopyÚdecoder_num_attention_headsr¸   Údecoder_intermediate_sizerâ   rà   r|  r  )r>   rZ   Útransposed_kernelsÚdepthr�   Údecoder_configrz   s         €r$   rh   zCLIPSegDecoder.__init__Ø  sQ  ø€ Ü‰Ñ˜Ô à!'×!9Ñ!9ˆÔäŸ	™	 &×"7Ñ"7¸×9JÑ9JÓKˆŒÜŸ	™	 &×"7Ñ"7¸×9JÑ9JÓKˆŒà×4Ò4Ø"(×"6Ñ"6×"AÑ"AÀQÑ"FÈ×H\ÑH\×HgÑHgÐklÑHlÐ!mÐä*,¯-©-Ü—	‘	˜&×+Ñ+¨V×->Ñ->ÈAÐWXÔYÜ—‘“	Ü×"Ñ"Ø×%Ñ%Ø×%Ñ%¨Ñ*Ø 2°1Ñ 5Ø-¨aÑ0ô	ô —‘“	Ü×"Ñ"Ø×%Ñ%¨Ñ*¨AÐ;MÈaÑ;PÐYkÐlmÑYnôó+ˆDÕ'ô +-×*<Ñ*<Ø×!Ñ! 1 f×&:Ñ&:×&EÑ&EÈf×NbÑNb×NmÑNmô+ˆDÔ'ô �F×)Ñ)Ó*ˆÜ—}‘}ÜUZÐ[`ÓUaÖbÐPQŒR�Y‰Y�v×+Ñ+×7Ñ7¸×9JÑ9JÕKÒbó
ˆŒô Ÿ™ v×';Ñ';Ó<ˆØ%+×%6Ñ%6ˆÔ"Ø-3×-OÑ-OˆÔ*Ø+1×+KÑ+KˆÔ(Ø$*ˆÔ!Ü—m‘mÔRWÔX[Ð\b×\qÑ\qÓXrÓRsÖ$tÈQÔ%8¸Õ%HÒ$tÓuˆ�ùò cùò %us   È;K9ËK>rO   rS   rË   r  r  c                 ó@  — |rdnd }|rdnd }|d d d…   }d }	t        t        || j                  | j                  «      «      D ]�  \  }
\  }}}|	� ||«      |	z   }	n ||«      }	|
| j                  k(  rJ| j                  |«      |	j                  ddd«      z  | j                  |«      z   }	|	j                  ddd«      }	 ||	d d |¬«      }|d   }	|r||	fz  }|sŒ•||d   fz  }ŒŸ |	d d …dd …d d …f   j                  ddd«      }	t        t        j                  |	j                  d   «      «      }|j                  d   }|	j                  ||	j                  d   ||«      }	| j                  |	«      j                  d«      }|st        d„ |||fD «       «      S t!        |||¬«      S )	NrL   rd   r   r   ra   )rÉ   rÊ   rË   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrß   rL   r!  s     r$   r?   z)CLIPSegDecoder.forward.<locals>.<genexpr>2  s   è ø€ Òa˜qÐSTÑS`œÑaùr#  )r   rO   rP   )r&  Úzipr  r�  r…  r‡  r‹   rˆ  r¢   ÚmathÚsqrtr…   r�   r�  ÚsqueezerB   rN   )r>   rO   rS   rË   r  r  Úall_hidden_statesr*  Úactivationsry  ÚiÚ
activationÚlayerÚreducer-  r€   rœ   r   s                     r$   r    zCLIPSegDecoder.forward  sÖ  € ñ #7™B¸DÐÙ0™°dˆà#¡D b DÑ)ˆàˆÜ.7¼¸KÈÏÉÐVZ×VbÑVbÓ8cÓ.dò 	6Ñ*ˆAÑ*�
˜E 6ØÐ!Ù 
Ó+¨fÑ4‘á 
Ó+�à�D×*Ñ*Ò*ØŸ™Ð'=Ó>ÀÇÁÐPQÐSTÐVWÓAXÑXÐ[_×[hÑ[hØ*ó\ñ �ð  Ÿ™¨¨1¨aÓ0�á!Ø tÀ4Ð[lôˆMð # 1Ñ%ˆFá#Ø! f YÑ.Ð!â Ø =°Ñ#3Ð"5Ñ5‘ð-	6ð0 š˜1™2šq˜Ñ!×)Ñ)¨!¨Q°Ó2ˆä”4—9‘9˜VŸ\™\¨!™_Ó-Ó.ˆà+×1Ñ1°!Ñ4ˆ
Ø—‘˜Z¨¯©°a©¸$ÀÓEˆà×,Ñ,¨VÓ4×<Ñ<¸QÓ?ˆáÜÑa VÐ->ÀÐ$OÔaÓaÐaä#ØØ+Ø%ô
ð 	
r&   )NNT)rF   rG   rH   r   rh   r   r!   r¡   r   rÛ   r    r£   r¤   s   @r$   r€  r€  ×  sk   ø„ ð(v˜}õ (vð\ -1Ø/3Ø&*ñ6
à˜UŸ\™\Ñ*ð6
ð !&§¡ð6
ð $ D™>ð	6
ð
 ' t™nð6
ð ˜d‘^÷6
r&   r€  zn
    CLIPSeg model with a Transformer-based decoder on top for zero-shot and one-shot image segmentation.
    c                   ó  ‡ — e Zd ZeZdefˆ fd„Z	 	 	 	 	 ddee   deej                     deej                     deej                     deej                     f
d„Z
 ee«       eee¬	«      	 	 	 	 	 	 	 	 	 	 	 ddeej                      d
eej                      deej                      deej                      deej                     deej"                     deej"                     dee   dee   dedee   deeef   fd„«       «       Zˆ xZS )ÚCLIPSegForImageSegmentationrZ   c                 ó´   •— t         ‰| �  |«       || _        t        |«      | _        |j
                  | _        t        |«      | _        | j                  «        y rß   )	rg   rh   rZ   r  rû   rŽ  r€  ÚdecoderrF  ry   s     €r$   rh   z$CLIPSegForImageSegmentation.__init__D  sI   ø€ Ü‰Ñ˜Ô àˆŒä  Ó(ˆŒ	Ø$×3Ñ3ˆÔä% fÓ-ˆŒð 	�‰Õr&   rœ   r¬   rÉ   rb   Úconditional_pixel_valuesc                 ó¦  — |�Vt        |«      |k7  rt        d«      ‚t        j                  «       5  | j                  j                  |||¬«      }d d d «       |S |�St        |«      |k7  rt        d«      ‚t        j                  «       5  | j                  j                  |«      }d d d «       |S t        d«      ‚# 1 sw Y   S xY w# 1 sw Y   S xY w)Nz@Make sure to pass as many prompt texts as there are query images)rÉ   rb   zAMake sure to pass as many prompt images as there are query imagesz[Invalid conditional, should be either provided as `input_ids` or `conditional_pixel_values`)r#   r™   r!   Úno_gradrû   rn  rr  )r>   rœ   r¬   rÉ   rb   r§  rS   s          r$   Úget_conditional_embeddingsz6CLIPSegForImageSegmentation.get_conditional_embeddingsQ  sã   € ð Ð ä�9‹~ Ò+Ü Ð!cÓdÐdÜ—‘“ñ Ø)-¯©×)DÑ)DØ¨nÈ<ð *Eó *Ð&÷ð &Ð%ð &Ð1äÐ+Ó,°
Ò:Ü Ð!dÓeÐeÜ—‘“ñ `Ø)-¯©×)EÑ)EÐF^Ó)_Ð&÷`ð &Ð%ô	 Ømóð ÷ð &Ð%ú÷`ð &Ð%ús   °B9ÂCÂ9CÃCr5  r•   rS   ÚlabelsrË   r  r”   r  r   c                 ó"  — |�|n| j                   j                  }t        j                  «       5  | j                  j                  ||d|
|¬«      }| j                  j                  |d   «      }|r|j                  n|d   }| j                  D �cg c]
  }||dz      ‘Œ }}|r<t        |j                  |j                  |	r|j                  nd|j                  ¬«      }n|	s|dd |dd z   n|}ddd«       |€$| j                  |j                  d   ||||¬	«      }n[|j                  d   |j                  d   k7  rt        d
«      ‚|j                  d   | j                   j                   k7  rt        d«      ‚| j#                  |||	|¬«      }|r|j$                  n|d   }d}|�8|j'                  |j(                  «      }t+        j,                  «       } |||«      }|s|||f}|�|f|z   S |S t/        ||||¬«      S c c}w # 1 sw Y   �ŒxY w)aÈ  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).

        Returns:

        Examples:

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

        >>> processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
        >>> model = CLIPSegForImageSegmentation.from_pretrained("CIDAS/clipseg-rd64-refined")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)
        >>> texts = ["a cat", "a remote", "a blanket"]
        >>> inputs = processor(text=texts, images=[image] * len(texts), padding=True, return_tensors="pt")

        >>> outputs = model(**inputs)

        >>> logits = outputs.logits
        >>> print(logits.shape)
        torch.Size([3, 352, 352])
        ```NTr^  r   ra   r:  r	   r   )rœ   r¬   rÉ   rb   r§  zWMake sure to pass as many conditional embeddings as there are query images in the batchzcMake sure that the feature dimension of the conditional embeddings matches `config.projection_dim`.)rË   r  r  )r/   r   rS   rT   r5   rU   )rZ   r%  r!   r©  rû   r[  r	  rO   rŽ  r   r$  r;  rP   rª  r…   r™   rh  r¦  r   r<  r   r   ÚBCEWithLogitsLossrR   )r>   r¬   r•   r§  rS   rÉ   rb   r«  rË   r  r”   r  rp  rT   rO   rŸ  rž  Údecoder_outputsr   r/   Úloss_fnry  s                         r$   r    z#CLIPSegForImageSegmentation.forwardn  sn  € ðZ &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆô �]‰]‹_ñ 	Ø!ŸY™Y×3Ñ3Ø)Ø"3Ø%)Ø)AØ'ð 4ó ˆNð !ŸI™I×7Ñ7¸ÀqÑ8IÓJˆMá<G˜N×8Ò8È^Ð\]ÑM^ˆMà9=×9LÑ9LÖM°A˜=¨¨Q©Ó/ÐMˆKÐMñ Ü!;Ø&4×&FÑ&FØ"0×">Ñ">ÙBV .×">Ò">Ð\`Ø-×8Ñ8ô	"‘ñ DX�N 2 AÐ&¨¸¸Ð);Ò;Ð]kð ÷/	ð8 "Ð)Ø%)×%DÑ%DØ'×-Ñ-¨aÑ0Ø#Ø-Ø)Ø)Að &Eó &Ñ"ð &×+Ñ+¨AÑ.°,×2DÑ2DÀQÑ2GÒGÜ Ømóð ð &×+Ñ+¨AÑ.°$·+±+×2LÑ2LÒLÜ ð0óð ð Ÿ,™,ØØ"Ø/Ø!5Ø#ð 'ó 
ˆñ ,7�×'Ò'¸OÈAÑ<NˆàˆØÐà—Y‘Y˜vŸ}™}Ó-ˆFÜ×*Ñ*Ó,ˆGÙ˜6 6Ó*ˆDáØÐ4°mÀ^ÐUdÐeˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä-ØØØ#9Ø'Ø .Ø*ô
ð 	
ùòq N÷	ñ 	ús   ¯A HÂG?ÂAHÇ?HÈHr.  )NNNNNNNNNTN)rF   rG   rH   r   r  rh   r   r¢   r!   r¡   rª  r   rz  r   rR   r   rJ   r³   rÛ   r   r   r.   r    r£   r¤   s   @r$   r¤  r¤  ;  s¹  ø„ ð !€Lð˜}õ ð %)Ø,0Ø15Ø/3Ø;?ñ&à˜S‘Mð&ð ˜EŸL™LÑ)ð&ð ! §¡Ñ.ð	&ð
 ˜uŸ|™|Ñ,ð&ð #+¨5¯<©<Ñ"8ó&ñ: +Ð+CÓDÙÐ+IÐXiÔjð 26Ø48Ø@DØ>BØ15Ø37Ø-1Ø,0Ø/3Ø)-Ø&*ñy
à˜E×-Ñ-Ñ.ðy
ð ˜u×0Ñ0Ñ1ðy
ð #+¨5×+<Ñ+<Ñ"=ð	y
ð
 !)¨×):Ñ):Ñ ;ðy
ð ! §¡Ñ.ðy
ð ˜u×/Ñ/Ñ0ðy
ð ˜×)Ñ)Ñ*ðy
ð $ D™>ðy
ð ' t™nðy
ð #'ðy
ð ˜d‘^ðy
ð 
ˆu�mÐ#Ñ	$òy
ó kó Eôy
r&   r¤  )r  rú   rC  rY  r¤  )ArI   r�  rš  Údataclassesr   Útypingr   r   r   r   r!   Útorch.utils.checkpointr   rž  r
   Úmodeling_attn_mask_utilsr   r   Úmodeling_outputsr   r   Úmodeling_utilsr   Úutilsr   r   r   r   r   r   Úconfiguration_clipsegr   r   r   Ú
get_loggerrF   ÚloggerÚ_CHECKPOINT_FOR_DOCr¡   r%   r,   r.   rN   rR   rP  rY   r¦   rµ   rÝ   rç   rú   ÚCLIPSEG_START_DOCSTRINGrA  rW  rz  r  r0  rC  rR  rY  r  r|  r€  r¤  Ú__all__rL   r&   r$   ú<module>r½     s?  ðñ ã Û Ý !ß .Ó .ã Û Ý å !ß dß KÝ -÷÷ ÷ YÑ Xð 
ˆ×	Ñ	˜HÓ	%€ð 3Ð ð
`˜UŸ\™\ð `¨e¯l©ló `ð
-˜UŸ\™\ð -¨e¯l©ló -ð ô!
�Kó !
ó ð!
ðH ô:˜;ó :ó ð:ð& ô
 [ó 
ó ð
ô0P˜bŸi™iô Pôh%˜BŸI™Iô %ôRe2�r—y‘yô e2ôR�—‘ô ô /˜"Ÿ)™)ô /ôd1%˜_ô 1%ðh	Ð ð!Ð ð@#Ð ð"%Ð ôR^
�R—Y‘Yô ^
ôB^
˜RŸY™Yô ^
ôB4
Ð-ô 4
ôn6
˜rŸy™yô 6
ôr3
Ð/ô 3
ñl Ð-Ó.ôb
Ð)ó b
ó /ðb
ôJ6˜"Ÿ)™)ô 6ôra
Ð+ô a
ñH ðð ó	ôh
Ð"8ó h
óðh
òV�r&   