§
    ‚Štj«  ã                   óö  — 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mZ ddlmZmZ ddlmZ ddlmZ ddlmZmZm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z* e e G d„ de¦  «        ¦   «         ¦   «         Z+ G d„ dej,        ¦  «        Z-	 dOdej,        dej.        dej.        dej.        dej.        dz  de/de/fd„Z0 G d „ d!ej,        ¦  «        Z1 G d"„ d#ej,        ¦  «        Z2 G d$„ d%ej,        ¦  «        Z3 G d&„ d'ej,        ¦  «        Z4 G d(„ d)ej,        ¦  «        Z5 G d*„ d+e¦  «        Z6 G d,„ d-ej,        ¦  «        Z7 G d.„ d/ej,        ¦  «        Z8 G d0„ d1ej,        ¦  «        Z9 G d2„ d3ej,        ¦  «        Z: G d4„ d5e¦  «        Z; G d6„ d7ej,        ¦  «        Z< G d8„ d9ej,        ¦  «        Z=e  G d:„ d;e¦  «        ¦   «         Z> e d<¬=¦  «         G d>„ d?e>¦  «        ¦   «         Z? e d@¬=¦  «         G dA„ dBe>¦  «        ¦   «         Z@ G dC„ dDe>¦  «        ZAdEej.        dFej.        fdG„ZBdHej.        dFej.        fdI„ZCdJej.        dFej.        fdK„ZDe  G dL„ dMe>¦  «        ¦   «         ZEg dN¢ZFdS )Pé    )ÚCallable)Ú	dataclass)ÚAnyNé   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚ'BaseModelOutputWithPoolingAndProjection)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚ	torch_int)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚAltCLIPConfigÚAltCLIPTextConfigÚAltCLIPVisionConfigc                   óÞ   — 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 )ÚAltCLIPOutputaµ  
    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 [`AltCLIPTextModel`].
    image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
        The image embeddings obtained by applying the projection layer to the pooled output of [`AltCLIPVisionModel`].
    text_model_output (`BaseModelOutputWithPooling`):
        The output of the [`AltCLIPTextModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`AltCLIPVisionModel`].
    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/altclip/modeling_altclip.pyú	<genexpr>z)AltCLIPOutput.to_tuple.<locals>.<genexpr>H   s=   è è € Ð^Ð^È1¥Z°µ;Ñ%?Ô%?ÐF�Q—Z’Z‘\”\�\ÀQÐ^Ð^Ð^Ð^Ð^Ð^ó    )ÚtupleÚvalues)Úselfs    r.   r+   zAltCLIPOutput.to_tupleG   s,   € ÝÐ^Ð^ÐPT×P[ÒP[ÑP]ÔP]Ð^Ñ^Ô^Ñ^Ô^Ð^r0   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r    r!   r"   r#   r$   r   r%   r1   r   r+   © r0   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Ð:Ð:Ñ:ð_˜% œ*ð _ð _ð _ð _ð _ð _r0   r   c                   óÆ   ‡ — e Zd ZdZˆ fd„Z	 	 	 	 	 ddej        dz  dej        dz  dej        dz  dej        dz  d	ed
ej	        fd„Z
ed„ ¦   «         Zedd„¦   «         Zˆ xZS )ÚAltRobertaEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 óø  •— t          ¦   «                              ¦   «          t          j        |j        |j        |j        ¬¦  «        | _        t          j        |j        |j        ¦  «        | _	        t          j
        |j        |j        ¬¦  «        | _
        t          j        |j        ¦  «        | _        |                      dt!          j        |j        ¦  «                             d¦  «        d¬¦  «         |                      dt!          j        | j                             ¦   «         t           j        ¬¦  «        d¬¦  «         |j        | _        t          j        |j        |j        | j        ¬¦  «        | _        d S )	N)Úpadding_idx©ÚepsÚposition_ids©r   éÿÿÿÿF©Ú
persistentÚtoken_type_ids©Údtype)ÚsuperÚ__init__ÚnnÚ	EmbeddingÚ
vocab_sizeÚhidden_sizeÚpad_token_idÚword_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚ	LayerNormÚlayer_norm_epsÚDropoutÚhidden_dropout_probÚdropoutÚregister_bufferr8   ÚarangeÚmax_position_embeddingsÚexpandÚzerosrB   ÚsizeÚlongr?   Úposition_embeddings©r3   ÚconfigÚ	__class__s     €r.   rK   zAltRobertaEmbeddings.__init__N   sJ  ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?QÐ_eÔ_rÐsÑsÔsˆÔÝ%'¤\°&Ô2HÈ&ÔJ\Ñ%]Ô%]ˆÔ"åœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒà×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	×ÒØ�eœk¨$Ô*;×*@Ò*@Ñ*BÔ*BÍ%Ì*ÐUÑUÔUÐbgð 	ñ 	
ô 	
ð 	
ð "Ô.ˆÔÝ#%¤<ØÔ*¨FÔ,>ÈDÔL\ð$
ñ $
ô $
ˆÔ Ð Ð r0   Nr   Ú	input_idsrG   rB   Úinputs_embedsÚpast_key_values_lengthr&   c                 ó*  — |€:|�|                       || j        |¦  «        }n|                      || j        ¦  «        }|�|                     ¦   «         }n|                     ¦   «         d d…         }|\  }}|€§t	          | d¦  «        rl| j                             |j        ¦  «                             |j	        d         d¦  «        }	t          j        |	d|¬¦  «        }	|	                     ||¦  «        }n+t          j        |t          j        | j        j        ¬¦  «        }|€|                      |¦  «        }|                      |¦  «        }
||
z   }|                      |¦  «        }||z   }|                      |¦  «        }|                      |¦  «        }|S )NrD   rG   r   r   )ÚdimÚindex©rI   Údevice)Ú"create_position_ids_from_input_idsr?   Ú&create_position_ids_from_inputs_embedsr^   ÚhasattrrG   Útork   r\   Úshaper8   Úgatherr]   r_   rB   rQ   rS   r`   rT   rX   )r3   rd   rG   rB   re   rf   Úinput_shapeÚ
batch_sizeÚ
seq_lengthÚbuffered_token_type_idsrS   Ú
embeddingsr`   s                r.   ÚforwardzAltRobertaEmbeddings.forwardb   s¨  € ð ÐØÐ$à#×FÒFØ˜tÔ/Ð1Gñ ô  ��ð  $×JÒJÈ=ÐZ^ÔZjÑkÔk�àÐ Ø#Ÿ.š.Ñ*Ô*ˆKˆKà'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKà!,Ñˆ
�Jð
 Ð!Ý�tÐ-Ñ.Ô.ð mà*.Ô*=×*@Ò*@ÀÔATÑ*UÔ*U×*\Ò*\Ð]iÔ]oÐpqÔ]rÐtvÑ*wÔ*wÐ'Ý*/¬,Ð7NÐTUÐ]iÐ*jÑ*jÔ*jÐ'Ø!8×!?Ò!?À
ÈJÑ!WÔ!W��å!&¤¨[ÅÄ
ÐSWÔSdÔSkÐ!lÑ!lÔ!l�àÐ Ø ×0Ò0°Ñ;Ô;ˆMØ $× :Ò :¸>Ñ JÔ JÐØ"Ð%:Ñ:ˆ
à"×6Ò6°|ÑDÔDÐØÐ"5Ñ5ˆ
à—^’^ JÑ/Ô/ˆ
Ø—\’\ *Ñ-Ô-ˆ
ØÐr0   c                 óú   — |                       ¦   «         dd…         }|d         }t          j        |dz   ||z   dz   t          j        | j        ¬¦  «        }|                     d¦  «                             |¦  «        S )z×
        We are provided embeddings directly. We cannot infer which are padded so just generate sequential position ids.

        Args:
            inputs_embeds: torch.Tensor

        Returns: torch.Tensor
        NrD   r   rj   r   )r^   r8   rZ   r_   rk   Ú	unsqueezer\   )re   r?   rr   Úsequence_lengthrB   s        r.   rm   z;AltRobertaEmbeddings.create_position_ids_from_inputs_embeds’   s~   € ð $×(Ò(Ñ*Ô*¨3¨B¨3Ô/ˆØ% aœ.ˆå”|Ø˜!‰O˜_¨{Ñ:¸QÑ>ÅeÄjÐYfÔYmð
ñ 
ô 
ˆð ×%Ò% aÑ(Ô(×/Ò/°Ñ<Ô<Ð<r0   c                 óÜ   — |                       |¦  «                             ¦   «         }t          j        |d¬¦  «                             |¦  «        |z   |z  }|                     ¦   «         |z   S )a  
        Replace non-padding symbols with their position numbers. Position numbers begin at padding_idx+1. Padding symbols
        are ignored. This is modified from fairseq's `utils.make_positions`.

        Args:
            x: torch.Tensor x:

        Returns: torch.Tensor
        r   ©rh   )ÚneÚintr8   ÚcumsumÚtype_asr_   )rd   r?   rf   ÚmaskÚincremental_indicess        r.   rl   z7AltRobertaEmbeddings.create_position_ids_from_input_ids¤   sg   € ð �|Š|˜KÑ(Ô(×,Ò,Ñ.Ô.ˆÝ$œ|¨D°aÐ8Ñ8Ô8×@Ò@ÀÑFÔFÐI_Ñ_ÐcgÑgÐØ"×'Ò'Ñ)Ô)¨KÑ7Ð7r0   )NNNNr   )r   )r4   r5   r6   r7   rK   r8   Ú
LongTensorr9   r~   ÚTensorrw   Ústaticmethodrm   rl   Ú__classcell__©rc   s   @r.   r=   r=   K   s   ø€ € € € € ØQÐQð
ð 
ð 
ð 
ð 
ð, .2Ø26Ø04Ø26Ø&'ð.ð .àÔ# dÑ*ð.ð Ô(¨4Ñ/ð.ð Ô&¨Ñ-ð	.ð
 Ô(¨4Ñ/ð.ð !$ð.ð 
Œð.ð .ð .ð .ð` ð=ð =ñ „\ð=ð" ð8ð 8ð 8ñ „\ð8ð 8ð 8ð 8ð 8r0   r=   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingrX   c                 óÀ  — t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |dt           j        ¬¦  «                             |j        ¦  «        }t          j         	                    ||| j
        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «                             ¦   «         }	|	|fS )Né   r   rD   )rh   rI   )ÚpÚtrainingr   )r8   ÚmatmulÚ	transposerL   Ú
functionalÚsoftmaxÚfloat32ro   rI   rX   r’   Ú
contiguous)
r‰   rŠ   r‹   rŒ   r�   rŽ   rX   ÚkwargsÚattn_weightsÚattn_outputs
             r.   Úeager_attention_forwardrœ   µ   sÃ   € õ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€KØ˜Ð$Ð$r0   c                   óŠ   ‡ — e Zd Zˆ 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 )	ÚAltRobertaSelfAttentionc                 ó¶  •— t          ¦   «                              ¦   «          |j        |j        z  dk    r0t	          |d¦  «        s t          d|j        › d|j        › d�¦  «        ‚|| _        |j        | _        t          |j        |j        z  ¦  «        | _        | j        | j        z  | _	        t          j        |j        | j	        ¦  «        | _        t          j        |j        | j	        ¦  «        | _        t          j        |j        | j	        ¦  «        | _        t          j        |j        ¦  «        | _        |j        | _        | j        dz  | _        d| _        d S )Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú)ç      à¿F)rJ   rK   rO   Únum_attention_headsrn   Ú
ValueErrorrb   r~   Úattention_head_sizeÚall_head_sizerL   ÚLinearrŠ   r‹   rŒ   rV   Úattention_probs_dropout_probrX   Úattention_dropoutrŽ   Ú	is_causalra   s     €r.   rK   z AltRobertaSelfAttention.__init__Ì   sA  ø€ Ý‰Œ×ÒÑÔÐØÔ Ô :Ñ:¸aÒ?Ð?ÍÐPVÐXhÑHiÔHiÐ?Ýð8 FÔ$6ð 8ð 8Ø Ô4ð8ð 8ð 8ñô ð ð
 ˆŒØ#)Ô#=ˆÔ Ý#& vÔ'9¸FÔ<VÑ'VÑ#WÔ#WˆÔ Ø!Ô5¸Ô8PÑPˆÔå”Y˜vÔ1°4Ô3EÑFÔFˆŒ
Ý”9˜VÔ/°Ô1CÑDÔDˆŒÝ”Y˜vÔ1°4Ô3EÑFÔFˆŒ
å”z &Ô"EÑFÔFˆŒØ!'Ô!DˆÔØÔ/°Ñ5ˆŒØˆŒˆˆr0   NÚhidden_statesr�   r™   r&   c                 ó‚  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        }	 |	| ||||f| j        sdn| j        | j        dœ|¤Ž\  }
} |
j        g |¢d‘R Ž                      ¦   «         }
|
|fS )NrD   r   r�   rˆ   )rX   rŽ   )rp   r¥   rŠ   Úviewr”   r‹   rŒ   r   Úget_interfacerb   Ú_attn_implementationrœ   r’   r©   rŽ   Úreshaper˜   )r3   r«   r�   r™   rr   Úhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacer›   rš   s               r.   rw   zAltRobertaSelfAttention.forwardâ   sf  € ð $Ô)¨#¨2¨#Ô.ˆØC˜ÐC bÐC¨$Ô*BÐCÐCˆà—z’z -Ñ0Ô0×5Ò5°lÑCÔC×MÒMÈaÐQRÑSÔSˆØ—X’X˜mÑ,Ô,×1Ò1°,Ñ?Ô?×IÒIÈ!ÈQÑOÔOˆ
Ø—z’z -Ñ0Ô0×5Ò5°lÑCÔC×MÒMÈaÐQRÑSÔSˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ˜LÐ(Ð(r0   r)   )r4   r5   r6   rK   r8   r„   r9   r   r   r1   rw   r†   r‡   s   @r.   rž   rž   Ë   sŸ   ø€ € € € € ðð ð ð ð ð2 48ð)ð )à”|ð)ð Ô)¨DÑ0ð)ð Ð+Ô,ð	)ð
 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ð)ð )ð )ð )ð )ð )ð )ð )r0   rž   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚAltRobertaSelfOutputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j        |j	        ¦  «        | _
        d S ©Nr@   )rJ   rK   rL   r§   rO   ÚdenserT   rU   rV   rW   rX   ra   s     €r.   rK   zAltRobertaSelfOutput.__init__  sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆr0   r«   Úinput_tensorr&   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S r)   ©rº   rX   rT   ©r3   r«   r»   s      r.   rw   zAltRobertaSelfOutput.forward	  ó@   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØŸš }°|Ñ'CÑDÔDˆØÐr0   ©r4   r5   r6   rK   r8   r„   rw   r†   r‡   s   @r.   r·   r·     ói   ø€ € € € € ð>ð >ð >ð >ð >ð U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r0   r·   c            	       ój   ‡ — e Zd Zˆ fd„Z	 ddej        dej        dz  dee         dej        fd„Z	ˆ xZ
S )	ÚAltRobertaAttentionc                 ó˜   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |¦  «        | _        d S r)   )rJ   rK   rž   r3   r·   Úoutputra   s     €r.   rK   zAltRobertaAttention.__init__  s;   ø€ Ý‰Œ×ÒÑÔÐÝ+¨FÑ3Ô3ˆŒ	Ý*¨6Ñ2Ô2ˆŒˆˆr0   Nr«   r�   r™   r&   c                 ó\   — |} | j         |fd|i|¤Ž\  }}|                      ||¦  «        }|S ©Nr�   )r3   rÅ   ©r3   r«   r�   r™   ÚresidualÚ_s         r.   rw   zAltRobertaAttention.forward  sV   € ð !ˆØ$˜4œ9Øð
ð 
à)ð
ð ð
ð 
Ñˆ�qð
 Ÿš M°8Ñ<Ô<ˆØÐr0   r)   )r4   r5   r6   rK   r8   r„   r9   r   r   rw   r†   r‡   s   @r.   rÃ   rÃ     sŽ   ø€ € € € € ð3ð 3ð 3ð 3ð 3ð 48ðð à”|ðð Ô)¨DÑ0ðð Ð+Ô,ð	ð
 
Œðð ð ð ð ð ð ð r0   rÃ   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚAltRobertaIntermediatec                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _        d S |j        | _        d S r)   )rJ   rK   rL   r§   rO   Úintermediate_sizerº   r*   Ú
hidden_actÚstrr   Úintermediate_act_fnra   s     €r.   rK   zAltRobertaIntermediate.__init__'  sn   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3KÑLÔLˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$r0   r«   r&   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r)   )rº   rÑ   ©r3   r«   s     r.   rw   zAltRobertaIntermediate.forward/  s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐr0   rÀ   r‡   s   @r.   rÌ   rÌ   &  s^   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð r0   rÌ   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚAltRobertaOutputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j	        |j
        ¦  «        | _        d S r¹   )rJ   rK   rL   r§   rÎ   rO   rº   rT   rU   rV   rW   rX   ra   s     €r.   rK   zAltRobertaOutput.__init__6  sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ7¸Ô9KÑLÔLˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆr0   r«   r»   r&   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S r)   r½   r¾   s      r.   rw   zAltRobertaOutput.forward<  r¿   r0   rÀ   r‡   s   @r.   rÕ   rÕ   5  rÁ   r0   rÕ   c            	       óp   ‡ — e Zd Zˆ fd„Z	 d	dej        dej        dz  dee         dej        fd„Z	d„ Z
ˆ xZS )
ÚAltRobertaLayerc                 óæ   •— t          ¦   «                              ¦   «          |j        | _        d| _        t	          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _	        d S )Nr   )
rJ   rK   Úchunk_size_feed_forwardÚseq_len_dimrÃ   Ú	attentionrÌ   ÚintermediaterÕ   rÅ   ra   s     €r.   rK   zAltRobertaLayer.__init__D  s^   ø€ Ý‰Œ×ÒÑÔÐØ'-Ô'EˆÔ$ØˆÔÝ,¨VÑ4Ô4ˆŒÝ2°6Ñ:Ô:ˆÔÝ& vÑ.Ô.ˆŒˆˆr0   Nr«   r�   r™   r&   c                 óh   —  | j         |fd|i|¤Ž}t          | j        | j        | j        |¦  «        }|S rÇ   )rÝ   r   Úfeed_forward_chunkrÛ   rÜ   )r3   r«   r�   r™   s       r.   rw   zAltRobertaLayer.forwardL  s]   € ð '˜œØð
ð 
à)ð
ð ð
ð 
ˆõ 2ØÔ# TÔ%AÀ4ÔCSÐUbñ
ô 
ˆð Ðr0   c                 ó\   — |                       |¦  «        }|                      ||¦  «        }|S r)   )rÞ   rÅ   )r3   Úattention_outputÚintermediate_outputÚlayer_outputs       r.   rà   z"AltRobertaLayer.feed_forward_chunk^  s2   € Ø"×/Ò/Ð0@ÑAÔAÐØ—{’{Ð#6Ð8HÑIÔIˆØÐr0   r)   )r4   r5   r6   rK   r8   r„   r9   r   r   rw   rà   r†   r‡   s   @r.   rÙ   rÙ   C  s�   ø€ € € € € ð/ð /ð /ð /ð /ð 48ðð à”|ðð Ô)¨DÑ0ðð Ð+Ô,ð	ð
 
Œðð ð ð ð$ð ð ð ð ð ð r0   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 )
ÚAltRobertaEncoderzº
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`AltRobertaEncoderLayer`].

    Args:
        config: AltCLIPTextConfig
    rb   c                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r;   )rÙ   ©r,   rÊ   rb   s     €r.   ú
<listcomp>z.AltRobertaEncoder.__init__.<locals>.<listcomp>p  s!   ø€ Ð$fÐ$fÐ$fÀ¥_°VÑ%<Ô%<Ð$fÐ$fÐ$fr0   F©	rJ   rK   rb   rL   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayersÚgradient_checkpointingra   s    `€r.   rK   zAltRobertaEncoder.__init__m  s`   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”mÐ$fÐ$fÐ$fÐ$fÅeÈFÔLdÑFeÔFeÐ$fÑ$fÔ$fÑgÔgˆŒØ&+ˆÔ#Ð#Ð#r0   Nr�   r™   r&   c                 óN   — |}| j         D ]} |||fi |¤Ž}Œt          |¬¦  «        S ©N)Úlast_hidden_state©rï   r   ©r3   re   r�   r™   r«   Úencoder_layers         r.   rw   zAltRobertaEncoder.forwards  ó^   € ð &ˆØ!œ[ð 	ð 	ˆMØ)˜MØØðð ð ðð ˆMˆMõ Ø+ð
ñ 
ô 
ð 	
r0   r)   )r4   r5   r6   r7   r   rK   r8   r„   r   r   r   rw   r†   r‡   s   @r.   ræ   ræ   d  s˜   ø€ € € € € ðð ð,Ð0ð ,ð ,ð ,ð ,ð ,ð ,ð /3ð
ð 
ð œ tÑ+ð
ð Ð+Ô,ð	
ð
 
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r0   ræ   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚAltRobertaPoolerc                 óÀ   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        ¦   «         | _        d S r)   )rJ   rK   rL   r§   rO   rº   ÚTanhÚ
activationra   s     €r.   rK   zAltRobertaPooler.__init__‡  sC   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ'™)œ)ˆŒˆˆr0   r«   r&   c                 ór   — |d d …df         }|                       |¦  «        }|                      |¦  «        }|S )Nr   )rº   rü   )r3   r«   Úfirst_token_tensorÚpooled_outputs       r.   rw   zAltRobertaPooler.forwardŒ  s@   € ð +¨1¨1¨1¨a¨4Ô0ÐØŸ
š
Ð#5Ñ6Ô6ˆØŸš¨Ñ6Ô6ˆØÐr0   rÀ   r‡   s   @r.   rù   rù   †  s^   ø€ € € € € ð$ð $ð $ð $ð $ð
 U¤\ð °e´lð ð ð ð ð ð ð ð r0   rù   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 )ÚAltCLIPAttentionz=Multi-headed attention from 'Attention Is All You Need' paperrb   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 )Nr¢   F)rJ   rK   rb   rO   Ú	embed_dimr£   Ú	num_headsÚhead_dimÚscaler©   rX   rª   rL   r§   Úk_projÚv_projÚq_projÚout_projra   s     €r.   rK   zAltCLIPAttention.__init__˜  sÃ   ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØÔ3ˆŒØœ¨$¬.Ñ8ˆŒØ”] DÑ(ˆŒ
ØÔ/ˆŒØˆŒå”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝœ	 $¤.°$´.ÑAÔAˆŒˆˆr0   Nr«   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 ChannelNrD   r   r�   rˆ   )rŽ   rX   )rp   r  r	  r  r  r­   r”   r   r®   rb   r¯   rœ   r  r’   rX   r°   r˜   r
  )r3   r«   r�   r™   rr   r±   ÚqueriesÚkeysr2   rµ   r›   rš   s               r.   rw   zAltCLIPAttention.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Ð(Ð(r0   r)   )r4   r5   r6   r7   r   r   rK   r8   r„   r   r   r1   rw   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ð%)ð %)ð %)ð %)ð %)ð %)ð %)ð %)r0   r  c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )Ú
AltCLIPMLPc                 ó  •— t          ¦   «                              ¦   «          || _        t          |j                 | _        t          j        |j        |j	        ¦  «        | _
        t          j        |j	        |j        ¦  «        | _        d S r)   )rJ   rK   rb   r   rÏ   Úactivation_fnrL   r§   rO   rÎ   Úfc1Úfc2ra   s     €r.   rK   zAltCLIPMLP.__init__Ð  sf   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ# FÔ$5Ô6ˆÔÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝ”9˜VÔ5°vÔ7IÑJÔJˆŒˆˆr0   r«   r&   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r)   )r  r  r  rÓ   s     r.   rw   zAltCLIPMLP.forward×  s=   € ØŸš Ñ/Ô/ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš Ñ/Ô/ˆØÐr0   rÀ   r‡   s   @r.   r  r  Ï  sc   ø€ € € € € ðKð Kð Kð Kð Kð U¤\ð °e´lð ð ð ð ð ð ð ð r0   r  c                   óf   ‡ — e Zd Zdefˆ fd„Zdej        dej        dee         dej	        fd„Z
ˆ xZS )ÚAltCLIPEncoderLayerrb   c                 óD  •— t          ¦   «                              ¦   «          |j        | _        t	          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _	        t          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _        d S r¹   )rJ   rK   rO   r  r  Ú	self_attnrL   rT   rU   Úlayer_norm1r  ÚmlpÚlayer_norm2ra   s     €r.   rK   zAltCLIPEncoderLayer.__init__ß  s   ø€ Ý‰Œ×ÒÑÔÐØÔ+ˆŒÝ)¨&Ñ1Ô1ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÝ˜fÑ%Ô%ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÐÐr0   r«   r�   r™   r&   c                 óÆ   — |}|                       |¦  «        } | j        d||dœ|¤Ž\  }}||z   }|}|                      |¦  «        }|                      |¦  «        }||z   }|S )N)r«   r�   r;   )r  r  r  r  rÈ   s         r.   rw   zAltCLIPEncoderLayer.forwardç  s“   € ð !ˆà×(Ò(¨Ñ7Ô7ˆØ)˜4œ>ð 
Ø'Ø)ð
ð 
ð ð
ð 
Ñˆ�qð
 ! =Ñ0ˆà ˆØ×(Ò(¨Ñ7Ô7ˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆàÐr0   )r4   r5   r6   r   rK   r8   r„   r   r   r9   rw   r†   r‡   s   @r.   r  r  Þ  s“   ø€ € € € € ðSÐ2ð Sð Sð Sð Sð Sð Sðà”|ðð œðð Ð+Ô,ð	ð
 
Ô	ðð ð ð ð ð ð ð r0   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 )
ÚAltCLIPEncoderz³
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`AltCLIPEncoderLayer`].

    Args:
        config: AltCLIPConfig
    rb   c                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r;   )r  ré   s     €r.   rê   z+AltCLIPEncoder.__init__.<locals>.<listcomp>  s"   ø€ Ð$jÐ$jÐ$jÀQÕ%8¸Ñ%@Ô%@Ð$jÐ$jÐ$jr0   Frë   ra   s    `€r.   rK   zAltCLIPEncoder.__init__  sa   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”mÐ$jÐ$jÐ$jÐ$jÍ%ÐPVÔPhÑJiÔJiÐ$jÑ$jÔ$jÑkÔkˆŒØ&+ˆÔ#Ð#Ð#r0   Nr�   r™   r&   c                 óN   — |}| j         D ]} |||fi |¤Ž}Œt          |¬¦  «        S rò   rô   rõ   s         r.   rw   zAltCLIPEncoder.forward  r÷   r0   r)   )r4   r5   r6   r7   r   rK   r8   r„   r   r   r   rw   r†   r‡   s   @r.   r  r  ÿ  s—   ø€ € € € € ðð ð,˜}ð ,ð ,ð ,ð ,ð ,ð ,ð /3ð
ð 
ð œ tÑ+ð
ð Ð+Ô,ð	
ð
 
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r0   r  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 )ÚAltCLIPVisionEmbeddingsrb   c                 ó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Úbiasr�   r   rB   rC   rE   )rJ   rK   rb   rO   r  Ú
image_sizeÚ
patch_sizerL   Ú	Parameterr8   ÚrandnÚclass_embeddingÚConv2dÚnum_channelsÚpatch_embeddingÚnum_patchesÚnum_positionsrM   Úposition_embeddingrY   rZ   r\   ra   s     €r.   rK   z AltCLIPVisionEmbeddings.__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Ðpr0   rv   Ú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   NrD   ç      à?r   r�   ÚbicubicF)r^   ÚmodeÚalign_cornersr|   )rp   r4  Úweightry   r8   ÚjitÚ
is_tracingrB   r+  r   r°   ÚpermuterL   r•   Úinterpolater­   Úcat)r3   rv   r5  r6  r2  r4  r3  Úclass_pos_embedÚpatch_pos_embedrh   Ú
new_heightÚ	new_widthÚsqrt_num_positionss                r.   Úinterpolate_pos_encodingz0AltCLIPVisionEmbeddings.interpolate_pos_encoding8  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ÐCr0   FÚ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).rH   r�   r   rD   r|   )rp   r*  r¤   r1  r<  rI   ro   Úflattenr”   r.  r\   r8   rA  rG  r4  rB   )r3   rH  rG  rs   rÊ   r5  r6  Útarget_dtypeÚpatch_embedsÚclass_embedsrv   s              r.   rw   zAltCLIPVisionEmbeddings.forwarda  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ØÐr0   ©F)r4   r5   r6   r   rK   r8   r„   r~   rG  r9   rw   r†   r‡   s   @r.   r#  r#  !  sº   ø€ € € € € ðqÐ2ð qð qð qð qð qð qð,'D°5´<ð 'DÈð 'DÐUXð 'DÐ]bÔ]ið 'Dð 'Dð 'Dð 'DðRð  EÔ$5ð ÐZ_ÔZfð ð ð ð ð ð ð ð r0   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dœZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚAltCLIPPreTrainedModelrb   Úaltclip)ÚimageÚtext)r=   rÙ   r  r#  T©r«   Ú
attentionsc                 óœ  •— t          ¦   «                              |¦  «         | j        j        }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	          |t4          ¦  «        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	          |t<          ¦  «        rXt          j        |j        j        |j         dz  |z  ¬¦  «         t          j        |j!        j        |j"        dz  |z  ¬¦  «         dS t	          |tF          ¦  «        rjt          j        |j        t!          j        |j        j$        d         ¦  «                             d¦  «        ¦  «         t          j%        |j&        ¦  «         dS dS )	zInitialize the weightsrˆ   r¢   )ÚmeanÚstd)rY  rC   r�   rD   N)'rJ   Ú_init_weightsrb   Úinitializer_factorr*   r#  ÚinitÚnormal_r.  r  r1  r<  Úinitializer_ranger4  Úcopy_rB   r8   rZ   r3  r\   r  rî   r	  r  r  r
  r  rO   r  r  ÚAltCLIPModelÚtext_projectionÚtext_embed_dimÚvisual_projectionÚvision_embed_dimr=   rp   Úzeros_rG   )r3   r‰   ÚfactorÚin_proj_stdÚout_proj_stdÚfc_stdrc   s         €r.   rZ  z$AltCLIPPreTrainedModel._init_weights…  s$  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ø”Ô/ˆÝ�fÕ5Ñ6Ô6ð 	/ÝŒ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Ñ:ðñ ô ð ð ð õ ˜Õ 4Ñ5Ô5ð 	/ÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÝŒK˜Ô-Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/r0   )r4   r5   r6   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  Ú_can_record_outputsr8   Úno_gradrZ  r†   r‡   s   @r.   rQ  rQ  t  s¢   ø€ € € € € € àÐÐÑØ!ÐØ(ÐØuÐuÐuÐà&*Ð#Ø€NØÐØÐØ"&Ðà,Ø&ðð Ðð
 €U„]�_„_ð /ð  /ð  /ð  /ñ „_ð /ð  /ð  /ð  /ð  /r0   rQ  zN
    The vision model from ALTCLIP without any head or projection on top.
    )Úcustom_introc                   óÀ   ‡ — 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fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚAltCLIPVisionModelrb   rH  )rS  r1  c                 óP  •— t          ¦   «                              |¦  «         |j        }t          |¦  «        | _        t          j        ||j        ¬¦  «        | _        t          |¦  «        | _
        t          j        ||j        ¬¦  «        | _        |                      ¦   «          d S r¹   )rJ   rK   rO   r#  rv   rL   rT   rU   Úpre_layrnormr  ÚencoderÚpost_layernormÚ	post_init)r3   rb   r  rc   s      €r.   rK   zAltCLIPVisionModel.__init__´  s‹   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØÔ&ˆ	å1°&Ñ9Ô9ˆŒÝœL¨¸Ô8MÐNÑNÔNˆÔÝ% fÑ-Ô-ˆŒÝ œl¨9¸&Ô:OÐPÑPÔPˆÔØ�ŠÑÔÐÐÐr0   F)Útie_last_hidden_statesNrG  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, AltCLIPVisionModel

        >>> model = AltCLIPVisionModel.from_pretrained("BAAI/AltCLIP")
        >>> processor = AutoProcessor.from_pretrained("BAAI/AltCLIP")

        >>> 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
        ```)rG  re   Nr   ©ró   Úpooler_outputr;   )rv   rx  ry  ró   rz  r   )r3   rH  rG  r™   r«   Úencoder_outputsró   rÿ   s           r.   rw   zAltCLIPVisionModel.forward¾  s¨   € ð> Ÿš¨ÐOg˜ÑhÔhˆØ×)Ò)¨-Ñ8Ô8ˆà+7¨4¬<ð ,
ð ,
Ø'ð,
àð,
ð ,
ˆð
 ,Ô=ÐØ)¨!¨!¨!¨Q°°°¨'Ô2ˆØ×+Ò+¨MÑ:Ô:ˆå)Ø/Ø'ð
ñ 
ô 
ð 	
r0   )NF)r4   r5   r6   r   r:   Úmain_input_namerk  Ú_input_embed_layerrK   r   r   r   r8   r9   Úboolr   r   r   rw   r†   r‡   s   @r.   rv  rv  ©  sî   ø€ € € € € € ð  ÐÐÑØ$€OØ!ÐØ*ÐðÐ2ð ð ð ð ð ð ð  Ø€_¨EÐ2Ñ2Ô2Øð 26Ø05ð+
ð +
àÔ'¨$Ñ.ð+
ð #'¨¡+ð+
ð Ð+Ô,ð	+
ð
 
$ð+
ð +
ð +
ñ „^ñ 3Ô2ñ  Ôð+
ð +
ð +
ð +
ð +
r0   rv  aE  
    The model behaves as an encoder following the architecture described in *Attention is
    all you need*_ by Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz
    Kaiser and Illia Polosukhin.

    .. _*Attention is all you need*: https://huggingface.co/papers/1706.03762
    c                   ó   ‡ — e Zd ZU eed<   dZdZeedœZ	dˆ fd„	Z
e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e         deez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚAltRobertaModelrb   ©rT  rQ   rU  Tc                 óò   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |rt          |¦  «        nd| _        |                      ¦   «          dS )zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        N)	rJ   rK   r=   rv   ræ   ry  rù   Úpoolerr{  )r3   rb   Úadd_pooling_layerrc   s      €r.   rK   zAltRobertaModel.__init__  sk   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð Ý.¨vÑ6Ô6ˆŒÝ(¨Ñ0Ô0ˆŒØ2CÐMÕ& vÑ.Ô.Ð.ÈˆŒà�ŠÑÔÐÐÐr0   Nrd   r�   rG   rB   re   r™   r&   c                 ó   — |du |duz  rt          d¦  «        ‚|                      ||||¬¦  «        }t          | j        ||¬¦  «        } | j        |fd|i|¤Ž}|d         }| j        �|                      |¦  «        nd}	t          ||	¬¦  «        S )aK  
        Examples:

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

        >>> model = AltRobertaModel.from_pretrained("openai/alt_roberta-vit-base-patch32")
        >>> tokenizer = AutoTokenizer.from_pretrained("openai/alt_roberta-vit-base-patch32")

        >>> 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 must specify exactly one of input_ids or inputs_embeds)rd   rB   rG   re   )rb   re   r�   r�   r   r~  )r¤   rv   r	   rb   ry  rˆ  r   )
r3   rd   r�   rG   rB   re   r™   r€  Úsequence_outputrÿ   s
             r.   rw   zAltRobertaModel.forward  sæ   € ð6 ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàŸšØØ%Ø)Ø'ð	 (ñ 
ô 
ˆõ 3Ø”;Ø'Ø)ð
ñ 
ô 
ˆð '˜$œ,Øð
ð 
à)ð
ð ð
ð 
ˆð
 *¨!Ô,ˆØ8<¼Ð8O˜Ÿš OÑ4Ô4Ð4ÐUYˆå)Ø-Ø'ð
ñ 
ô 
ð 	
r0   )T©NNNNN)r4   r5   r6   r   r:   rk  r‚  rÙ   rž   rr  rK   r   r   r   r8   r„   r   r   r1   r   rw   r†   r‡   s   @r.   r…  r…  ï  s*  ø€ € € € € € ð ÐÐÑØ Ðà*Ðà(Ø-ðð Ðð

ð 
ð 
ð 
ð 
ð 
ð  ØØð *.Ø.2Ø.2Ø,0Ø-1ð3
ð 3
à”< $Ñ&ð3
ð œ tÑ+ð3
ð œ tÑ+ð	3
ð
 ”l TÑ)ð3
ð ”| dÑ*ð3
ð Ð+Ô,ð3
ð 
Ð+Ñ	+ð3
ð 3
ð 3
ñ „^ñ „_ñ  Ôð3
ð 3
ð 3
ð 3
ð 3
r0   r…  c                   óè   ‡ — e Zd ZU eed<   dZdZd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j        dz  dee         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚAltCLIPTextModelrb   r†  rQ   Úrobertac                 ó0  •— t          ¦   «                              |¦  «         t          |d¬¦  «        | _        t	          j        |j        |j        ¦  «        | _        t	          j	        |j        |j
        ¬¦  «        | _        |                      ¦   «          d S )NF)r‰  r@   )rJ   rK   r…  r�  rL   r§   rO   Úproject_dimÚtransformationrT   rU   Úpre_LNr{  ra   s     €r.   rK   zAltCLIPTextModel.__init__M  s{   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý& vÀÐGÑGÔGˆŒÝ œi¨Ô(:¸FÔ<NÑOÔOˆÔÝ”l 6Ô#5¸6Ô;PÐQÑQÔQˆŒØ�ŠÑÔÐÐÐr0   Nrd   r�   rG   rB   re   r™   r&   c           	      óÞ   —  | j         d|||||dœ|¤Ž}|d         }|                      |¦  «        }|                      |¦  «        }	|	dd…df         }
t          |	|
|j        |j        ¬¦  «        S )a+  
        Examples:

        ```python
        >>> from transformers import AutoProcessor, AltCLIPTextModel

        >>> model = AltCLIPTextModel.from_pretrained("BAAI/AltCLIP")
        >>> processor = AutoProcessor.from_pretrained("BAAI/AltCLIP")

        >>> texts = ["it's a cat", "it's a dog"]

        >>> inputs = processor(text=texts, padding=True, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        >>> pooled_output = outputs.pooler_output  # pooled CLS states
        ```)rd   r�   rG   rB   re   r   N)ró   r  r«   rV  r;   )r�  r“  r’  r   r«   rV  )r3   rd   r�   rG   rB   re   r™   Úoutputsr‹  Úprojection_stater  s              r.   rw   zAltCLIPTextModel.forwardT  s©   € ð: �$”,ð 
ØØ)Ø)Ø%Ø'ð
ð 
ð ð
ð 
ˆð " !œ*ˆð Ÿ+š+ oÑ6Ô6ˆð  ×.Ò.¨Ñ?Ô?ÐØ(¨¨¨¨A¨Ô.ˆå6Ø.Ø'Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r0   rŒ  )r4   r5   r6   r   r:   rk  r‚  rj  rK   r   r   r8   r„   r   r   r1   r   rw   r†   r‡   s   @r.   rŽ  rŽ  G  s  ø€ € € € € € ØÐÐÑØ ÐØ*ÐØ!Ððð ð ð ð ð Øð *.Ø.2Ø.2Ø,0Ø-1ð3
ð 3
à”< $Ñ&ð3
ð œ tÑ+ð3
ð œ tÑ+ð	3
ð
 ”l TÑ)ð3
ð ”| dÑ*ð3
ð Ð+Ô,ð3
ð 
Ð8Ñ	8ð3
ð 3
ð 3
ñ „^ñ Ôð3
ð 3
ð 3
ð 3
ð 3
r0   rŽ  Úlogitsr&   c                 óŽ   — t           j                             | t          j        t          | ¦  «        | j        ¬¦  «        ¦  «        S )N)rk   )rL   r•   Úcross_entropyr8   rZ   Úlenrk   )r—  s    r.   Úcontrastive_lossr›  Ž  s3   € ÝŒ=×&Ò& v­u¬|½CÀ¹K¼KÐPVÔP]Ð/^Ñ/^Ô/^Ñ_Ô_Ð_r0   Ú
similarityc                 óX   — t          | ¦  «        }t          | j        ¦  «        }||z   dz  S )Ng       @)r›  ÚT)rœ  Úcaption_lossÚ
image_losss      r.   Úimage_text_contrastive_lossr¡  ’  s.   € Ý# JÑ/Ô/€LÝ! *¤,Ñ/Ô/€JØ˜:Ñ%¨Ñ,Ð,r0   Ú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
    r�   rD   T)rh   Úkeepdimr8  )r8   ÚpowÚsum)r¢  Úsquare_tensorÚ
sum_tensorÚnormed_tensors       r.   Ú_get_vector_normrª  ˜  sB   € õ
 ”I˜f aÑ(Ô(€MÝ”˜=¨b¸$Ð?Ñ?Ô?€JÝ”I˜j¨#Ñ.Ô.€MØÐr0   c                   óà  ‡ — e Zd ZU eed<   defˆ fd„Zee	 	 	 ddej	        dej	        dz  dej	        dz  de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j        dz  dedz  dede
e         d	eez  fd„¦   «         ¦   «         Zˆ xZS )r`  rb   c                 ó|  •— t          ¦   «                              |¦  «         |j        }|j        }|j        | _        |j        | _        |j        | _        t           
                    | j        j        ¦  «        | _        t           
                    | j        j        ¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        t)          j        | j        j        ¦  «        ¦  «        | _        |                      ¦   «          d S )NF)r)  )rJ   rK   Útext_configÚvision_configÚprojection_dimr‘  rb  rO   rd  rŽ  Ú_from_configrb   Ú
text_modelrv  Úvision_modelrL   r§   rc  ra  r,  r8   r¢  Úlogit_scale_init_valueÚlogit_scaler{  )r3   rb   r­  r®  rc   s       €r.   rK   zAltCLIPModel.__init__§  sú   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØÔ(ˆØÔ,ˆà$Ô3ˆÔØ)Ô5ˆÔØ -Ô 9ˆÔÝ*×7Ò7¸¼Ô8OÑPÔPˆŒÝ.×;Ò;¸D¼KÔ<UÑVÔVˆÔå!#¤¨4Ô+@À$ÔBUÐ\aÐ!bÑ!bÔ!bˆÔÝ!œy¨Ô)<¸dÔ>QÐX]Ð^Ñ^Ô^ˆÔÝœ<­¬°T´[Ô5WÑ(XÔ(XÑYÔYˆÔð 	�ŠÑÔÐÐÐr0   Nrd   r�   rG   rB   r™   r&   c                 ó†   —  | j         d||||dœ|¤Ž}|j        dd…ddd…f         }|                      |¦  «        |_        |S )að  
        Examples:

        ```python
        >>> import torch
        >>> from transformers import AutoProcessor, AltCLIPModel

        >>> model = AltCLIPModel.from_pretrained("BAAI/AltCLIP")
        >>> processor = AutoProcessor.from_pretrained("BAAI/AltCLIP")

        >>> inputs = processor(text=["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)
        ```©rd   r�   rG   rB   Nr   r;   )r±  ró   ra  r  )r3   rd   r�   rG   rB   r™   Útext_outputsrÿ   s           r.   Úget_text_featureszAltCLIPModel.get_text_features¹  sq   € ð0 4C°4´?ð 4
ØØ)Ø)Ø%ð	4
ð 4
ð
 ð4
ð 4
ˆð %Ô6°q°q°q¸!¸Q¸Q¸Q°wÔ?ˆØ%)×%9Ò%9¸-Ñ%HÔ%HˆÔ"àÐr0   FrH  rG  c                 ój   —  | j         d||ddœ|¤Ž}|j        }|                      |¦  «        |_        |S )ao  
        Examples:

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

        >>> model = AltCLIPModel.from_pretrained("BAAI/AltCLIP")
        >>> processor = AutoProcessor.from_pretrained("BAAI/AltCLIP")

        >>> 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)rH  rG  Úreturn_dictr;   )r²  r  rc  )r3   rH  rG  r™   Úvision_outputsrÿ   s         r.   Úget_image_featureszAltCLIPModel.get_image_featuresÝ  s\   € ð4 6G°TÔ5Fð 6
Ø%Ø%=Øð6
ð 6
ð ð	6
ð 6
ˆð 'Ô4ˆØ'+×'=Ò'=¸mÑ'LÔ'LˆÔ$àÐr0   Úreturn_lossc           	      ób  —  | j         d||dœ|¤Ž}	 | j        d||||dœ|¤Ž}
|	d         }|                      |¦  «        }|
d         }|                      |¦  «        }|t	          |¦  «        z  }|t	          |¦  «        z  }t          j        ||                     ¦   «                              |j	        ¦  «        ¦  «        }|| j
                             ¦   «                              |j	        ¦  «        z  }|                     ¦   «         }d}|rt          |¦  «        }t          ||||||
|	¬¦  «        S )u  
        return_loss (`bool`, *optional*):
            Whether or not to return the contrastive loss.

        Examples:

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

        >>> model = AltCLIPModel.from_pretrained("OFA-Sys/chinese-clip-vit-base-patch16")
        >>> processor = AutoProcessor.from_pretrained("OFA-Sys/chinese-clip-vit-base-patch16")

        >>> url = "https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/pokemon.jpeg"
        >>> image = load_image(url)

        >>> inputs = processor(text=["æ�°å°¼é¾Ÿ", "å¦™è›™ç§�å­�", "å°�ç�«é¾™", "çš®å�¡ä¸˜"], 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
        ```)rH  rG  r¶  r   N)r   r    r!   r"   r#   r$   r%   r;   )r²  r±  rc  ra  rª  r8   r“   Útro   rk   r´  Úexpr¡  r   )r3   rd   rH  r�   rG   rB   r½  rG  r™   r»  r·  r#   r"   r!   r    r   s                   r.   rw   zAltCLIPModel.forward  s|  € ðJ +˜Ô*ð 
Ø%Ø%=ð
ð 
ð ð
ð 
ˆð '�t”ð 
ØØ)Ø)Ø%ð	
ð 
ð
 ð
ð 
ˆð & aÔ(ˆØ×-Ò-¨lÑ;Ô;ˆà" 1”oˆØ×*Ò*¨;Ñ7Ô7ˆð $Õ&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åØØ-Ø+Ø#Ø%Ø*Ø .ð
ñ 
ô 
ð 	
r0   )NNNrO  )NNNNNNF)r4   r5   r6   r   r:   rK   r   r   r8   r„   r   r   r1   r   r¸  r9   rƒ  r¼  rƒ   r   rw   r†   r‡   s   @r.   r`  r`  £  s<  ø€ € € € € € àÐÐÑð˜}ð ð ð ð ð ð ð$ Øð /3Ø.2Ø,0ð ð  à”<ð ð œ tÑ+ð ð œ tÑ+ð	 ð
 ”l TÑ)ð ð Ð+Ô,ð ð 
Ð+Ñ	+ð ð  ð  ñ „^ñ Ôð ðD Øð */ð!ð !àÔ'ð!ð #'ð!ð Ð+Ô,ð	!ð
 
Ð+Ñ	+ð!ð !ð !ñ „^ñ Ôð!ðF Øð .2Ø15Ø.2Ø.2Ø04Ø#'Ø).ðL
ð L
àÔ# dÑ*ðL
ð Ô'¨$Ñ.ðL
ð œ tÑ+ð	L
ð
 œ tÑ+ðL
ð Ô&¨Ñ-ðL
ð ˜D‘[ðL
ð #'ðL
ð Ð+Ô,ðL
ð 
�Ñ	ðL
ð L
ð L
ñ „^ñ ÔðL
ð L
ð L
ð L
ð L
r0   r`  )rQ  rv  rŽ  r`  )rˆ   )GÚcollections.abcr   Údataclassesr   Útypingr   r8   Útorch.nnrL   Ú r   r\  Úactivationsr   Úmasking_utilsr	   Úmodeling_layersr
   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_altclipr   r   r   r   ÚModuler=   r„   Úfloatrœ   rž   r·   rÃ   rÌ   rÕ   rÙ   ræ   rù   r  r  r  r  r#  rQ  rv  r…  rŽ  r›  r¡  rª  r`  Ú__all__r;   r0   r.   ú<module>rÔ     s{  ðð( %Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ Xð Ø
ð_ð _ð _ð _ð _�Kñ _ô _ñ „ñ „ð_ð@g8ð g8ð g8ð g8ð g8˜2œ9ñ g8ô g8ð g8ðb ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð %ð %ð %ð,4)ð 4)ð 4)ð 4)ð 4)˜bœiñ 4)ô 4)ð 4)ðnð ð ð ð ˜2œ9ñ ô ð ðð ð ð ð ˜"œ)ñ ô ð ð,ð ð ð ð ˜RœYñ ô ð ðð ð ð ð �r”yñ ô ð ðð ð ð ð Ð0ñ ô ð ðB
ð 
ð 
ð 
ð 
˜œ	ñ 
ô 
ð 
ðDð ð ð ð �r”yñ ô ð ð7)ð 7)ð 7)ð 7)ð 7)�r”yñ 7)ô 7)ð 7)ðtð ð ð ð �”ñ ô ð ðð ð ð ð Ð4ñ ô ð ðB
ð 
ð 
ð 
ð 
�R”Yñ 
ô 
ð 
ðDPð Pð Pð Pð P˜bœiñ Pô Pð Pðf ð1/ð 1/ð 1/ð 1/ð 1/˜_ñ 1/ô 1/ñ „ð1/ðh €ððñ ô ð
>
ð >
ð >
ð >
ð >
Ð/ñ >
ô >
ñô ð
>
ðB €ððñ ô ðL
ð L
ð L
ð L
ð L
Ð,ñ L
ô L
ñô ðL
ð^B
ð B
ð B
ð B
ð B
Ð-ñ B
ô B
ð B
ðN`˜Uœ\ð `¨e¬lð `ð `ð `ð `ð-¨E¬Lð -¸U¼\ð -ð -ð -ð -ð˜Uœ\ð ¨e¬lð ð ð ð ð ðl
ð l
ð l
ð l
ð l
Ð)ñ l
ô l
ñ „ðl
ð^ _Ð
^Ð
^€€€r0   