§
    ‚Štj-c  ã                   ó.  — d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlmZmZmZ ddlm Z  ddl!m"Z"m#Z# ddl$m%Z%  ej&        e'¦  «        Z( G d„ dej)        ¦  «        Z* G d„ dej+        ¦  «        Z, G d„ dej+        ¦  «        Z- G d„ de¦  «        Z.e G d„ de¦  «        ¦   «         Z/e G d„ de/¦  «        ¦   «         Z0 ed¬ ¦  «         G d!„ d"e/e¦  «        ¦   «         Z1g d#¢Z2dS )$zPyTorch XGLM model.é    N)Únné   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚGradientCheckpointingLayer)Ú)BaseModelOutputWithPastAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentions)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚlogging)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )Ú
XGLMConfigc            
       óV   ‡ — e Zd ZdZddededededz  fˆ fd„Zd	ej        fˆ fd
„Z	ˆ xZ
S )ÚXGLMScaledWordEmbeddingz\
    This module overrides nn.Embeddings' forward by multiplying with embeddings scale.
    ç      ð?Únum_embeddingsÚembedding_dimÚpadding_idxÚembed_scaleNc                 ó\   •— t          ¦   «                              |||¦  «         || _        d S ©N)ÚsuperÚ__init__r    )Úselfr   r   r   r    Ú	__class__s        €úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/xglm/modeling_xglm.pyr$   z XGLMScaledWordEmbedding.__init__-   s-   ø€ Ý‰Œ×Ò˜¨¸ÑDÔDÐDØ&ˆÔÐÐó    Ú	input_idsc                 óV   •— t          ¦   «                              |¦  «        | j        z  S r"   )r#   Úforwardr    )r%   r)   r&   s     €r'   r+   zXGLMScaledWordEmbedding.forward1   s!   ø€ Ý‰wŒw�Š˜yÑ)Ô)¨DÔ,<Ñ<Ð<r(   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatr$   ÚtorchÚTensorr+   Ú__classcell__©r&   s   @r'   r   r   (   s–   ø€ € € € € ðð ð'ð ' sð '¸3ð 'ÈSð 'Ð_dÐgkÑ_kð 'ð 'ð 'ð 'ð 'ð 'ð= ¤ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =r(   r   c            	       óÌ   ‡ — e Zd ZdZddedededz  fˆ fd„Zddedededz  fd„Zeddedededz  fd	„¦   «         Z e	j
        ¦   «         dde	j        dz  defd„¦   «         Zˆ xZS )Ú!XGLMSinusoidalPositionalEmbeddingzDThis module produces sinusoidal positional embeddings of any length.NÚnum_positionsr   r   c                 ó¾   •— t          ¦   «                              ¦   «          d| _        || _        || _        || _        |                      || j        z   ||¦  «         d S )Né   )r#   r$   Úoffsetr8   r   r   Úmake_weights)r%   r8   r   r   r&   s       €r'   r$   z*XGLMSinusoidalPositionalEmbedding.__init__8   s]   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ*ˆÔØ*ˆÔØ&ˆÔØ×Ò˜-¨$¬+Ñ5°}ÀkÑRÔRÐRÐRÐRr(   r   c                 óÚ   — |                       |||¦  «        }t          | d¦  «        r+|                     | j        j        | j        j        ¬¦  «        }|                      d|d¬¦  «         d S )NÚweights©ÚdtypeÚdeviceF)Ú
persistent)Úget_embeddingÚhasattrÚtor>   r@   rA   Úregister_buffer)r%   r   r   r   Úemb_weightss        r'   r<   z.XGLMSinusoidalPositionalEmbedding.make_weights@   sl   € Ø×(Ò(¨¸ÈÑTÔTˆÝ�4˜Ñ#Ô#ð 	_à%Ÿ.š.¨t¬|Ô/AÈ$Ì,ÔJ]˜.Ñ^Ô^ˆKà×Ò˜Y¨ÀÐÑFÔFÐFÐFÐFr(   c                 óð  — |dz  }t          j        d¦  «        |dz
  z  }t          j        t          j        |t          j        ¬¦  «                             ¦   «         | z  ¦  «        }t          j        | t          j        ¬¦  «                             ¦   «                              d¦  «        |                     d¦  «        z  }t          j        t          j	        |¦  «        t          j
        |¦  «        gd¬¦  «                             | d¦  «        }|dz  dk    r+t          j        |t          j        | d¦  «        gd¬¦  «        }|�	d||dd…f<   |                     t          j        ¦   «         ¦  «        S )	zÊ
        Build sinusoidal embeddings.

        This matches the implementation in tensor2tensor, but differs slightly from the description in Section 3.5 of
        "Attention Is All You Need".
        r:   i'  r   )r@   r   ©ÚdiméÿÿÿÿN)ÚmathÚlogr2   ÚexpÚarangeÚint64r1   Ú	unsqueezeÚcatÚsinÚcosÚviewÚzerosrE   Úget_default_dtype)r   r   r   Úhalf_dimÚembs        r'   rC   z/XGLMSinusoidalPositionalEmbedding.get_embeddingH   s?  € ð ! AÑ%ˆÝŒh�u‰oŒo ¨A¡Ñ.ˆÝŒi�œ XµU´[ÐAÑAÔA×GÒGÑIÔIÈSÈDÑPÑQÔQˆÝŒl˜>µ´Ð=Ñ=Ô=×CÒCÑEÔE×OÒOÐPQÑRÔRÐUX×UbÒUbÐcdÑUeÔUeÑeˆÝŒi�œ 3™œ­¬°3©¬Ð8¸aÐ@Ñ@Ô@×EÒEÀnÐVXÑYÔYˆØ˜1Ñ Ò!Ð!å”)˜S¥%¤+¨n¸aÑ"@Ô"@ÐAÀqÐIÑIÔIˆCØÐ"Ø"#ˆC�˜Q˜Q˜Q�Ñà�vŠv•eÔ-Ñ/Ô/Ñ0Ô0Ð0r(   r   Úposition_idsÚpast_key_values_lengthc                 óœ  — |                      ¦   «         \  }}|| j        z   }d|z   |z   }|| j                              d¦  «        k    r!|                      || j        | j        ¦  «         | j                             d|                     d¦  «        ¦  «                             ||| j        j        d         ¦  «         	                    ¦   «         S )Nr:   r   rK   )
Úsizer;   r>   r<   r   r   Úindex_selectrU   ÚshapeÚdetach)r%   rZ   r[   ÚbszÚseq_lenÚmax_poss         r'   r+   z)XGLMSinusoidalPositionalEmbedding.forward]   s¼   € à#×(Ò(Ñ*Ô*‰ˆˆWØ# d¤kÑ1ˆà�g‘+Ð 6Ñ6ˆØ�T”\×&Ò& qÑ)Ô)Ò)Ð)Ø×Ò˜g tÔ'9¸4Ô;KÑLÔLÐLàŒ|×(Ò(¨¨L×,=Ò,=¸bÑ,AÔ,AÑBÔB×GÒGÈÈWÐVZÔVbÔVhÐikÔVlÑmÔm×tÒtÑvÔvÐvr(   r"   )Nr   )r,   r-   r.   r/   r0   r$   r<   ÚstaticmethodrC   r2   Úno_gradr3   r+   r4   r5   s   @r'   r7   r7   5   s6  ø€ € € € € ØNÐNðSð S cð S¸#ð SÈCÐRVÉJð Sð Sð Sð Sð Sð SðGð G¨3ð G¸sð GÐQTÐW[ÑQ[ð Gð Gð Gð Gð ð1ð 1 cð 1¸#ð 1ÈCÐRVÉJð 1ð 1ð 1ñ „\ð1ð( €U„]�_„_ðwð w E¤L°4Ñ$7ð wÐX[ð wð wð wñ „_ðwð wð wð wð wr(   r7   c                   ó
  ‡ — e Zd ZdZ	 	 	 	 ddedededz  d	edz  d
edz  dedz  fˆ fd„Z	 	 	 ddej	        dej	        dz  de
dz  dej	        dz  dee         deej	        ej	        dz  eej	                 dz  f         fd„Zˆ xZS )ÚXGLMAttentionz=Multi-headed attention from 'Attention Is All You Need' paperç        FTNÚ	embed_dimÚ	num_headsÚdropoutÚ
is_decoderÚbiasÚ	layer_idxc                 óü  •— t          ¦   «                              ¦   «          || _        || _        || _        ||z  | _        | j        |z  | j        k    rt          d| j        › d|› d�¦  «        ‚| j        dz  | _        || _        || _	        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        d S )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).g      à¿©rm   )r#   r$   ri   rj   rk   Úhead_dimÚ
ValueErrorÚscalingrl   rn   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)r%   ri   rj   rk   rl   rm   rn   r&   s          €r'   r$   zXGLMAttention.__init__l   s	  ø€ õ 	‰Œ×ÒÑÔÐØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒàŒM˜IÑ%¨$¬.Ò8Ð8Ýð3ÈdÌnð 3ð 3Ø%.ð3ð 3ð 3ñô ð ð ”} dÑ*ˆŒØ$ˆŒØ"ˆŒå”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝœ	 )¨Y¸TÐBÑBÔBˆŒˆˆr(   Úhidden_statesÚkey_value_statesÚpast_key_valuesÚattention_maskÚkwargsÚreturnc                 ón
  — |du}|                      ¦   «         \  }}}	|r|j        d         n|}
|                      |¦  «        | j        z  }d}|�Ht	          |t
          ¦  «        r1|j                             | j        ¦  «        }|r|j	        }n
|j
        }n|}|r|n|}|r3|�1|r/|j        | j                 j        }|j        | j                 j        }nÓ|                      |¦  «        }|                      |¦  «        }|                     ||
d| j        ¦  «                             dd¦  «        }|                     ||
d| j        ¦  «                             dd¦  «        }|�E|                     ||| j        ¦  «        \  }}|r$t	          |t
          ¦  «        rd|j        | j        <   || j        z  d| j        f}|                     ||| j        | j        ¦  «                             dd¦  «        } |j        |Ž } |j        |Ž } |j        |Ž }|                      d¦  «        }
t-          j        ||                     dd¦  «        ¦  «        }|                      ¦   «         || j        z  ||
fk    r2t1          d|| j        z  ||
f› d|                      ¦   «         › �¦  «        ‚|�Ð|                      ¦   «         |d||
fk    r+t1          d	|d||
f› d|                      ¦   «         › �¦  «        ‚|                     || j        ||
¦  «        |z   }t-          j        |t-          j        t-          j        |j        ¦  «        j        |j        ¬
¦  «        ¦  «        }|                     || j        z  ||
¦  «        }|j        t,          j        k    rJt@          j!         "                    |dt,          j#        ¬¦  «         $                    t,          j        ¦  «        }n!t@          j!         "                    |d¬¦  «        }|                     || j        ||
¦  «        }|                     || j        z  ||
¦  «        }t@          j!         %                    || j%        | j&        ¬¦  «        }t-          j        ||¦  «        }|                      ¦   «         || j        z  || j        fk    r5t1          d|| j        || j        f› d|                      ¦   «         › �¦  «        ‚|                     || j        || j        ¦  «        }|                     dd¦  «        }|                     ||| j'        ¦  «        }|  (                    |¦  «        }||fS )z#Input shape: Batch x Time x ChannelNr   FrK   r:   Tz$Attention weights should be of size z	, but is z!Attention mask should be of size )rA   )rJ   r@   rI   ©ÚpÚtrainingz `attn_output` should be of size ))r]   r_   rw   rs   Ú
isinstancer	   Ú
is_updatedÚgetrn   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesru   rv   rU   rq   Ú	transposeÚupdaterj   Úreshaper2   Úbmmrr   ÚmaxÚtensorÚfinfor@   ÚminrA   Úfloat16r   Ú
functionalÚsoftmaxÚfloat32rE   rk   r‚   ri   rx   )r%   ry   rz   r{   r|   r}   Úis_cross_attentionra   Útgt_lenÚ_Úsrc_lenÚquery_statesr„   Úcurr_past_key_valuesÚcurrent_statesÚ
key_statesÚvalue_statesÚ
proj_shapeÚattn_weightsÚattn_weights_reshapedÚ
attn_probsÚattn_outputs                         r'   r+   zXGLMAttention.forward‰   si  € ð .°TÐ9Ðà'×,Ò,Ñ.Ô.‰ˆˆW�aØ/AÐNÐ"Ô(¨Ô+Ð+Àwˆð —{’{ =Ñ1Ô1°D´LÑ@ˆàˆ
ØÐ&Ý˜/Õ+>Ñ?Ô?ð 7Ø,Ô7×;Ò;¸D¼NÑKÔK�
Ø%ð Pà+:Ô+PÐ(Ð(à+:Ô+OÐ(Ð(à'6Ð$à-?ÐRÐ)Ð)À]ˆØð 	F /Ð"=À*Ð"=à-Ô4°T´^ÔDÔIˆJØ/Ô6°t´~ÔFÔMˆLˆLàŸš ^Ñ4Ô4ˆJØŸ;š; ~Ñ6Ô6ˆLØ#Ÿš¨¨g°r¸4¼=ÑIÔI×SÒSÐTUÐWXÑYÔYˆJØ'×,Ò,¨S°'¸2¸t¼}ÑMÔM×WÒWÐXYÐ[\Ñ]Ô]ˆLàÐ*à+?×+FÒ+FÀzÐS_ÐaeÔaoÑ+pÔ+pÑ(�
˜Là%ð F­*°_ÕFYÑ*ZÔ*Zð FØAE�OÔ.¨t¬~Ñ>à˜DœNÑ*¨B°´Ð>ˆ
Ø#×(Ò(¨¨g°t´~ÀtÄ}ÑUÔU×_Ò_Ð`aÐcdÑeÔeˆØ+�|Ô+¨ZÐ8ˆØ'�ZÔ'¨Ð4ˆ
Ø+�|Ô+¨ZÐ8ˆà—/’/ !Ñ$Ô$ˆÝ”y ¨z×/CÒ/CÀAÀqÑ/IÔ/IÑJÔJˆà×ÒÑÔ 3¨¬Ñ#7¸À'Ð"JÒJÐJÝð*¸¸d¼nÑ8LÈgÐW^Ð7_ð *ð *Ø ×%Ò%Ñ'Ô'ð*ð *ñô ð ð
 Ð%Ø×"Ò"Ñ$Ô$¨¨a°¸'Ð(BÒBÐBÝ Øt¸¸aÀÈ'Ð8RÐtÐtÐ]k×]pÒ]pÑ]rÔ]rÐtÐtñô ð ð (×,Ò,¨S°$´.À'È7ÑSÔSÐVdÑdˆLÝ œ9Ø�eœl­5¬;°|Ô7IÑ+JÔ+JÔ+NÐWcÔWjÐkÑkÔkñô ˆLð (×,Ò,¨S°4´>Ñ-AÀ7ÈGÑTÔTˆLð Ô¥¤Ò.Ð.Ýœ=×0Ò0°À2ÍUÌ]Ð0Ñ[Ô[×^Ò^Õ_dÔ_lÑmÔmˆLˆLåœ=×0Ò0°À2Ð0ÑFÔFˆLð !-× 1Ò 1°#°t´~ÀwÐPWÑ XÔ XÐØ,×1Ò1°#¸¼Ñ2FÈÐQXÑYÔYˆå”]×*Ò*¨<¸4¼<ÐRVÔR_Ð*Ñ`Ô`ˆ
å”i 
¨LÑ9Ô9ˆà×ÒÑÔ #¨¬Ñ"6¸ÀÄÐ!OÒOÐOÝð)°C¸¼ÈÐRVÔR_Ð3`ð )ð )Ø×$Ò$Ñ&Ô&ð)ð )ñô ð ð
 "×&Ò& s¨D¬N¸GÀTÄ]ÑSÔSˆØ!×+Ò+¨A¨qÑ1Ô1ˆð "×)Ò)¨#¨w¸¼ÑGÔGˆà—m’m KÑ0Ô0ˆàÐ1Ð1Ð1r(   )rh   FTN)NNN)r,   r-   r.   r/   r0   r1   Úboolr$   r2   r3   r   r   r   Útupler+   r4   r5   s   @r'   rg   rg   i   sV  ø€ € € € € ØGÐGð !$Ø"'Ø Ø!%ðCð CàðCð ðCð ˜‘ð	Cð
 ˜4‘KðCð �T‰kðCð ˜$‘;ðCð Cð Cð Cð Cð Cð@ 15Ø(,Ø.2ðl2ð l2à”|ðl2ð  œ,¨Ñ-ðl2ð  ™ð	l2ð
 œ tÑ+ðl2ð Ð+Ô,ðl2ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	Mðl2ð l2ð l2ð l2ð l2ð l2ð l2ð l2r(   rg   c                   ó¶   ‡ — e Zd Zddefˆ fd„Z	 	 	 	 	 ddej        dej        dz  dej        dz  dej        dz  d	edz  d
edz  de	e
         dej        fd„Zˆ xZS )ÚXGLMDecoderLayerNÚconfigc                 ó°  •— t          ¦   «                              ¦   «          |j        | _        t	          | j        |j        |j        d|¬¦  «        | _        |j        | _        t          |j
                 | _        |j        | _        |j        rFt	          | j        |j        |j        d|¬¦  «        | _        t          j        | j        ¦  «        | _        t          j        | j        ¦  «        | _        t          j        | j        |j        ¦  «        | _        t          j        |j        | j        ¦  «        | _        t          j        | j        ¦  «        | _        d S )NT)ri   rj   rk   rl   rn   )r#   r$   Úd_modelri   rg   Úattention_headsÚattention_dropoutÚ	self_attnrk   r   Úactivation_functionÚactivation_fnÚactivation_dropoutÚadd_cross_attentionÚencoder_attnr   Ú	LayerNormÚencoder_attn_layer_normÚself_attn_layer_normrt   Úffn_dimÚfc1Úfc2Úfinal_layer_norm)r%   r©   rn   r&   s      €r'   r$   zXGLMDecoderLayer.__init__ù   s!  ø€ Ý‰Œ×ÒÑÔÐØœˆŒå&Ø”nØÔ,ØÔ,ØØð
ñ 
ô 
ˆŒð ”~ˆŒÝ# FÔ$>Ô?ˆÔØ"(Ô";ˆÔàÔ%ð 	HÝ -Øœ.Ø Ô0ØÔ0ØØ#ð!ñ !ô !ˆDÔõ ,.¬<¸¼Ñ+GÔ+GˆDÔ(å$&¤L°´Ñ$@Ô$@ˆÔ!Ý”9˜Tœ^¨V¬^Ñ<Ô<ˆŒÝ”9˜Vœ^¨T¬^Ñ<Ô<ˆŒÝ "¤¨T¬^Ñ <Ô <ˆÔÐÐr(   Try   r|   Úencoder_hidden_statesÚencoder_attention_maskr{   Ú	use_cacher}   r~   c                 óÞ  — |}|                       |¦  «        } | j        |f||dœ|¤Ž\  }}	t          j                             || j        | j        ¬¦  «        }||z   }|�]|}|                      |¦  «        } | j        |f|||dœ|¤Ž\  }}	t          j                             || j        | j        ¬¦  «        }||z   }|}|                      |¦  «        }|  	                    |  
                    |¦  «        ¦  «        }t          j                             || j        | j        ¬¦  «        }|                      |¦  «        }t          j                             || j        | j        ¬¦  «        }||z   }|S )að  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`): attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
            encoder_hidden_states (`torch.FloatTensor`):
                cross attention input to the layer of shape `(batch, seq_len, embed_dim)`
            encoder_attention_mask (`torch.FloatTensor`): encoder attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
            past_key_values (`Cache`): cached past key and value projection states
        )r{   r|   r€   N)rz   r|   r{   )r¶   r®   r   r”   rk   r‚   rµ   r³   rº   r°   r¸   r±   r¹   )
r%   ry   r|   r»   r¼   r{   r½   r}   Úresidualr™   s
             r'   r+   zXGLMDecoderLayer.forward  s§  € ð* !ˆØ×1Ò1°-Ñ@Ô@ˆð *˜4œ>Øð
à+Ø)ð
ð 
ð ð	
ð 
Ñˆ�qõ œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆð !Ð,Ø$ˆHØ ×8Ò8¸ÑGÔGˆMà0˜tÔ0Øð à!6Ø5Ø /ð	 ð  ð
 ð ð  ÑˆM˜1õ œM×1Ò1°-À4Ä<ÐZ^ÔZgÐ1ÑhÔhˆMØ$ }Ñ4ˆMð !ˆØ×-Ò-¨mÑ<Ô<ˆØ×*Ò*¨4¯8ª8°MÑ+BÔ+BÑCÔCˆÝœ×-Ò-¨m¸tÔ?VÐaeÔanÐ-ÑoÔoˆØŸš Ñ/Ô/ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆàÐr(   r"   )NNNNT)r,   r-   r.   r   r$   r2   r3   r   r¥   r   r   r+   r4   r5   s   @r'   r¨   r¨   ø   sé   ø€ € € € € ð=ð =˜zð =ð =ð =ð =ð =ð =ðD /3Ø59Ø6:Ø(,Ø!%ð:ð :à”|ð:ð œ tÑ+ð:ð  %œ|¨dÑ2ð	:ð
 !&¤¨tÑ 3ð:ð  ™ð:ð ˜$‘;ð:ð Ð+Ô,ð:ð 
Œð:ð :ð :ð :ð :ð :ð :ð :r(   r¨   c                   ó8   ‡ — e Zd ZU eed<   dZdZdgZˆ fd„Zˆ xZ	S )ÚXGLMPreTrainedModelr©   ÚmodelTr¨   c                 ó  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rJ|                     |j        |j        z   |j        |j        ¦  «        }t          j
        |j        |¦  «         d S d S r"   )r#   Ú_init_weightsrƒ   r7   rC   r8   r;   r   r   ÚinitÚcopy_r>   )r%   ÚmodulerG   r&   s      €r'   rÄ   z!XGLMPreTrainedModel._init_weights\  s€   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ?Ñ@Ô@ð 	4Ø ×.Ò.ØÔ$ v¤}Ñ4°fÔ6JÈFÔL^ñô ˆKõ ŒJ�v”~ {Ñ3Ô3Ð3Ð3Ð3ð		4ð 	4r(   )
r,   r-   r.   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesrÄ   r4   r5   s   @r'   rÁ   rÁ   U  s[   ø€ € € € € € àÐÐÑØÐØ&*Ð#Ø+Ð,Ðð4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r(   rÁ   c                   óf  ‡ — e Zd Ze eedd¬¦  «         eedd¬¦  «        dœZdefˆ 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dz  dej        dz  dedz  dee         deej                 ez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )Ú	XGLMModelr   r®   )ÚindexÚ
layer_namer³   )ry   Ú
attentionsÚcross_attentionsr©   c                 óh  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        ‰j        | _        ‰j        | _        ‰j        rt          j
        ‰j        ¦  «        nd}t          ‰j        ‰j        | j        |¬¦  «        | _        t          ‰j        ‰j        ‰j        ¦  «        | _        t#          j        ˆfd„t'          ‰j        ¦  «        D ¦   «         ¦  «        | _        t#          j        ‰j        ¦  «        | _        d| _        |                      ¦   «          d S )Nr   )r    c                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS ))rn   )r¨   )Ú.0Úir©   s     €r'   ú
<listcomp>z&XGLMModel.__init__.<locals>.<listcomp>~  s'   ø€ Ð$mÐ$mÐ$mÈqÕ%5°fÈÐ%JÑ%JÔ%JÐ$mÐ$mÐ$mr(   F)r#   r$   rk   Ú	layerdropÚpad_token_idr   Úmax_position_embeddingsÚmax_target_positionsÚscale_embeddingrL   Úsqrtr«   r   Ú
vocab_sizeÚembed_tokensr7   Úembed_positionsr   Ú
ModuleListÚrangeÚ
num_layersrˆ   r´   Ú
layer_normÚgradient_checkpointingÚ	post_init)r%   r©   r    r&   s    ` €r'   r$   zXGLMModel.__init__m  s  øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø”~ˆŒØÔ)ˆŒØ!Ô.ˆÔØ$*Ô$BˆÔ!Ø39Ô3IÐR•d”i ¤Ñ/Ô/Ð/Èsˆå3ØÔ˜vœ~¨tÔ/?È[ð
ñ 
ô 
ˆÔõ  AØÔ*ØŒNØÔñ 
ô  
ˆÔõ
 ”mÐ$mÐ$mÐ$mÐ$mÕTYÐZ`ÔZkÑTlÔTlÐ$mÑ$mÔ$mÑnÔnˆŒÝœ, v¤~Ñ6Ô6ˆŒà&+ˆÔ#à�ŠÑÔÐÐÐr(   Nr)   r|   rZ   r»   r¼   r{   Úinputs_embedsr½   r}   r~   c	                 ó  — |du |duz  rt          d¦  «        ‚|€|                      |¦  «        }|r[|€Y|€| j        j        r6t	          t          | j        ¬¦  «        t          | j        ¬¦  «        ¦  «        nt          | j        ¬¦  «        }|�|                     ¦   «         nd}
t          | j        |||¬¦  «        }|€St          j	        |
|j
        d         |
z   t          j        |�|j        n|j        ¬¦  «        }|                     d¦  «        }|�|�t          | j        |||¬¦  «        }||                      ||
¦  «                             |j        ¦  «        z   }t"          j                             |t)          | j        ¦  «        | j        ¬	¦  «        }t-          | j        ¦  «        D ];\  }}| j        r t          j        g ¦  «        }|| j        k     rŒ, ||||f|||d
œ|	¤Ž}Œ<|                      |¦  «        }t7          ||¬¦  «        S )aÅ  
        encoder_hidden_states (`torch.FloatTensor` of shape `(batch_size, encoder_sequence_length, hidden_size)`, *optional*):
            Sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention of
            the decoder.
        encoder_attention_mask (`torch.LongTensor` of shape `(batch_size, encoder_sequence_length)`, *optional*):
            Mask to avoid performing cross-attention on padding tokens indices of encoder input_ids. Mask values
            selected in `[0, 1]`:

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

            [What are attention masks?](../glossary#attention-mask)
        Nz:You must specify exactly one of input_ids or inputs_embeds)r©   r   )r©   ræ   r|   r{   r   r?   )r©   ræ   r|   r»   r€   )r¼   r{   r½   )Úlast_hidden_stater{   )rr   rÞ   r©   Úis_encoder_decoderr	   r   Úget_seq_lengthr   r2   rO   r_   ÚlongrA   rQ   r   rß   rE   r   r”   rk   r1   r‚   Ú	enumeraterˆ   Úrandr×   rã   r   )r%   r)   r|   rZ   r»   r¼   r{   ræ   r½   r}   r[   ry   ÚidxÚdecoder_layerÚdropout_probabilitys                  r'   r+   zXGLMModel.forward…  s�  € ð8 ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø ×-Ò-¨iÑ8Ô8ˆMð ð 	˜Ð0ð )Ð4¸¼Ô8VÐ4õ $¥L¸¼Ð$DÑ$DÔ$DÅlÐZ^ÔZeÐFfÑFfÔFfÑgÔgÐgå!¨¬Ð5Ñ5Ô5ð ð FUÐE` ×!?Ò!?Ñ!AÔ!AÐ!AÐfgÐå+Ø”;Ø'Ø)Ø+ð	
ñ 
ô 
ˆð ÐÝ œ<Ø&ØÔ# AÔ&Ð)?Ñ?Ý”jØ+4Ð+@�yÔ'Ð'ÀmÔFZð	ñ ô ˆLð (×1Ò1°!Ñ4Ô4ˆLð !Ð,Ð1GÐ1SÝ%>Ø”{Ø+Ø5Ø&;ð	&ñ &ô &Ð"ð &¨×(<Ò(<¸\ÐKaÑ(bÔ(b×(eÒ(eØÔ ñ)
ô )
ñ 
ˆõ œ×-Ò-¨m½uÀTÄ\Ñ?RÔ?RÐ]aÔ]jÐ-ÑkÔkˆå"+¨D¬KÑ"8Ô"8ð 	ð 	ÑˆC�àŒ}ð Ý&+¤j°¡n¤nÐ#Ø&¨¬Ò7Ð7Øà)˜MØØØ%ðð (>Ø /Ø#ðð ð ðð ˆMˆMð Ÿš¨Ñ6Ô6ˆå8Ø+Ø+ð
ñ 
ô 
ð 	
r(   )NNNNNNNN)r,   r-   r.   r¨   r   rg   Ú_can_record_outputsr   r$   r   r   r   r2   r3   r   r¥   r   r   r¦   r   r+   r4   r5   s   @r'   rÍ   rÍ   e  sŒ  ø€ € € € € ð *Ø$�n ]¸!ÈÐTÑTÔTØ*˜N¨=ÀÈnÐ]Ñ]Ô]ðð Ðð˜zð ð ð ð ð ð ð0  ØØð *.Ø.2Ø,0Ø59Ø6:Ø(,Ø-1Ø!%ð]
ð ]
à”< $Ñ&ð]
ð œ tÑ+ð]
ð ”l TÑ)ð	]
ð
  %œ|¨dÑ2ð]
ð !&¤¨tÑ 3ð]
ð  ™ð]
ð ”| dÑ*ð]
ð ˜$‘;ð]
ð Ð+Ô,ð]
ð 
ˆuŒ|Ô	ÐHÑ	Hð]
ð ]
ð ]
ñ „^ñ „_ñ  Ôð]
ð ]
ð ]
ð ]
ð ]
r(   rÍ   z‡
    The XGLM Model transformer with a language modeling head on top (linear layer with weights tied to the input
    embeddings).
    )Úcustom_introc                   ó\  ‡ — e Zd ZdZddiZˆ 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dz  de	j
        dz  de	j
        dz  dedz  dee	j
        z  dee         dee	j
                 ez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚXGLMForCausalLMrÂ   zlm_head.weightzmodel.embed_tokens.weightc                 óæ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S )NFrp   )
r#   r$   rÍ   rÂ   r   rt   Úhidden_sizerÝ   Úlm_headrå   )r%   r©   r&   s     €r'   r$   zXGLMForCausalLM.__init__ò  s`   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý˜vÑ&Ô&ˆŒ
Ý”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒð 	�ŠÑÔÐÐÐr(   Nr   r)   r|   rZ   r»   r¼   r{   ræ   Úlabelsr½   Úlogits_to_keepr}   r~   c                 ó„  —  | j         d||||||||	dœ|¤Ž}|j        }t          |
t          ¦  «        rt	          |
 d¦  «        n|
}|                      |dd…|dd…f         ¦  «        }d}|�-|                      ||| j        j        | j        j	        ¬¦  «        }t          |||j        |j        |j        |j        ¬¦  «        S )ai  
        encoder_hidden_states (`torch.FloatTensor` of shape `(batch_size, encoder_sequence_length, hidden_size)`, *optional*):
            Sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention of
            the decoder.
        encoder_attention_mask (`torch.LongTensor` of shape `(batch_size, encoder_sequence_length)`, *optional*):
            Mask to avoid performing cross-attention on padding tokens indices of encoder input_ids. Mask values
            selected in `[0, 1]`:

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

            [What are attention masks?](../glossary#attention-mask)
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.
        )r)   r|   rZ   r»   r¼   r{   ræ   r½   N)rÝ   rØ   )ÚlossÚlogitsr{   ry   rÐ   rÑ   © )rÂ   rè   rƒ   r0   Úslicer÷   Úloss_functionr©   rÝ   rØ   r   r{   ry   rÐ   rÑ   )r%   r)   r|   rZ   r»   r¼   r{   ræ   rø   r½   rù   r}   Úoutputsry   Úslice_indicesrü   rû   s                    r'   r+   zXGLMForCausalLM.forwardú  s  € ðF >H¸T¼Zð 
>
ØØ)Ø%Ø"7Ø#9Ø+Ø'Øð
>
ð 
>
ð ð
>
ð 
>
ˆð  Ô1ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ×%Ò%ØØØœ;Ô1Ø!œ[Ô5ð	 &ñ ô ˆDõ 1ØØØ#Ô3Ø!Ô/ØÔ)Ø$Ô5ð
ñ 
ô 
ð 	
r(   )
NNNNNNNNNr   )r,   r-   r.   rÉ   Ú_tied_weights_keysr$   r   r   r   r2   r3   r   r¥   r0   r   r   r¦   r   r+   r4   r5   s   @r'   rô   rô   è  s„  ø€ € € € € ð  ÐØ*Ð,GÐHÐðð ð ð ð ð  ØØð *.Ø.2Ø,0Ø59Ø6:Ø(,Ø-1Ø&*Ø!%Ø-.ðA
ð A
à”< $Ñ&ðA
ð œ tÑ+ðA
ð ”l TÑ)ð	A
ð
  %œ|¨dÑ2ðA
ð !&¤¨tÑ 3ðA
ð  ™ðA
ð ”| dÑ*ðA
ð ”˜tÑ#ðA
ð ˜$‘;ðA
ð ˜eœlÑ*ðA
ð Ð+Ô,ðA
ð 
ˆuŒ|Ô	Ð@Ñ	@ðA
ð A
ð A
ñ „^ñ „_ñ  ÔðA
ð A
ð A
ð A
ð A
r(   rô   )rô   rÍ   rÁ   )3r/   rL   r2   r   Ú r   rÅ   Úactivationsr   Úcache_utilsr   r   r	   Ú
generationr
   Úmasking_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   Úutils.output_capturingr   r   Úconfiguration_xglmr   Ú
get_loggerr,   ÚloggerÚ	Embeddingr   ÚModuler7   rg   r¨   rÁ   rÍ   rô   Ú__all__rý   r(   r'   ú<module>r     s  ðð Ð à €€€à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ )Ð )Ð )Ð )Ð )Ð )Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø lÐ lÐ lÐ lÐ lÐ lÐ lÐ lØ -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ *Ð *Ð *Ð *Ð *Ð *ð 
ˆÔ	˜HÑ	%Ô	%€ð
=ð 
=ð 
=ð 
=ð 
=˜bœlñ 
=ô 
=ð 
=ð1wð 1wð 1wð 1wð 1w¨¬	ñ 1wô 1wð 1wðhL2ð L2ð L2ð L2ð L2�B”Iñ L2ô L2ð L2ð^Zð Zð Zð Zð ZÐ1ñ Zô Zð Zðz ð4ð 4ð 4ð 4ð 4˜/ñ 4ô 4ñ „ð4ð ð
ð 
ð 
ð 
ð 
Ð#ñ 
ô 
ñ „ð
ðD €ððñ ô ðP
ð P
ð P
ð P
ð P
Ð)¨?ñ P
ô P
ñô ðP
ðf BÐ
AÐ
A€€€r(   