ó
    ˆŽ¡j™�  ã            &       óÀ  • S r SSKrSSKJr  SSKrSSKJs  Jr  SSKJr  SSK	J
r  SSKJr  SSKJrJr  SS	KJr  SS
KJrJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJrJ r J!r!  SSK"J#r#  \!RH                  " \%5      r&S\RN                  S\(4S jr)S r*S r+S r, " S S\R                  RZ                  5      r.\" SS5        S]S\RN                  S\RN                  S\R^                  S\R^                  S-  S \0S-  4
S! jj5       r1\" S"S5        S]S\RN                  S\R^                  S\R^                  S-  S \0S-  4S# jj5       r2\" S$S%5      SS&\3" S'5      4S(S)SS*SSSSS+4S,\RN                  S-\RN                  S.\RN                  S-  S/\RN                  S0\RN                  S1\RN                  S2\(S3\RN                  S-  S4\4\3\34   S5\5S \0S6\RN                  S-  S7\3S8\RN                  S-  S9\RN                  S-  S:\(S-  S;\(S<\54$S= jj5       r6\" S>S%5          S^S?\RN                  S\RN                  S@\RN                  S0\RN                  SA\RN                  SB\RN                  S1\RN                  S-  S/\RN                  S-  SC\5SD\RN                  S-  4SE jj5       r7\" SFS%5      SSSS(S&\3" S'5      4S(4S\RN                  S@\RN                  S0\RN                  SA\RN                  SB\RN                  S2\(S1\RN                  S-  S/\RN                  S-  S3\RN                  S-  SC\5S4\4\3\34   S5\54SG jj5       r8\" \2\1\6\7\8/5       " SH SI\RZ                  5      5       r9 " SJ SK\RZ                  5      r: " SL SM\5      r;\  " SN SO\5      5       r<\ " SPSQ9\ " SR SS\5      5       5       r=\ " STSQ9\ " SU SV\5      5       5       r>\  " SW SX\<5      5       r?\ " SYSQ9 " SZ S[\<\5      5       r@/ S\QrAg)_zPyTorch MAMBA2 model.é    N)Ú	dataclass)Únné   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Ú&use_kernel_func_from_hub_with_fallbackÚuse_kernelized_func)Úforce_accelerate_hooks)Úcreate_recurrent_attention_mask)ÚGradientCheckpointingLayer)ÚPreTrainedModel)ÚModelOutputÚauto_docstringÚloggingé   )ÚMamba2ConfigÚinput_tensorÚpad_sizec                 óª   • [        U R                  5      S:X  a
  SSSSSUSS4OSSSUSS4n[        R                  R                  R                  XSSS9$ )zv
Padding x tensor with `pad_size` on the seq_len dim (dim=1)

Assumes that we only have tensors of either size 4 or 3
é   r   Úconstant)ÚmodeÚvalue)ÚlenÚshapeÚtorchr   Ú
functionalÚpad)r   r   Ú	pad_shapes      Ú¸C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/mamba2/modeling_mamba2.pyÚpad_tensor_by_sizer$   *   sd   € ô 47°|×7IÑ7IÓ3JÈaÓ3O��A�q˜!˜Q ¨!¨QÑ/ÐVWÐYZÐ\]Ð_gÐijÐlmÐUn€Iä�8‰8×Ñ×"Ñ" <ÀÐSTÐ"ÐUÐUó    c                 ó  • [        X5      n [        U R                  5      S:X  a-  U R                  U R                  S   SX R                  S   5      $ U R                  U R                  S   SX R                  S   U R                  S   5      $ )z°
Padding input_tensor with `pad_size` on the seq_len dim (dim=1) and
simultaneously splitting it into chunk sequences.

Assumes that we only have tensors of either size 4 or 3
r   r   éÿÿÿÿé   )r$   r   r   Úreshape)r   r   Ú
chunk_sizes      r#   Úreshape_into_chunksr+   5   s�   € ô & lÓ=€Lä
ˆ<×ÑÓ !Ó#à×#Ñ# L×$6Ñ$6°qÑ$9¸2¸z×K]ÑK]Ð^_ÑK`ÓaÐað ×#Ñ#Ø×Ñ˜qÑ! 2 z×3EÑ3EÀaÑ3HÈ,×J\ÑJ\Ð]^ÑJ_ó
ð 	
r%   c           	      ó
  • U R                  S5      nU S   R                  " / U R                  5       QUP76 n [        R                  " [        R                  " XU R
                  [        R                  S9SS9nU R                  U) S5      n [        R                  " U SS9n[        R                  " [        R                  " XU R
                  [        R                  S9SS9nUR                  U) [        R                  * 5      nU$ )zg
More stable segment sum calculation. Uses cumulative sums and masking instead of direct subtractions.
r'   ©.N©ÚdeviceÚdtype)Údiagonalr   éþÿÿÿ©Údim)
ÚsizeÚexpandr   ÚtrilÚonesr/   ÚboolÚmasked_fillÚcumsumÚinf)r   r*   ÚmaskÚtensor_segsums       r#   Úsegment_sumr?   I   sØ   € ð ×"Ñ" 2Ó&€Jð   	Ñ*×1Ò1ÐS°<×3DÑ3DÓ3FÐSÈ
ÒS€Lä�:Š:”e—j’j À×@SÑ@SÔ[`×[eÑ[eÑfÐqsÑt€DØ×+Ñ+¨T¨E°1Ó5€Lä—L’L °2Ñ6€Mô �:Š:”e—j’j À×@SÑ@SÔ[`×[eÑ[eÑfÐqrÑs€DØ!×-Ñ-¨t¨e´e·i±i°ZÓ@€MØÐr%   c                 ó^   • Ub)  U R                   nXSS2SS2S4   -  R                  U5      n U $ )ze
Tunes out the hidden states for padding tokens, see https://github.com/state-spaces/mamba/issues/66
N)r0   Úto)Úhidden_statesÚattention_maskr0   s      r#   Úapply_mask_to_padding_statesrD   ]   s9   € ð
 Ñ!Ø×#Ñ#ˆØ&ºº1¸d¸
Ñ)CÑC×GÑGÈÓNˆàÐr%   c                   ó6   ^ • \ rS rSrSU 4S jjrSS jrSrU =r$ )ÚMambaRMSNormGatedéi   c                 óŒ   >• [         TU ]  5         [        R                  " [        R
                  " U5      5      U l        X l        g ©N©ÚsuperÚ__init__r   Ú	Parameterr   r8   ÚweightÚvariance_epsilon©ÚselfÚhidden_sizeÚepsÚ	__class__s      €r#   rL   ÚMambaRMSNormGated.__init__j   s-   ø€ Ü‰ÑÔÜ—l’l¤5§:¢:¨kÓ#:Ó;ˆŒØ #Õr%   c                 ó   • UR                   nUR                  [        R                  5      nUb?  U[        R
                  R                  UR                  [        R                  5      5      -  nUR                  S5      R                  SSS9nU[        R                  " X@R                  -   5      -  nU R                  UR                  U5      -  $ ©Nr(   r'   T)Úkeepdim)r0   rA   r   Úfloat32r   r    ÚsiluÚpowÚmeanÚrsqrtrO   rN   )rQ   rB   ÚgateÚinput_dtypeÚvariances        r#   ÚforwardÚMambaRMSNormGated.forwardo   s£   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆàÑØ)¬B¯M©M×,>Ñ,>¸t¿w¹wÄuÇ}Á}Ó?UÓ,VÑVˆMØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ð>ˆØ%¬¯ª°H×?TÑ?TÑ4TÓ(UÑUˆà�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r%   ©rO   rN   ©ç�íµ ÷Æ°>rI   ©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rL   ra   Ú__static_attributes__Ú__classcell__©rT   s   @r#   rF   rF   i   s   ø† ÷$÷
	;ò 	;r%   rF   Úcausal_conv1d_updateÚcausal_conv1drB   Ú
conv_staterN   ÚbiasÚ
activationc                 óœ  • U R                   u  pVnUR                   S   n[        R                  " X/SS9R                  UR                  5      n	UR                  U	S S 2S S 2U* S 24   5        [        R                  " X’R                  S5      USUS9n
U
S S 2S S 2U* S 24   n
Ub  [        U   " U
5      n
U
R                  U R                  5      $ )Nr'   r3   r   r   )ÚpaddingÚgroups)
r   r   ÚcatrA   r0   Úcopy_ÚFÚconv1dÚ	unsqueezer   )rB   rp   rN   rq   rr   Ú_rR   Úseq_lenÚ	state_lenÚhidden_states_newÚouts              r#   rn   rn   {   sÅ   € ð ,×1Ñ1Ñ€A�GØ× Ñ  Ñ$€IäŸ	š	 :Ð"=À2ÑF×IÑIÈ&Ï,É,ÓWÐØ×ÑÐ&¢qª!¨i¨Z©[Ð'8Ñ9Ô:Ü
�(Š(Ð$×&6Ñ&6°qÓ&9¸4ÈÐS^Ñ
_€CØ
Ša’�W�H‘IˆoÑ
€CØÑÜ�ZÒ  Ó%ˆØ�6‰6�-×%Ñ%Ó&Ð&r%   Úcausal_conv1d_fnc                 ó6  • U R                   u  pVnUR                   S   S-
  n[        R                  " U R                  UR                  5      UR                  S5      UUUS9S S 2S S 2S U24   n	Ub  [        U   " U	5      n	U	R                  U R                  5      $ )Nr'   r   )rN   rq   rt   ru   )r   rx   ry   rA   r0   rz   r   )
rB   rN   rq   rr   Úkwargsr{   rR   r|   rt   r   s
             r#   r€   r€   �   sž   € ð ,×1Ñ1Ñ€A�GØ�l‰l˜2Ñ Ñ"€Gä
�(Š(Ø×Ñ˜Ÿ™Ó&Ø×Ñ Ó"ØØØñò ŠˆHˆWˆH€nñ€Cð ÑÜ�ZÒ  Ó%ˆØ�6‰6�-×%Ñ%Ó&Ð&r%   Ú mamba_split_conv1d_scan_combinedÚ	mamba_ssmg        r<   FrZ   re   TÚzxbcdtÚconv1d_weightÚconv1d_biasÚdt_biasÚAÚDr*   Úinitial_statesÚdt_limitÚreturn_final_statesÚrmsnorm_weightÚrmsnorm_epsÚoutproj_weightÚoutproj_biasÚheaddimÚngroupsÚnorm_before_gatec                 ó   • g rI   © )r…   r†   r‡   rˆ   r‰   rŠ   r*   r‹   rŒ   r�   rr   rŽ   r�   r�   r‘   r’   r“   r”   r‚   s                      r#   Ú!mamba2_split_conv1d_scan_combinedr—   ¦   s   € ð, r%   Úselective_state_updateÚstateÚdtÚBÚCÚdt_softplusÚzc
                 óä  • UR                   u  p¼nUR                   S   nUR                   S   nUb  X'R                  UR                  5      -   nU(       a  [        R                  " U5      nUS   n[
        R                  " UR                  5       UR                  5       -  5      R                  U R                  S9nUR                  X¾SU5      nUR                  X¾XÎ-  U5      R                  5       nUR                  X¼SU5      nX$-  nUUS   -  R                  U R                  S9nU U-  U-   nU R                  UR                  U R                  5      5        UR                  X¾SU5      nUR                  X¾XÎ-  U5      R                  5       nUR                  X¼U5      nUR                  UR                  UR                  S9nUR                  X¼-  Xß5      nUR                  X¼-  US5      n[
        R                  " UU5      nUR                  X¼U5      nUb   UX-  -   R                  UR                  5      nU	b  U[        R                  " U	5      -  nUR                  UR                  5      $ )Nr   r'   r-   )r/   r.   )r   rA   r0   rx   Úsoftplusr   ÚexpÚfloatr/   r)   r6   Ú
contiguousrw   ÚviewÚbmmrZ   )r™   rB   rš   r‰   r›   rœ   rŠ   rˆ   r�   rž   r‚   Ú
batch_sizeÚ	num_headsÚhead_dimÚ
num_groupsÚ
state_sizeÚdAÚdBÚdBxÚ
ssm_statesÚssm_states_reshapedÚ
C_reshapedr   s                          r#   Úmamba2_selective_state_updater±   ¿   s"  € ð '4×&9Ñ&9Ñ#€J˜8Ø—‘˜‘€JØ—‘˜‘€JàÑØ—*‘*˜RŸX™XÓ&Ñ&ˆÞÜ�ZŠZ˜‹^ˆØ	ˆI‰€Bô 
�Š�2—8‘8“: §¡£	Ñ)Ó	*×	-Ñ	-°U·\±\Ð	-Ð	B€Bð 	
�	‰	�*¨!¨ZÓ8€AØ	�‰�¨Ñ)@À*ÓM×XÑXÓZ€AØ	�	‰	�*¨¨JÓ7€AØ	‰€Bð �˜iÑ(Ñ(×
,Ñ
,°E·L±LÐ
,Ð
A€Cð ˜‘˜cÑ!€JØ	‡K�K�
—‘˜eŸk™kÓ*Ô+ð 	
�	‰	�*¨!¨ZÓ8€AØ	�‰�¨Ñ)@À*ÓM×XÑXÓZ€AØ	�	‰	�*¨Ó4€Að —‘ a§h¡h°a·g±g�Ð>€JØ$Ÿ/™/¨*Ñ*@À(ÓWÐØ—‘˜
Ñ.°
¸AÓ>€JÜ
�)Š)Ð'¨Ó
4€CØ
�(‰(�:¨(Ó
3€Cð 	�}Ø�]Ñ&Ñ&×*Ñ*¨3¯9©9Ó5ˆà�}Ø”A—F’F˜1“I‰oˆà�6‰6�-×%Ñ%Ó&Ð&r%   Úmamba_chunk_scan_combinedc                 óü  • U R                   u  pÞnnUR                   S   nUb  XR                  UR                  5      -   nU	(       a  [        R                  " U5      n[
        R                  " XS   U
S   S9nU R                  5       n UR                  5       R                  UU-  SUS9nUR                  5       R                  UU-  SUS9nX^U-  -
  U-  nS nUb  US   [        U U5      -  nXS   R                  5       -  n UR                  U R                  5      UR                  5       -  nXX44 Vs/ s H  n[        UUU5      PM     snu  pp4UR                  SSSS5      n[
        R                  " USS	9n[
        R                  " [        U5      5      nUS S 2S S 2S S 2S S S 2S S 24   US S 2S S 2S S S 2S S 2S S 24   -  R                  SS	9nUS   UR                  SSSS
S5      S   -  R                  SS	9nUS   U S S 2S S 2S 4   -  R                  SS	9n[
        R                  " US S 2S S 2S S 2SS 24   U-
  5      nUUR                  SSSS5      S   -  nUSS S S 24   U S   -  R                  SS	9nUb+  US S 2S 4   R                  UR                  UR                   S9O[
        R"                  " US S 2S S24   5      n[
        R$                  " UU/SS	9n[
        R                  " [        [        R&                  " US S 2S S 2S S 2S4   S5      5      5      R)                  SS5      nUS   US S 2S S 2S S4   -  R                  SS	9nUS S 2S S24   US S 2S4   n n[
        R                  " U5      n!USS S S 24   US S 2S S 2S S4   -  n"U"R                  S5      U!R                  SSSS5      S   -  n#UU#-   n$U$R+                  USUU5      n$Ub  U$U-   n$US:”  a  U$S S 2S U24   n$U(       a  U$U 4$ U$$ s  snf )Nr(   r   r   )ÚminÚmax)r4   Úoutput_sizer-   r   r'   r3   r   r2   .)r0   r/   )r   r   ).NN)r   rA   r0   rx   r    r   Úclampr¢   Úrepeat_interleaver$   r+   Úpermuter;   r¡   r?   Úsumr/   Ú
zeros_likerv   r!   Ú	transposer)   )%rB   rš   r‰   r›   rœ   r*   rŠ   rˆ   r‹   r�   rŒ   r�   r‚   r¦   Úsequence_lengthr§   r¨   r©   r   Ú
D_residualÚtensorÚA_cumsumÚLÚGÚMÚY_diagÚdecay_statesÚB_decayÚstatesÚprevious_statesÚdecay_chunkÚ
new_statesÚfinal_stateÚstate_decay_outÚC_times_statesÚY_offÚoutputs%                                        r#   Úmamba2_chunk_scanrÐ   ý   s=  € ð  8E×7JÑ7JÑ4€J ¨HØ—‘˜‘€JàÑØ—*‘*˜RŸX™XÓ&Ñ&ˆÞÜ�ZŠZ˜‹^ˆÜ	�Š�R a™[¨h°q©kÑ	:€Bà!×'Ñ'Ó)€MØ	�‰‹	×#Ñ# I°Ñ$;ÀÐPYÐ#ÐZ€AØ	�‰‹	×#Ñ# I°Ñ$;ÀÐPYÐ#ÐZ€Aà¨zÑ9Ñ9¸ZÑG€HØ€JØ�}Ø�y‘\Ô$6°}ÀhÓ$OÑOˆ
ð " y¡M×$7Ñ$7Ó$9Ñ9€MØ	�‰ˆ]× Ñ Ó! B§H¡H£JÑ.€Að `mÐqrÑ^vÓwÒ^vÐTZÔ1°&¸(ÀJÖOÑ^vÑwÑ€M�aà	�	‰	�!�Q˜˜1Ó€AÜ�|Š|˜A 2Ñ&€Hô 	�	Š	”+˜a“.Ó!€Að 
Š1Ša’�Dš!šQÐÑ	 !¢A¢q¨$²²1²aÐ$7Ñ"8Ñ	8×=Ñ=À"Ð=ÐE€Að 
ˆ9‰˜Ÿ	™	 ! Q¨¨1¨aÓ0°Ñ;Ñ	;×@Ñ@ÀRÐ@ÐH€Að �	‰l˜]ª1ªa°¨:Ñ6Ñ6×;Ñ;ÀÐ;ÐB€Fô —9’9˜X¢aªªA¨r©s lÑ3°hÑ>Ó?€LØ�,×&Ñ& q¨"¨b°!Ó4°YÑ?Ñ?€GØ�c˜4¢�lÑ# m°IÑ&>Ñ>×CÑCÈÐCÐJ€Fð Ñ%ð 	’q˜$�wÑ×"Ñ"¨¯©¸f¿m¹mÐ"ÑLä×Ò˜f¢Q¨¨¨ U™mÓ,ð ô
 �YŠY˜¨Ð0°aÑ8€FÜ—)’)œK¬¯ª¨h²qº!ºQÀ°{Ñ.CÀVÓ(LÓMÓN×XÑXÐYZÐ\]Ó^€KØ˜oÑ.°ºº1¸dÀC¸Ñ1HÑH×MÑMÐRSÐMÐT€JØ$¢Q¨¨¨ VÑ,¨jº¸B¸Ñ.?ˆK€Fô —i’i Ó)€OØ�s˜D¢!�|‘_ vªa²°D¸#¨oÑ'>Ñ>€NØ×Ñ˜rÓ" _×%<Ñ%<¸QÀÀ1ÀaÓ%HÈÑ%SÑS€Eð �e‰^€FØ�^‰^˜J¨¨I°xÓ@€FàÑØ˜*Ñ$ˆð �!ƒ|ØšÐ+˜OÐ+Ð+Ñ,ˆæØ�{Ð"Ð"à€Mùòq xs   Ä4O9c            	       óÖ   ^ • \ rS rSrSrSS\S\S\4U 4S jjjr\	R                  " 5       S 5       r\" S5        SS
\	R                  S\S	-  S\	R                  S	-  4S jj5       rSrU =r$ )ÚMamba2Mixeri_  uo  
Compute âˆ†, A, B, C, and D the state space parameters and compute the `contextualized_states`.
A, D are input independent (see Mamba paper [1] Section 3.5.2 "Interpretation of A" for why A isn't selective)
âˆ†, B, C are input-dependent (this is a key difference between Mamba and the linear time invariant S4,
and is why Mamba is called **selective** state spaces)
ÚconfigÚ	layer_idxÚinitialize_mixer_weightsc           	      óJ  >• [         TU ]  5         UR                  U l        UR                  U l        UR                  U l        UR                  U l        [        UR                  U R                  -  5      U l
        [        UR                  5      U l        X l        UR                  U l        UR                  U l        [         UR                     U l        UR$                  U l        UR&                  U l        UR(                  U l        UR*                  U l        UR,                  U l        UR.                  U l        UR0                  U l        UR2                  U l        U R                  SU R&                  -  U R
                  -  -   U l        [6        R8                  " U R4                  U R4                  UR                  UR                  U R4                  UR                  S-
  S9U l        U R                  U R4                  -   U R                  -   n[6        R<                  " U R                  UUR>                  S9U l         [6        RB                  " [D        RF                  " U R                  5      5      U l$        [6        RB                  " [D        RF                  " U R                  5      5      U l%        [M        U R                  U R$                  S9U l'        [6        RB                  " [D        RF                  " U R                  5      5      U l(        U(       a4  U RH                  RR                  RT                  S:w  a  U RW                  5         [6        R<                  " U R                  U R                  UR>                  S9U l,        UR>                  U l        URZ                  U   U l.        g )Nr(   r   )Úin_channelsÚout_channelsrq   Úkernel_sizeru   rt   ©rq   ©rS   Úmeta)/rK   rL   r§   rR   rª   Ússm_state_sizeÚconv_kernelÚconv_kernel_sizeÚintr6   Úintermediate_sizeÚtime_step_rankrÔ   Úuse_conv_biasÚ
hidden_actrr   r   ÚactÚlayer_norm_epsilonÚn_groupsr¨   r*   Útime_step_limitÚtime_step_minÚtime_step_maxÚtime_step_floorÚconv_dimr   ÚConv1dry   ÚLinearÚuse_biasÚin_projrM   r   Úemptyrˆ   ÚA_logrF   ÚnormrŠ   r/   ÚtypeÚinit_mamba2_weightsÚout_projÚlayer_typesÚ
layer_type)rQ   rÓ   rÔ   rÕ   Úprojection_sizerT   s        €r#   rL   ÚMamba2Mixer.__init__p  s›  ø€ Ü‰ÑÔØ×)Ñ)ˆŒØ!×-Ñ-ˆÔØ$×/Ñ/ˆÔØ &× 2Ñ 2ˆÔÜ!$ V§]¡]°T×5EÑ5EÑ%EÓ!FˆÔÜ! &×"7Ñ"7Ó8ˆÔØ"ŒØ#×1Ñ1ˆÔØ ×+Ñ+ˆŒÜ˜&×+Ñ+Ñ,ˆŒà"(×";Ñ";ˆÔàŸ™ˆŒØŸ™ˆŒØ ×+Ñ+ˆŒà%×5Ñ5ˆÔØ#×1Ñ1ˆÔØ#×1Ñ1ˆÔØ%×5Ñ5ˆÔà×.Ñ.°°T·]±]Ñ1BÀT×EXÑEXÑ1XÑXˆŒÜ—i’iØŸ™ØŸ™Ø×%Ñ%Ø×*Ñ*Ø—=‘=Ø×&Ñ&¨Ñ*ñ
ˆŒð ×0Ñ0°4·=±=Ñ@À4Ç>Á>ÑQˆÜ—y’yØ×ÑØØ—‘ñ
ˆŒô —|’|¤E§K¢K°·±Ó$?Ó@ˆŒô —\’\¤%§+¢+¨d¯n©nÓ"=Ó>ˆŒ
Ü% d×&<Ñ&<À$×BYÑBYÑZˆŒ	Ü—’œeŸkšk¨$¯.©.Ó9Ó:ˆŒÞ#¨¯©×(;Ñ(;×(@Ñ(@ÀFÓ(JØ×$Ñ$Ô&äŸ	š	 $×"8Ñ"8¸$×:JÑ:JÐQW×Q`ÑQ`ÑaˆŒØŸ™ˆŒà ×,Ñ,¨YÑ7ˆ�r%   c                 óz  • [         R                  " SU R                  S-   U R                  R                  [         R
                  S9n[        R                  " U R                  [         R                  " U5      5        [        R                  " U R                  5        [         R                  " [         R                  " U R                  U R                  R                  [         R
                  S9[        R                  " U R                  5      [        R                  " U R                   5      -
  -  [        R                  " U R                   5      -   5      R#                  U R$                  S9nU[         R                  " [         R&                  " U* 5      * 5      -   n[        R                  " U R                  U5        g )Nr   r.   )r´   )r   Úaranger§   rò   r/   rY   Úinitrw   ÚlogÚones_rŠ   r¡   Úrandrˆ   Úmathrê   ré   r·   rë   Úexpm1)rQ   r‰   rš   Úinv_dts       r#   rõ   ÚMamba2Mixer.init_mamba2_weights«  s  € ä�LŠL˜˜DŸN™N¨QÑ.°t·z±z×7HÑ7HÔPU×P]ÑP]Ñ^ˆÜ�
Š
�4—:‘:œuŸyšy¨›|Ô,Ü�
Š
�4—6‘6Ôä�YŠYÜ�JŠJ�t—~‘~¨d¯l©l×.AÑ.AÌÏÉÑWÜ�xŠx˜×*Ñ*Ó+¬d¯hªh°t×7IÑ7IÓ.JÑJñLä�hŠh�t×)Ñ)Ó*ñ+ó
÷ ‰%�D×(Ñ(ˆ%Ð
)ð	 	ð ”e—i’i¤§¢¨b¨SÓ!1Ð 1Ó2Ñ2ˆÜ�
Š
�4—<‘< Õ(r%   ry   NrB   Úcache_paramsrC   c                 óx  • UR                   u  pVnUR                  nUS L=(       a    UR                  U R                  5      n	[	        X5      nU R                  U5      n
[        R                  " U R                  R                  5       5      * nUSU R                  0-  nU R                  (       aç  Ucä  [        U
U R                  R                  R                  S5      U R                  R                   U R"                  U4U R$                  U R&                  U R(                  U R*                  R                  U R*                  R,                  U R.                  R                  U R.                  R                   U R0                  U R2                  SSS.UD6nUb  U$ U
R5                  U R6                  U R8                  U R:                  /SS9u  pïnU	(       aL  UR<                  U R                     R>                  S   nUR<                  U R                     R@                  S   nURC                  SS5      nU	(       a}  US:X  aw  UR<                  U R                     RD                  (       dO  [G        UWU R                  R                  R                  S5      U R                  R                   U R(                  S	9nO‹Ub%  URI                  UU R                  U RJ                  S
9n[M        UU R                  R                  R                  S5      U R                  R                   4SU R(                  0UD6nUb  US S 2S S 2U* S 24   n[	        URC                  SS5      U5      n[        R4                  " UU R6                  U R2                  U RN                  -  U R2                  U RN                  -  /SS9u  nnnU	(       GaY  US:X  GaR  URQ                  XPR:                  U R0                  5      nURC                  SS5      RS                  SSU R0                  5      nUS S 2S S 4   RS                  SU R0                  U RN                  5      nURQ                  XPR2                  U RN                  5      nURQ                  XPR2                  U RN                  5      nU R$                  S S 2S 4   RS                  SU R0                  5      nU R"                  S S 2S 4   RS                  SU R0                  5      n[U        WUUUUUU4S USS.UD6nURQ                  USS5      nOøUS Ln[W        URQ                  XVU R:                  U R0                  5      UUURQ                  XVU R2                  U RN                  5      URQ                  XVU R2                  U RN                  5      4U R&                  U R$                  S UU R"                  SU	(       a  WOS U R                  S.UD6nU(       a   Uu  nnURY                  UU R                  S9  OUnUR[                  XVS5      nU R+                  UU5      nU R/                  UR]                  U5      5      nU$ )NrŒ   r   F)rŠ   r*   rr   rŽ   r�   r�   r‘   r’   r“   r”   r�   r'   r3   r   r(   )rr   )rß   rr   T)rž   rˆ   r�   )r*   rŠ   rž   r�   rˆ   r�   r‹   rŒ   ©rÔ   )/r   r0   Úhas_previous_staterÔ   rD   rð   r   r¡   rò   r¢   rè   Útrainingr—   ry   rN   Úsqueezerq   rˆ   rŠ   r*   rr   ró   rO   rö   r¨   rç   Úsplitrá   rì   r§   ÚlayersÚconv_statesÚrecurrent_statesr¼   Úrecord_pastrn   Úupdate_conv_staterß   r€   rÝ   r¤   r6   r±   rÐ   Úupdate_recurrent_stater)   rA   )rQ   rB   r  rC   r‚   r¦   r|   r{   r0   Úuse_precomputed_statesÚprojected_statesr‰   Úfused_kwargsÚfused_outputr^   Úhidden_states_B_Crš   rp   Úrecurrent_stater›   rœ   rŠ   rˆ   Úscan_outputÚoutput_final_stateÚscan_resultrË   Úcontextualized_statess                               r#   ra   ÚMamba2Mixer.forward»  s“  € ð "/×!4Ñ!4Ñˆ
˜QØ×#Ñ#ˆØ!-°TÐ!9×!m¸l×>]Ñ>]Ð^b×^lÑ^lÓ>mÐô 5°]ÓSˆØŸ<™<¨Ó6Ðä�YŠY�t—z‘z×'Ñ'Ó)Ó*Ð*ˆØ ¨T×-AÑ-AÐ BÑBˆØ�=�=˜\Ñ1Ü<Ø Ø—‘×"Ñ"×*Ñ*¨1Ó-Ø—‘× Ñ Ø—‘Øðð —&‘&ØŸ?™?ØŸ?™?Ø#Ÿy™y×/Ñ/Ø ŸI™I×6Ñ6Ø#Ÿ}™}×3Ñ3Ø!Ÿ]™]×/Ñ/ØŸ™ØŸ™Ø!&Ø$)ñ!ð" ñ#ˆLð* Ñ'Ø#Ð#à&6×&<Ñ&<Ø×#Ñ# T§]¡]°D·N±NÐCÈð '=ð '
Ñ#ˆ ö "Ø%×,Ñ,¨T¯^©^Ñ<×HÑHÈÑKˆJØ*×1Ñ1°$·.±.ÑA×RÑRÐSTÑUˆOð .×7Ñ7¸¸1Ó=ÐÞ! g°£l¸<×;NÑ;NÈtÏ~É~Ñ;^×;j×;jÜ 4Ø!ØØ—‘×"Ñ"×*Ñ*¨1Ó-Ø—‘× Ñ ØŸ?™?ñ!Ñð Ñ'Ø$0×$BÑ$BØ%Ø—N‘NØ%)×%:Ñ%:ð %Cð %Ð!ô !1Ø!Ø—‘×"Ñ"×*Ñ*¨1Ó-Ø—‘× Ñ ñ!ð  Ÿ?™?ð	!ð
 ñ!Ðð Ñ'Ø$5²aº¸W¸H¹I°oÑ$FÐ!ô 9Ð9J×9TÑ9TÐUVÐXYÓ9ZÐ\jÓkÐÜ#ŸkškØØ×#Ñ# T§]¡]°T×5HÑ5HÑ%HÈ$Ï-É-ÐZ^×ZmÑZmÑJmÐnØñ
Ñˆ�q˜!÷ " g°¤lØ)×.Ñ.¨z¿>¹>È4Ï=É=ÓYˆMØ—‘˜a Ó#×*Ñ*¨2¨r°4·=±=ÓAˆBØ’!�T˜4�-Ñ ×'Ñ'¨¨D¯M©M¸4×;NÑ;NÓOˆAØ—‘�z§=¡=°$×2EÑ2EÓFˆAØ—‘�z§=¡=°$×2EÑ2EÓFˆAØ—‘’q˜$�w‘×&Ñ& r¨4¯=©=Ó9ˆAØ—l‘l¢1 d 7Ñ+×2Ñ2°2°t·}±}ÓEˆGä7ØØØØØØØðð ØØ ñð ñˆKð &×*Ñ*¨:°q¸"Ó=‰Kð ".°TÐ!9ÐÜ+Ø×"Ñ" :¸¿¹ÈÏÉÓVØØØ—‘�z¨D¯M©M¸4×;NÑ;NÓOØ—‘�z¨D¯M©M¸4×;NÑ;NÓOðð  Ÿ?™?Ø—&‘&ØØ$6ØŸ™Ø Þ2H™ÈdØ×-Ñ-ñð ñˆKö" "Ø+6Ñ(�˜[Ø×3Ñ3°KÈ4Ï>É>Ð3ÒZà)�à%×-Ñ-¨jÀ2ÓFˆKà—i‘i ¨TÓ2ˆð !%§¡¨k¯n©n¸UÓ.CÓ DÐØ$Ð$r%   )rò   rŠ   rå   rr   r*   ry   rì   rß   rˆ   r¨   rR   rð   rá   rÔ   ræ   rø   rç   ró   r§   rö   rÝ   rë   rè   rê   ré   râ   rï   rã   )T©NN)rg   rh   ri   rj   Ú__doc__r   rà   r9   rL   r   Úno_gradrõ   r   ÚTensorr   ra   rk   rl   rm   s   @r#   rÒ   rÒ   _  s–   ø† ññ98˜|ð 98¸ð 98ÐW[÷ 98ð 98ðv ‡]‚]ƒ_ñ)ó ð)ñ ˜HÓ%ð &*Ø.2ñ	P%à—|‘|ðP%ð ˜d‘lðP%ð Ÿ™ tÑ+ô	P%ó &öP%r%   rÒ   c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚMamba2RMSNormiO  c                 óŒ   >• [         TU ]  5         [        R                  " [        R
                  " U5      5      U l        X l        g)z=
Mamba2RMSNorm is equivalent to T5LayerNorm and LlamaRMSNorm
NrJ   rP   s      €r#   rL   ÚMamba2RMSNorm.__init__P  s/   ø€ ô 	‰ÑÔÜ—l’l¤5§:¢:¨kÓ#:Ó;ˆŒØ #Õr%   c                 ó  • UR                   nUR                  [        R                  5      nUR	                  S5      R                  SSS9nU[        R                  " X0R                  -   5      -  nU R                  UR                  U5      -  $ rW   )	r0   rA   r   rY   r[   r\   r]   rO   rN   )rQ   rB   r_   r`   s       r#   ra   ÚMamba2RMSNorm.forwardX  sw   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ð>ˆØ%¬¯ª°H×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r%   rc   rd   rf   rm   s   @r#   r"  r"  O  s   ø† ÷$÷;ð ;r%   r"  c                   ób   ^ • \ rS rSrU 4S jr  SS\S-  S\R                  S-  4S jjrSr	U =r
$ )	ÚMamba2Blocki`  c                 óÀ   >• [         TU ]  5         Xl        X l        UR                  U l        [        UR                  UR                  S9U l        [        XSS9U l
        g )NrÛ   F)rÔ   rÕ   )rK   rL   rÓ   rÔ   Úresidual_in_fp32r"  rR   ræ   ró   rÒ   Úmixer)rQ   rÓ   rÔ   rT   s      €r#   rL   ÚMamba2Block.__init__a  sO   ø€ Ü‰ÑÔØŒØ"ŒØ &× 7Ñ 7ˆÔÜ! &×"4Ñ"4¸&×:SÑ:SÑTˆŒ	Ü  ÐW\Ñ]ˆ�
r%   Nr  rC   c                 ó  • UnU R                  UR                  U R                   R                  R                  S95      nU R                  (       a  UR                  [
        R                  5      nU R                  " U4X#S.UD6nXQ-   nU$ )N)r0   ©r  rC   )ró   rA   rN   r0   r*  r   rY   r+  )rQ   rB   r  rC   r‚   Úresiduals         r#   ra   ÚMamba2Block.forwardi  sw   € ð !ˆØŸ	™	 -×"2Ñ"2¸¿¹×9IÑ9I×9OÑ9OÐ"2Ð"PÓQˆØ× × Ø—{‘{¤5§=¡=Ó1ˆHàŸ
š
 =Ðu¸|ÑuÐntÑuˆØ Ñ0ˆØÐr%   )rÓ   rÔ   r+  ró   r*  r  )rg   rh   ri   rj   rL   r   r   r   ra   rk   rl   rm   s   @r#   r(  r(  `  s<   ø† õ^ð &*Ø.2ñ	ð ˜d‘lðð Ÿ™ tÑ+÷	ó r%   r(  c                   ór   ^ • \ rS rSr% \\S'   SrS/rSrSr	Sr
\R                  " 5       U 4S j5       rSrU =r$ )ÚMamba2PreTrainedModeliz  rÓ   Úbackboner(  Tc                 ó¦  >• [         TU ]  U5        [        U[        5      (       Ga+  UR	                  5         [
        R                  " UR                  R                  [        R                  " S5      S9  UR                  R                  b*  [
        R                  " UR                  R                  5        [
        R                  " UR                  R                  [        R                  " S5      S9  U R                  R                  (       aD  UR                  R                  nU[        R                  " U R                  R                   5      -  nggg)zInitialize the weights.é   )ÚaN)rK   Ú_init_weightsÚ
isinstancerÒ   rõ   rý   Úkaiming_uniform_ry   rN   r  Úsqrtrq   Úzeros_rö   rÓ   Úrescale_prenorm_residualÚnum_hidden_layers)rQ   ÚmoduleÚprT   s      €r#   r7  Ú#Mamba2PreTrainedModel._init_weightsƒ  sÜ   ø€ ô 	‰Ñ˜fÔ%Ü�fœk×*Ò*ð ×&Ñ&Ô(ä×!Ò! &§-¡-×"6Ñ"6¼$¿)º)ÀA»,ÒGØ�}‰}×!Ñ!Ñ-Ü—’˜FŸM™M×.Ñ.Ô/Ü×!Ò! &§/¡/×"8Ñ"8¼D¿IºIÀa»LÒIà�{‰{×3×3ð —O‘O×*Ñ*�Ø”T—Y’Y˜tŸ{™{×<Ñ<Ó=Ñ=‘ð 4ð +r%   r–   )rg   rh   ri   rj   r   Ú__annotations__Úbase_model_prefixÚ_no_split_modulesÚsupports_gradient_checkpointingÚ_can_compile_fullgraphÚ_is_statefulr   r  r7  rk   rl   rm   s   @r#   r2  r2  z  s@   ø‡ àÓØ"ÐØ&˜ÐØ&*Ð#Ø!ÐØ€Là
‡]‚]ƒ_ô>ó ö>r%   r2  z-
    Class for the MAMBA2 model outputs.
    )Úcustom_introc                   ó„   • \ rS rSr% SrSr\R                  S-  \S'   Sr	\
S-  \S'   Sr\\R                     S-  \S'   Srg)ÚMamba2Outputi   a   
cache_params (`Cache`):
    The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to
    avoid providing the old `input_ids`.

    Includes both the State space model state matrices after the selective scan, and the Convolutional states
NÚlast_hidden_stater  rB   r–   )rg   rh   ri   rj   r  rJ  r   ÚFloatTensorrA  r  r   rB   Útuplerk   r–   r%   r#   rI  rI     sG   ‡ ñð 37Ð�u×(Ñ(¨4Ñ/Ó6Ø!%€L�%˜$‘,Ó%Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ö9r%   rI  zK
    Base class for causal language model (or autoregressive) outputs.
    c                   ó¬   • \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr
\S-  \S'   Sr\\R                     S-  \S'   Srg)	ÚMamba2CausalLMOutputiµ  au  
loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
    Language modeling loss (for next-token prediction).
logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
    Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
cache_params (`Cache`):
    The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to
    avoid providing the old `input_ids`.

    Includes both the State space model state matrices after the selective scan, and the Convolutional states
NÚlossÚlogitsr  rB   r–   )rg   rh   ri   rj   r  rO  r   rK  rA  rP  r  r   rB   rL  rk   r–   r%   r#   rN  rN  µ  s[   ‡ ñ
ð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø!%€L�%˜$‘,Ó%Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ö9r%   rN  c                   óì   ^ • \ rS rSrU 4S jrS rS rS r\       SS\	R                  S-  S\	R                  S-  S	\S-  S
\S-  S\S-  S\S-  S\	R                  S-  S\\-  4S jj5       rSrU =r$ )ÚMamba2ModeliÏ  c           
      óÄ  >• [         TU ]  U5        [        R                  " UR                  UR
                  5      U l        [        R                  " [        UR                  5       Vs/ s H  n[        XS9PM     sn5      U l        SU l        [        UR
                  UR                  S9U l        U R!                  U R"                  5        U R%                  5         g s  snf )Nr  FrÛ   )rK   rL   r   Ú	EmbeddingÚ
vocab_sizerR   Ú
embeddingsÚ
ModuleListÚranger=  r(  r  Úgradient_checkpointingr"  ræ   Únorm_fÚ"_register_load_state_dict_pre_hookÚ	load_hookÚ	post_init)rQ   rÓ   ÚidxrT   s      €r#   rL   ÚMamba2Model.__init__Ñ  s¥   ø€ Ü‰Ñ˜Ô äŸ,š, v×'8Ñ'8¸&×:LÑ:LÓMˆŒÜ—m’mÔSXÐY_×YqÑYqÔSrÓ$sÒSrÈC¤[°Ô%GÑSrÑ$sÓtˆŒà&+ˆÔ#Ü# F×$6Ñ$6¸F×<UÑ<UÑVˆŒà×/Ñ/°·±Ô?Ø�‰Õùò %ts   Á(Cc                 ól   • U H.  nSU;   d  M  UR                  U5      XR                  SS5      '     g    g )Nz
embedding.zembeddings.)ÚpopÚreplace)rQ   Ú
state_dictÚprefixÚargsÚks        r#   r\  ÚMamba2Model.load_hookÝ  s4   € ÛˆAØ˜qÕ ØEOÇ^Á^ÐTUÓEV�
Ÿ9™9 \°=ÓAÑBÙò r%   c                 ó   • U R                   $ rI   ©rV  ©rQ   s    r#   Úget_input_embeddingsÚ Mamba2Model.get_input_embeddingsã  s   € Ø�‰Ðr%   c                 ó   • Xl         g rI   ri  ©rQ   Únew_embeddingss     r#   Úset_input_embeddingsÚ Mamba2Model.set_input_embeddingsæ  s   € Ø(�r%   NÚ	input_idsÚinputs_embedsr  Ú	use_cacheÚoutput_hidden_statesÚreturn_dictrC   Úreturnc                 óò  • Ub  UOU R                   R                  nUb  UO(U R                  (       d  U R                   R                  OSnUb  UOU R                   R                  nUSL USL-  (       a  [        S5      eUc  U R                  U5      nU R                  (       a  U R                  (       a	  U(       a  SnU(       a  Uc  [        U R                   S9n[        U R                   UUUS9nUn	U(       a  SOSn
U R                   H  nU" U	4UUS.UD6n	U(       d  M  X©4-   n
M     U R                  U	5      n	U(       a  X©4-   n
U(       d  [        S X“U
4 5       5      $ [        U	U(       a  UU
S	9$ SU
S	9$ )
at  
cache_params (`Cache`, *optional*):
    If passed along, the model uses the previous state in all the blocks (which will give the output for the
    `input_ids` provided as if the model add `state_input_ids + input_ids` as context).
use_cache (`bool`, *optional*):
    If set to `True`, the `cache_params` is returned and can be used to quickly generate the next logits.
NFz:You must specify exactly one of input_ids or inputs_embeds)rÓ   )rÓ   rs  rC   Úpast_key_valuesr–   r.  c              3   ó.   #   • U  H  oc  M  Uv •  M     g 7frI   r–   )Ú.0Úvs     r#   Ú	<genexpr>Ú&Mamba2Model.forward.<locals>.<genexpr>(  s   é € ÐfÒ$T˜qŸ™Ò$Tùs   ‚Œ	)rJ  r  rB   )rÓ   ru  r	  rt  rv  Ú
ValueErrorrV  rY  r	   r   r  rZ  rL  rI  )rQ   rr  rs  r  rt  ru  rv  rC   r‚   rB   Úall_hidden_statesÚmixer_blocks               r#   ra   ÚMamba2Model.forwardé  s†  € ð( %9Ñ$DÑ È$Ï+É+×JjÑJjð 	ð "+Ñ!6‘IÐZ^×Zg×Zg¸T¿[¹[×=RÒ=RÐmrˆ	Ø%0Ñ%<‘kÀ$Ç+Á+×BYÑBYˆà˜Ð -°tÐ";×<ÜÐYÓZÐZàÑ Ø ŸO™O¨IÓ6ˆMà×&×&¨4¯=¯=¾YØˆIæ˜Ñ-Ü'¨t¯{©{Ñ;ˆLä8Ø—;‘;Ø'Ø)Ø(ñ	
ˆð &ˆÞ"6™B¸DÐØŸ;œ;ˆKÙ'Øðà)Ø-ñð ñ	ˆM÷ $Ð#Ø$5Ð8HÑ$HÒ!ñ 'ð Ÿ™ MÓ2ˆæØ 1Ð4DÑ DÐæÜÑf ]ÐBSÑ$TÓfÓfÐfäØ+Þ)2˜Ø+ñ
ð 	
à8<Ø+ñ
ð 	
r%   )rV  rY  r  rZ  )NNNNNNN)rg   rh   ri   rj   rL   r\  rk  rp  r   r   Ú
LongTensorr   r9   r   rL  rI  ra   rk   rl   rm   s   @r#   rR  rR  Ï  sÎ   ø† õ
òòò)ð ð .2Ø15Ø%)Ø!%Ø,0Ø#'Ø.2ñD
à×#Ñ# dÑ*ðD
ð ×'Ñ'¨$Ñ.ðD
ð ˜d‘lð	D
ð
 ˜$‘;ðD
ð # T™kðD
ð ˜D‘[ðD
ð Ÿ™ tÑ+ðD
ð 
�Ñ	ôD
ó öD
r%   rR  z�
    The MAMBA2 Model transformer with a language modeling head on top (linear layer with weights not tied to the input
    embeddings).
    c                   ó~  ^ • \ rS rSrSS0rU 4S jrS rS r     SS\S-  S	\	R                  S-  S
\S-  4U 4S jjjr\         SS\	R                  S-  S\	R                  S-  S\S-  S\	R                  S-  S\S-  S\S-  S\S-  S	\	R                  S-  S\\	R                  -  S\\-  4S jj5       rSrU =r$ )ÚMamba2ForCausalLMi1  zlm_head.weightzbackbone.embeddings.weightc                 óÂ   >• [         TU ]  U5        [        U5      U l        [        R
                  " UR                  UR                  SS9U l        U R                  5         g )NFrÚ   )
rK   rL   rR  r3  r   rî   rR   rU  Úlm_headr]  )rQ   rÓ   rT   s     €r#   rL   ÚMamba2ForCausalLM.__init__:  sF   ø€ Ü‰Ñ˜Ô Ü# FÓ+ˆŒÜ—y’y ×!3Ñ!3°V×5FÑ5FÈUÑSˆŒà�‰Õr%   c                 ó6   • U R                   R                  5       $ rI   )r3  rk  rj  s    r#   rk  Ú&Mamba2ForCausalLM.get_input_embeddingsA  s   € Ø�}‰}×1Ñ1Ó3Ð3r%   c                 ó8   • U R                   R                  U5      $ rI   )r3  rp  rn  s     r#   rp  Ú&Mamba2ForCausalLM.set_input_embeddingsD  s   € Ø�}‰}×1Ñ1°.ÓAÐAr%   Nr  rC   Úis_first_iterationc           	      ó\   >• [         T	U ]  " U4UUUUUS.UD6nU(       a  U(       d  S US'   U$ )N)rs  rt  r  rC   r�  rC   )rK   Úprepare_inputs_for_generation)
rQ   rr  rs  rt  r  rC   r�  r‚   Úmodel_inputsrT   s
            €r#   r�  Ú/Mamba2ForCausalLM.prepare_inputs_for_generationG  sN   ø€ ô ‘wÒ<Øð
à'ØØ%Ø)Ø1ñ
ð ñ
ˆö Ö/Ø-1ˆLÐ)Ñ*àÐr%   rr  rs  Úlabelsru  rv  rt  Úlogits_to_keeprw  c
           
      ó2  • Ub  UOU R                   R                  nU R                  UUUUUUUS9nUS   n[        U	[        5      (       a  [        U	* S5      OU	nU R                  USS2USS24   R                  U R                  R                  R                  5      5      R                  5       nSnUb)  U R                  " SXäU R                   R                  S.U
D6nU(       d  U4USS -   nUb  U4U-   $ U$ [        UUUR                  UR                  S9$ )aþ  
cache_params (`Cache`, *optional*):
    If passed along, the model uses the previous state in all the blocks (which will give the output for the
    `input_ids` provided as if the model add `state_input_ids + input_ids` as context).
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set
    `labels = input_ids` Indices are selected in `[-100, 0, ..., config.vocab_size]` All labels set to `-100`
    are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size]`
use_cache (`bool`, *optional*):
    If set to `True`, the `cache_params` is returned and can be used to quickly generate the next logits.
N)r  rs  ru  rv  rt  rC   r   )rP  r’  rU  r   )rO  rP  r  rB   r–   )rÓ   rv  r3  r8  rà   Úslicer‡  rA   rN   r0   r¢   Úloss_functionrU  rN  r  rB   )rQ   rr  rs  r  r’  ru  rv  rt  rC   r“  r‚   Úmamba2_outputsrB   Úslice_indicesrP  rO  rÏ   s                    r#   ra   ÚMamba2ForCausalLM.forward`  s,  € ð2 &1Ñ%<‘kÀ$Ç+Á+×BYÑBYˆàŸ™ØØ%Ø'Ø!5Ø#ØØ)ð 'ð 
ˆð ' qÑ)ˆä8BÀ>ÔSV×8WÑ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@×CÑCÀDÇLÁL×DWÑDW×D]ÑD]Ó^Ó_×eÑeÓgˆàˆØÑØ×%Ò%Ðp¨VÈtÏ{É{×OeÑOeÑpÐioÑpˆDæØ�Y °°Ð!3Ñ3ˆFØ)-Ñ)9�T�G˜fÑ$ÐE¸vÐEä#ØØØ'×4Ñ4Ø(×6Ñ6ñ	
ð 	
r%   )r3  r‡  )NNNNF)	NNNNNNNNr   )rg   rh   ri   rj   Ú_tied_weights_keysrL   rk  rp  r   r   r   r9   r�  r   rƒ  rK  rà   rL  rN  ra   rk   rl   rm   s   @r#   r…  r…  1  sG  ø† ð +Ð,HÐIÐõò4òBð ØØ%)Ø.2Ø*/ñð
 ˜d‘lðð Ÿ™ tÑ+ðð ! 4™K÷ð ð2 ð .2Ø26Ø%)Ø*.Ø,0Ø#'Ø!%Ø.2Ø-.ñ6
à×#Ñ# dÑ*ð6
ð ×(Ñ(¨4Ñ/ð6
ð ˜d‘lð	6
ð
 × Ñ  4Ñ'ð6
ð # T™kð6
ð ˜D‘[ð6
ð ˜$‘;ð6
ð Ÿ™ tÑ+ð6
ð ˜eŸl™lÑ*ð6
ð 
Ð%Ñ	%ô6
ó ö6
r%   r…  )r…  rR  r2  r  )NNFN)Br  r  Údataclassesr   r   Útorch.nn.functionalr   r    rx   Ú r   rý   Úactivationsr   Úcache_utilsr   r	   Ú
generationr
   Úintegrationsr   r   Úintegrations.accelerater   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_utilsr   Úutilsr   r   r   Úconfiguration_mamba2r   Ú
get_loggerrg   Úloggerr   rà   r$   r+   r?   rD   ÚModulerF   rM   Ústrrn   r€   r¢   rL  r9   r—   r±   rÐ   rÒ   r"  r(  r2  rI  rN  rR  r…  Ú__all__r–   r%   r#   Ú<module>r­     s{  ðñ ã Ý !ã ß Ð Ý å &Ý !ß .Ý )ß WÝ =Ý <Ý 9Ý -ß 9Ñ 9Ý .ð 
×	Ò	˜HÓ	%€ðV U§\¡\ð V¸Sô Vò
ò(ò(	ô;˜Ÿ™Ÿ™ô ;ñ$ (Ð(>ÀÓPð
 !%Ø!ñ'Ø—<‘<ð'à—‘ð'ð �L‰Lð'ð �,‰,˜Ñ
ð	'ð
 �d‘
ô'ó Qð'ñ& (Ð(:¸OÓLð !%Ø!ñ	'Ø—<‘<ð'à�L‰Lð'ð �,‰,˜Ñ
ð'ð �d‘
ô	'ó Mð'ñ, (Ð(JÈKÓXð +/Ø%(©%°«,Ð$7Ø %ØØ*.ØØ*.Ø(,ØØØ!ñ%Ø�L‰Lðà—<‘<ðð —‘ Ñ$ðð �\‰\ð	ð
 ‡|�|ðð ‡|�|ðð ðð —L‘L 4Ñ'ðð �E˜5�LÑ!ðð ðð ðð —L‘L 4Ñ'ðð ðð —L‘L 4Ñ'ðð —,‘, Ñ%ðð  �4‰Zð!ð" ð#ð$ ô%ó Yðñ0 (Ð(@À+ÓNð "Ø#'ØØ!ñ:'Ø�<‰<ð:'à—<‘<ð:'ð 	�‰ð:'ð ‡|�|ð	:'ð
 ‡|�|ð:'ð ‡|�|ð:'ð ‡|�|�dÑð:'ð �\‰\˜DÑ ð:'ð ð:'ð ‡|�|�dÑô:'ó Oð:'ñz (Ð(CÀ[ÓQð "Ø#'Ø*.ØØ%(©%°«,Ð$7Ø %ñ^Ø—<‘<ð^à�‰ð^ð ‡|�|ð^ð ‡|�|ð	^ð
 ‡|�|ð^ð ð^ð ‡|�|�dÑð^ð �\‰\˜DÑ ð^ð —L‘L 4Ñ'ð^ð ð^ð �E˜5�LÑ!ð^ð ô^ó Rð^ñB àØØ)Ø%Øðóôd%�"—)‘)ó d%óðd%ôN;�B—I‘Iô ;ô"Ð,ô ð4 ô">˜Oó ">ó ð">ñJ ðñð
 ô:�;ó :ó óð:ñ ðñð
 ô:˜;ó :ó óð:ð& ô^
Ð'ó ^
ó ð^
ñB ðñô`
Ð-¨ó `
óð`
òF H�r%   