Ë
    ÜÓ^jh¦  ã                   ó¢  — d Z ddlZddlmZ ddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZmZ ddlmZ ddlmZ  ej>                  e «      Z!dejD                  de#fd„Z$d„ Z%d„ Z&d„ Z' G d„ dej
                  jP                  «      Z) G d„ dejP                  «      Z* G d„ dejP                  «      Z+ G d„ de«      Z,e G d„ d e«      «       Z- ed!¬"«      e G d#„ d$e«      «       «       Z. ed%¬"«      e G d&„ d'e«      «       «       Z/e G d(„ d)e-«      «       Z0 ed*¬"«       G d+„ d,e-e«      «       Z1g d-¢Z2y).zPyTorch MAMBA2 model.é    N)Ú	dataclass)Únné   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úlazy_load_kernel)ÚGradientCheckpointingLayer)ÚPreTrainedModel)ÚModelOutputÚauto_docstringÚis_torchdynamo_compilingÚlogging)Úresolve_internal_importé   )ÚMamba2ConfigÚinput_tensorÚpad_sizec                 ó°   — t        | j                  «      dk(  r
ddddd|ddfnddd|ddf}t        j                  j                  j                  | |dd¬«      S )z‚
    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      úu/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/mamba2/modeling_mamba2.pyÚpad_tensor_by_sizer#   (   sf   € ô 47°|×7IÑ7IÓ3JÈaÒ3O��A�q˜!˜Q ¨!¨QÑ/ÐVWÐYZÐ\]Ð_gÐijÐlmÐUn€Iä�8‰8×Ñ×"Ñ" <°ÀÐSTÐ"ÓUÐUó    c                 ó  — t        | |«      } t        | j                  «      dk(  r.| j                  | j                  d   d|| j                  d   «      S | j                  | j                  d   d|| j                  d   | j                  d   «      S )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*   3   s“   € ô & l°HÓ=€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                 ó"  — | j                  d«      } | d   j                  g | j                  «       ¢|‘­Ž } t        j                  t        j                  ||| j
                  t        j                  ¬«      d¬«      }| j                  | d«      } t        j                  | d¬«      }t        j                  t        j                  ||| j
                  t        j                  ¬«      d¬«      }|j                  | t        j                   «      }|S )zo
    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>   G   sÞ   € ð ×"Ñ" 2Ó&€Jð 2�< 	Ñ*×1Ñ1ÐS°<×3DÑ3DÓ3FÐSÈ
ÒS€Lä�:‰:”e—j‘j ¨ZÀ×@SÑ@SÔ[`×[eÑ[eÔfÐqsÔt€DØ×+Ñ+¨T¨E°1Ó5€Lä—L‘L °2Ô6€Mô �:‰:”e—j‘j ¨ZÀ×@SÑ@SÔ[`×[eÑ[eÔfÐqrÔs€DØ!×-Ñ-¨t¨e´e·i±i°ZÓ@€MØÐr$   c                 ó¦   — |�N|j                   d   dkD  r<|j                   d   dkD  r*| j                  }| |dd…dd…df   z  j                  |«      } | S )zm
    Tunes out the hidden states for padding tokens, see https://github.com/state-spaces/mamba/issues/66
    Nr   r   )r   r/   Úto)Úhidden_statesÚattention_maskr/   s      r"   Úapply_mask_to_padding_statesrC   [   sa   € ð
 Ð! n×&:Ñ&:¸1Ñ&=ÀÒ&AÀn×FZÑFZÐ[\ÑF]Ð`aÒFaØ×#Ñ#ˆØ&¨ºº1¸d¸
Ñ)CÑC×GÑGÈÓNˆàÐr$   c                   ó(   ‡ — e Zd Zdˆ fd„	Zdd„Zˆ xZS )ÚMambaRMSNormGatedc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y ©N©ÚsuperÚ__init__r   Ú	Parameterr   r7   ÚweightÚvariance_epsilon©ÚselfÚhidden_sizeÚepsÚ	__class__s      €r"   rJ   zMambaRMSNormGated.__init__h   s/   ø€ Ü‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕr$   c                 ó¤  — |j                   }|j                  t        j                  «      }|�?|t        j
                  j                  |j                  t        j                  «      «      z  }|j                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S ©Nr'   r&   T)Úkeepdim)r/   r@   r   Úfloat32r   r   ÚsiluÚpowÚmeanÚrsqrtrM   rL   )rO   rA   ÚgateÚinput_dtypeÚvariances        r"   ÚforwardzMambaRMSNormGated.forwardm   s¥   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆàÐØ)¬B¯M©M×,>Ñ,>¸t¿w¹wÄuÇ}Á}Ó?UÓ,VÑVˆMØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆà�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r$   ©g�íµ ÷Æ°>rG   ©Ú__name__Ú
__module__Ú__qualname__rJ   r^   Ú__classcell__©rR   s   @r"   rE   rE   g   s   ø„ õ$÷
	;r$   rE   c                   ó2  ‡ — e Zd ZdZddededefˆ fd„Z ej                  «       d„ «       Z
	 	 ddej                  d	edz  d
ej                  dz  fd„Z	 	 ddej                  d	edz  d
ej                  dz  fd„Z	 	 dd	edz  d
ej                  dz  fd„Zˆ xZS )ÚMamba2Mixeruƒ  
    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           	      ó”  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        |j                  | _        t        |j                  | j                  z  «      | _
        t        |j                  «      | _        || _        |j                  | _        |j                  | _        t         |j                     | _        |j$                  | _        |j&                  | _        |j(                  | _        |j*                  | _        |j,                  | _        |j.                  | _        |j0                  | _        |j2                  | _        |j4                  | _        | j                  d| j(                  z  | j
                  z  z   | _        t9        j:                  | j6                  | j6                  |j                  |j                  | j6                  |j                  dz
  ¬«      | _        | j                  | j6                  z   | j                  z   }t9        j>                  | j                  ||j@                  ¬«      | _!        t9        jD                  tG        jH                  | j                  «      «      | _%        t9        jD                  tG        jH                  | j                  «      «      | _&        tO        | j                  | j$                  ¬«      | _(        t9        jD                  tG        jH                  | j                  «      «      | _)        |r3| jJ                  jT                  jV                  dk7  r| jY                  «        t9        j>                  | j                  | j                  |j@                  ¬«      | _-        |j@                  | _         t]        d«      }t_        |dd «      a0t_        |d	d «      a1t]        d
«      }te        |d¬«      a3te        |d¬«      a4te        |d¬«      a5tm        tf        th        tj        tb        t`        f«      a7tn        stp        js                  d«       |jt                  |   | _;        y )Nr'   r   )Úin_channelsÚout_channelsÚbiasÚkernel_sizeÚgroupsÚpadding©rn   ©rQ   Úmetazcausal-conv1dÚcausal_conv1d_updateÚcausal_conv1d_fnz	mamba-ssmz8ops.triton.selective_state_update.selective_state_update)Úchained_pathz1ops.triton.ssd_combined.mamba_chunk_scan_combinedz8ops.triton.ssd_combined.mamba_split_conv1d_scan_combineda  The fast path is not available because one of `(selective_state_update, causal_conv1d_fn, causal_conv1d_update)` is None. Falling back to the naive implementation. To install follow https://github.com/state-spaces/mamba/#installation and https://github.com/Dao-AILab/causal-conv1d)<rI   rJ   Ú	num_headsrP   Ú
state_sizeÚssm_state_sizeÚconv_kernelÚconv_kernel_sizeÚintr5   Úintermediate_sizeÚtime_step_rankri   Úuse_conv_biasÚ
hidden_actÚ
activationr   ÚactÚlayer_norm_epsilonÚrms_normÚn_groupsÚhead_dimr)   Útime_step_limitÚtime_step_minÚtime_step_maxÚtime_step_floorÚconv_dimr   ÚConv1dÚconv1dÚLinearÚuse_biasÚin_projrK   r   ÚemptyÚdt_biasÚA_logrE   ÚnormÚDr.   ÚtypeÚinit_mamba2_weightsÚout_projr   Úgetattrru   rv   r   Úselective_state_updateÚmamba_chunk_scan_combinedÚ mamba_split_conv1d_scan_combinedÚallÚis_fast_path_availableÚloggerÚwarning_onceÚlayer_typesÚ
layer_type)rO   rh   ri   rj   Úprojection_sizeÚcausal_conv1dÚ	mamba_ssmrR   s          €r"   rJ   zMamba2Mixer.__init__�   sS  ø€ Ü‰ÑÔØ×)Ñ)ˆŒØ!×-Ñ-ˆÔØ$×/Ñ/ˆÔØ &× 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ˆŒØŸ™ˆŒô )¨Ó9ˆÜ& }Ð6LÈdÓSÐÜ" =Ð2DÀdÓKÐô % [Ó1ˆ	Ü!8ØÐ$^ô"
Ðô %<ØÐ$Wô%
Ð!ô ,CØÐ$^ô,
Ð(ô
 "%ä&Ü)Ü0Ü Ü$ðó"
Ðõ &Ü×Ñð>ôð !×,Ñ,¨YÑ7ˆ�r$   c                 ót  — t        j                  d| j                  dz   | j                  j                  t         j
                  ¬«      }t        j                  | j                  t        j                  |«      «       t        j                  | j                  «       t        j                  t        j                  | j                  | j                  j                  t         j
                  ¬«      t        j                  | j                  «      t        j                  | j                   «      z
  z  t        j                  | j                   «      z   «      j#                  | j$                  ¬«      }|t        j                  t        j&                  | «       «      z   }t        j                  | j                  |«       y )Nr   r-   )Úmin)r   Úarangerx   r”   r.   rV   ÚinitÚcopy_ÚlogÚones_r–   ÚexpÚrandr“   ÚmathrŠ   r‰   Úclampr‹   Úexpm1)rO   ÚAÚdtÚinv_dts       r"   r˜   z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$   NrA   Úcache_paramsrB   c                 ór  — t        ||«      }| j                  |«      }|j                  \  }}}| j                  | j                  z  }|j                  d   d| j
                  z  z
  d| j                  z  | j                  z  z
  | j                  z
  dz  }	|d uxr |j                  | j                  «      }
|
rL|j                  | j                     j                  d   }|j                  | j                     j                  d   }|
�rÒ|dk(  �rÌ|j                  d«      j                  |	|	| j
                  | j                  | j                  gd¬«      \  }}}}}t        || j                   j"                  j                  d«      | j                   j$                  | j&                  «      }t)        j                  || j
                  ||gd¬«      \  }}}t)        j*                  | j,                  j/                  «       «       }|d d …d df   d d …d d …d f   j1                  d| j2                  | j                  «      j5                  t(        j6                  ¬«      }|d d …d d …d f   j1                  dd| j2                  «      }| j8                  d d …d df   j1                  d| j2                  «      }| j:                  d d …d df   j1                  d| j2                  «      }|j=                  || j                  |j                  d   | j                  z  «      }|j=                  || j                  |j                  d   | j                  z  «      }|j=                  || j                  | j2                  «      }t?        ||||||d |d¬	«
      }|j=                  || j                  | j2                  z  «      }| jA                  ||«      }| jC                  |«      d d …d df   }|S t)        j*                  | j,                  j/                  «       «       }| jD                  d
t/        d«      fk(  ri nd| jD                  i}| jF                  rä|€âtI        || j                   j"                  j                  d«      | j                   j$                  | j8                  |f| j:                  | jJ                  d | j&                  | j@                  j"                  | j@                  jL                  | jB                  j"                  | jB                  j$                  | j2                  | j                  dddœ|¤Ž}|S |j                  |	|	| j
                  | j                  | j                  gd¬«      \  }}}}}|jO                  dd«      }|
rt)        jP                  |gd¬«      }|�YtR        jT                  jW                  || jX                  |j                  d   z
  df«      }|j[                  || j                  ¬«       | j&                  dvr5| j]                  | j!                  |«      dd |j                  d   …f   «      }nPt_        || j                   j"                  j                  d«      | j                   j$                  | j&                  ¬«      }|
r|d d …d d …| d …f   }|jO                  dd«      }t        ||«      }t)        j                  || j
                  ||gd¬«      \  }}}ta        |j=                  ||d| j2                  «      |||j=                  ||| j                  d«      |j=                  ||| j                  d«      f| jJ                  | j:                  d d d| j8                  d|
rnd dœ|¤Ž\  }}|�|�|jc                  || j                  ¬«       |j=                  ||d«      }| jA                  ||«      }| jC                  |«      }|S )Nr&   r'   r   r   r2   .©r/   T)Úzr“   Údt_softplusg        r;   Údt_limitF)r–   r)   Úseq_idxr‚   Úrmsnorm_weightÚrmsnorm_epsÚoutproj_weightÚoutproj_biasÚheaddimÚngroupsÚnorm_before_gateÚreturn_final_states©ri   )rW   Úswish)ÚxrL   rn   r‚   )r)   r–   r¹   r¼   rÄ   r“   rº   Úinitial_states)2rC   r‘   r   r†   rz   r~   rx   Úhas_previous_stateri   ÚlayersÚconv_statesÚrecurrent_statesÚsqueezeÚsplitrŒ   ru   rŽ   rL   rn   r‚   r   r®   r”   Úfloatr5   r‡   r@   rV   r“   r–   Úviewr›   r•   r™   rˆ   Útrainingr�   r)   rM   Ú	transposeÚcatr   r   r    r|   Úupdate_conv_staterƒ   rv   rœ   Úupdate_recurrent_state)rO   rA   r¶   rB   Úprojected_statesÚ
batch_sizeÚseq_lenÚ_Úgroups_time_state_sizeÚd_mlpÚuse_precomputed_statesÚ
conv_stateÚrecurrent_stater[   Úhidden_states_B_Cr´   ÚBÚCr³   r“   r–   Úhidden_states_reshapedÚoutÚdt_limit_kwargsÚnew_conv_stateÚscan_outputÚ	ssm_states                              r"   Úcuda_kernels_forwardz Mamba2Mixer.cuda_kernels_forwardð   s?  € ô 5°]ÀNÓSˆØŸ<™<¨Ó6Ðð "/×!4Ñ!4Ñˆ
�G˜QØ!%§¡°×1DÑ1DÑ!DÐà×"Ñ" 2Ñ&Ø�$×(Ñ(Ñ(ñ)à�$—-‘-Ñ $×"5Ñ"5Ñ5ñ6ð �n‰nñð ñˆð ".°TÐ!9Ò!m¸l×>]Ñ>]Ð^b×^lÑ^lÓ>mÐñ "Ø%×,Ñ,¨T¯^©^Ñ<×HÑHÈÑKˆJØ*×1Ñ1°$·.±.ÑA×RÑRÐSTÑUˆOò " g°£lØ0@×0HÑ0HÈÓ0K×0QÑ0QØ˜˜t×5Ñ5°t·}±}ÀdÇnÁnÐUÐ[]ð 1Ró 1Ñ-ˆAˆq�$Ð)¨2ô
 !5Ø!ØØ—‘×"Ñ"×*Ñ*¨1Ó-Ø—‘× Ñ Ø—‘ó!Ðô #(§+¡+Ø!Ø×'Ñ'Ð)?ÐAWÐXØô#ÑˆM˜1˜aô —‘˜4Ÿ:™:×+Ñ+Ó-Ó.Ð.ˆAØ’!�T˜3�,‘¢¢1 d 
Ñ+×2Ñ2°2°t·}±}Àd×FYÑFYÓZ×]Ñ]Ôdi×dqÑdqÐ]ÓrˆAØ’A’q˜$�J‘×&Ñ& r¨2¨t¯}©}Ó=ˆBØ—l‘l¢1 d¨C <Ñ0×7Ñ7¸¸D¿M¹MÓJˆGØ—‘’q˜$ �|Ñ$×+Ñ+¨B°·±Ó>ˆAØ—‘�z 4§=¡=°!·'±'¸!±*ÀÇÁÑ2MÓNˆAØ—‘�z 4§=¡=°!·'±'¸!±*ÀÇÁÑ2MÓNˆAØ%2×%7Ñ%7¸
ÀDÇNÁNÐTX×TaÑTaÓ%bÐ"Ü2ØØ&ØØØØØØØØ ôˆMð *×.Ñ.¨z¸4¿>¹>ÈDÏMÉMÑ;YÓZˆMØ ŸI™I m°TÓ:ˆMð —-‘- Ó.ªq°$¸¨|Ñ<ˆCðH ˆ
ôA —‘˜4Ÿ:™:×+Ñ+Ó-Ó.Ð.ˆAØ$(×$8Ñ$8¸SÄ%ÈÃ,Ð<OÒ$O™bÐV`Ðbf×bvÑbvÐUwˆOð �}Š} Ð!5Ü6Ø$Ø—K‘K×&Ñ&×.Ñ.¨qÓ1Ø—K‘K×$Ñ$Ø—L‘LØðð —f‘fØ#Ÿ™Ø Ø#Ÿ™Ø#'§9¡9×#3Ñ#3Ø $§	¡	× :Ñ :Ø#'§=¡=×#7Ñ#7Ø!%§¡×!3Ñ!3Ø ŸM™MØ ŸM™MØ%*Ø(-ñ#ð$ &ñ%�ðv ˆ
ðK 5E×4JÑ4JØ˜E 4×#9Ñ#9¸4¿=¹=È$Ï.É.ÐYÐ_að 5Kó 5Ñ1��1�dÐ-¨rð
 %6×$?Ñ$?ÀÀ1Ó$EÐ!á)ô ).¯	©	°:Ð?PÐ2QÐWYÔ(ZÐ%àÐ+Ü%'§]¡]×%6Ñ%6Ø)¨D×,AÑ,AÐDU×D[ÑD[Ð\^ÑD_Ñ,_ÐabÐ+có&�Nð !×2Ñ2°>ÈTÏ^É^Ð2Ô\à—?‘?Ð*;Ñ;Ø(,¯©°·±Ð=NÓ1OÐPSÐUrÐWh×WnÑWnÐoqÑWrÐUrÐPrÑ1sÓ(tÑ%ä(8Ø+Ø#Ÿ{™{×1Ñ1×9Ñ9¸!Ó<Ø!Ÿ[™[×-Ñ-Ø#'§?¡?ô	)Ð%ñ *Ø(9º!ºQÀÀÁ	¸/Ñ(JÐ%à$5×$?Ñ$?ÀÀ1Ó$EÐ!ä$@ÐARÐTbÓ$cÐ!Ü&+§k¡kØ%Ø×+Ñ+Ð-CÐE[Ð\Øô'Ñ#�˜q !ô *CØ!×&Ñ& z°7¸BÀÇÁÓNØØØ—F‘F˜: w°·±¸rÓBØ—F‘F˜: w°·±¸rÓBð*ð  $Ÿ™Ø—f‘fØØ Ø(,Ø ŸL™LØ $Ù6L¡?ÐRVñ*ð &ñ*Ñ&�˜Yð$ Ð(¨\Ð-EØ ×7Ñ7¸	ÈTÏ^É^Ð7Ô\à)×.Ñ.¨z¸7ÀBÓG�à"Ÿi™i¨°TÓ:�ð —m‘m KÓ0�Øˆ
r$   c                 ó  — |j                   \  }}}|j                  }t        ||«      }| j                  |«      }|j                   d   d| j                  z  z
  d| j
                  z  | j                  z  z
  | j                  z
  dz  }	|j                  |	|	| j                  | j                  | j                  gd¬«      \  }}}
}}|j                  dd«      }|d uxr |j                  | j                  «      }|r&|j                  | j                     j                  d   }|r¨|dk(  r£|j                  || j                  ¬«      d| j                    d …f   }t#        j$                  || j&                  j(                  j+                  d«      z  d¬«      }| j,                  r|| j&                  j.                  z   }| j1                  |«      }nË|rt#        j2                  |gd¬«      }|�Yt4        j6                  j9                  || j                   |j                   d   z
  df«      }|j                  || j                  ¬«       | j1                  | j'                  |«      dd |j                   d   …f   j                  dd«      «      }|r|d d …| d …d d …f   }t        ||«      }t#        j                  || j                  | j
                  | j                  z  | j
                  | j                  z  gd¬«      \  }}}t#        j:                  | j<                  j?                  «       «       }|�r¡|dk(  �r›|j                  | j                     j@                  }|d d …dd d …f   d d …d df   }|j                  dd«      jC                  ||j                   d   | jD                  «      }| jF                  d   jC                  | jF                  j                   d   | jD                  «      }t"        j4                  j6                  jI                  ||jK                  |j                  «      z   «      }t#        jL                  || jN                  d   | jN                  d   «      }|d	   jC                  | j                  | jD                  | j                  «      jK                  t"        jP                  ¬
«      }t#        j:                  |d   |z  «      jK                  |¬«      }|jS                  || j
                  d«      dd d d …f   }|jC                  || j
                  | j                  | j
                  z  |j                   d   «      jU                  «       }|jS                  |d|j                   d   «      }|d   |dd d d …f   z  }|jS                  |d| jD                  «      }||d   z  jK                  |¬«      }|j                  | j                     jV                  d   |z  |z   }|jY                  || j                  ¬«      }|jS                  || j
                  d«      dd d d …f   }|jC                  || j
                  | j                  | j
                  z  |j                   d   «      jU                  «       }|jS                  |d|j                   d   «      }|jK                  |j@                  |j                  ¬«      }|j[                  || j                  z  | jD                  | j                  «      }|j[                  || j                  z  | j                  d«      }t#        j\                  ||«      }|j[                  || j                  | jD                  «      }| j^                  d   jC                  | j^                  j                   d   | jD                  «      }|||z  z   jK                  |j                  «      }|jS                  |d«      d d …d df   }�nt4        j6                  jI                  || jF                  z   «      }t#        jL                  || jN                  d   | jN                  d   «      }|jS                  ||d| jD                  «      j?                  «       }|jS                  ||d| j                  «      j?                  «       }|jS                  ||d| j                  «      j?                  «       }|ja                  | j                  | j
                  z  d| j                  ¬«      }|ja                  | j                  | j
                  z  d| j                  ¬«      }| jb                  || jb                  z  z
  | jb                  z  }| j^                  d   te        ||«      z  }||d   z  }|jK                  |j                  «      |z  }||||fD �cg c]  }tg        ||| jb                  «      ‘Œ c}\  }}}}|ji                  dddd«      }t#        jj                  |d¬«      } t#        j:                  tm        |«      «      }!|d d …d d …d d …d d d …d d …f   |d d …d d …d d d …d d …d d …f   z  }"|"j%                  d¬«      }#|#d   |!ji                  ddddd«      d   z  }$|$j%                  d¬«      }%|%d   |d d …d d …d f   z  j%                  d¬«      }&t#        j:                  | d d …d d …d d …dd …f   | z
  «      }'||'ji                  dddd«      d   z  }(|(dd d d …f   |d   z  j%                  d¬«      })|rR|j                  | j                     jV                  d   d d …d f   jK                  |)j                  |)j@                  ¬«      nt#        jn                  |)d d …d d…f   «      }*t#        j2                  |*|)gd¬«      })t#        j:                  tm        t4        j6                  j9                  | d d …d d …d d …df   d«      «      «      }+|+j                  dd«      }+|+d	   |)d d …d d …d df   z  j%                  d¬«      },|,d d …d d…f   |,d d …df   }-})t#        j:                  | «      }.|dd d d …f   |)d d …d d …d df   z  }/|.ji                  dddd«      }0|/j%                  d«      |0d   z  }1|&|1z   }|jS                  |d| j                  | jD                  «      }||z   }|dkD  r|d d …d |…d d …d d …f   }|jS                  ||d«      }|-�|�|jY                  |-| j                  ¬«       | jq                  ||
«      }2| js                  |2jK                  |«      «      }3|3S c c}w )Nr&   r'   r2   r   r   rÅ   .r,   ).NNr¸   )r.   r-   )r3   Úoutput_sizer   r   r1   )r/   r.   )r   r   ):r   r/   rC   r‘   r~   r†   rz   rx   rÎ   rŒ   rÒ   rÉ   ri   rÊ   rË   rÔ   r|   r   ÚsumrŽ   rL   rÍ   r€   rn   rƒ   rÓ   r   r   r    r®   r”   rÏ   r.   r5   r‡   r“   Úsoftplusr@   r±   rˆ   rV   r(   Ú
contiguousrÌ   rÕ   rÐ   Úbmmr–   Úrepeat_interleaver)   r#   r*   Úpermuter:   r>   Ú
zeros_liker•   r™   )4rO   rA   r¶   rB   r×   rØ   rÙ   r/   rÖ   rÛ   r[   rß   r´   rÜ   rÝ   rË   rà   rá   r³   Úcache_devicer“   ÚdAÚdBÚdBxÚ
ssm_statesÚssm_states_reshapedÚ
C_reshapedÚyr–   r   Ú
D_residualÚtÚA_cumsumÚLÚG_intermediateÚGÚM_intermediateÚMÚY_diagÚdecay_statesÚB_decayÚstatesÚprevious_statesÚdecay_chunkÚ
new_statesrç   Ústate_decay_outÚC_times_statesÚstate_decay_out_permutedÚY_offræ   Úcontextualized_statess4                                                       r"   Útorch_forwardzMamba2Mixer.torch_forward   s  € ð "/×!4Ñ!4Ñˆ
�G˜QØ×#Ñ#ˆô 5°]ÀNÓSˆØŸ<™<¨Ó6ÐØ!×'Ñ'¨Ñ+¨a°$×2HÑ2HÑ.HÑHÈ1ÈtÏ}É}ÑK\Ð_c×_rÑ_rÑKrÑrÐsw÷  tBñ  tBñ  Bð  GHñ  HˆØ,<×,BÑ,BØ˜˜t×5Ñ5¸¿¹ÀtÇ~Á~ÐVÐ\^ð -Có -
Ñ)ˆˆ1ˆdÐ% rð .×7Ñ7¸¸!Ó<Ðà!-°TÐ!9Ò!m¸l×>]Ñ>]Ð^b×^lÑ^lÓ>mÐÙ!Ø%×,Ñ,¨T¯^©^Ñ<×HÑHÈÑKˆJñ " g°¢lØ&×8Ñ8Ð9JÐVZ×VdÑVdÐ8ÓeÐfiÐlp÷  mBñ  mBð  lBñ  lCð  gCñ  DˆKä %§	¡	Ø˜dŸk™k×0Ñ0×8Ñ8¸Ó;Ñ;Àô!Ðð ×!Ò!Ø$5¸¿¹×8HÑ8HÑ$HÐ!Ø $§¡Ð):Ó ;Ñá%Ü$)§I¡I¨zÐ;LÐ.MÐSUÔ$VÐ!àÐ'Ü Ÿm™m×/Ñ/Ø%¨×(=Ñ(=Ð@Q×@WÑ@WÐXZÑ@[Ñ([Ð]^Ð'_ó�ð ×.Ñ.¨{ÀdÇnÁnÐ.ÔUà $§¡¨¯©Ð5FÓ)GÈÐMiÐN_×NeÑNeÐfhÑNiÐMiÐHiÑ)j×)tÑ)tÐuvÐxyÓ)zÓ {ÐÙ%Ø$5²a¸'¸¹ÂA°oÑ$FÐ!ä8Ð9JÈNÓ[ÐÜ#Ÿk™kØØ×#Ñ# T§]¡]°T×5HÑ5HÑ%HÈ$Ï-É-ÐZ^×ZmÑZmÑJmÐnØô
Ñˆ�q˜!ô �Y‰Y�t—z‘z×'Ñ'Ó)Ó*Ð*ˆÚ! g°£là'×.Ñ.¨t¯~©~Ñ>×EÑEˆLð ’A�qš!�G‘šQ  c˜\Ñ*ˆBØ—‘˜a Ó#×*Ñ*¨:°r·x±xÀ±|ÀTÇ]Á]ÓSˆBà—l‘l 9Ñ-×4Ñ4°T·\±\×5GÑ5GÈÑ5JÈDÏMÉMÓZˆGä—‘×$Ñ$×-Ñ-¨b°7·:±:¸b¿h¹hÓ3GÑ.GÓHˆBÜ—‘˜R ×!5Ñ!5°aÑ!8¸$×:NÑ:NÈqÑ:QÓRˆBØ�/Ñ"×)Ñ)¨$¯.©.¸$¿-¹-È×I\ÑI\Ó]×`Ñ`Ôgl×gtÑgtÐ`ÓuˆAä—)‘)˜B˜y™M¨AÑ-Ó.×2Ñ2¸,Ð2ÓGˆBð
 —	‘	˜* d§m¡m°RÓ8¸¸dÂA¸ÑFˆAØ—‘˜ T§]¡]°D·N±NÀdÇmÁmÑ4SÐUV×U\ÑU\Ð]_ÑU`Óa×lÑlÓnˆAØ—	‘	˜* b¨!¯'©'°"©+Ó6ˆAà�I‘  3¨ªa <¡Ñ0ˆBð *×1Ñ1°*¸bÀ$Ç-Á-ÓPˆMØ˜ iÑ0Ñ0×4Ñ4¸LÐ4ÓIˆCð &×,Ñ,¨T¯^©^Ñ<×MÑMÈaÑPÐSUÑUÐX[Ñ[ˆJØ%×<Ñ<¸ZÐSW×SaÑSaÐ<ÓbˆJð —	‘	˜* d§m¡m°RÓ8¸¸dÂA¸ÑFˆAØ—‘˜ T§]¡]°D·N±NÀdÇmÁmÑ4SÐUV×U\ÑU\Ð]_ÑU`Óa×lÑlÓnˆAØ—	‘	˜* b¨!¯'©'°"©+Ó6ˆAð $Ÿ™¨a¯h©h¸a¿g¹g˜ÓFˆJØ",§/¡/°*¸t¿~¹~Ñ2MÈtÏ}É}Ð^b×^qÑ^qÓ"rÐØŸ™ 
¨T¯^©^Ñ ;¸T×=PÑ=PÐRSÓTˆJÜ—	‘	Ð-¨zÓ:ˆAØ—‘�z 4§>¡>°4·=±=ÓAˆAð —‘�yÑ!×(Ñ(¨¯©¯©°a©¸$¿-¹-ÓHˆAØ�] QÑ&Ñ&×*Ñ*¨1¯7©7Ó3ˆAð —	‘	˜* bÓ)ª!¨T°3¨,Ñ7ŠAô —‘×'Ñ'¨¨T¯\©\Ñ(9Ó:ˆBÜ—‘˜R ×!5Ñ!5°aÑ!8¸$×:NÑ:NÈqÑ:QÓRˆBØ)×1Ñ1°*¸gÀrÈ4Ï=É=ÓY×_Ñ_ÓaˆMØ—	‘	˜* g¨r°4×3FÑ3FÓG×MÑMÓOˆAØ—	‘	˜* g¨r°4×3FÑ3FÓG×MÑMÓOˆAØ×#Ñ# D§N¡N°d·m±mÑ$CÈÐX\×XfÑXfÐ#ÓgˆAØ×#Ñ# D§N¡N°d·m±mÑ$CÈÐX\×XfÑXfÐ#ÓgˆAØŸ™¨'°D·O±OÑ*CÑCÀtÇÁÑVˆHàŸ™ 	Ñ*Ô-?ÀÈxÓ-XÑXˆJð *¨B¨y©MÑ9ˆMØ—‘�]×(Ñ(Ó)¨BÑ.ˆAð cpÐqrÐtuÐwxÐayÖ%zÐ\]Ô&9¸!¸XÀtÇÁÕ&WÒ%zÑ"ˆM˜1˜a ð —	‘	˜!˜Q  1Ó%ˆAÜ—|‘| A¨2Ô.ˆHô —	‘	œ+ a›.Ó)ˆAð šq¢!¢Q¨ªa²Ð2Ñ3°aºº1¸dÂAÂqÊ!Ð8KÑ6LÑLˆNØ×"Ñ" rÐ"Ó*ˆAð ˜y™\¨A¯I©I°a¸¸A¸qÀ!Ó,DÀYÑ,OÑOˆNØ×"Ñ" rÐ"Ó*ˆAð ˜	‘l ]²1²a¸°:Ñ%>Ñ>×CÑCÈÐCÓJˆFô !Ÿ9™9 Xªa²²A°r±s¨lÑ%;¸hÑ%FÓGˆLØ˜,×.Ñ.¨q°"°b¸!Ó<¸YÑGÑGˆGØ˜c 4ª˜lÑ+¨m¸IÑ.FÑF×KÑKÐPQÐKÓRˆFñ *ð ×#Ñ# D§N¡NÑ3×DÑDÀQÑGÊÈ4ÈÑP×SÑSÐZ`×ZfÑZfÐou×o|Ño|ÐSÔ}ä×%Ñ% fªQ°°°¨U¡mÓ4ð ô
 —Y‘Y °Ð8¸aÔ@ˆFÜŸ)™)¤K´·±×0AÑ0AÀ(Ê1ÊaÒQRÐTVÈ;ÑBWÐY_Ó0`Ó$aÓbˆKØ%×/Ñ/°°1Ó5ˆKØ% oÑ6¸ÂÂ1ÀdÈCÀÑ9PÑP×UÑUÐZ[ÐUÓ\ˆJØ *ª1¨c¨r¨c¨6Ñ 2°JºqÀ"¸uÑ4E�IˆFô $Ÿi™i¨Ó1ˆOØ  Tª1 ™o°²qº!¸TÀ3°Ñ0GÑGˆNØ'6×'>Ñ'>¸qÀ!ÀQÈÓ'JÐ$Ø#×'Ñ'¨Ó+Ð.FÀyÑ.QÑQˆEð ˜‘ˆAà—	‘	˜* b¨$¯.©.¸$¿-¹-ÓHˆAà�J‘ˆAà˜!Š|Ø’a˜˜'˜¢1¢aÐ'Ñ(�Ø—	‘	˜* g¨rÓ2ˆAð Ð$¨Ð)AØ×3Ñ3°IÈÏÉÐ3ÔXà—i‘i  4Ó(ˆð
 !%§¡¨k¯n©n¸UÓ.CÓ DÐØ$Ð$ùòI &{s   æt	c                 óÆ   — t         rId| j                  j                  j                  j                  v rt        «       s| j                  |||«      S | j                  |||«      S )NÚcuda)rŸ   r‘   rL   r.   r—   r   rè   r  )rO   rA   r¶   rB   Úkwargss        r"   r^   zMamba2Mixer.forwardh  sT   € õ " f°·±×0CÑ0C×0JÑ0J×0OÑ0OÑ&OÔXpÔXrØ×,Ñ,¨]¸LÈ.ÓYÐYØ×!Ñ! -°¸~ÓNÐNr$   )T©NN)ra   rb   rc   Ú__doc__r   r}   r8   rJ   r   Úno_gradr˜   ÚTensorr   rè   r  r^   rd   re   s   @r"   rg   rg   y   só   ø„ ññ]8˜|ð ]8¸ð ]8ÐW[õ ]8ð~ €U‡]�]ƒ_ñ)ó ð)ð$ &*Ø.2ñ	mà—|‘|ðmð ˜d‘lðmð Ÿ™ tÑ+ó	mðf &*Ø.2ñ	E%à—|‘|ðE%ð ˜d‘lðE%ð Ÿ™ tÑ+ó	E%ðV &*Ø.2ñ		Oð ˜d‘lð	Oð Ÿ™ tÑ+÷		Or$   rg   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚMamba2RMSNormc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)zM
        Mamba2RMSNorm is equivalent to T5LayerNorm and LlamaRMSNorm
        NrH   rN   s      €r"   rJ   zMamba2RMSNorm.__init__u  s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕr$   c                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S rT   )	r/   r@   r   rV   rX   rY   rZ   rM   rL   )rO   rA   r\   r]   s       r"   r^   zMamba2RMSNorm.forward}  sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r$   r_   r`   re   s   @r"   r  r  t  s   ø„ õ$ö;r$   r  c                   óT   ‡ — e Zd Zˆ fd„Z	 	 ddedz  dej                  dz  fd„Zˆ xZS )ÚMamba2Blockc                 óÒ   •— t         ‰| �  «        || _        || _        |j                  | _        t        |j                  |j                  ¬«      | _        t        ||d¬«      | _
        y )Nrs   F)ri   rj   )rI   rJ   rh   ri   Úresidual_in_fp32r  rP   r„   r•   rg   Úmixer)rO   rh   ri   rR   s      €r"   rJ   zMamba2Block.__init__†  sU   ø€ Ü‰ÑÔØˆŒØ"ˆŒØ &× 7Ñ 7ˆÔÜ! &×"4Ñ"4¸&×:SÑ:SÔTˆŒ	Ü  °9ÐW\Ô]ˆ�
r$   Nr¶   rB   c                 ó  — |}| j                  |j                  | j                   j                  j                  ¬«      «      }| j                  r|j                  t
        j                  «      }| j                  |||¬«      }||z   }|S )Nr¸   ©r¶   rB   )r•   r@   rL   r/   r  r   rV   r  )rO   rA   r¶   rB   r  Úresiduals         r"   r^   zMamba2Block.forwardŽ  su   € ð !ˆØŸ	™	 -×"2Ñ"2¸¿¹×9IÑ9I×9OÑ9OÐ"2Ó"PÓQˆØ× Ò Ø—{‘{¤5§=¡=Ó1ˆHàŸ
™
 =¸|Ð\j˜
ÓkˆØ  =Ñ0ˆØÐr$   r  )	ra   rb   rc   rJ   r   r   r  r^   rd   re   s   @r"   r  r  …  s7   ø„ ô^ð &*Ø.2ñ	ð ˜d‘lðð Ÿ™ tÑ+÷	r$   r  c                   óh   ‡ — e Zd ZU eed<   dZdgZdZdZdZ	 e
j                  «       ˆ fd„«       Zˆ xZS )ÚMamba2PreTrainedModelrh   Úbackboner  Tc                 ó�  •— t         ‰| �  |«       t        |t        «      �r%|j	                  «        t        j                  |j                  j                  t        j                  d«      ¬«       |j                  j                  �)t        j                  |j                  j                  «       t        j                  |j                  j                  t        j                  d«      ¬«       | j                  j                  rC|j                  j                  }|t        j                  | j                  j                   «      z  }yyy)zInitialize the weights.é   )ÚaN)rI   Ú_init_weightsÚ
isinstancerg   r˜   rª   Úkaiming_uniform_rŽ   rL   r°   Úsqrtrn   Úzeros_r™   rh   Úrescale_prenorm_residualÚnum_hidden_layers)rO   ÚmoduleÚprR   s      €r"   r(  z#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$   )ra   rb   rc   r   Ú__annotations__Úbase_model_prefixÚ_no_split_modulesÚsupports_gradient_checkpointingÚ_can_compile_fullgraphÚ_is_statefulr   r  r(  rd   re   s   @r"   r#  r#  Ÿ  sB   ø… àÓØ"ÐØ&˜ÐØ&*Ð#Ø!ÐØ€Là€U‡]�]ƒ_ó>ó ô>r$   r#  z-
    Class for the MAMBA2 model outputs.
    )Úcustom_introc                   ó|   — e Zd ZU dZdZej                  dz  ed<   dZe	dz  ed<   dZ
eej                     dz  ed<   y)ÚMamba2Outputa4  
    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¶   rA   )ra   rb   rc   r  r:  r   ÚFloatTensorr1  r¶   r   rA   Útuple© r$   r"   r9  r9  Å  sG   … ñð 37Ð�u×(Ñ(¨4Ñ/Ó6Ø!%€L�%˜$‘,Ó%Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ô9r$   r9  zK
    Base class for causal language model (or autoregressive) outputs.
    c                   ó¤   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	e
dz  ed<   dZeej                     dz  ed<   y)ÚMamba2CausalLMOutputa™  
    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¶   rA   )ra   rb   rc   r  r@  r   r;  r1  rA  r¶   r   rA   r<  r=  r$   r"   r?  r?  Ú  s[   … ñ
ð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø!%€L�%˜$‘,Ó%Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ô9r$   r?  c                   óÞ   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Ze	 	 	 	 	 	 	 ddej                  dz  dej                  dz  de
dz  d	edz  d
edz  dedz  dej                  dz  deez  fd„«       Zˆ xZS )ÚMamba2Modelc           	      óÈ  •— t         ‰| �  |«       t        j                  |j                  |j
                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}«      | _        d| _        t        |j
                  |j                  ¬«      | _        | j!                  | j"                  «       | j%                  «        y c c}w )NrÅ   Frs   )rI   rJ   r   Ú	EmbeddingÚ
vocab_sizerP   Ú
embeddingsÚ
ModuleListÚranger.  r  rÊ   Úgradient_checkpointingr  r„   Únorm_fÚ"_register_load_state_dict_pre_hookÚ	load_hookÚ	post_init)rO   rh   ÚidxrR   s      €r"   rJ   zMamba2Model.__init__ö  s¡   ø€ Ü‰Ñ˜Ô äŸ,™, v×'8Ñ'8¸&×:LÑ:LÓMˆŒÜ—m‘mÔSXÐY_×YqÑYqÓSrÖ$sÈC¤[°À3Ö%GÒ$sÓtˆŒà&+ˆÔ#Ü# F×$6Ñ$6¸F×<UÑ<UÔVˆŒà×/Ñ/°·±Ô?Ø�‰Õùò %ts   Á&Cc                 óf   — |D ],  }d|v sŒ|j                  |«      ||j                  dd«      <    y  y )Nz
embedding.zembeddings.)ÚpopÚreplace)rO   Ú
state_dictÚprefixÚargsÚks        r"   rM  zMamba2Model.load_hook  s;   € Øò 	ˆAØ˜qÒ ØEOÇ^Á^ÐTUÓEV�
˜1Ÿ9™9 \°=ÓAÑBÙñ	r$   c                 ó   — | j                   S rG   ©rG  ©rO   s    r"   Úget_input_embeddingsz Mamba2Model.get_input_embeddings  s   € Ø�‰Ðr$   c                 ó   — || _         y rG   rX  ©rO   Únew_embeddingss     r"   Úset_input_embeddingsz Mamba2Model.set_input_embeddings  s	   € Ø(ˆ�r$   NÚ	input_idsÚinputs_embedsr¶   Ú	use_cacheÚoutput_hidden_statesÚreturn_dictrB   Úreturnc                 ó^  — |�|n| j                   j                  }|�|n#| j                  s| j                   j                  nd}|�|n| j                   j                  }|du |duz  rt        d«      ‚|€| j                  |«      }| j                  r| j                  r|rd}|r|€t        | j                   ¬«      }|}	|rdnd}
| j                  D ]  } ||	||¬«      }	|sŒ|
|	fz   }
Œ | j                  |	«      }	|r|
|	fz   }
|st        d„ |	||
fD «       «      S t        |	|r||
¬«      S d|
¬«      S )	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).
        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)rh   r=  r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrG   r=  )Ú.0Úvs     r"   ú	<genexpr>z&Mamba2Model.forward.<locals>.<genexpr>E  s   è ø€ Òf˜qÐXYÑXeœÑfùs   ‚Š)r:  r¶   rA   )rh   rb  rÑ   ra  rc  Ú
ValueErrorrG  rJ  r	   rÊ   rK  r<  r9  )rO   r_  r`  r¶   ra  rb  rc  rB   r  rA   Úall_hidden_statesÚmixer_blocks               r"   r^   zMamba2Model.forward  se  € ð( %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à%ˆÙ"6™B¸DÐØŸ;™;ò 	IˆKÙ'ØØ)Ø-ôˆMò $Ø$5¸Ð8HÑ$HÑ!ð	Ið Ÿ™ MÓ2ˆáØ 1°]Ð4DÑ DÐáÜÑf ]°LÐBSÐ$TÔfÓfÐfäØ+Ù)2˜Ø+ô
ð 	
à8<Ø+ô
ð 	
r$   )NNNNNNN)ra   rb   rc   rJ   rM  rZ  r^  r   r   Ú
LongTensorr   r8   r  r<  r9  r^   rd   re   s   @r"   rC  rC  ô  sÄ   ø„ ô
òòò)ð ð .2Ø15Ø%)Ø!%Ø,0Ø#'Ø.2ñ<
à×#Ñ# dÑ*ð<
ð ×'Ñ'¨$Ñ.ð<
ð ˜d‘lð	<
ð
 ˜$‘;ð<
ð # T™kð<
ð ˜D‘[ð<
ð Ÿ™ tÑ+ð<
ð 
�Ñ	ò<
ó ô<
r$   rC  z�
    The MAMBA2 Model transformer with a language modeling head on top (linear layer with weights not tied to the input
    embeddings).
    c                   ój  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Z	 	 	 	 	 ddedz  dej                  dz  d	e
dz  fˆ fd
„Ze	 	 	 	 	 	 	 	 	 d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
dz  de
dz  dej                  dz  deej                  z  deez  fd„«       Zˆ xZS )ÚMamba2ForCausalLMzlm_head.weightzbackbone.embeddings.weightc                 óÆ   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  |j                  d¬«      | _        | j                  «        y )NFrr   )
rI   rJ   rC  r$  r   r�   rP   rF  Úlm_headrN  )rO   rh   rR   s     €r"   rJ   zMamba2ForCausalLM.__init__W  sF   ø€ Ü‰Ñ˜Ô Ü# FÓ+ˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒà�‰Õr$   c                 ó6   — | j                   j                  «       S rG   )r$  rZ  rY  s    r"   rZ  z&Mamba2ForCausalLM.get_input_embeddings^  s   € Ø�}‰}×1Ñ1Ó3Ð3r$   c                 ó8   — | j                   j                  |«      S rG   )r$  r^  r\  s     r"   r^  z&Mamba2ForCausalLM.set_input_embeddingsa  s   € Ø�}‰}×1Ñ1°.ÓAÐAr$   Nr¶   rB   Úis_first_iterationc           	      óF   •— t        ‰	| �  |f|||||dœ|¤Ž}|r|sd |d<   |S )N)r`  ra  r¶   rB   rt  rB   )rI   Úprepare_inputs_for_generation)
rO   r_  r`  ra  r¶   rB   rt  r  Úmodel_inputsrR   s
            €r"   rv  z/Mamba2ForCausalLM.prepare_inputs_for_generationd  sN   ø€ ô ‘wÑ<Øð
à'ØØ%Ø)Ø1ñ
ð ñ
ˆñ Ñ/Ø-1ˆLÐ)Ñ*àÐr$   r_  r`  Úlabelsrb  rc  ra  Úlogits_to_keeprd  c
           	      ó&  — |�|n| j                   j                  }| j                  |||||||¬«      }|d   }t        |	t        «      rt        |	 d«      n|	}| j                  |dd…|dd…f   j                  | j                  j                  j                  «      «      j                  «       }d}|�* | j                  d||| j                   j                  dœ|
¤Ž}|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  ¬«      S )aN  
        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¶   r`  rb  rc  ra  rB   r   )rA  rx  rF  r   )r@  rA  r¶   rA   r=  )rh   rc  r$  r)  r}   Úslicerq  r@   rL   r/   rÏ   Úloss_functionrF  r?  r¶   rA   )rO   r_  r`  r¶   rx  rb  rc  ra  rB   ry  r  Úmamba2_outputsrA   Úslice_indicesrA  r@  Úoutputs                    r"   r^   zMamba2ForCausalLM.forward}  s-  € ð2 &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàŸ™ØØ%Ø'Ø!5Ø#ØØ)ð 'ó 
ˆð ' qÑ)ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@×CÑCÀDÇLÁL×DWÑDW×D]ÑD]Ó^Ó_×eÑeÓgˆàˆØÐØ%�4×%Ñ%Ðp¨V¸FÈtÏ{É{×OeÑOeÑpÐioÑpˆDáØ�Y °°Ð!3Ñ3ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä#ØØØ'×4Ñ4Ø(×6Ñ6ô	
ð 	
r$   )NNNNF)	NNNNNNNNr   )ra   rb   rc   Ú_tied_weights_keysrJ   rZ  r^  r   r   r  r8   rv  r   rm  r;  r}   r<  r?  r^   rd   re   s   @r"   ro  ro  N  sB  ø„ ð +Ð,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$   ro  )ro  rC  r#  )3r  r°   Údataclassesr   r   r   Ú r   rª   Úactivationsr   Úcache_utilsr   r	   Ú
generationr
   Úintegrationsr   Úmodeling_layersr   Úmodeling_utilsr   Úutilsr   r   r   r   Úutils.import_utilsr   Úconfiguration_mamba2r   Ú
get_loggerra   r    r  r}   r#   r*   r>   rC   ÚModulerE   rg   r  r  r#  r9  r?  rC  ro  Ú__all__r=  r$   r"   ú<module>r�     sˆ  ðñ ã Ý !ã Ý å &Ý !ß .Ý )Ý ,Ý 9Ý -ß SÓ SÝ 9Ý .ð 
ˆ×	Ñ	˜HÓ	%€ðV U§\¡\ð V¸Só Vò
ò(ò(	ô;˜Ÿ™Ÿ™ô ;ô$xO�"—)‘)ô xOôv;�B—I‘Iô ;ô"Ð,ô ð4 ô">˜Oó ">ó ð">ñJ ðôð
 ô:�;ó :ó óð:ñ ðôð
 ô:˜;ó :ó óð:ð& ôV
Ð'ó V
ó ðV
ñr ðôô`
Ð-¨ó `
óð`
òF H�r$   