§
    ‚ŠtjqW  ã                   ó|  — d Z ddlmZ ddlmZ ddlZddlmc mZ	 ddlm
Z
mZmZ ddl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mZ ddlmZmZ ddl m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3  e,j4        e5¦  «        Z6d„ Z7 G d„ dej8        ¦  «        Z9 G d„ dej:        ¦  «        Z;d„ Z<d>d„Z= G d„ dej:        ¦  «        Z>dej        d e?d!ej        fd"„Z@	 d?d$ej:        d%ej        d&ej        d'ej        d(ej        dz  d)eAd*eAd+e'e)         fd,„ZB G d-„ d.ej:        ¦  «        ZC G d/„ d0e¦  «        ZDe* G d1„ d2e%¦  «        ¦   «         ZEe* G d3„ d4eE¦  «        ¦   «         ZF G d5„ d6eEe¦  «        ZG G d7„ d8eeE¦  «        ZH G d9„ d:eeE¦  «        ZI G d;„ d<eeE¦  «        ZJg d=¢ZKdS )@zPyTorch Nemotron model.é    )ÚCallable)ÚOptionalN)ÚSizeÚTensorÚnné   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_mask)ÚGenericForQuestionAnsweringÚ GenericForSequenceClassificationÚGenericForTokenClassificationÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputsé   )ÚNemotronConfigc                 ó    — t          j        ¦   «         s|S t          j        | ¦  «        }t           j        j                             || |¦  «        S ©N)ÚtorchÚis_autocast_enabledÚget_autocast_dtypeÚampÚautocast_modeÚ_cast)Údevice_typeÚargsÚtarget_dtypes      úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/nemotron/modeling_nemotron.pyÚ_cast_if_autocast_enabledr/   6   sF   € ÝÔ$Ñ&Ô&ð NØˆåÔ/°Ñ<Ô<ˆÝŒyÔ&×,Ò,¨T°;ÀÑMÔMÐMó    c            	       ód   ‡ — e Zd Z	 	 	 	 	 ddeee         z  ez  dededefˆ fd„Zd	e	d
e	fd„Z
ˆ xZS )ÚNemotronLayerNorm1Pçñhãˆµøä>TNÚnormalized_shapeÚepsÚelementwise_affineÚbiasc                 óT   •— t          ¦   «                              ||||||¦  «         d S r$   )ÚsuperÚ__init__)Úselfr4   r5   r6   r7   ÚdeviceÚdtypeÚ	__class__s          €r.   r:   zNemotronLayerNorm1P.__init__?   s0   ø€ õ 	‰Œ×ÒÐ)¨3Ð0BÀDÈ&ÐRWÑXÔXÐXÐXÐXr0   ÚinputÚreturnc                 ó  — |j         j        dk    r|j         j        nd}t          ||| j        | j        dz   | j        | j        ¦  «        }t          |j         j        d¬¦  «        5  t          j	        |Ž cd d d ¦  «         S # 1 swxY w Y   d S )NÚmpsÚcpuç      ð?F©r+   Úenabled)
r<   Útyper/   r4   Úweightr7   r5   r   ÚFÚ
layer_norm)r;   r?   r+   r,   s       r.   ÚforwardzNemotronLayerNorm1P.forwardJ   sÔ   € Ø+0¬<Ô+<ÀÒ+EÐ+E�e”lÔ'Ð'È5ˆÝ(Ø˜ Ô 5°t´{ÀSÑ7HÈ$Ì)ÐUYÔU]ñ
ô 
ˆõ ¨¬Ô(9À5ÐIÑIÔIð 	'ð 	'Ý”< Ð&ð	'ð 	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	's   Á%B Â BÂB)r3   TTNN)Ú__name__Ú
__module__Ú__qualname__ÚintÚlistr   ÚfloatÚboolr:   r   rK   Ú__classcell__©r>   s   @r.   r2   r2   >   s³   ø€ € € € € ð Ø#'ØØØð	Yð 	Yà  S¤	™/¨DÑ0ð	Yð ð	Yð !ð		Yð
 ð	Yð 	Yð 	Yð 	Yð 	Yð 	Yð'˜Vð '¨ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r0   r2   c                   óÔ   ‡ — e Zd ZU ej        ed<   ddefˆ fd„Ze	 	 	 ddedz  de	d         de
dz  ded	ef         fd
„¦   «         Z ej        ¦   «         ed„ ¦   «         ¦   «         Zˆ xZS )ÚNemotronRotaryEmbeddingÚinv_freqNÚconfigc                 ó²  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        || _        | j        j        d         | _        | j        }| j        dk    rt          | j                 } || j        |¦  «        \  }| _
        |                      d|d¬¦  «         |                      d|                     ¦   «         d¬¦  «         d S )NÚ	rope_typeÚdefaultrW   F)Ú
persistentÚoriginal_inv_freq)r9   r:   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenrX   Úrope_parametersrZ   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚclone)r;   rX   r<   Úrope_init_fnrW   r>   s        €r.   r:   z NemotronRotaryEmbedding.__init__W   sÊ   ø€ Ý‰Œ×ÒÑÔÐØ"(Ô"@ˆÔØ$*Ô$BˆÔ!àˆŒàœÔ4°[ÔAˆŒØ!%Ô!EˆØŒ>˜YÒ&Ð&Ý.¨t¬~Ô>ˆLØ+7¨<¸¼ÀVÑ+LÔ+LÑ(ˆ�$Ô(à×Ò˜Z¨¸eÐÑDÔDÐDØ×ÒÐ0°(·.².Ñ2BÔ2BÈuÐÑUÔUÐUÐUÐUr0   r<   ztorch.deviceÚseq_lenr@   ztorch.Tensorc                 óV  — | j         d         }| j                              dd¦  «        }t          | dd¦  «        p| j        | j        z  }t          ||z  ¦  «        }d}d|t          j        d|dt          j        ¬¦  «         	                    |t          j
        ¬	¦  «        |z  z  z  }||fS )
a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚpartial_rotary_factorrD   Úhead_dimNr   é   ©r=   )r<   r=   )ra   ÚgetÚgetattrÚhidden_sizeÚnum_attention_headsrO   r%   ÚarangeÚint64ÚtorQ   )	rX   r<   rg   Úbaserj   rk   ÚdimÚattention_factorrW   s	            r.   rb   z7NemotronRotaryEmbedding.compute_default_rope_parametersg   sº   € ð( Ô% lÔ3ˆØ &Ô 6× :Ò :Ð;RÐTWÑ XÔ XÐÝ˜6 :¨tÑ4Ô4Ðh¸Ô8JÈfÔNhÑ8hˆÝ�(Ð2Ñ2Ñ3Ô3ˆàÐð Ø•U”\ ! S¨!µ5´;Ð?Ñ?Ô?×BÒBÈ&ÕX]ÔXcÐBÑdÔdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r0   c                 óN  — | j         d d d …d f                              ¦   «                              |j        d         dd¦  «                             |j        ¦  «        }|d d …d d d …f                              ¦   «         }t          |j        j        t          ¦  «        r|j        j        dk    r|j        j        nd}t          |d¬¦  «        5  |                     ¦   «         |                     ¦   «         z   
                    dd¦  «        }t          j        ||fd¬	¦  «        }|                     ¦   «         | j        z  }|                     ¦   «         | j        z  }	d d d ¦  «         n# 1 swxY w Y   |                     |j        ¬
¦  «        |	                     |j        ¬
¦  «        fS )Nr   éÿÿÿÿr!   rB   rC   FrE   rl   ©rv   rm   )rW   rQ   ÚexpandÚshapert   r<   Ú
isinstancerG   Ústrr   Ú	transposer%   ÚcatÚcosrc   Úsinr=   )
r;   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedr+   ÚfreqsÚembr�   r‚   s
             r.   rK   zNemotronRotaryEmbedding.forwardˆ   s·  € ð !œM¨$°°°°4¨-Ô8×>Ò>Ñ@Ô@×GÒGÈÔHZÐ[\ÔH]Ð_aÐcdÑeÔe×hÒhÐijÔiqÑrÔrÐØ ,¨Q¨Q¨Q°°a°a°a¨ZÔ 8× >Ò >Ñ @Ô @Ðå'1°!´(´-ÅÑ'EÔ'EÐkÈ!Ì(Ì-Ð[`ÒJ`ÐJ`�a”h”m�mÐfkˆÝ¨¸UÐCÑCÔCð 	5ð 	5Ø&×,Ò,Ñ.Ô.Ð1F×1LÒ1LÑ1NÔ1NÑN×YÒYÐZ[Ð]^Ñ_Ô_ˆEÝ”)˜U E˜N°Ð3Ñ3Ô3ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCð		5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð �vŠv˜AœGˆvÑ$Ô$ c§f¢f°1´7 fÑ&;Ô&;Ð;Ð;s   ÃBE&Å&E*Å-E*r$   )NNN)rL   rM   rN   r%   r   Ú__annotations__r"   r:   Ústaticmethodr   rO   ÚtuplerQ   rb   Úno_gradr   rK   rS   rT   s   @r.   rV   rV   T   sû   ø€ € € € € € ØŒlÐÐÑðVð V˜~ð Vð Vð Vð Vð Vð Vð  ð )-Ø+/Ø"ð*ð *Ø Ñ%ð*à˜Ô(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ô	%ð	*ð *ð *ñ „\ð*ð> €U„]�_„_Øð<ð <ñ Ôñ „_ð<ð <ð <ð <ð <r0   rV   c                 óœ   — | dd| j         d         dz  …f         }| d| j         d         dz  d…f         }t          j        | |fd¬¦  «        S )z*Rotates half the hidden dims of the input..Nry   rl   rz   )r|   r%   r€   )rƒ   Úx1Úx2s      r.   Úrotate_halfr�   ™   s]   € à	
ˆ3Ð"�!”'˜"”+ Ñ"Ð"Ð"Ô	#€BØ	
ˆ3�”˜”˜qÑ Ð"Ð"Ð"Ô	#€BÝŒ9�r�c˜2�Y BÐ'Ñ'Ô'Ð'r0   c                 ó�  — |                      |¦  «        }|                      |¦  «        }|j        d         }| dd|…f         | d|d…f         }} |dd|…f         |d|d…f         }}| |z  t          | ¦  «        |z  z   }||z  t          |¦  «        |z  z   }	t          j        ||fd¬¦  «        t          j        |	|fd¬¦  «        fS )a…  Applies Rotary Position Embedding to the query and key tensors.

    Args:
        q (`torch.Tensor`): The query tensor.
        k (`torch.Tensor`): The key tensor.
        cos (`torch.Tensor`): The cosine part of the rotary embedding.
        sin (`torch.Tensor`): The sine part of the rotary embedding.
        unsqueeze_dim (`int`, *optional*, defaults to 1):
            The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
            sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
            that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
            k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
            cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
            the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
    Returns:
        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
    ry   .Nrz   )Ú	unsqueezer|   r�   r%   r€   )
ÚqÚkr�   r‚   Úunsqueeze_dimÚrot_dimÚq_passÚk_passÚq_embedÚk_embeds
             r.   Úapply_rotary_pos_embr›       sÝ   € ð$ �-Š-˜Ñ
&Ô
&€CØ
�-Š-˜Ñ
&Ô
&€CàŒi˜Œm€Gà�#�x˜�x�-Ô  ! C¨¨¨ MÔ"2€v€AØ�#�x˜�x�-Ô  ! C¨¨¨ MÔ"2€v€Aà�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�3‰w�; q™>œ>¨CÑ/Ñ0€GÝŒ9�g˜vÐ&¨BÐ/Ñ/Ô/µ´¸GÀVÐ;LÐRTÐ1UÑ1UÔ1UÐUÐUr0   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚNemotronMLPc                 ó`  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        t          j        | j        | j        |j        ¬¦  «        | _        t          j        | j        | j        |j        ¬¦  «        | _	        t          |j                 | _        d S )N©r7   )r9   r:   rX   rp   Úintermediate_sizer   ÚLinearÚmlp_biasÚup_projÚ	down_projr
   Ú
hidden_actÚact_fn©r;   rX   r>   s     €r.   r:   zNemotronMLP.__init__À   s�   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ!Ô-ˆÔØ!'Ô!9ˆÔÝ”y Ô!1°4Ô3IÐPVÔP_Ð`Ñ`Ô`ˆŒÝœ 4Ô#9¸4Ô;KÐRXÔRaÐbÑbÔbˆŒÝ˜VÔ.Ô/ˆŒˆˆr0   c                 óx   — |                       |                      |                      |¦  «        ¦  «        ¦  «        S r$   )r¤   r¦   r£   )r;   rƒ   s     r.   rK   zNemotronMLP.forwardÉ   s*   € Ø�~Š~˜dŸkšk¨$¯,ª,°q©/¬/Ñ:Ô:Ñ;Ô;Ð;r0   )rL   rM   rN   r:   rK   rS   rT   s   @r.   r�   r�   ¿   sG   ø€ € € € € ð0ð 0ð 0ð 0ð 0ð<ð <ð <ð <ð <ð <ð <r0   r�   Úhidden_statesÚn_repr@   c                 ó¸   — | j         \  }}}}|dk    r| S | dd…dd…ddd…dd…f                              |||||¦  «        } |                      |||z  ||¦  «        S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r!   N)r|   r{   Úreshape)r©   rª   ÚbatchÚnum_key_value_headsÚslenrk   s         r.   Ú	repeat_kvr°   Î   s„   € ð
 2?Ô1DÑ.€EÐ  hØ�‚z€zØÐØ! ! ! ! Q Q Q¨¨a¨a¨a°°°Ð"2Ô3×:Ò:¸5ÐBUÐW\Ð^bÐdlÑmÔm€MØ× Ò  Ð(;¸eÑ(CÀTÈ8ÑTÔTÐTr0   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t          || j        ¦  «        }t          || j        ¦  «        }	t          j        ||                     dd¦  «        ¦  «        |z  }
|�|
|z   }
t
          j                             |
dt          j        ¬¦  «         	                    |j
        ¦  «        }
t
          j                             |
|| j        ¬¦  «        }
t          j        |
|	¦  «        }|                     dd¦  «                             ¦   «         }||
fS )Nrl   r   ry   )rv   r=   )ÚpÚtrainingr!   )r°   Únum_key_value_groupsr%   Úmatmulr   r   Ú
functionalÚsoftmaxÚfloat32rt   r=   r¸   r¼   Ú
contiguous)r²   r³   r´   rµ   r¶   r·   r¸   r¹   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r.   Úeager_attention_forwardrÇ   Û   sé   € õ ˜3 Ô ;Ñ<Ô<€JÝ˜U FÔ$?Ñ@Ô@€Lå”<  z×';Ò';¸A¸qÑ'AÔ'AÑBÔBÀWÑL€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€LÝ”,˜|¨\Ñ:Ô:€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r0   c                   óÎ   ‡ — e Zd ZdZddededz  fˆ fd„Z	 	 ddej        de	ej        ej        f         dej        dz  d	e
dz  d
ee         de	ej        ej        f         fd„Zˆ xZS )ÚNemotronAttentionz=Multi-headed attention from 'Attention Is All You Need' paperNrX   Ú	layer_idxc                 óì  •— t          ¦   «                              ¦   «          || _        || _        |j        | _        |j        | _        |j        | _        |j        | _        |j	        | _	        | j        | j	        z  | _
        | j        dz  | _        |j        d         | _        d| _        t          j        | j        | j        | j        z  |j        ¬¦  «        | _        t          j        | j        | j	        | j        z  |j        ¬¦  «        | _        t          j        | j        | j	        | j        z  |j        ¬¦  «        | _        t          j        | j        | j        z  | j        |j        ¬¦  «        | _        d S )Ng      à¿rj   TrŸ   )r9   r:   rX   rÊ   Úattention_dropoutrp   rq   Ú	num_headsrk   r®   r½   r·   ra   rj   Ú	is_causalr   r¡   Úattention_biasÚq_projÚk_projÚv_projÚo_proj©r;   rX   rÊ   r>   s      €r.   r:   zNemotronAttention.__init__÷   s9  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ"ˆŒà!'Ô!9ˆÔØ!Ô-ˆÔØÔ3ˆŒØœˆŒØ#)Ô#=ˆÔ Ø$(¤N°dÔ6NÑ$NˆÔ!Ø”} dÑ*ˆŒà%+Ô%;Ð<SÔ%TˆÔ"ØˆŒå”i Ô 0°$´.À4Ä=Ñ2PÐW]ÔWlÐmÑmÔmˆŒÝ”i Ô 0°$Ô2JÈTÌ]Ñ2ZÐagÔavÐwÑwÔwˆŒÝ”i Ô 0°$Ô2JÈTÌ]Ñ2ZÐagÔavÐwÑwÔwˆŒÝ”i ¤°´Ñ >ÀÔ@PÐW]ÔWlÐmÑmÔmˆŒˆˆr0   r©   Úposition_embeddingsr¶   Úpast_key_valuesr¹   r@   c                 ó"  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }	|                      |¦  «                             |¦  «                             dd¦  «        }
|\  }}t          ||	||¦  «        \  }}	|�|                     |	|
| j	        ¦  «        \  }	}
t          j        | j        j        t          ¦  «        } || ||	|
|f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )Nry   r!   rl   r±   )r¸   r·   )r|   rk   rÐ   Úviewr   rÑ   rÒ   r›   ÚupdaterÊ   r   Úget_interfacerX   Ú_attn_implementationrÇ   r¼   rÌ   r·   r¬   rÂ   rÓ   )r;   r©   rÕ   r¶   rÖ   r¹   Úinput_shapeÚhidden_shapeÚquery_statesrÃ   rÄ   r�   r‚   Úattention_interfacerÆ   rÅ   s                   r.   rK   zNemotronAttention.forward  sÀ  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆØ—[’[ Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆà&‰ˆˆSÝ#7¸ÀjÐRUÐWZÑ#[Ô#[Ñ ˆ�jàÐ&Ø'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r0   r$   )NN)rL   rM   rN   Ú__doc__r"   rO   r:   r%   r   r‹   r   r   r   rK   rS   rT   s   @r.   rÉ   rÉ   ô   sí   ø€ € € € € ØGÐGðnð n˜~ð n¸#À¹*ð nð nð nð nð nð nð2 /3Ø(,ð&)ð &)à”|ð&)ð # 5¤<°´Ð#=Ô>ð&)ð œ tÑ+ð	&)ð
  ™ð&)ð Ð+Ô,ð&)ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð&)ð &)ð &)ð &)ð &)ð &)ð &)ð &)r0   rÉ   c                   óÂ   ‡ — e Zd Zdedefˆ fd„Z	 	 	 	 	 ddej        dej        dz  dej        dz  d	e	dz  d
e
dz  deej        ej        f         dz  dej        fd„Zˆ xZS )ÚNemotronDecoderLayerrX   rÊ   c                 ó4  •— t          ¦   «                              ¦   «          |j        | _        t          ||¬¦  «        | _        t          |¦  «        | _        t          |j        |j        ¬¦  «        | _	        t          |j        |j        ¬¦  «        | _
        d S )N)rX   rÊ   ©r5   )r9   r:   rp   rÉ   Ú	self_attnr�   Úmlpr2   Únorm_epsÚinput_layernormÚpost_attention_layernormrÔ   s      €r.   r:   zNemotronDecoderLayer.__init__6  sƒ   ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔå*°&ÀIÐNÑNÔNˆŒå˜vÑ&Ô&ˆŒÝ2°6Ô3EÈ6Ì?Ð[Ñ[Ô[ˆÔÝ(;¸FÔ<NÐTZÔTcÐ(dÑ(dÔ(dˆÔ%Ð%Ð%r0   NFr©   r¶   r„   rÖ   Ú	use_cacherÕ   r@   c                 óÜ   — |}|                       |¦  «        }|                      ||||||¬¦  «        \  }}	||z   }|}|                      |¦  «        }|                      |¦  «        }||z   }|S )N)r©   r¶   r„   rÖ   rê   rÕ   )rè   rå   ré   ræ   )
r;   r©   r¶   r„   rÖ   rê   rÕ   r¹   ÚresidualÚ_s
             r.   rK   zNemotronDecoderLayer.forward@  s”   € ð !ˆà×,Ò,¨]Ñ;Ô;ˆð  Ÿ>š>Ø'Ø)Ø%Ø+ØØ 3ð *ñ 
ô 
Ñˆ�qð ! =Ñ0ˆð !ˆØ×5Ò5°mÑDÔDˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆàÐr0   )NNNFN)rL   rM   rN   r"   rO   r:   r%   r   Ú
LongTensorr   rR   r‹   rK   rS   rT   s   @r.   râ   râ   5  sï   ø€ € € € € ðe˜~ð e¸#ð eð eð eð eð eð eð /3Ø04Ø(,Ø!&ØHLð ð  à”|ð ð œ tÑ+ð ð Ô&¨Ñ-ð	 ð
  ™ð ð ˜$‘;ð ð # 5¤<°´Ð#=Ô>ÀÑEð ð 
Œð ð  ð  ð  ð  ð  ð  ð  r0   râ   c                   ó†   ‡ — e Zd ZU eed<   dZdZdgZdgZdZ	dZ
dZdZdZeedœZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚNemotronPreTrainedModelrX   ÚmodelTrâ   rÖ   )r©   Ú
attentionsc                 óÜ   •— t          ¦   «                              |¦  «         t          |t          ¦  «        r4t	          j        |j        ¦  «         t	          j        |j        ¦  «         d S d S r$   )	r9   Ú_init_weightsr}   r2   ÚinitÚones_rH   Úzeros_r7   )r;   r²   r>   s     €r.   rô   z%NemotronPreTrainedModel._init_weightsu  sb   ø€ å‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ1Ñ2Ô2ð 	%ÝŒJ�v”}Ñ%Ô%Ð%ÝŒK˜œÑ$Ô$Ð$Ð$Ð$ð	%ð 	%r0   )rL   rM   rN   r"   r‰   Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_attention_backendÚ_can_compile_fullgraphrâ   rÉ   Ú_can_record_outputsr%   rŒ   rô   rS   rT   s   @r.   rð   rð   c  s¨   ø€ € € € € € àÐÐÑØÐØ&*Ð#Ø/Ð0ÐØ#4Ð"5ÐØÐØ€NØÐØ"&Ðà!Ðà-Ø'ðð Ðð
 €U„]�_„_ð%ð %ð %ð %ñ „_ð%ð %ð %ð %ð %r0   rð   c                   óæ   ‡ — e Zd Z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dz  d	e	j        dz  d
edz  dee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚNemotronModelz¡
    Transformer decoder consisting of *config.num_hidden_layers* layers. Each layer is a [`NemotronDecoderLayer`]

    Args:
        config: NemotronConfig
    rX   c                 óÞ  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        t          j        ‰j        ‰j        | j        ¦  «        | _        t          j	        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          ‰j        ‰j        ¬¦  «        | _        t!          ‰¬¦  «        | _        d| _        |                      ¦   «          d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS © )râ   )Ú.0rÊ   rX   s     €r.   ú
<listcomp>z*NemotronModel.__init__.<locals>.<listcomp>�  s$   ø€ ÐfÐfÐf¸Õ! &¨)Ñ4Ô4ÐfÐfÐfr0   rä   ©rX   F)r9   r:   Úpad_token_idÚpadding_idxÚ
vocab_sizer   Ú	Embeddingrp   Úembed_tokensÚ
ModuleListÚrangeÚnum_hidden_layersÚlayersr2   rç   ÚnormrV   Ú
rotary_embÚgradient_checkpointingÚ	post_initr§   s    `€r.   r:   zNemotronModel.__init__†  sÓ   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø!Ô.ˆÔØ Ô+ˆŒåœL¨Ô):¸FÔ<NÐPTÔP`ÑaÔaˆÔÝ”mØfÐfÐfÐfÅeÈFÔLdÑFeÔFeÐfÑfÔfñ
ô 
ˆŒõ (¨Ô(:ÀÄÐPÑPÔPˆŒ	Ý1¸Ð@Ñ@Ô@ˆŒØ&+ˆÔ#ð 	�ŠÑÔÐÐÐr0   NÚ	input_idsr¶   r„   rÖ   Úinputs_embedsrê   r¹   r@   c           
      ó$  — |d u |d uz  rt          d¦  «        ‚|r|€t          | j        ¬¦  «        }|€|                      |¦  «        }|€V|�|                     ¦   «         nd}t          j        |j        d         |j        ¬¦  «        |z   }| 	                    d¦  «        }t          | j        ||||¬¦  «        }	|}
|                      |
|¬¦  «        }| j        D ]} ||
f|	||||dœ|¤Ž}
Œ|                      |
¦  «        }
t          |
|¬	¦  «        S )
Nz:You must specify exactly one of input_ids or inputs_embedsr	  r   r!   )r<   )rX   r  r¶   rÖ   r„   )r„   )r¶   r„   rÖ   rê   rÕ   )Úlast_hidden_staterÖ   )Ú
ValueErrorr   rX   r  Úget_seq_lengthr%   rr   r|   r<   r’   r   r  r  r  r   )r;   r  r¶   r„   rÖ   r  rê   r¹   Úpast_seen_tokensÚcausal_maskr©   rÕ   Údecoder_layers                r.   rK   zNemotronModel.forward–  sz  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOàÐ Ø ×-Ò-¨iÑ8Ô8ˆMàÐØCRÐC^˜×=Ò=Ñ?Ô?Ð?ÐdeÐÝ œ<¨Ô(;¸AÔ(>À}ÔG[Ð\Ñ\Ô\Ð_oÑoˆLØ'×1Ò1°!Ñ4Ô4ˆLå(Ø”;Ø'Ø)Ø+Ø%ð
ñ 
ô 
ˆð &ˆØ"Ÿošo¨mÈ,˜oÑWÔWÐà!œ[ð 		ð 		ˆMØ)˜MØðà*Ø)Ø /Ø#Ø$7ðð ð ðð ˆMˆMð Ÿ	š	 -Ñ0Ô0ˆå&Ø+Ø+ð
ñ 
ô 
ð 	
r0   )NNNNNN)rL   rM   rN   rà   r"   r:   r   r    r   r%   rî   r   r   ÚFloatTensorrR   r   r   r   rK   rS   rT   s   @r.   r  r  }  s  ø€ € € € € ðð ð˜~ð ð ð ð ð ð ð   ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ð3
ð 3
àÔ# dÑ*ð3
ð œ tÑ+ð3
ð Ô&¨Ñ-ð	3
ð
  ™ð3
ð Ô(¨4Ñ/ð3
ð ˜$‘;ð3
ð Ð+Ô,ð3
ð 
!ð3
ð 3
ð 3
ñ „^ñ „_ñ  Ôð3
ð 3
ð 3
ð 3
ð 3
r0   r  c                   ó   ‡ — e Zd ZddiZˆ fd„Zee	 	 	 	 	 	 	 	 d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fd„¦   «         ¦   «         Zˆ xZS )ÚNemotronForCausalLMzlm_head.weightzmodel.embed_tokens.weightc                 óþ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        t          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S )NFrŸ   )
r9   r:   r  rñ   r  r   r¡   rp   Úlm_headr  r§   s     €r.   r:   zNemotronForCausalLM.__init__Ó  sj   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý" 6Ñ*Ô*ˆŒ
Ø Ô+ˆŒÝ”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒð 	�ŠÑÔÐÐÐr0   Nr   r  r¶   r„   rÖ   r  Úlabelsrê   Úlogits_to_keepr¹   r@   c	           
      óD  —  | j         d||||||dœ|	¤Ž}
|
j        }t          |t          ¦  «        rt	          | d¦  «        n|}|                      |dd…|dd…f         ¦  «        }d}|� | j        ||| j        fi |	¤Ž}t          |||
j	        |
j
        |
j        ¬¦  «        S )ap  
        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]`.

        Example:

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

        >>> model = NemotronForCausalLM.from_pretrained("thhaus/nemotron3-8b")
        >>> tokenizer = AutoTokenizer.from_pretrained("thhaus/nemotron3-8b")

        >>> prompt = "Hey, are you conscious? Can you talk to me?"
        >>> inputs = tokenizer(prompt, return_tensors="pt")

        >>> # Generate
        >>> generate_ids = model.generate(inputs.input_ids, max_length=30)
        >>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
        ```)r  r¶   r„   rÖ   r  rê   N)ÚlossÚlogitsrÖ   r©   rò   r  )rñ   r  r}   rO   Úslicer$  Úloss_functionr  r   rÖ   r©   rò   )r;   r  r¶   r„   rÖ   r  r%  rê   r&  r¹   Úoutputsr©   Úslice_indicesr)  r(  s                  r.   rK   zNemotronForCausalLM.forwardÜ  sî   € ðH ,6¨4¬:ð ,
ØØ)Ø%Ø+Ø'Øð,
ð ,
ð ð,
ð ,
ˆð  Ô1ˆÝ8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ%�4Ô% f¨f°d´oÐPÐPÈÐPÐPˆDå%ØØØ#Ô3Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r0   )NNNNNNNr   )rL   rM   rN   Ú_tied_weights_keysr:   r   r   r%   rî   r   r   r   rR   rO   r   r   r   rK   rS   rT   s   @r.   r"  r"  Ð  s,  ø€ € € € € Ø*Ð,GÐHÐðð ð ð ð ð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ð:
ð :
àÔ# dÑ*ð:
ð œ tÑ+ð:
ð Ô&¨Ñ-ð	:
ð
  ™ð:
ð Ô(¨4Ñ/ð:
ð Ô  4Ñ'ð:
ð ˜$‘;ð:
ð ˜eœlÑ*ð:
ð Ð+Ô,ð:
ð 
 ð:
ð :
ð :
ñ „^ñ Ôð:
ð :
ð :
ð :
ð :
r0   r"  c                   ó   — e Zd ZdS )Ú!NemotronForSequenceClassificationN©rL   rM   rN   r  r0   r.   r0  r0    ó   € € € € € € € r0   r0  c                   ó   — e Zd ZdZdS )ÚNemotronForQuestionAnsweringÚtransformerN)rL   rM   rN   rø   r  r0   r.   r4  r4    s   € € € € € Ø%ÐÐÐr0   r4  c                   ó   — e Zd ZdS )ÚNemotronForTokenClassificationNr1  r  r0   r.   r7  r7  "  r2  r0   r7  )r4  r"  r  rð   r0  r7  )r!   )r±   )Lrà   Úcollections.abcr   Útypingr   r%   Útorch.nn.functionalr   r¿   rI   r   r   Ú r	   rõ   Úactivationsr
   Úcache_utilsr   r   Ú
generationr   Úmasking_utilsr   Úmodeling_layersr   r   r   r   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr    Úconfiguration_nemotronr"   Ú
get_loggerrL   Úloggerr/   Ú	LayerNormr2   ÚModulerV   r�   r›   r�   rO   r°   rQ   rÇ   rÉ   râ   rð   r  r"  r0  r4  r7  Ú__all__r  r0   r.   ú<module>rN     s  ðð Ð à $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð GÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð 
ˆÔ	˜HÑ	%Ô	%€ðNð Nð Nð'ð 'ð 'ð 'ð '˜"œ,ñ 'ô 'ð 'ð,A<ð A<ð A<ð A<ð A<˜bœiñ A<ô A<ð A<ðJ(ð (ð (ðVð Vð Vð Vð><ð <ð <ð <ð <�"”)ñ <ô <ð <ð	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð( ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð2>)ð >)ð >)ð >)ð >)˜œ	ñ >)ô >)ð >)ðB+ð +ð +ð +ð +Ð5ñ +ô +ð +ð\ ð%ð %ð %ð %ð %˜oñ %ô %ñ „ð%ð2 ðN
ð N
ð N
ð N
ð N
Ð+ñ N
ô N
ñ „ðN
ðdH
ð H
ð H
ð H
ð H
Ð1°?ñ H
ô H
ð H
ðV hÐ gÐ gÐ gÐ gÐ(HÐJaÑ gÔ gÐ gð&ð &ð &ð &ð &Ð#>Ð@Wñ &ô &ð &ð bÐ aÐ aÐ aÐ aÐ%BÐD[Ñ aÔ aÐ aðð ð €€€r0   