§
    ‚Štjå³  ã                   ó´  — 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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mZ ddlmZ ddlmZmZmZmZ ddl m!Z!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'm(Z( ee G d„ de¦  «        ¦   «         ¦   «         Z)ee G d„ de¦  «        ¦   «         ¦   «         Z*ee G d„ de¦  «        ¦   «         ¦   «         Z+ G d„ de	j,        ¦  «        Z- G d„ de	j,        ¦  «        Z.	 dIde	j,        dej/        d ej/        d!ej/        d"ej/        dz  d#e0d$e0d%ee         fd&„Z1 G d'„ d(e	j,        ¦  «        Z2 G d)„ d*e	j,        ¦  «        Z3 G d+„ d,e¦  «        Z4 G d-„ d.e¦  «        Z5e G d/„ d0e¦  «        ¦   «         Z6 G d1„ d2e	j,        ¦  «        Z7 G d3„ d4e6¦  «        Z8 ed5¬6¦  «         G d7„ d8e6¦  «        ¦   «         Z9 ed9¬6¦  «         G d:„ d;e6¦  «        ¦   «         Z:d<ej/        d=ej/        fd>„Z;d?ej/        d=ej/        fd@„Z<dAej/        d=ej/        fdB„Z=e G dC„ dDe6¦  «        ¦   «         Z> edE¬6¦  «         G dF„ dGe6¦  «        ¦   «         Z?g dH¢Z@dS )Jé    N)ÚCallable)Ú	dataclass)ÚAny)Únné   )Úinitialization)ÚACT2FN)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPooling)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚCLIPSegConfigÚCLIPSegTextConfigÚCLIPSegVisionConfigc                   óÞ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
ej        dz  ed<   dZej        dz  ed<   dZeed<   dZeed	<   d
ee         fd„ZdS )ÚCLIPSegOutputaµ  
    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_outputÚreturnc                 óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ól   K  — | ]/}t          |t          ¦  «        r|                     ¦   «         n|V — Œ0d S ©N©Ú
isinstancer   Úto_tuple©Ú.0Úvs     új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/clipseg/modeling_clipseg.pyú	<genexpr>z)CLIPSegOutput.to_tuple.<locals>.<genexpr>J   ó=   è è € Ð^Ð^È1¥Z°µ;Ñ%?Ô%?ÐF�Q—Z’Z‘\”\�\ÀQÐ^Ð^Ð^Ð^Ð^Ð^ó    ©ÚtupleÚvalues©Úselfs    r/   r+   zCLIPSegOutput.to_tupleI   ó,   € ÝÐ^Ð^ÐPT×P[ÒP[ÑP]ÔP]Ð^Ñ^Ô^Ñ^Ô^Ð^r2   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r   r    r!   r"   r#   r   r$   r4   r   r+   © r2   r/   r   r   +   så   € € € € € € ðð ð& &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø15Ð�eÔ'¨$Ñ.Ð5Ð5Ñ5Ø04€O�UÔ&¨Ñ-Ð4Ð4Ñ4Ø,0€K�Ô" TÑ)Ð0Ð0Ñ0Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø48ÐÐ1Ð8Ð8Ñ8Ø6:ÐÐ3Ð:Ð:Ñ:ð_˜% œ*ð _ð _ð _ð _ð _ð _r2   r   c                   óŽ   — e Zd ZU dZdZej        dz  ed<   dZe	ej        df         dz  ed<   dZ
e	ej        df         dz  ed<   dS )ÚCLIPSegDecoderOutputa¡  
    logits (`torch.FloatTensor` of shape `(batch_size, height, width)`):
        Classification scores for each pixel.
    hidden_states (`tuple(torch.FloatTensor)`, *optional*,):
        Hidden-states of the model at the output of each layer plus the optional initial embedding outputs.
        Rreturned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`
    attentions (`tuple(torch.FloatTensor)`, *optional*):
        Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
        heads. Returned when `output_attentions=True` is passed or when `config.output_attentions=True`
    NÚlogits.Úhidden_statesÚ
attentions)r9   r:   r;   r<   rC   r=   r>   r?   rD   r4   rE   r@   r2   r/   rB   rB   M   sz   € € € € € € ð	ð 	ð (,€FˆEÔ Ñ$Ð+Ð+Ñ+Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;Ð;Ð;r2   rB   c                   óÀ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
ej        dz  ed<   dZeed<   dZeed<   d	ee         fd
„ZdS )ÚCLIPSegImageSegmentationOutputaæ  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Binary cross entropy loss for segmentation.
    logits (`torch.FloatTensor` of shape `(batch_size, height, width)`):
        Classification scores for each pixel.
    conditional_embeddings (`torch.FloatTensor` of shape `(batch_size, projection_dim)`):
        Conditional embeddings used for segmentation.
    pooled_output (`torch.FloatTensor` of shape `(batch_size, embed_dim)`):
        Pooled output of the [`CLIPSegVisionModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`CLIPSegVisionModel`].
    decoder_output (`CLIPSegDecoderOutput`):
        The output of the [`CLIPSegDecoder`].
    Nr   rC   Úconditional_embeddingsÚpooled_outputr$   Údecoder_outputr%   c                 óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ól   K  — | ]/}t          |t          ¦  «        r|                     ¦   «         n|V — Œ0d S r(   r)   r,   s     r/   r0   z:CLIPSegImageSegmentationOutput.to_tuple.<locals>.<genexpr>z   r1   r2   r3   r6   s    r/   r+   z'CLIPSegImageSegmentationOutput.to_tupley   r8   r2   )r9   r:   r;   r<   r   r=   r>   r?   rC   rH   rI   r$   r   rJ   rB   r4   r   r+   r@   r2   r/   rG   rG   `   sÌ   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø7;Ð˜EÔ-°Ñ4Ð;Ð;Ñ;Ø.2€M�5Ô$ tÑ+Ð2Ð2Ñ2Ø6:ÐÐ3Ð:Ð:Ñ:Ø+/€NÐ(Ð/Ð/Ñ/ð_˜% œ*ð _ð _ð _ð _ð _ð _r2   rG   c                   óv   ‡ — 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                 óz  •— 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        ¦  «        | _        |                      dt          j        | j        ¦  «                             d¦  «        d¬¦  «         d S )NF)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚbiasé   r   Úposition_ids©r   éÿÿÿÿ©Ú
persistent)ÚsuperÚ__init__rO   Ú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_bufferÚarangeÚexpand©r7   rO   Ú	__class__s     €r/   r]   z CLIPSegVisionEmbeddings.__init__~   s  ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØ Ô+ˆŒØ Ô+ˆŒå!œ|­E¬K¸¼Ñ,GÔ,GÑHÔHˆÔå!œyØÔ+ØœØœØ”?Øð 
ñ  
ô  
ˆÔð !œO¨t¬Ñ>À1ÑDˆÔØ!Ô-°Ñ1ˆÔÝ"$¤,¨tÔ/AÀ4Ä>Ñ"RÔ"RˆÔØ×Ò˜^­U¬\¸$Ô:LÑ-MÔ-M×-TÒ-TÐU\Ñ-]Ô-]ÐjoÐÑpÔpÐpÐpÐpr2   Ú
embeddingsÚheightÚwidthr%   c                 óÚ  — |j         d         dz
  }| j        j                             d¦  «        }|j         d         dz
  }t          j                             ¦   «         s&||k    r ||k    r|                      | j        ¦  «        S |dd…dd…f         }|dd…dd…f         }|j         d         }	|| j        z  }
|| j        z  }t          |dz  ¦  «        }| 
                    d|||	¦  «        }|                     dddd¦  «        }t          j                             ||
|fdd	¬
¦  «        }|                     dddd¦  «                             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   NrY   ç      à?r   rV   ÚbicubicF)ÚsizeÚmodeÚalign_corners©Údim)Úshaperk   ÚweightÚ	unsqueezer=   ÚjitÚ
is_tracingrW   ra   r   ÚreshapeÚpermuter   Ú
functionalÚinterpolateÚviewÚcat)r7   rq   rr   rs   rh   rk   ri   Úclass_pos_embedÚpatch_pos_embedr{   Ú
new_heightÚ	new_widthÚsqrt_num_positionss                r/   Úinterpolate_pos_encodingz0CLIPSegVisionEmbeddings.interpolate_pos_encoding”   s‘  € ð !Ô& qÔ)¨AÑ-ˆØ!Ô4Ô;×EÒEÀaÑHÔHÐØ*Ô0°Ô3°aÑ7ˆõ Œy×#Ò#Ñ%Ô%ð 	>¨+¸Ò*FÐ*FÈ6ÐUZÊ?È?Ø×*Ò*¨4Ô+<Ñ=Ô=Ð=à,¨Q¨Q¨Q°°°¨UÔ3ˆØ,¨Q¨Q¨Q°°°¨UÔ3ˆàÔ˜rÔ"ˆà˜tœÑ.ˆ
Ø˜Tœ_Ñ,ˆ	å& }°cÑ'9Ñ:Ô:ÐØ)×1Ò1°!Ð5GÐI[Ð]`ÑaÔaˆØ)×1Ò1°!°Q¸¸1Ñ=Ô=ˆåœ-×3Ò3ØØ˜iÐ(ØØð	 4ñ 
ô 
ˆð *×1Ò1°!°Q¸¸1Ñ=Ô=×BÒBÀ1ÀbÈ#ÑNÔNˆåŒy˜/¨?Ð;ÀÐCÑCÔCÐCr2   TÚpixel_valuesc                 ó<  — |j         \  }}}}|s<|| j        k    s|| j        k    r&t          d|› d|› d| j        › d| j        › d�	¦  «        ‚| j        j        j        }|                      |                     |¬¦  «        ¦  «        }|                     d¦  «                             dd¦  «        }| j	         
                    |dd¦  «        }	t          j        |	|gd¬	¦  «        }
|r|
|                      |
||¦  «        z   }
n|
|                      | j        ¦  «        z   }
|
S )
NzInput image size (Ú*z) doesn't match model (z).)ÚdtyperV   r   rY   rz   )r|   r`   Ú
ValueErrorrg   r}   r�   ÚtoÚflattenÚ	transposerd   rn   r=   r†   rŒ   rk   rW   )r7   r�   rŒ   Ú
batch_sizeÚ_rr   rs   Útarget_dtypeÚpatch_embedsÚclass_embedsrq   s              r/   ÚforwardzCLIPSegVisionEmbeddings.forward½   sD  € Ø'3Ô'9Ñ$ˆ
�A�v˜uØ'ð 	¨V°t´Ò-FÐ-FÈ%ÐSWÔSbÒJbÐJbÝØq VÐqÐq¨eÐqÐqÈDÌOÐqÐqÐ^bÔ^mÐqÐqÐqñô ð ð Ô+Ô2Ô8ˆØ×+Ò+¨L¯OªOÀ,¨OÑ,OÔ,OÑPÔPˆØ#×+Ò+¨AÑ.Ô.×8Ò8¸¸AÑ>Ô>ˆàÔ+×2Ò2°:¸qÀ"ÑEÔEˆÝ”Y ¨lÐ;ÀÐCÑCÔCˆ
Ø#ð 	QØ# d×&CÒ&CÀJÐPVÐX]Ñ&^Ô&^Ñ^ˆJˆJà# d×&=Ò&=¸dÔ>OÑ&PÔ&PÑPˆJØÐr2   ©T)r9   r:   r;   r   r]   r=   ÚTensorÚintrŒ   r>   rš   Ú__classcell__©rp   s   @r/   rN   rN   }   sº   ø€ € € € € ðqÐ2ð qð qð qð qð qð qð,'D°5´<ð 'DÈð 'DÐUXð 'DÐ]bÔ]ið 'Dð 'Dð 'Dð 'DðRð  EÔ$5ð ÐY^ÔYeð ð ð ð ð ð ð ð r2   rN   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 )
ÚCLIPSegTextEmbeddingsrO   c                 óV  •— t          ¦   «                              ¦   «          |j        }t          j        |j        |¦  «        | _        t          j        |j        |¦  «        | _        |  	                    dt          j        |j        ¦  «                             d¦  «        d¬¦  «         d S )NrW   rX   FrZ   )r\   r]   r^   r   rj   Ú
vocab_sizeÚtoken_embeddingÚmax_position_embeddingsrk   rl   r=   rm   rn   ©r7   rO   r_   rp   s      €r/   r]   zCLIPSegTextEmbeddings.__init__Ñ   sœ   ø€ Ý‰Œ×ÒÑÔÐØÔ&ˆ	å!œ|¨FÔ,=¸yÑIÔIˆÔÝ"$¤,¨vÔ/MÈyÑ"YÔ"YˆÔð 	×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r2   NÚ	input_idsrW   Úinputs_embedsr%   c                 ó.  — |�|j         d         n|j         d         }| j        j        j         d         }||k    rt          d|› d|› �¦  «        ‚|€| j        d d …d |…f         }|€|                      |¦  «        }|                      |¦  «        }||z   }|S )NrY   éþÿÿÿr   zRSequence length must be less than max_position_embeddings (got `sequence length`: z and max_position_embeddings: )r|   rk   r}   r‘   rW   r¤   )r7   r§   rW   r¨   Ú
seq_lengthÚmax_position_embeddingÚposition_embeddingsrq   s           r/   rš   zCLIPSegTextEmbeddings.forwardÝ   sØ   € ð -6Ð,A�Y”_ RÔ(Ð(À}ÔGZÐ[]ÔG^ˆ
Ø!%Ô!8Ô!?Ô!EÀaÔ!HÐàÐ.Ò.Ð.ÝðVØðVð VØ=SðVð Vñô ð ð
 ÐØÔ,¨Q¨Q¨Q°°°¨^Ô<ˆLàÐ Ø ×0Ò0°Ñ;Ô;ˆMà"×5Ò5°lÑCÔCÐØ"Ð%8Ñ8ˆ
àÐr2   ©NNN)r9   r:   r;   r   r]   r=   Ú
LongTensorr>   rœ   rš   rž   rŸ   s   @r/   r¡   r¡   Ð   s©   ø€ € € € € ð

Ð0ð 

ð 

ð 

ð 

ð 

ð 

ð .2Ø04Ø26ð	ð àÔ# dÑ*ðð Ô&¨Ñ-ðð Ô(¨4Ñ/ð	ð
 
Œðð ð ð ð ð ð ð r2   r¡   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 óÀ  — t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |dt           j        ¬¦  «                             |j        ¦  «        }t          j         	                    ||| j
        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «                             ¦   «         }	|	|fS )NrY   rª   )r{   r�   )ÚpÚtrainingr   rV   )r=   Úmatmulr”   r   rƒ   ÚsoftmaxÚfloat32r’   r�   r·   r»   Ú
contiguous)
r±   r²   r³   r´   rµ   r¶   r·   r¸   Úattn_weightsÚattn_outputs
             r/   Úeager_attention_forwardrÂ   ø   sÃ   € õ ”<  s§}¢}°R¸Ñ'<Ô'<Ñ=Ô=ÀÑG€LØÐ!Ø# nÑ4ˆÝ”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€KØ˜Ð$Ð$r2   c                   óš   ‡ — e Zd ZdZdeez  fˆ fd„Z	 d
dej        dej        dz  de	e
         deej        ej        dz  f         fd	„Zˆ xZS )ÚCLIPSegAttentionz=Multi-headed attention from 'Attention Is All You Need' paperrO   c                 ó  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        | j        | j        z  | _        | j        dz  | _        |j	        | _
        d| _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        d S )Nç      à¿F)r\   r]   rO   r^   r_   Únum_attention_headsÚ	num_headsÚhead_dimÚscaleÚattention_dropoutr·   Ú	is_causalr   ÚLinearÚk_projÚv_projÚq_projÚout_projro   s     €r/   r]   zCLIPSegAttention.__init__  sÃ   ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØÔ3ˆŒØœ¨$¬.Ñ8ˆŒØ”] DÑ(ˆŒ
ØÔ/ˆŒØˆŒå”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝœ	 $¤.°$´.ÑAÔAˆŒˆˆr2   NrD   rµ   r¸   r%   c                 ó¸  — |j         dd…         }g |¢d‘| j        ‘R }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                     |¦  «                             dd¦  «        }|                     |¦  «                             dd¦  «        }|                     |¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        }	 |	| ||||f| j        | j        sdn| j        dœ|¤Ž\  }
} |
j        g |¢d‘R Ž                      ¦   «         }
|                      |
¦  «        }
|
|fS )z#Input shape: Batch x Time x ChannelNrY   r   rV   r°   )r¶   r·   )r|   rÉ   rÐ   rÎ   rÏ   r…   r”   r   Úget_interfacerO   Ú_attn_implementationrÂ   rÊ   r»   r·   r�   r¿   rÑ   )r7   rD   rµ   r¸   Úinput_shapeÚhidden_shapeÚqueriesÚkeysr5   Úattention_interfacerÁ   rÀ   s               r/   rš   zCLIPSegAttention.forward  s|  € ð $Ô)¨#¨2¨#Ô.ˆà8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆØ—+’+˜mÑ,Ô,ˆØ�{Š{˜=Ñ)Ô)ˆØ—’˜]Ñ+Ô+ˆà—,’,˜|Ñ,Ô,×6Ò6°q¸!Ñ<Ô<ˆØ�yŠy˜Ñ&Ô&×0Ò0°°AÑ6Ô6ˆØ—’˜\Ñ*Ô*×4Ò4°Q¸Ñ:Ô:ˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð ”JØ#œ}Ð>�C�C°$´,ð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜LÐ(Ð(r2   r(   )r9   r:   r;   r<   r   r   r]   r=   rœ   r   r   r4   rš   rž   rŸ   s   @r/   rÄ   rÄ     s¾   ø€ € € € € ØGÐGðBÐ2Ð5FÑFð Bð Bð Bð Bð Bð Bð$ /3ð%)ð %)à”|ð%)ð œ tÑ+ð%)ð Ð+Ô,ð	%)ð
 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ð%)ð %)ð %)ð %)ð %)ð %)ð %)ð %)r2   rÄ   c                   óB   ‡ — 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        ¦  «        | _        d S r(   )r\   r]   rO   r	   Ú
hidden_actÚactivation_fnr   rÍ   r^   Úintermediate_sizeÚfc1Úfc2ro   s     €r/   r]   zCLIPSegMLP.__init__H  sf   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ# FÔ$5Ô6ˆÔÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝ”9˜VÔ5°vÔ7IÑJÔJˆŒˆˆr2   rD   r%   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r(   )rà   rÞ   rá   )r7   rD   s     r/   rš   zCLIPSegMLP.forwardO  s=   € ØŸš Ñ/Ô/ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš Ñ/Ô/ˆØÐr2   )r9   r:   r;   r]   r=   rœ   rš   rž   rŸ   s   @r/   rÛ   rÛ   G  sc   ø€ € € € € ðKð Kð Kð Kð Kð U¤\ð °e´lð ð ð ð ð ð ð ð r2   rÛ   c                   ól   ‡ — e Zd Zdeez  fˆ fd„Zdej        dej        dee	         dej
        fd„Zˆ xZS )ÚCLIPSegEncoderLayerrO   c                 óD  •— t          ¦   «                              ¦   «          |j        | _        t	          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _	        t          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _        d S ©N)Úeps©r\   r]   r^   r_   rÄ   Ú	self_attnr   Ú	LayerNormÚlayer_norm_epsÚlayer_norm1rÛ   ÚmlpÚlayer_norm2ro   s     €r/   r]   zCLIPSegEncoderLayer.__init__W  ó   ø€ Ý‰Œ×ÒÑÔÐØÔ+ˆŒÝ)¨&Ñ1Ô1ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÝ˜fÑ%Ô%ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÐÐr2   rD   rµ   r¸   r%   c                 óÆ   — |}|                       |¦  «        } | j        d||dœ|¤Ž\  }}||z   }|}|                      |¦  «        }|                      |¦  «        }||z   }|S ©N)rD   rµ   r@   )rì   ré   rî   rí   ©r7   rD   rµ   r¸   Úresidualr–   s         r/   rš   zCLIPSegEncoderLayer.forward_  s“   € ð !ˆà×(Ò(¨Ñ7Ô7ˆØ)˜4œ>ð 
Ø'Ø)ð
ð 
ð ð
ð 
Ñˆ�qð
 ! =Ñ0ˆà ˆØ×(Ò(¨Ñ7Ô7ˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆàÐr2   )r9   r:   r;   r   r   r]   r=   rœ   r   r   r>   rš   rž   rŸ   s   @r/   rä   rä   V  s™   ø€ € € € € ðSÐ2Ð5FÑFð Sð Sð Sð Sð Sð Sðà”|ðð œðð Ð+Ô,ð	ð
 
Ô	ðð ð ð ð ð ð ð r2   rä   c                   ól   ‡ — e Zd ZdZdeez  fˆ fd„Zdej        dej        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.
    rO   c                 óD  •— t          ¦   «                              ¦   «          |j        | _        t	          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _	        t          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _        d S ræ   rè   ro   s     €r/   r]   zCLIPSegDecoderLayer.__init__}  rï   r2   rD   rµ   r%   c                 óÆ   — |} | j         d||dœ|¤Ž\  }}||z   }|                      |¦  «        }|}|                      |¦  «        }||z   }|                      |¦  «        }|S rñ   )ré   rì   rí   rî   rò   s         r/   rš   zCLIPSegDecoderLayer.forward…  s“   € ð !ˆà)˜4œ>ð 
Ø'Ø)ð
ð 
ð ð
ð 
Ñˆ�qð ! =Ñ0ˆØ×(Ò(¨Ñ7Ô7ˆà ˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆØ×(Ò(¨Ñ7Ô7ˆàÐr2   )r9   r:   r;   r<   r   r   r]   r=   rœ   r4   r>   rš   rž   rŸ   s   @r/   rõ   rõ   w  s˜   ø€ € € € € ðð ð
SÐ2Ð5FÑFð Sð Sð Sð Sð Sð Sðà”|ðð œðð
 
ˆuÔ Ô	!ðð ð ð ð ð ð ð r2   rõ   c                   ó†   ‡ — e Zd ZU eed<   dZdZg d¢ZdZdZ	dZ
dZdZeegedœZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚCLIPSegPreTrainedModelrO   Úclipseg)ÚimageÚtext)r¡   rä   rN   T)rD   rE   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         ¦  «                             d¦  «        ¦  «         d	S t	          |t"          ¦  «        rÇt          j        |j        d|j        dz  |z  ¬¦  «         t          j        |j        j	        |j        j        |z  ¬¦  «         t          j        |j
        j	        |j        j        |z  ¬¦  «         t          j        |j        t          j        |j        ¦  «                             d¦  «        ¦  «         d	S t	          |t.          ¦  «        r¯|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	        |¬¦  «         d	S t	          |t:          ¦  «        r||j        j        dz  d|j        j        z  dz  z  |z  }d|j        j        z  dz  |z  }t          j        |j        j	        |¬¦  «         t          j        |j         j	        |¬¦  «         d	S t	          |tB          ¦  «        rXt          j        |j"        j	        |j#        dz  |z  ¬¦  «         t          j        |j$        j	        |j%        dz  |z  ¬¦  «         d	S d	S )
zInitialize the weightsr°   g{®Gáz”?)ÚmeanÚstdrY   rX   rÆ   )rÿ   rV   N)&r\   Ú_init_weightsrO   Úinitializer_factorr*   r¡   ÚinitÚnormal_r¤   r}   rk   Úcopy_rW   r=   rm   r|   rn   rN   rd   r_   rg   Úinitializer_rangeri   rÄ   Únum_hidden_layersrÐ   rÎ   rÏ   rÑ   rÛ   r^   rà   rá   ÚCLIPSegModelÚtext_projectionÚtext_embed_dimÚvisual_projectionÚvision_embed_dim)r7   r±   ÚfactorÚin_proj_stdÚout_proj_stdÚfc_stdrp   s         €r/   r   z$CLIPSegPreTrainedModel._init_weights¯  sR  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ø”Ô/ˆÝ�fÕ3Ñ4Ô4ð 	ÝŒL˜Ô/Ô6¸SÀfÈtÁmÐTÑTÔTÐTÝŒL˜Ô2Ô9ÀÈÐRVÉÐWÑWÔWÐWÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhÝ˜Õ 7Ñ8Ô8ð 	ÝŒL˜Ô/°c¸vÔ?OÐQUÑ?UÐX^Ñ?^Ð_Ñ_Ô_Ð_ÝŒL˜Ô/Ô6¸F¼MÔ<[Ð^dÑ<dÐeÑeÔeÐeÝŒL˜Ô2Ô9¸v¼}Ô?^ÐagÑ?gÐhÑhÔhÐhÝŒJ�vÔ*­E¬L¸Ô9MÑ,NÔ,N×,UÒ,UÐV]Ñ,^Ô,^Ñ_Ô_Ð_Ð_Ð_Ý˜Õ 0Ñ1Ô1ð 	Ø!Ô+¨TÑ1°q¸6¼=Ô;ZÑ7ZÐ_cÑ6cÑdÐgmÑmˆKØ"Ô,¨dÑ2°fÑ<ˆLÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ/°\ÐBÑBÔBÐBÐBÐBÝ˜¥
Ñ+Ô+ð 	Ø!œ=Ô4°dÑ:ÀÀFÄMÔDcÑ@cÐhlÑ?lÑmÐpvÑvˆKØ˜&œ-Ô3Ñ3¸Ñ<¸vÑEˆFÝŒL˜œÔ*°Ð7Ñ7Ô7Ð7ÝŒL˜œÔ*°Ð<Ñ<Ô<Ð<Ð<Ð<Ý˜¥Ñ-Ô-ð 	ÝŒLØÔ&Ô-ØÔ)¨4Ñ/°&Ñ8ðñ ô ð õ ŒLØÔ(Ô/ØÔ+¨TÑ1°FÑ:ðñ ô ð ð ð ð	ð 	r2   )r9   r:   r;   r   r?   Úbase_model_prefixÚinput_modalitiesÚ_no_split_modulesÚsupports_gradient_checkpointingÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendrä   rõ   rÄ   Ú_can_record_outputsr=   Úno_gradr   rž   rŸ   s   @r/   rù   rù   ž  s¨   ø€ € € € € € àÐÐÑØ!ÐØ(ÐØcÐcÐcÐà&*Ð#Ø€NØÐØÐØ"&Ðà-Ð/BÐCØ&ðð Ðð
 €U„]�_„_ð!ð !ð !ð !ñ „_ð!ð !ð !ð !ð !r2   rù   c                   ó\   ‡ — e Zd ZdZdefˆ fd„Z	 d	dej        dz  dee	         de
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
    rO   c                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r@   )rä   ©r-   r–   rO   s     €r/   ú
<listcomp>z+CLIPSegEncoder.__init__.<locals>.<listcomp>à  s"   ø€ Ð$jÐ$jÐ$jÀQÕ%8¸Ñ%@Ô%@Ð$jÐ$jÐ$jr2   F)	r\   r]   rO   r   Ú
ModuleListÚranger  ÚlayersÚgradient_checkpointingro   s    `€r/   r]   zCLIPSegEncoder.__init__Ý  sa   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”mÐ$jÐ$jÐ$jÐ$jÍ%ÐPVÔPhÑJiÔJiÐ$jÑ$jÔ$jÑkÔkˆŒØ&+ˆÔ#Ð#Ð#r2   Nrµ   r¸   r%   c                 óN   — |}| j         D ]} |||fi |¤Ž}Œt          |¬¦  «        S )N)Úlast_hidden_state)r"  r   )r7   r¨   rµ   r¸   rD   Úencoder_layers         r/   rš   zCLIPSegEncoder.forwardã  s^   € ð &ˆØ!œ[ð 	ð 	ˆMØ)˜MØØðð ð ðð ˆMˆMõ Ø+ð
ñ 
ô 
ð 	
r2   r(   )r9   r:   r;   r<   r   r]   r=   rœ   r   r   r   rš   rž   rŸ   s   @r/   r  r  Ô  s—   ø€ € € € € ðð ð,˜}ð ,ð ,ð ,ð ,ð ,ð ,ð /3ð
ð 
ð œ tÑ+ð
ð Ð+Ô,ð	
ð
 
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r2   r  c                   ó˜   ‡ — e Zd Zdefˆ fd„Zeeedee	j
                 de	j
        dee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚCLIPSegDecoderrO   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         ¬¦  «        ¦  «        | _        n6t          j        ‰j        d‰j
        j        ‰j
        j        ¬¦  «        | _        t#          ‰j        ¦  «        }t          j        ˆfd	„t)          |¦  «        D ¦   «         ¦  «        | _        t-          j        ‰j
        ¦  «        Š‰j        ‰_        ‰j        ‰_        ‰j        ‰_        d
‰_        t          j        ˆfd„t)          t#          ‰j        ¦  «        ¦  «        D ¦   «         ¦  «        | _        |                      ¦   «          d S )Né   r   r   )rS   ÚpaddingrV   r   )rS   rT   )rT   c                 óX   •— g | ]&}t          j        ‰j        j        ‰j        ¦  «        ‘Œ'S r@   )r   rÍ   Úvision_configr^   Ú
reduce_dimr  s     €r/   r  z+CLIPSegDecoder.__init__.<locals>.<listcomp>  s/   ø€ ÐbÐbÐbÐPQ�RŒY�vÔ+Ô7¸Ô9JÑKÔKÐbÐbÐbr2   Úreluc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r@   )rõ   )r-   r–   Údecoder_configs     €r/   r  z+CLIPSegDecoder.__init__.<locals>.<listcomp>  s"   ø€ Ð$tÐ$tÐ$tÈQÕ%8¸Ñ%HÔ%HÐ$tÐ$tÐ$tr2   ) r\   r]   Úconditional_layerr   rÍ   Úprojection_dimr.  Úfilm_mulÚfilm_addÚ"use_complex_transposed_convolutionr-  ra   Ú
Sequentialre   ÚReLUÚConvTranspose2dÚtransposed_convolutionÚlenÚextract_layersr   r!  ÚreducesÚcopyÚdeepcopyr^   Údecoder_num_attention_headsrÇ   Údecoder_intermediate_sizerß   rÝ   r"  Ú	post_init)r7   rO   Útransposed_kernelsÚdepthr1  rp   s    `  @€r/   r]   zCLIPSegDecoder.__init__÷  sA  øøø€ Ý‰Œ×Ò˜Ñ Ô Ð à!'Ô!9ˆÔåœ	 &Ô"7¸Ô9JÑKÔKˆŒÝœ	 &Ô"7¸Ô9JÑKÔKˆŒàÔ4ð 	Ø"(Ô"6Ô"AÀQÑ"FÈÔH\ÔHgÐklÑHlÐ!mÐå*,¬-Ý”	˜&Ô+¨VÔ->ÈAÐWXÐYÑYÔYÝ”‘	”	ÝÔ"ØÔ%ØÔ%¨Ñ*Ø 2°1Ô 5Ø-¨aÔ0ð	ñ ô õ ”‘	”	ÝÔ"ØÔ%¨Ñ*¨AÐ;MÈaÔ;PÐYkÐlmÔYnðñ ô ñ+ô +ˆDÔ'Ð'õ +-Ô*<ØÔ! 1 fÔ&:Ô&EÈfÔNbÔNmð+ñ +ô +ˆDÔ'õ �FÔ)Ñ*Ô*ˆÝ”}ØbÐbÐbÐbÕUZÐ[`ÑUaÔUaÐbÑbÔbñ
ô 
ˆŒõ œ vÔ';Ñ<Ô<ˆØ%+Ô%6ˆÔ"Ø-3Ô-OˆÔ*Ø+1Ô+KˆÔ(Ø$*ˆÔ!Ý”mÐ$tÐ$tÐ$tÐ$tÕRWÕX[Ð\bÔ\qÑXrÔXrÑRsÔRsÐ$tÑ$tÔ$tÑuÔuˆŒà�ŠÑÔÐÐÐr2   rD   rH   r¸   r%   c                 ó
  — |ddd…         }d}t          t          || j        | j        ¦  «        ¦  «        D ]•\  }\  }}}	|� |	|¦  «        |z   }n |	|¦  «        }|| j        k    rZ|                      |¦  «        |                     ddd¦  «        z  |                      |¦  «        z   }|                     ddd¦  «        } ||fddi|¤Ž}Œ–|dd…dd…dd…f                              dd¦  «        }t          t          j        |j        d         ¦  «        ¦  «        }
|j        d         }|                     ||j        d         |
|
¦  «        }|                      |¦  «                             d¦  «        }t!          |¬¦  «        S )a/  
        conditional_embeddings (`torch.FloatTensor` of shape `(batch_size, config.projection_dim)`, *optional*):
            The conditional embeddings for the query images. If provided, the model will use this instead of computing
            the embeddings from the conditional_pixel_values.
        NrY   r   r   rV   rµ   ©rC   )Ú	enumerateÚzipr"  r=  r2  r4  r‚   r5  r”   r�   ÚmathÚsqrtr|   r…   r:  ÚsqueezerB   )r7   rD   rH   r¸   ÚactivationsÚoutputÚiÚ
activationÚlayerÚreducerw   r•   rC   s                r/   rš   zCLIPSegDecoder.forward#  sª  € ð $ D D b DÔ)ˆàˆÝ.7½¸KÈÌÐVZÔVbÑ8cÔ8cÑ.dÔ.dð 	Bð 	BÑ*ˆAÑ*�
˜E 6ØÐ!Ø˜ 
Ñ+Ô+¨fÑ4��à˜ 
Ñ+Ô+�à�DÔ*Ò*Ð*ØŸšÐ'=Ñ>Ô>ÀÇÂÐPQÐSTÐVWÑAXÔAXÑXÐ[_×[hÒ[hØ*ñ\ô \ñ �ð  Ÿš¨¨1¨aÑ0Ô0�à�U˜6ÐAÐA°$ÐA¸&ÐAÐAˆFˆFà˜˜˜˜1˜2˜2˜q˜q˜q˜Ô!×+Ò+¨A¨qÑ1Ô1ˆå•4”9˜Vœ\¨!œ_Ñ-Ô-Ñ.Ô.ˆà+Ô1°!Ô4ˆ
Ø—’˜Z¨¬°a¬¸$ÀÑEÔEˆà×,Ò,¨VÑ4Ô4×<Ò<¸QÑ?Ô?ˆå#¨6Ð2Ñ2Ô2Ð2r2   )r9   r:   r;   r   r]   r   r   r   r4   r=   rœ   r   r   rB   rš   rž   rŸ   s   @r/   r(  r(  ö  s¯   ø€ € € € € ð*˜}ð *ð *ð *ð *ð *ð *ðX  ØØð%3à˜Uœ\Ô*ð%3ð !&¤ð%3ð Ð+Ô,ð	%3ð
 
ð%3ð %3ð %3ñ „^ñ „_ñ  Ôð%3ð %3ð %3ð %3ð %3r2   r(  zL
    The text model from CLIPSEG without any head or projection on top.
    )Úcustom_introc                   óâ   ‡ — e Zd ZU eed<   d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ez  f
d„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚCLIPSegTextModelrO   )rü   r¤   c                 ó(  •— t          ¦   «                              |¦  «         |j        }t          |¦  «        | _        t          |¦  «        | _        t          j        ||j	        ¬¦  «        | _
        |j        | _        |                      ¦   «          d S ræ   )r\   r]   r^   r¡   rq   r  Úencoderr   rê   rë   Úfinal_layer_normÚeos_token_idrB  r¦   s      €r/   r]   zCLIPSegTextModel.__init__X  s~   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØÔ&ˆ	Ý/°Ñ7Ô7ˆŒÝ% fÑ-Ô-ˆŒÝ "¤¨Y¸FÔ<QÐ RÑ RÔ RˆÔð #Ô/ˆÔØ�ŠÑÔÐÐÐr2   F©Útie_last_hidden_statesNr§   rµ   rW   r¸   r%   c                 óp  — |€t          d¦  «        ‚|                     ¦   «         }|                     d|d         ¦  «        }|                      ||¬¦  «        }t	          | j        ||d¬¦  «        }|                     dd¦  «          | j        d||ddœ|¤Ž}|j        }|  	                    |¦  «        }| j
        d	k    rg|t          j        |j        d
         |j        ¬¦  «        |                     t          j        |j        ¬¦  «                             d¬¦  «        f         }	n�|t          j        |j        d
         |j        ¬¦  «        |                     t          j        |j        ¬¦  «        | j
        k                         ¦   «                              d¬¦  «        f         }	t%          ||	¬¦  «        S )a;  
        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
        ```NzYou have to specify input_idsrY   )r§   rW   )rO   r¨   rµ   Úpast_key_valuesrÌ   T)r¨   rµ   rÌ   rV   r   ©Údevice)r�   r^  rz   ©r%  Úpooler_outputr@   )r‘   rw   r…   rq   r
   rO   ÚpoprV  r%  rW  rX  r=   rm   r|   r^  r’   r�   Úargmaxr   )
r7   r§   rµ   rW   r¸   rÕ   rD   Úencoder_outputsr%  rI   s
             r/   rš   zCLIPSegTextModel.forwardc  sÑ  € ð2 ÐÝÐ<Ñ=Ô=Ð=à—n’nÑ&Ô&ˆØ—N’N 2 {°2¤Ñ7Ô7ˆ	àŸš°)È,˜ÑWÔWˆå+Ø”;Ø'Ø)Ø ð	
ñ 
ô 
ˆð 	�
Š
�; Ñ%Ô%Ð%Ø+7¨4¬<ð ,
Ø'Ø)Øð,
ð ,
ð ð	,
ð ,
ˆð ,Ô=ÐØ ×1Ò1Ð2CÑDÔDÐàÔ Ò!Ð!ð .Ý”Ð.Ô4°QÔ7Ð@QÔ@XÐYÑYÔYØ—’¥5¤9Ð5FÔ5M�ÑNÔN×UÒUÐZ\ÐUÑ]Ô]ð_ôˆMˆMð .Ý”Ð.Ô4°QÔ7Ð@QÔ@XÐYÑYÔYð —’¥E¤IÐ6GÔ6N�ÑOÔOÐSWÔSdÒdß’‘”ß’˜B�‘”ð!ôˆMõ *Ø/Ø'ð
ñ 
ô 
ð 	
r2   r®   )r9   r:   r;   r   r?   r  Ú_input_embed_layerr]   r   r   r   r=   rœ   r   r   r4   r   rš   rž   rŸ   s   @r/   rT  rT  N  s  ø€ € € € € € ð ÐÐÑØ ÐØ*Ðð	Ð0ð 	ð 	ð 	ð 	ð 	ð 	ð  Ø€_¨EÐ2Ñ2Ô2Øð *.Ø.2Ø,0ð	I
ð I
à”< $Ñ&ðI
ð œ tÑ+ðI
ð ”l TÑ)ð	I
ð
 Ð+Ô,ðI
ð 
Ð+Ñ	+ðI
ð I
ð I
ñ „^ñ 3Ô2ñ  ÔðI
ð I
ð I
ð I
ð I
r2   rT  zN
    The vision model from CLIPSEG without any head or projection on top.
    c                   óÄ   ‡ — e Zd ZU eed<   dZdZdZdefˆ fd„Ze	 e
d¬¦  «        e	 ddej        d	z  d
ed	z  dee         deez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚCLIPSegVisionModelrO   r�   )rû   rg   c                 óP  •— t          ¦   «                              |¦  «         |j        }t          |¦  «        | _        t          j        ||j        ¬¦  «        | _        t          |¦  «        | _
        t          j        ||j        ¬¦  «        | _        |                      ¦   «          d S ræ   )r\   r]   r^   rN   rq   r   rê   rë   Úpre_layrnormr  rV  Úpost_layernormrB  r¦   s      €r/   r]   zCLIPSegVisionModel.__init__½  s‹   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØÔ&ˆ	å1°&Ñ9Ô9ˆŒÝœL¨¸Ô8MÐNÑNÔNˆÔÝ% fÑ-Ô-ˆŒÝ œl¨9¸&Ô:OÐPÑPÔPˆÔØ�ŠÑÔÐÐÐr2   FrY  TNrŒ   r¸   r%   c                 óð   — |                       ||¬¦  «        }|                      |¦  «        } | j        dd|i|¤Ž}|j        }|dd…ddd…f         }|                      |¦  «        }t          ||¬¦  «        S )a+  
        Examples:

        ```python
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image
        >>> 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"
        >>> 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¨   Nr   r_  r@   )rq   rh  rV  r%  ri  r   )r7   r�   rŒ   r¸   rD   rc  r%  rI   s           r/   rš   zCLIPSegVisionModel.forwardÇ  s¨   € ð> Ÿš¨ÐOg˜ÑhÔhˆØ×)Ò)¨-Ñ8Ô8ˆà+7¨4¬<ð ,
ð ,
Ø'ð,
àð,
ð ,
ˆð
 ,Ô=ÐØ)¨!¨!¨!¨Q°°°¨'Ô2ˆØ×+Ò+¨MÑ:Ô:ˆå)Ø/Ø'ð
ñ 
ô 
ð 	
r2   r›   )r9   r:   r;   r   r?   Úmain_input_namer  rd  r]   r   r   r   r=   r>   Úboolr   r   r4   r   rš   rž   rŸ   s   @r/   rf  rf  ²  sñ   ø€ € € € € € ð  ÐÐÑØ$€OØ!ÐØ*ÐðÐ2ð ð ð ð ð ð ð  Ø€_¨EÐ2Ñ2Ô2Øð 15ð+
ð +
àÔ'¨$Ñ.ð+
ð #'¨¡+ð+
ð Ð+Ô,ð	+
ð
 
Ð+Ñ	+ð+
ð +
ð +
ñ „^ñ 3Ô2ñ  Ôð+
ð +
ð +
ð +
ð +
r2   rf  rC   r%   c                 óŽ   — t           j                             | t          j        t          | ¦  «        | j        ¬¦  «        ¦  «        S )Nr]  )r   rƒ   Úcross_entropyr=   rm   r;  r^  rF  s    r/   Úcontrastive_lossro  ú  s3   € ÝŒ=×&Ò& v­u¬|½CÀ¹K¼KÐPVÔP]Ð/^Ñ/^Ô/^Ñ_Ô_Ð_r2   Ú
similarityc                 óX   — t          | ¦  «        }t          | j        ¦  «        }||z   dz  S )Ng       @)ro  ÚT)rp  Úcaption_lossÚ
image_losss      r/   Úimage_text_contrastive_lossru  þ  s.   € Ý# JÑ/Ô/€LÝ! *¤,Ñ/Ô/€JØ˜:Ñ%¨Ñ,Ð,r2   Útensorc                 óˆ   — t          j        | d¦  «        }t          j        |dd¬¦  «        }t          j        |d¦  «        }|S )z½
    This method is equivalent to tensor.norm(p=2, dim=-1, keepdim=True) and used to make
    model `executorch` exportable. See issue https://github.com/pytorch/executorch/issues/3566
    rV   rY   T)r{   Úkeepdimru   )r=   ÚpowÚsum)rv  Úsquare_tensorÚ
sum_tensorÚnormed_tensors       r/   Ú_get_vector_normr~    sB   € õ
 ”I˜f aÑ(Ô(€MÝ”˜=¨b¸$Ð?Ñ?Ô?€JÝ”I˜j¨#Ñ.Ô.€MØÐr2   c                   ó¢  ‡ — e Zd Z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dej        de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e	e
         defd„¦   «         ¦   «         Zˆ xZS )r  rO   c                 óT  •— t          ¦   «                              |¦  «         |j        }|j        }|j        | _        |j        | _        |j        | _        t           	                    |¦  «        | _
        t           	                    |¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        t%          j        | j        j        ¦  «        ¦  «        | _        |                      ¦   «          d S )NF)rU   )r\   r]   Útext_configr-  r3  r^   r	  r  rT  Ú_from_configÚ
text_modelrf  Úvision_modelr   rÍ   r
  r  rb   r=   rv  rO   Úlogit_scale_init_valueÚlogit_scalerB  )r7   rO   r�  r-  rp   s       €r/   r]   zCLIPSegModel.__init__  sð   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ(ˆØÔ,ˆà$Ô3ˆÔØ)Ô5ˆÔØ -Ô 9ˆÔå*×7Ò7¸ÑDÔDˆŒÝ.×;Ò;¸MÑJÔJˆÔå!#¤¨4Ô+@À$ÔBUÐ\aÐ!bÑ!bÔ!bˆÔÝ!œy¨Ô)<¸dÔ>QÐX]Ð^Ñ^Ô^ˆÔÝœ<­¬°T´[Ô5WÑ(XÔ(XÑYÔYˆÔð 	�ŠÑÔÐÐÐr2   Nr§   rµ   rW   r¸   r%   c                 ól   —  | j         d|||ddœ|¤Ž}|j        }|                      |¦  «        |_        |S )a  
        Examples:

        ```python
        >>> import torch
        >>> 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")
        >>> with torch.inference_mode():
        ...     text_features = model.get_text_features(**inputs)
        ```T)r§   rµ   rW   Úreturn_dictr@   )rƒ  r`  r  )r7   r§   rµ   rW   r¸   Útext_outputsrI   s          r/   Úget_text_featureszCLIPSegModel.get_text_features%  s^   € ð. 4C°4´?ð 4
ØØ)Ø%Øð	4
ð 4
ð
 ð4
ð 4
ˆð %Ô2ˆØ%)×%9Ò%9¸-Ñ%HÔ%HˆÔ"àÐr2   Tr�   rŒ   c                 ój   —  | j         d||ddœ|¤Ž}|j        }|                      |¦  «        |_        |S )aŒ  
        Examples:

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

        >>> 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 = load_image(url)

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

        >>> with torch.inference_mode():
        ...     image_features = model.get_image_features(**inputs)
        ```T)r�   rŒ   rˆ  r@   )r„  r`  r
  )r7   r�   rŒ   r¸   Úvision_outputsrI   s         r/   Úget_image_featureszCLIPSegModel.get_image_featuresH  s\   € ð6 6G°TÔ5Fð 6
Ø%Ø%=Øð6
ð 6
ð ð	6
ð 6
ˆð 'Ô4ˆØ'+×'=Ò'=¸mÑ'LÔ'LˆÔ$àÐr2   Úreturn_lossc           	      ó  —  | j         d||dœ|¤Ž} | j        d|||dœ|¤Ž}	|j        }
|	j        }|
t          |
¦  «        z  }
|t          |¦  «        z  }t	          j        ||
                     ¦   «                              |j        ¦  «        ¦  «        }|| j	         
                    ¦   «                              |j        ¦  «        z  }|                     ¦   «         }d}|rt          |¦  «        }t          |||||
|	|¬¦  «        S )a  
        return_loss (`bool`, *optional*):
            Whether or not to return the contrastive loss.

        Examples:

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

        >>> 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 = load_image(url)

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

        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)
        >>> logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
        >>> probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities
        ```©r�   rŒ   )r§   rµ   rW   N)r   r   r    r!   r"   r#   r$   r@   )r�  rŠ  r`  r~  r=   r¼   Útr’   r^  r†  Úexpru  r   )r7   r§   r�   rµ   rW   rŽ  rŒ   r¸   rŒ  r‰  r"   r!   r    r   r   s                  r/   rš   zCLIPSegModel.forwardn  sS  € ðL 6M°TÔ5Lð 6
Ø%Ø%=ð6
ð 6
ð ð6
ð 6
ˆð 4J°4Ô3Ið 4
ØØ)Ø%ð4
ð 4
ð ð	4
ð 4
ˆð &Ô3ˆØ"Ô0ˆð $Õ&6°|Ñ&DÔ&DÑDˆØ!Õ$4°[Ñ$AÔ$AÑAˆõ  œ, {°L·N²NÑ4DÔ4D×4GÒ4GÈÔHZÑ4[Ô4[Ñ\Ô\ˆØ)¨DÔ,<×,@Ò,@Ñ,BÔ,B×,EÒ,EÀkÔFXÑ,YÔ,YÑYˆà*×,Ò,Ñ.Ô.ÐàˆØð 	@Ý.¨Ñ?Ô?ˆDåØØ-Ø+Ø#Ø%Ø*Ø .ð
ñ 
ô 
ð 	
r2   )NNr›   )NNNNNT)r9   r:   r;   r   r]   r   r   r=   rœ   r   r   r4   r   rŠ  r>   rl  r�  r¯   r   rš   rž   rŸ   s   @r/   r  r    s   ø€ € € € € ð˜}ð ð ð ð ð ð ð( Øð /3Ø,0ð	ð à”<ðð œ tÑ+ðð ”l TÑ)ð	ð
 Ð+Ô,ðð 
Ð+Ñ	+ðð ð ñ „^ñ ÔððB Øð *.ð"ð "àÔ'ð"ð #'ð"ð Ð+Ô,ð	"ð
 
Ð+Ñ	+ð"ð "ð "ñ „^ñ Ôð"ðH Øð .2Ø15Ø.2Ø04Ø#'Ø)-ðJ
ð J
àÔ# dÑ*ðJ
ð Ô'¨$Ñ.ðJ
ð œ tÑ+ð	J
ð
 Ô&¨Ñ-ðJ
ð ˜D‘[ðJ
ð #'ðJ
ð Ð+Ô,ðJ
ð 
ðJ
ð J
ð J
ñ „^ñ ÔðJ
ð J
ð J
ð J
ð J
r2   r  zn
    CLIPSeg model with a Transformer-based decoder on top for zero-shot and one-shot image segmentation.
    c                   ó�  ‡ — e Zd ZU eed<   defˆ fd„Z	 	 	 	 	 ddedz  dej        dz  dej        dz  dej        dz  dej        dz  d	ej	        fd
„Z
ee	 	 	 	 	 	 	 	 ddej	        dz  dej	        dz  dej	        dz  dej	        dz  dej        dz  dej        dz  dej        dz  dedee         d	eez  fd„¦   «         ¦   «         Zˆ xZS )ÚCLIPSegForImageSegmentationrO   c                 óÚ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        t          |¦  «        | _        |                      ¦   «          d S r(   )r\   r]   r  Úclipr<  r(  ÚdecoderrB  ro   s     €r/   r]   z$CLIPSegForImageSegmentation.__init__Å  sZ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý  Ñ(Ô(ˆŒ	Ø$Ô3ˆÔÝ% fÑ-Ô-ˆŒà�ŠÑÔÐÐÐr2   Nr•   r§   rµ   rW   Úconditional_pixel_valuesr%   c                 óæ  — |�pt          |¦  «        |k    rt          d¦  «        ‚t          j        ¦   «         5  | j                             |||¬¦  «        j        }d d d ¦  «         n# 1 swxY w Y   n~|�mt          |¦  «        |k    rt          d¦  «        ‚t          j        ¦   «         5  | j                             |¦  «        j        }d d d ¦  «         n# 1 swxY w Y   nt          d¦  «        ‚|S )Nz@Make sure to pass as many prompt texts as there are query images)rµ   rW   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=   r  r–  rŠ  r`  r�  )r7   r•   r§   rµ   rW   r˜  rH   s          r/   Úget_conditional_embeddingsz6CLIPSegForImageSegmentation.get_conditional_embeddingsÍ  s�  € ð Ð å�9‰~Œ~ Ò+Ð+Ý Ð!cÑdÔdÐdÝ”‘”ð  ð  Ø)-¬×)DÒ)DØ¨nÈ<ð *Eñ *ô *äð 'ð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  øð &Ð1åÐ+Ñ,Ô,°
Ò:Ð:Ý Ð!dÑeÔeÐeÝ”‘”ð nð nØ)-¬×)EÒ)EÐF^Ñ)_Ô)_Ô)mÐ&ðnð nð nñ nô nð nð nð nð nð nð nøøøð nð nð nð nøõ Ømñô ð ð &Ð%s#   ¸#A'Á'A+Á.A+Â* CÃCÃCTr�   rH   ÚlabelsrŒ   r¸   c	                 óè  ‡— t          j        ¦   «         5  d|	d<    | j        j        d||dœ|	¤Ž}
|
j        }|
j        Šˆfd„| j        D ¦   «         }t          |
j        |
j        |
j        |
j	        ¬¦  «        }
ddd¦  «         n# 1 swxY w Y   |€&|  
                    |j        d         ||||¬¦  «        }nU|j        d         |j        d         k    rt          d	¦  «        ‚|j        d
         | j        j        k    rt          d¦  «        ‚ | j        ||fi |	¤Ž}|j        }d}|�9|                     |j        ¦  «        }t'          j        ¦   «         } |||¦  «        }t+          |||||
|¬¦  «        S )a~  
        conditional_pixel_values (`torch.FloatTensor`, *optional*):
            The pixel values of the conditional images.
        conditional_embeddings (`torch.FloatTensor` of shape `(batch_size, config.projection_dim)`, *optional*):
            The conditional embeddings for the query images. If provided, the model will use this instead of computing
            the embeddings from the conditional_pixel_values.
        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).

        Examples:

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

        >>> 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 = load_image(url)

        >>> texts = ["a cat", "a remote", "a blanket"]
        >>> inputs = processor(text=texts, images=[image] * len(texts), padding=True, return_tensors="pt")

        >>> with torch.inference_mode():
        ...     outputs = model(**inputs)

        >>> logits = outputs.logits
        >>> print(logits.shape)
        torch.Size([3, 352, 352])
        ```TÚoutput_hidden_statesr�  c                 ó&   •— g | ]}‰|d z            ‘ŒS )r   r@   )r-   rN  rD   s     €r/   r  z7CLIPSegForImageSegmentation.forward.<locals>.<listcomp>&  s"   ø€ ÐMÐMÐM°A˜=¨¨Q©Ô/ÐMÐMÐMr2   )r%  r`  rD   rE   Nr   )r•   r§   rµ   rW   r˜  zWMake sure to pass as many conditional embeddings as there are query images in the batchr   zcMake sure that the feature dimension of the conditional embeddings matches `config.projection_dim`.)r   rC   rH   rI   r$   rJ   r@   )r=   r  r–  r�  r`  rD   r<  r   r%  rE   rš  r|   r‘   rO   r3  r—  rC   r’   r^  r   ÚBCEWithLogitsLossrG   )r7   r§   r�   r˜  rH   rµ   rW   r›  rŒ   r¸   rŒ  rI   rL  Údecoder_outputsrC   r   Úloss_fnrD   s                    @r/   rš   z#CLIPSegForImageSegmentation.forwardê  s9  ø€ õb Œ]‰_Œ_ð 	ð 	Ø-1ˆFÐ)Ñ*Ø9˜TœYÔ9ð Ø)Ø)Aðð ð ðð ˆNð
 +Ô8ˆMà*Ô8ˆMàMÐMÐMÐM¸Ô9LÐMÑMÔMˆKõ 8Ø"0Ô"BØ,Ô:Ø,Ô:Ø)Ô4ð	ñ ô ˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð, "Ð)Ø%)×%DÒ%DØ'Ô-¨aÔ0Ø#Ø-Ø)Ø)Að &Eñ &ô &Ð"Ð"ð &Ô+¨AÔ.°,Ô2DÀQÔ2GÒGÐGÝ Ømñô ð ð &Ô+¨AÔ.°$´+Ô2LÒLÐLÝ ð0ñô ð ð '˜$œ,ØØ"ð
ð 
ð ð
ð 
ˆð
 !Ô'ˆàˆØÐà—Y’Y˜vœ}Ñ-Ô-ˆFÝÔ*Ñ,Ô,ˆGØ�7˜6 6Ñ*Ô*ˆDå-ØØØ#9Ø'Ø .Ø*ð
ñ 
ô 
ð 	
s   •A#BÂBÂB)NNNNN)NNNNNNNT)r9   r:   r;   r   r?   r]   r�   r=   rœ   r>   rš  r   r   r¯   rl  r   r   r4   r   rš   rž   rŸ   s   @r/   r”  r”  ½  sÜ  ø€ € € € € € ð ÐÐÑð˜}ð ð ð ð ð ð ð "&Ø)-Ø.2Ø,0Ø8<ð&ð &à˜$‘Jð&ð ”< $Ñ&ð&ð œ tÑ+ð	&ð
 ”l TÑ)ð&ð #(¤,°Ñ"5ð&ð 
Ô	ð&ð &ð &ð &ð: Øð /3Ø15Ø=AØ;?Ø.2Ø04Ø*.Ø)-ðn
ð n
àÔ$ tÑ+ðn
ð Ô'¨$Ñ.ðn
ð #(Ô"3°dÑ":ð	n
ð
 !&Ô 1°DÑ 8ðn
ð œ tÑ+ðn
ð Ô&¨Ñ-ðn
ð Ô  4Ñ'ðn
ð #'ðn
ð Ð+Ô,ðn
ð 
�Ñ	ðn
ð n
ð n
ñ „^ñ Ôðn
ð n
ð n
ð n
ð n
r2   r”  )r  rù   rT  rf  r”  )r°   )Ar>  rI  Úcollections.abcr   Údataclassesr   Útypingr   r=   r   Ú r   r  rL  r	   Úmasking_utilsr
   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_clipsegr   r   r   r   rB   rG   ÚModulerN   r¡   rœ   ÚfloatrÂ   rÄ   rÛ   rä   rõ   rù   r  r(  rT  rf  ro  ru  r~  r  r”  Ú__all__r@   r2   r/   ú<module>r²     s+  ðð* €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø /Ð /Ð /Ð /Ð /Ð /Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ Xð Ø
ð_ð _ð _ð _ð _�Kñ _ô _ñ „ñ „ð_ð@ Ø
ð<ð <ð <ð <ð <˜;ñ <ô <ñ „ñ „ð<ð" Ø
ð_ð _ð _ð _ð _ [ñ _ô _ñ „ñ „ð_ð6Pð Pð Pð Pð P˜bœiñ Pô Pð Pðf%ð %ð %ð %ð %˜BœIñ %ô %ð %ð^ ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð*7)ð 7)ð 7)ð 7)ð 7)�r”yñ 7)ô 7)ð 7)ðtð ð ð ð �”ñ ô ð ðð ð ð ð Ð4ñ ô ð ðB$ð $ð $ð $ð $Ð4ñ $ô $ð $ðN ð2ð 2ð 2ð 2ð 2˜_ñ 2ô 2ñ „ð2ðj
ð 
ð 
ð 
ð 
�R”Yñ 
ô 
ð 
ðDU3ð U3ð U3ð U3ð U3Ð+ñ U3ô U3ð U3ðp €ððñ ô ð
\
ð \
ð \
ð \
ð \
Ð-ñ \
ô \
ñô ð
\
ð~ €ððñ ô ð
>
ð >
ð >
ð >
ð >
Ð/ñ >
ô >
ñô ð
>
ðF`˜Uœ\ð `¨e¬lð `ð `ð `ð `ð-¨E¬Lð -¸U¼\ð -ð -ð -ð -ð˜Uœ\ð ¨e¬lð ð ð ð ð ðj
ð j
ð j
ð j
ð j
Ð)ñ j
ô j
ñ „ðj
ðZ €ððñ ô ð
X
ð X
ð X
ð X
ð X
Ð"8ñ X
ô X
ñô ð
X
ðvð ð €€€r2   