Ë
    ÜÓ^j-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jL                  e'«      Z( G d„ dejR                  «      Z* G d„ dejV                  «      Z, G d„ dejV                  «      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#¢Z2y)$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            
       ó`   ‡ — 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                 ó6   •— t         ‰| �  |||«       || _        y ©N)ÚsuperÚ__init__r   )Úselfr   r   r   r   Ú	__class__s        €úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/xglm/modeling_xglm.pyr#   z XGLMScaledWordEmbedding.__init__-   s   ø€ Ü‰Ñ˜¨¸ÔDØ&ˆÕó    Ú	input_idsc                 ó<   •— t         ‰| �  |«      | j                  z  S r!   )r"   Úforwardr   )r$   r(   r%   s     €r&   r*   zXGLMScaledWordEmbedding.forward1   s   ø€ Ü‰w‰˜yÓ)¨D×,<Ñ,<Ñ<Ð<r'   )ç      ð?)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatr#   ÚtorchÚTensorr*   Ú__classcell__©r%   s   @r&   r   r   (   sE   ø„ ññ' 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                  || j                  z   ||«       y )Né   )r"   r#   Úoffsetr8   r   r   Úmake_weights)r$   r8   r   r   r%   s       €r&   r#   z*XGLMSinusoidalPositionalEmbedding.__init__8   sH   ø€ Ü‰ÑÔØˆŒØ*ˆÔØ*ˆÔØ&ˆÔØ×Ñ˜-¨$¯+©+Ñ5°}ÀkÕRr'   r   c                 óà   — | j                  |||«      }t        | d«      r;|j                  | j                  j                  | j                  j
                  ¬«      }| j                  d|d¬«       y )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@   s[   € Ø×(Ñ(¨¸ÈÓTˆÜ�4˜Ô#à%Ÿ.™.¨t¯|©|×/AÑ/AÈ$Ï,É,×J]ÑJ]˜.Ó^ˆKà×Ñ˜Y¨ÀÐÕFr'   c                 óâ  — |dz  }t        j                  d«      |dz
  z  }t        j                  t        j                  |t        j
                  ¬«      j                  «       | z  «      }t        j                  | t        j
                  ¬«      j                  «       j                  d«      |j                  d«      z  }t        j                  t        j                  |«      t        j                  |«      gd¬«      j                  | d«      }|dz  dk(  r-t        j                  |t        j                  | d«      gd¬«      }|�	d||dd…f<   |j                  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‰h�u‹o ¨A¡Ñ.ˆÜ�i‰iœŸ™ X´U·[±[ÔA×GÑGÓIÈSÈDÑPÓQˆÜ�l‰l˜>´·±Ô=×CÑCÓE×OÑOÐPQÓRÐUX×UbÑUbÐcdÓUeÑeˆÜ�i‰iœŸ™ 3›¬¯©°3«Ð8¸aÔ@×EÑEÀnÐVXÓYˆØ˜1Ñ Ò!ä—)‘)˜S¤%§+¡+¨n¸aÓ"@ÐAÀqÔIˆCØÐ"Ø"#ˆC�šQ�Ñà�v‰v”e×-Ñ-Ó/Ó0Ð0r'   Úposition_idsÚpast_key_values_lengthc                 ó¢  — |j                  «       \  }}|| j                  z   }d|z   |z   }|| j                  j                  d«      kD  r'| j                  || j                  | j
                  «       | j                  j                  d|j                  d«      «      j                  ||| j                  j                  d   «      j                  «       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¡kÑ1ˆà�g‘+Ð 6Ñ6ˆØ�T—\‘\×&Ñ& qÓ)Ò)Ø×Ñ˜g t×'9Ñ'9¸4×;KÑ;KÔLà�|‰|×(Ñ(¨¨L×,=Ñ,=¸bÓ,AÓB×GÑGÈÈWÐVZ×VbÑVb×VhÑVhÐikÑVlÓm×tÑtÓvÐvr'   r!   )Nr   )r,   r-   r.   r/   r0   r#   r<   ÚstaticmethodrC   r2   Úno_gradr3   r*   r4   r5   s   @r&   r7   r7   5   s´   ø„ ÙNñS cð S¸#ð SÈCÐRVÉJõ SñG¨3ð G¸sð GÐQTÐW[ÑQ[ó Gð ñ1 cð 1¸#ð 1ÈCÐRVÉJò 1ó ð1ð( €U‡]�]ƒ_ñw E§L¡L°4Ñ$7ð wÐX[ò wó ôwr'   r7   c                   ó4  ‡ — 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' paperNÚ	embed_dimÚ	num_headsÚdropoutÚ
is_decoderÚbiasÚ	layer_idxc                 óü  •— t         ‰| �  «        || _        || _        || _        ||z  | _        | j
                  |z  | j                  k7  rt        d| j                  › d|› d�«      ‚| j
                  dz  | _        || _        || _	        t        j                  |||¬«      | _        t        j                  |||¬«      | _        t        j                  |||¬«      | _        t        j                  |||¬«      | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).g      à¿©rl   )r"   r#   rh   ri   rj   Úhead_dimÚ
ValueErrorÚscalingrk   rm   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)r$   rh   ri   rj   rk   rl   rm   r%   s          €r&   r#   zXGLMAttention.__init__l   sÝ   ø€ ô 	‰ÑÔØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒà�M‰M˜IÑ%¨$¯.©.Ò8ÜØMÈdÏnÉnÐM]Ø$ Y K¨rð3óð ð —}‘} dÑ*ˆŒØ$ˆŒØ"ˆŒä—i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜŸ	™	 )¨Y¸TÔBˆ�r'   Úhidden_statesÚkey_value_statesÚpast_key_valuesÚattention_maskÚkwargsÚreturnc                 ó  — |du}|j                  «       \  }}}	|r|j                  d   n|}
| j                  |«      | j                  z  }d}|�St	        |t
        «      rA|j                  j                  | j                  «      }|r|j                  }n|j                  }n|}|r|n|}|rK|�I|rGj                  | j                     j                  }|j                  | j                     j                  }nË| j                  |«      }| j                  |«      }|j!                  ||
d| j"                  «      j%                  dd«      }|j!                  ||
d| j"                  «      j%                  dd«      }|�Kj'                  ||| j                  «      \  }}|r)t	        |t
        «      rd|j                  | j                  <   || j(                  z  d| j"                  f}|j!                  ||| j(                  | j"                  «      j%                  dd«      } |j*                  |Ž } |j*                  |Ž } |j*                  |Ž }|j                  d«      }
t-        j.                  ||j%                  dd«      «      }|j                  «       || j(                  z  ||
fk7  r/t1        d|| j(                  z  ||
f› d|j                  «       › �«      ‚|�×|j                  «       |d||
fk7  r#t1        d	|d||
f› d|j                  «       › �«      ‚|j!                  || j(                  ||
«      |z   }t-        j2                  |t-        j4                  t-        j6                  |j8                  «      j:                  |j<                  ¬
«      «      }|j!                  || j(                  z  ||
«      }|j8                  t,        j>                  k(  rNt@        jB                  jE                  |dt,        jF                  ¬«      jI                  t,        j>                  «      }n!t@        jB                  jE                  |d¬«      }|j!                  || j(                  ||
«      }|j!                  || j(                  z  ||
«      }t@        jB                  jK                  || jJ                  | jL                  ¬«      }t-        j.                  ||«      }|j                  «       || j(                  z  || j"                  fk7  r7t1        d|| j(                  || j"                  f› d|j                  «       › �«      ‚|j!                  || j(                  || j"                  «      }|j%                  dd«      }|j+                  ||| jN                  «      }| jQ                  |«      }||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_   rv   rr   Ú
isinstancer	   Ú
is_updatedÚgetrm   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesrt   ru   rU   rp   Ú	transposeÚupdateri   Úreshaper2   Úbmmrq   ÚmaxÚtensorÚfinfor@   ÚminrA   Úfloat16r   Ú
functionalÚsoftmaxÚfloat32rE   rj   r�   rh   rw   )r$   rx   ry   rz   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‰   s  € ð .°TÐ9Ðà'×,Ñ,Ó.‰ˆˆW�aÙ/AÐ"×(Ñ(¨Ò+Àwˆð —{‘{ =Ó1°D·L±LÑ@ˆàˆ
ØÐ&Ü˜/Ô+>Ô?Ø,×7Ñ7×;Ñ;¸D¿N¹NÓK�
Ù%à+:×+PÑ+PÑ(à+:×+OÑ+OÑ(à'6Ð$á-?Ñ)À]ˆÙ /Ð"=Á*à-×4Ñ4°T·^±^ÑD×IÑIˆJØ/×6Ñ6°t·~±~ÑF×MÑM‰LàŸ™ ^Ó4ˆJØŸ;™; ~Ó6ˆLØ#Ÿ™¨¨g°r¸4¿=¹=ÓI×SÑSÐTUÐWXÓYˆJØ'×,Ñ,¨S°'¸2¸t¿}¹}ÓM×WÑWÐXYÐ[\Ó]ˆLàÐ*à+?×+FÑ+FÀzÐS_Ðae×aoÑaoÓ+pÑ(�
˜Lá%¬*°_ÔFYÔ*ZØAE�O×.Ñ.¨t¯~©~Ñ>à˜DŸN™NÑ*¨B°·±Ð>ˆ
Ø#×(Ñ(¨¨g°t·~±~ÀtÇ}Á}ÓU×_Ñ_Ð`aÐcdÓeˆØ+�|×+Ñ+¨ZÐ8ˆØ'�Z×'Ñ'¨Ð4ˆ
Ø+�|×+Ñ+¨ZÐ8ˆà—/‘/ !Ó$ˆÜ—y‘y ¨z×/CÑ/CÀAÀqÓ/IÓJˆà×ÑÓ 3¨¯©Ñ#7¸À'Ð"JÒJÜØ6¸¸d¿n¹nÑ8LÈgÐW^Ð7_Ð6`ð aØ ×%Ñ%Ó'Ð(ð*óð ð
 Ð%Ø×"Ñ"Ó$¨¨a°¸'Ð(BÒBÜ Ø7¸¸aÀÈ'Ð8RÐ7SÐS\Ð]k×]pÑ]pÓ]rÐ\sÐtóð ð (×,Ñ,¨S°$·.±.À'È7ÓSÐVdÑdˆLÜ Ÿ9™9ØœeŸl™l¬5¯;©;°|×7IÑ7IÓ+J×+NÑ+NÐWc×WjÑWjÔkóˆLð (×,Ñ,¨S°4·>±>Ñ-AÀ7ÈGÓTˆLð ×Ñ¤§¡Ò.ÜŸ=™=×0Ñ0°À2ÌUÏ]É]Ð0Ó[×^Ñ^Ô_d×_lÑ_lÓm‰LäŸ=™=×0Ñ0°À2Ð0ÓFˆLð !-× 1Ñ 1°#°t·~±~ÀwÐPWÓ XÐØ,×1Ñ1°#¸¿¹Ñ2FÈÐQXÓYˆä—]‘]×*Ñ*¨<¸4¿<¹<ÐRV×R_ÑR_Ð*Ó`ˆ
ä—i‘i 
¨LÓ9ˆà×ÑÓ #¨¯©Ñ"6¸ÀÇÁÐ!OÒOÜØ2°C¸¿¹ÈÐRV×R_ÑR_Ð3`Ð2að bØ×$Ñ$Ó&Ð'ð)óð ð
 "×&Ñ& s¨D¯N©N¸GÀTÇ]Á]ÓSˆØ!×+Ñ+¨A¨qÓ1ˆð "×)Ñ)¨#¨w¸¿¹ÓGˆà—m‘m KÓ0ˆàÐ1Ð1Ð1r'   )g        FTN)NNN)r,   r-   r.   r/   r0   r1   Úboolr#   r2   r3   r   r   r   Útupler*   r4   r5   s   @r&   rg   rg   i   s  ø„ ÙGð !$Ø"'Ø Ø!%ñCàðCð ðCð ˜‘ð	Cð
 ˜4‘KðCð �T‰kðCð ˜$‘;õCð@ 15Ø(,Ø.2ñl2à—|‘|ðl2ð  Ÿ,™,¨Ñ-ðl2ð  ™ð	l2ð
 Ÿ™ tÑ+ðl2ð Ð+Ñ,ðl2ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	M÷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                 ó0  •— t         ‰| �  «        |j                  | _        t	        | j                  |j
                  |j                  d|¬«      | _        |j                  | _        t        |j                     | _        |j                  | _        |j                  rWt	        | j                  |j
                  |j                  d|¬«      | _        t        j                   | j                  «      | _        t        j                   | j                  «      | _        t        j&                  | j                  |j(                  «      | _        t        j&                  |j(                  | j                  «      | _        t        j                   | j                  «      | _        y )NT)rh   ri   rj   rk   rm   )r"   r#   Úd_modelrh   rg   Úattention_headsÚattention_dropoutÚ	self_attnrj   r   Úactivation_functionÚactivation_fnÚactivation_dropoutÚadd_cross_attentionÚencoder_attnr   Ú	LayerNormÚencoder_attn_layer_normÚself_attn_layer_normrs   Úffn_dimÚfc1Úfc2Úfinal_layer_norm)r$   r¨   rm   r%   s      €r&   r#   zXGLMDecoderLayer.__init__ù   s  ø€ Ü‰ÑÔØŸ™ˆŒä&Ø—n‘nØ×,Ñ,Ø×,Ñ,ØØô
ˆŒð —~‘~ˆŒÜ# F×$>Ñ$>Ñ?ˆÔØ"(×";Ñ";ˆÔà×%Ò%Ü -ØŸ.™.Ø ×0Ñ0Ø×0Ñ0ØØ#ô!ˆDÔô ,.¯<©<¸¿¹Ó+GˆDÔ(ä$&§L¡L°·±Ó$@ˆÔ!Ü—9‘9˜TŸ^™^¨V¯^©^Ó<ˆŒÜ—9‘9˜VŸ^™^¨T¯^©^Ó<ˆŒÜ "§¡¨T¯^©^Ó <ˆÕr'   rx   r{   Úencoder_hidden_statesÚencoder_attention_maskrz   Ú	use_cacher|   r}   c                 ó  — |}| j                  |«      } | j                  |f||dœ|¤Ž\  }}	t        j                  j	                  || j                  | j
                  ¬«      }||z   }|�h|}| j                  |«      } | j                  |f|||dœ|¤Ž\  }}	t        j                  j	                  || j                  | j
                  ¬«      }||z   }|}| j                  |«      }| j                  | j                  |«      «      }t        j                  j	                  || j                  | j
                  ¬«      }| j                  |«      }t        j                  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
        )rz   r{   r   )ry   r{   rz   )rµ   r­   r   r“   rj   r�   r´   r²   r¹   r¯   r·   r°   r¸   )
r$   rx   r{   rº   r»   rz   r¼   r|   Úresidualr˜   s
             r&   r*   zXGLMDecoderLayer.forward  s—  € ð* !ˆØ×1Ñ1°-Ó@ˆð *˜4Ÿ>™>Øð
à+Ø)ñ
ð ñ	
Ñˆ�qô Ÿ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆð !Ð,Ø$ˆHØ ×8Ñ8¸ÓGˆMà0˜t×0Ñ0Øð à!6Ø5Ø /ñ	 ð
 ñ ÑˆM˜1ô ŸM™M×1Ñ1°-À4Ç<Á<ÐZ^×ZgÑZgÐ1ÓhˆMØ$ }Ñ4ˆMð !ˆØ×-Ñ-¨mÓ<ˆØ×*Ñ*¨4¯8©8°MÓ+BÓCˆÜŸ™×-Ñ-¨m¸t×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ™ Ó/ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-Ó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        «      r_|j	                  |j
                  |j                  z   |j                  |j                  «      }t        j                  |j                  |«       y y r!   )r"   Ú_init_weightsr‚   r7   rC   r8   r;   r   r   ÚinitÚcopy_r>   )r$   ÚmodulerG   r%   s      €r&   rÃ   z!XGLMPreTrainedModel._init_weights\  sg   ø€ Ü‰Ñ˜fÔ%Ü�fÔ?Ô@Ø ×.Ñ.Ø×$Ñ$ v§}¡}Ñ4°f×6JÑ6JÈF×L^ÑL^óˆKô �J‰J�v—~‘~ {Õ3ð	 Ar'   )
r,   r-   r.   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesrÃ   r4   r5   s   @r&   rÀ   rÀ   U  s(   ø… àÓØÐØ&*Ð#Ø+Ð,Ð÷4ð 4r'   rÀ   c                   ó‚  ‡ — 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²   )rx   Ú
attentionsÚcross_attentionsr¨   c           	      óÖ  •— t         ‰| �  |«       |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  rt        j                  |j                  «      nd}t        |j                  |j                  | j
                  |¬«      | _        t        |j                  |j                  |j                  «      | _        t#        j$                  t'        |j(                  «      D �cg c]  }t+        ||¬«      ‘Œ c}«      | _        t#        j.                  |j                  «      | _        d| _        | j5                  «        y c c}w )Nr+   )r   )rm   F)r"   r#   rj   Ú	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‡   r³   Ú
layer_normÚgradient_checkpointingÚ	post_init)r$   r¨   r   Úir%   s       €r&   r#   zXGLMModel.__init__m  s  ø€ Ü‰Ñ˜Ô Ø—~‘~ˆŒØ×)Ñ)ˆŒØ!×.Ñ.ˆÔØ$*×$BÑ$BˆÔ!Ø39×3IÒ3I”d—i‘i §¡Ô/Èsˆä3Ø×Ñ˜vŸ~™~¨t×/?Ñ/?È[ô
ˆÔô  AØ×*Ñ*Ø�N‰NØ×Ñó 
ˆÔô
 —m‘mÔTYÐZ`×ZkÑZkÓTlÖ$mÈqÔ%5°fÈÖ%JÒ$mÓnˆŒÜŸ,™, v§~¡~Ó6ˆŒà&+ˆÔ#à�‰Õùò %ns   Ä
E&Nr(   r{   rZ   rº   r»   rz   Úinputs_embedsr¼   r|   r}   c	                 óD  — |du |duz  rt        d«      ‚|€| j                  |«      }|rd|€b|€| j                  j                  r4t	        t        | j                  ¬«      t        | j                  ¬«      «      nt        | j                  ¬«      }|�|j                  «       nd}
t        | j                  |||¬«      }|€`t        j                  |
|j                  d   |
z   t        j                  |�|j                  n|j                  ¬«      }|j                  d«      }|�|�t        | j                  |||¬«      }|| j                  ||
«      j!                  |j                  «      z   }t"        j$                  j'                  |t)        | j&                  «      | j*                  ¬	«      }t-        | j.                  «      D ]E  \  }}| j*                  r%t        j0                  g «      }|| j2                  k  rŒ7 ||||f|||d
œ|	¤Ž}ŒG | j5                  |«      }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{   rz   r   r?   )r¨   râ   r{   rº   r   )r»   rz   r¼   )Úlast_hidden_staterz   )rq   rÙ   r¨   Úis_encoder_decoderr	   r   Úget_seq_lengthr   r2   rO   r_   ÚlongrA   rQ   r   rÚ   rE   r   r“   rj   r1   r�   Ú	enumerater‡   ÚrandrÒ   rÞ   r   )r$   r(   r{   rZ   rº   r»   rz   râ   r¼   r|   r[   rx   ÚidxÚdecoder_layerÚdropout_probabilitys                  r&   r*   zXGLMModel.forward…  s0  € ð8 ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø ×-Ñ-¨iÓ8ˆMñ ˜Ð0ð )Ð4¸¿¹×8VÒ8Vô $¤L¸¿¹Ô$DÄlÐZ^×ZeÑZeÔFfÔgä!¨¯©Ô5ð ð FUÐE` ×!?Ñ!?Ô!AÐfgÐä+Ø—;‘;Ø'Ø)Ø+ô	
ˆð ÐÜ Ÿ<™<Ø&Ø×#Ñ# AÑ&Ð)?Ñ?Ü—j‘jØ+4Ð+@�y×'Ò'Àm×FZÑFZô	ˆLð (×1Ñ1°!Ó4ˆLð !Ð,Ð1GÐ1SÜ%>Ø—{‘{Ø+Ø5Ø&;ô	&Ð"ð &¨×(<Ñ(<¸\ÐKaÓ(b×(eÑ(eØ× Ñ ó)
ñ 
ˆô Ÿ™×-Ñ-¨m¼uÀTÇ\Á\Ó?RÐ]a×]jÑ]jÐ-Ókˆä"+¨D¯K©KÓ"8ò 	ÑˆC�à�}Š}Ü&+§j¡j°£nÐ#Ø&¨¯©Ò7Øá)ØØØ%ðð (>Ø /Ø#ñð ñ‰Mð	ð" Ÿ™¨Ó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  s3  ø„ ð *Ù$ ]¸!ÈÔTÙ*¨=ÀÈnÔ]ñÐð˜zõ ð0  ØØð *.Ø.2Ø,0Ø59Ø6:Ø(,Ø-1Ø!%ñ]
à—<‘< $Ñ&ð]
ð Ÿ™ tÑ+ð]
ð —l‘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¬«      | _        | j                  «        y )NFro   )
r"   r#   rÌ   rÁ   r   rs   Úhidden_sizerØ   Úlm_headrà   )r$   r¨   r%   s     €r&   r#   zXGLMForCausalLM.__init__ò  sH   ø€ Ü‰Ñ˜Ô Ü˜vÓ&ˆŒ
Ü—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒð 	�‰Õr'   Nr(   r{   rZ   rº   r»   rz   râ   Úlabelsr¼   Úlogits_to_keepr|   r}   c                 ó¸  —  | j                   d||||||||	dœ|¤Ž}|j                  }t        |
t        «      rt	        |
 d«      n|
}| j                  |dd…|dd…f   «      }d}|�=| j                  ||| 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»   rz   râ   r¼   N)rØ   rÓ   )ÚlossÚlogitsrz   rx   rÏ   rÐ   © )rÁ   rä   r‚   r0   Úsliceró   Úloss_functionr¨   rØ   rÓ   r   rz   rx   rÏ   rÐ   )r$   r(   r{   rZ   rº   r»   rz   râ   rô   r¼   rõ   r|   Úoutputsrx   Úslice_indicesrø   r÷   s                    r&   r*   zXGLMForCausalLM.forwardú  sø   € ðF >H¸T¿Z¹Zð 
>
ØØ)Ø%Ø"7Ø#9Ø+Ø'Øñ
>
ð ñ
>
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ×%Ñ%ØØØŸ;™;×1Ñ1Ø!Ÿ[™[×5Ñ5ð	 &ó ˆDô 1ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø$×5Ñ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ð   è  sI  ø„ ð  ÐØ*Ð,GÐHÐôð  ØØð *.Ø.2Ø,0Ø59Ø6:Ø(,Ø-1Ø&*Ø!%Ø-.ñA
à—<‘< $Ñ&ðA
ð Ÿ™ tÑ+ðA
ð —l‘l TÑ)ð	A
ð
  %Ÿ|™|¨dÑ2ðA
ð !&§¡¨tÑ 3ðA
ð  ™ðA
ð —|‘| dÑ*ðA
ð —‘˜tÑ#ðA
ð ˜$‘;ðA
ð ˜eŸl™lÑ*ðA
ð Ð+Ñ,ðA
ð 
ˆu�|‰|Ñ	Ð@Ñ	@ò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Ý )ß JÝ 9ß lÝ -Ý &ß @Ñ @Ý 7ß EÝ *ð 
ˆ×	Ñ	˜HÓ	%€ô
=˜bŸl™lô 
=ô1w¨¯	©	ô 1wôhL2�B—I‘Iô L2ô^ZÐ1ô Zðz ô4˜/ó 4ó ð4ð ô
Ð#ó 
ó ð
ñD ðôôP
Ð)¨?ó P
óðP
òf B�r'   