Ë
    ÛÓ^jÆ›  ã                   ó�  — d 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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$ ddl%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7  ejp                  e9«      Z: G d„ ded¬«      Z; G d„ de.«      Z<d3d„Z=e" G d „ d!e*«      «       Z> G d"„ d#e1«      Z? G d$„ d%ej€                  «      ZA G d&„ d'e,«      ZB G d(„ d)e-«      ZC G d*„ d+e(«      ZDe G d,„ d-e«      «       ZEe G d.„ d/eE«      «       ZF G d0„ d1e+«      ZGg d2¢ZHy)4zPyTorch Bamba model.é    )Ú	TypedDictN)Únné   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)Úforce_accelerate_hooks)Úlazy_load_kernel)Úcreate_causal_maskÚcreate_recurrent_attention_mask)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚPreTrainedModel)ÚUnpack)Úauto_docstringÚcan_return_tupleÚis_torchdynamo_compilingÚlogging)Úmerge_with_config_defaultsÚno_inherit_decorator)Úresolve_internal_import)Úcapture_outputsé   )ÚJambaAttentionDecoderLayer)ÚLlamaAttentionÚLlamaForCausalLMÚLlamaMLPÚLlamaRMSNormÚLlamaRotaryEmbeddingÚrotate_half)ÚMambaRMSNormGatedÚapply_mask_to_padding_statesÚpad_tensor_by_sizeÚreshape_into_chunksÚsegment_sumé   )ÚBambaConfigc                   ó€   — e Zd ZU dZej
                  ed<   ej
                  ed<   eed<   eed<   ej                  ed<   y)ÚBambaFlashAttentionKwargsaU  
    Keyword arguments for advanced Flash Attention, causal-conv1d, and mamba_ssm kernel usage.
    Use cases include padding-free training and fewer `torch.compile` graph breaks.

    cu_seq_lens_q (`torch.LongTensor`):
        Gets cumulative sequence length for query state.
    cu_seq_lens_k (`torch.LongTensor`):
        Gets cumulative sequence length for key state.
    max_length_q (`int`):
        Maximum sequence length for query state.
    max_length_k (`int`):
        Maximum sequence length for key state.
    seq_idx (`torch.IntTensor`):
        Index of each packed sequence.
    Úcu_seq_lens_qÚcu_seq_lens_kÚmax_length_qÚmax_length_kÚseq_idxN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚtorchÚ
LongTensorÚ__annotations__ÚintÚ	IntTensor© ó    úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/bamba/modular_bamba.pyr*   r*   =   s7   … ñð  ×#Ñ#Ó#Ø×#Ñ#Ó#ØÓØÓØ�_‰_Ôr:   r*   F)Útotalc                   ó   — e Zd Zy)ÚBambaRotaryEmbeddingN©r0   r1   r2   r9   r:   r;   r>   r>   U   ó   „ Ør:   r>   c                 óh  — |j                  |«      }|j                  |«      }|j                  d   }| dd|…f   | d|d…f   }}|dd|…f   |d|d…f   }	}||z  t        |«      |z  z   }
||z  t        |«      |z  z   }t        j                  |
|gd¬«      }
t        j                  ||	gd¬«      }|
|fS )a»  Applies Rotary Position Embedding to the query and key tensors.

    Removes the interleaving of cos and sin from GLM

    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.
    éÿÿÿÿ.N©Údim)Ú	unsqueezeÚshaper!   r4   Úcat)ÚqÚkÚcosÚsinÚunsqueeze_dimÚ
rotary_dimÚq_rotÚq_passÚk_rotÚk_passÚq_embedÚk_embeds               r;   Úapply_rotary_pos_embrT   Z   sÞ   € ð( �-‰-˜Ó
&€CØ
�-‰-˜Ó
&€Cð —‘˜2‘€JØ�c˜;˜J˜;Ð&Ñ'¨¨3°
±Ð+;Ñ)<ˆ6€EØ�c˜;˜J˜;Ð&Ñ'¨¨3°
±Ð+;Ñ)<ˆ6€Eð �s‰{œ{¨5Ó1°CÑ7Ñ8€GØ�s‰{œ{¨5Ó1°CÑ7Ñ8€Gô �i‰i˜ &Ð)¨rÔ2€GÜ�i‰i˜ &Ð)¨rÔ2€GØ�GÐÐr:   c                   ó   — e Zd Zy)ÚBambaAttentionNr?   r9   r:   r;   rV   rV   €   s   „ àr:   rV   c                   ó   — e Zd Zy)ÚBambaRMSNormGatedNr?   r9   r:   r;   rX   rX   …   r@   r:   rX   c            
       ó<  ‡ — e Zd ZdZdedefˆ fd„Z	 	 	 ddej                  de	dz  dej                  dz  d	ej                  dz  fd
„Z	 	 dde	dz  dej                  dz  fd„Z ed«      	 	 	 dde	dz  dej                  dz  d	ej                  dz  fd„«       Zˆ xZS )Ú
BambaMixeruP  
    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)

    The are a few differences between this and Mamba2Mixer:
    - The variable use_precomputed_states is slightly different due to the hybrid cache structure
    - There's a few non-obvious bugs fixed with batching in the slow path that exist in main
    - Some extra variables that our layer doesn't need have been removed
    - We ported most of the refactors in https://github.com/huggingface/transformers/pull/35154, which is (as of Dec 18, 2024) unmerged
    ÚconfigÚ	layer_idxc           	      ó  •— t         ‰| �  «        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        t        |j                  | j                  z  «      | _        || _        |j                  | _        |j                  | _        t"        |j                     | _        |j&                  | _        |j*                  | _        |j.                  | _        |j2                  | _        |j6                  | _        |j:                  | _        |j<                  | _        |j>                  | _        | j                  d| j0                  z  | j                  z  z   | _         tC        jD                  | j@                  | j@                  |j                  | j                  | j@                  | j                  dz
  ¬«      | _#        | j                  | j@                  z   | j                  z   }tC        jH                  | j                  || j(                  ¬«      | _%        tC        jL                  tO        jP                  | j                  «      «      | _)        tO        jT                  d| j                  dz   «      }tC        jL                  tO        jV                  |«      «      | _,        t[        | j                  | j,                  ¬«      | _.        tC        jL                  tO        jP                  | j                  «      «      | _/        tC        jH                  | j                  | j                  | j(                  ¬«      | _0        tc        d«      }te        |dd «      a3te        |dd «      a4tc        d	«      }tk        |d
¬«      a6tk        |d¬«      a7tk        |d¬«      a8ts        tl        tn        tp        th        tf        f«      a:tt        stv        jy                  d«       ntv        jy                  d«       |jz                  |   | _>        y )Nr   r'   )Úin_channelsÚout_channelsÚbiasÚkernel_sizeÚgroupsÚpadding)r`   ©Úepsz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-conv1dzDThe fast path for Bamba will be used when running the model on a GPU)?ÚsuperÚ__init__Úmamba_n_headsÚ	num_headsÚhidden_sizeÚmamba_d_stateÚssm_state_sizeÚmamba_d_convÚconv_kernel_sizer7   Úmamba_expandÚintermediate_sizer\   Úmamba_conv_biasÚuse_conv_biasÚ
hidden_actÚ
activationr   ÚactÚmamba_proj_biasÚuse_biasÚrms_norm_epsÚlayer_norm_epsilonÚmamba_n_groupsÚn_groupsÚmamba_d_headÚhead_dimÚmamba_chunk_sizeÚ
chunk_sizeÚtime_step_limitÚtime_step_minÚtime_step_maxÚconv_dimr   ÚConv1dÚconv1dÚLinearÚin_projÚ	Parameterr4   ÚonesÚdt_biasÚarangeÚlogÚA_logrX   ÚnormÚDÚout_projr   Úgetattrrf   rg   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)Úselfr[   r\   Úprojection_sizeÚAÚcausal_conv1dÚ	mamba_ssmÚ	__class__s          €r;   rj   zBambaMixer.__init__˜   s,  ø€ Ü‰ÑÔØ×-Ñ-ˆŒØ!×-Ñ-ˆÔØ$×2Ñ2ˆÔØ &× 3Ñ 3ˆÔÜ!$ V×%8Ñ%8¸4×;KÑ;KÑ%KÓ!LˆÔØ"ˆŒØ#×3Ñ3ˆÔØ ×+Ñ+ˆŒÜ˜&×+Ñ+Ñ,ˆŒØ×.Ñ.ˆŒà"(×"5Ñ"5ˆÔà×-Ñ-ˆŒØ×+Ñ+ˆŒØ ×1Ñ1ˆŒà%×5Ñ5ˆÔØ#×1Ñ1ˆÔØ#×1Ñ1ˆÔà×.Ñ.°°T·]±]Ñ1BÀT×EXÑEXÑ1XÑXˆŒÜ—i‘iØŸ™ØŸ™Ø×'Ñ'Ø×-Ñ-Ø—=‘=Ø×)Ñ)¨AÑ-ô
ˆŒð ×0Ñ0°4·=±=Ñ@À4Ç>Á>ÑQˆÜ—y‘yØ×ÑØØ—‘ô
ˆŒô —|‘|¤E§J¡J¨t¯~©~Ó$>Ó?ˆŒô �L‰L˜˜DŸN™N¨QÑ.Ó/ˆÜ—\‘\¤%§)¡)¨A£,Ó/ˆŒ
Ü% d×&<Ñ&<À$×BYÑBYÔZˆŒ	Ü—‘œeŸj™j¨¯©Ó8Ó9ˆŒäŸ	™	 $×"8Ñ"8¸$×:JÑ:JÐQU×Q^ÑQ^Ô_ˆŒô )¨Ó9ˆÜ& }Ð6LÈdÓSÐÜ" =Ð2DÀdÓKÐô % [Ó1ˆ	Ü!8ØÐ$^ô"
Ðô %<ØÐ$Wô%
Ð!ô ,CØÐ$^ô,
Ð(ô
 "%ä&Ü)Ü0Ü Ü$ðó"
Ðõ &Ü×Ñð>õô ×ÑÐ fÔgà ×,Ñ,¨YÑ7ˆ�r:   NÚhidden_statesÚcache_paramsÚattention_maskr/   c                 óÈ  — t        ||«      }| j                  |«      }|j                  \  }}}| j                  | j                  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                  || 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¬«      }|�XtR        jT                  jW                  || jX                  |j                  d   z
  df«      }|j[                  || j                  «       | j&                  dvr5| j]                  | j!                  |«      dd |j                  d   …f   «      }nQt_        || 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| j8                  d|
rnd dœ|¤Ž\  }}|�|�|jc                  || j                  «      }|j=                  ||d«      }| jA                  ||«      }| jC                  |«      }|S )Nr   r'   rB   rC   .©ÚdtypeT)Úzr�   Údt_softplusg        ÚinfÚdt_limitF)r’   r‚   r/   rw   Úrmsnorm_weightÚrmsnorm_epsÚoutproj_weightÚoutproj_biasÚheaddimÚngroupsÚnorm_before_gateÚreturn_final_statesr   )ÚsiluÚswish)ÚxÚweightr`   rw   r/   )r‚   r’   rª   r/   rµ   r�   r«   Úinitial_states)2r#   rŠ   rF   r~   ro   Úhas_previous_stater\   ÚlayersÚconv_statesÚrecurrent_statesÚsqueezeÚsplitrs   r†   rl   rf   rˆ   r¹   r`   rw   r4   Úexpr�   ÚfloatÚexpandr€   ÚtoÚfloat32r�   r’   Úviewr•   r‘   r“   rƒ   Útrainingr—   r‚   Úvariance_epsilonÚ	transposerG   r   Ú
functionalÚpadrq   Úupdate_conv_staterx   rg   r–   Úupdate_recurrent_state)rž   r¤   r¥   r¦   r/   Úprojected_statesÚ
batch_sizeÚseq_lenÚ_Úgroups_time_state_sizeÚuse_precomputed_statesÚ
conv_stateÚrecurrent_stateÚgateÚhidden_states_B_CÚdtÚBÚCr    r�   r’   Úhidden_states_reshapedÚoutÚdt_limit_kwargsr½   Úscan_outputÚ	ssm_states                              r;   Úcuda_kernels_forwardzBambaMixer.cuda_kernels_forwardö   sÐ  € ô 5°]ÀNÓSˆØŸ<™<¨Ó6Ðð "/×!4Ñ!4Ñˆ
�G˜QØ!%§¡°×1DÑ1DÑ!DÐà!-°TÐ!9Ò!m¸l×>]Ñ>]Ð^b×^lÑ^lÓ>mÐÙ!Ø%×,Ñ,¨T¯^©^Ñ<×HÑHÈÑKˆJØ*×1Ñ1°$·.±.ÑA×RÑRÐSTÑUˆOò " g°£lØ*:×*BÑ*BÀ1Ó*E×*KÑ*KØ×'Ñ'¨¯©¸¿¹ÐGÈRð +Ló +Ñ'ˆDÐ# Rô
 !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ð@ ˆ
ô{ —‘˜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Ø%*Ø(-ñ#ð$ &ñ%�ðp ˆ
ðE /?×.DÑ.DØ×+Ñ+¨T¯]©]¸D¿N¹NÐKÐQSð /Eó /Ñ+�Ð'¨ð
 %6×$?Ñ$?ÀÀ1Ó$EÐ!Ù)ô ).¯	©	°:Ð?PÐ2QÐWYÔ(ZÐ%ØÐ+Ü"$§-¡-×"3Ñ"3Ø)Ø×.Ñ.Ð1B×1HÑ1HÈÑ1LÑLÈaÐPó#�Kð !×2Ñ2°;ÀÇÁÔOà—?‘?Ð*;Ñ;Ø(,¯©°·±Ð=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Ø ,× CÑ CÀIÈtÏ~É~Ó ^�Ià)×.Ñ.¨z¸7ÀBÓG�à"Ÿi™i¨°TÓ:�ð —m‘m KÓ0�Øˆ
r:   c                 óˆ  — |j                   \  }}}|j                  }t        ||«      }| j                  |«      }|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   }
| j-                  |
«      }
nÇ|rt        j.                  |
gd¬«      }
|�Xt0        j2                  j5                  |
| j                  |
j                   d   z
  df«      }|j                  || j                  «       | j-                  | j#                  |
«      dd |
j                   d   …f   «      }
|r
|
d| d …f   }
|
j                  dd«      }
t        |
|«      }
t        j                  |
| j
                  | j6                  | j8                  z  | j6                  | j8                  z  gd¬«      \  }}}t        j:                  | j<                  j?                  «       «       }|�r­|dk(  �r§|j                  | j                     j@                  d   jB                  }|d d …dd d …f   d d …d df   }|j                  dd«      jE                  ||j                   d   | jF                  «      }| jH                  d   jE                  | jH                  j                   d   | jF                  «      }t        j0                  j2                  jK                  ||jM                  |j                  «      z   «      }t        jN                  || jP                  d   | jP                  d   «      }|d   jE                  | j                  | jF                  | j8                  «      jM                  t        jR                  ¬	«      }t        j:                  |d   |z  «      jM                  |¬
«      }|jU                  || j6                  d«      dd d d …f   }|jE                  || j6                  | j                  | j6                  z  |j                   d   «      jW                  «       }|jU                  |d|j                   d   «      }|d   |dd d d …f   z  }|jU                  |d| jF                  «      }||d   z  jM                  |¬
«      }|j                  | j                     j@                  d   |z  |z   }|jY                  || j                  «      }|jU                  || j6                  d«      dd d d …f   }|jE                  || j6                  | j                  | j6                  z  |j                   d   «      jW                  «       }|jU                  |d|j                   d   «      }|jM                  |jB                  |j                  ¬«      }|j[                  || j                  z  | jF                  | j8                  «      }|j[                  || j                  z  | j8                  d«      }t        j\                  ||«      }|j[                  || j                  | jF                  «      }| j^                  d   jE                  | j^                  j                   d   | jF                  «      }|||z  z   jM                  |j                  «      }|jU                  |d«      d d …d df   }�nt0        j2                  jK                  || jH                  z   «      }t        jN                  || jP                  d   | jP                  d   «      }|jU                  ||d| jF                  «      j?                  «       }|jU                  ||d| j8                  «      j?                  «       }|jU                  ||d| j8                  «      j?                  «       }|ja                  | j                  | j6                  z  d| j                  ¬«      }|ja                  | j                  | j6                  z  d| j                  ¬«      }| jb                  || jb                  z  z
  | jb                  z  }| j^                  d   te        ||«      z  }||d   z  }|jM                  |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                     j@                  d   d d …d f   jM                  |)j                  |)jB                  ¬«      nt        jn                  |)d d …d d…f   «      }*t        j.                  |*|)gd¬«      })t        j:                  tm        t0        j2                  j5                  | 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   }|jU                  |d| j                  | jF                  «      }||z   }|dkD  r|d d …d |…d d …d d …f   }|jU                  ||d«      }|-�|�|jY                  |-| j                  «      }-| jq                  ||	«      }2| js                  |2jM                  |«      «      }3|3S c c}w )NrB   rC   r'   r   r   .).N).NNr¨   ©Údevice)rã   r©   )rD   Úoutput_sizer   é   éþÿÿÿ)r©   rã   )r'   r   ):rF   r©   r#   rŠ   rÀ   rs   r†   rl   rÉ   r»   r\   r¼   r½   rÌ   rq   r4   Úsumrˆ   r¹   r¿   ru   r`   rx   rG   r   rÊ   rË   r~   ro   rÁ   r�   rÂ   r¾   rã   rÃ   r€   r�   ÚsoftplusrÄ   Úclamprƒ   rÅ   ÚreshapeÚ
contiguousrÍ   rÆ   Úbmmr’   Úrepeat_interleaver‚   r$   r%   ÚpermuteÚcumsumr&   Ú
zeros_liker‘   r“   )4rž   Úinput_statesr¥   r¦   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’   Úpad_sizeÚ
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BambaMixer.torch_forward›  sš  € ð ".×!3Ñ!3Ñˆ
�G˜QØ×"Ñ"ˆô 4°LÀ.ÓQˆØŸ<™<¨Ó5ÐØ&6×&<Ñ&<Ø×'Ñ'¨¯©¸¿¹ÐGÈRð '=ó '
Ñ#ˆÐ ð .×7Ñ7¸¸!Ó<Ðà!-°TÐ!9Ò!m¸l×>]Ñ>]Ð^b×^lÑ^lÓ>mÐÙ!Ø%×,Ñ,¨T¯^©^Ñ<×HÑHÈÑKˆJñ " g°¢lØ&×8Ñ8Ð9JÈDÏNÉNÓ[Ð\_Ðbf×bwÑbwÐawÑaxÐ\xÑyˆ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ÔKà $§¡¨¯©Ð5FÓ)GÈÐMjÐO`×OfÑOfÐgiÑOjÐMjÐHjÑ)kÓ lÐÙ%Ø$5°c¸G¸8¹9°nÑ$EÐ!Ø 1× ;Ñ ;¸A¸qÓ AÐä8Ð9JÈNÓ[ÐÜ#Ÿk™kØØ×#Ñ# T§]¡]°T×5HÑ5HÑ%HÈ$Ï-É-ÐZ^×ZmÑZmÑJmÐnØô
Ñˆ�q˜!ô �Y‰Y�t—z‘z×'Ñ'Ó)Ó*Ð*ˆÚ! g°£là'×.Ñ.¨t¯~©~Ñ>×OÑOÐPQÑR×YÑYˆ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ÈÏÉÓXˆ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Ø(×?Ñ?À	È4Ï>É>ÓZ�	à—i‘i  4Ó(ˆð
 !%§¡¨k¯n©n¸UÓ.CÓ DÐØ$Ð$ùòI &{s   ä<r?rˆ   c                 ó‚  — t         rJd| j                  j                  j                  j                  v rt        «       s| j                  ||||«      S |�t        d«      ‚|j                  }|�B|j                  d   dkD  r0|j                  d   dkD  r||d d …d d …d f   z  j                  |«      }| j                  |||«      S )NÚcudaz\`seq_idx` support requires fast path support. Please install `mamba_ssm` and `causal_conv1d`r'   r   )r™   rŠ   r¹   rã   Útyper   rà   ÚNotImplementedErrorr©   rF   rÄ   r  )rž   r¤   r¥   r¦   r/   Úkwargsr©   s          r;   ÚforwardzBambaMixer.forwardb  sÆ   € õ " f°·±×0CÑ0C×0JÑ0J×0OÑ0OÑ&OÔXpÔXrØ×,Ñ,¨]¸LÈ.ÐZaÓbÐbØÐÜ%Ønóð ð ×#Ñ#ˆØÐ%¨.×*>Ñ*>¸qÑ*AÀAÒ*EÈ.×J^ÑJ^Ð_`ÑJaÐdeÒJeà*¨^ºAºqÀ$¸JÑ-GÑG×KÑKÈEÓRˆMà×!Ñ! -°¸~ÓNÐNr:   )NNN)NN)r0   r1   r2   r3   r(   r7   rj   r4   ÚTensorr   r8   rà   r  r
   r  Ú__classcell__©r£   s   @r;   rZ   rZ   Š   s  ø„ ñð\8˜{ð \8°sõ \8ðB &*Ø.2Ø*.ñbà—|‘|ðbð ˜d‘lðbð Ÿ™ tÑ+ð	bð
 —‘ 4Ñ'óbðP &*Ø.2ñ	D%ð ˜d‘lðD%ð Ÿ™ tÑ+ó	D%ñN ˜HÓ%ð &*Ø.2Ø*.ñOð ˜d‘lðOð Ÿ™ tÑ+ð	Oð
 —‘ 4Ñ'òOó &ôOr:   rZ   c                   ó   — e Zd Zy)ÚBambaMLPNr?   r9   r:   r;   r  r  y  r@   r:   r  c                   ó   — e Zd Zy)ÚBambaRMSNormNr?   r9   r:   r;   r  r  }  r@   r:   r  c                   óJ  ‡ — e Zd Zdde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e   deej                  eej                  ej                  f   dz  f   fd„Zˆ xZS )ÚBambaDecoderLayerr[   r\   r�   c                 óè   •— t         ‰| �  ||«       | `d}|dk(  rt        nd } ||«      | _        || _        |dk(  rt        ||¬«      | _        y |dk(  rt        ||«      | _        y t        d|›�«      ‚)Nr'   Úlinear_attention)r[   r\   Úfull_attentionzInvalid layer_type: )
ri   rj   Ú	self_attnr  Úfeed_forwardÚ
block_typerZ   ÚmambarV   Ú
ValueError)rž   r[   r\   r�   Únum_expertsÚffn_layer_classr£   s         €r;   rj   zBambaDecoderLayer.__init__‚  s   ø€ Ü‰Ñ˜ Ô+àˆNàˆØ&1°QÒ&6�(¸DˆÙ+¨FÓ3ˆÔà$ˆŒØÐ+Ò+Ü#¨6¸YÔGˆD�JØÐ+Ò+Ü+¨F°IÓ>ˆD�NäÐ3°J°>ÐBÓCÐCr:   Nr¤   r¦   Úposition_idsÚpast_key_valuesÚ	use_cacheÚposition_embeddingsr  Úreturnc           
      ó2  — |}| j                  |«      }| j                  dk(  r | j                  d|||dœ|¤Ž}d }	n+| j                  dk(  r | j                  d||||||dœ|¤Ž\  }}	||z   }|}| j	                  |«      }| j                  |«      }||z   }|	fS )Nr   )r¤   r¥   r¦   r!  )r¤   r¦   r)  r*  r+  r,  r9   )Úinput_layernormr$  r%  r"  Úpre_ff_layernormr#  )
rž   r¤   r¦   r)  r*  r+  r,  r  ÚresidualÚself_attn_weightss
             r;   r  zBambaDecoderLayer.forward“  sá   € ð !ˆà×,Ñ,¨]Ó;ˆà�?‰?Ð0Ò0Ø&˜DŸJ™Jð Ø+Ø,Ø-ñð ñ	ˆMð !%ÑØ�_‰_Ð 0Ò0Ø/=¨t¯~©~ð 0Ø+Ø-Ø)Ø /Ø#Ø$7ñ0ð ñ0Ñ,ˆMÐ,ð ! =Ñ0ˆà ˆØ×-Ñ-¨mÓ<ˆØ×)Ñ)¨-Ó8ˆØ  =Ñ0ˆàÐ/Ð/Ð/r:   )r   )NNNFN)r0   r1   r2   r(   r7   Ústrrj   r4   r  r5   r   ÚboolÚtupler   r*   ÚFloatTensorr  r  r  s   @r;   r  r  �  sî   ø„ ñD˜{ð D°sð DÈõ Dð( /3Ø04Ø(,Ø!&ØHLñ(0à—|‘|ð(0ð Ÿ™ tÑ+ð(0ð ×&Ñ&¨Ñ-ð	(0ð
  ™ð(0ð ˜$‘;ð(0ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð(0ð Ð2Ñ3ð(0ð 
ˆu× Ñ  %¨×(9Ñ(9¸5×;LÑ;LÐ(LÑ"MÐPTÑ"TÐTÑ	U÷(0r:   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eedœZ ej"                  «       ˆ fd„«       Zˆ xZS )ÚBambaPreTrainedModelr[   ÚmodelTr  r*  )r¤   Ú
attentionsc           
      ój  •— t         ‰| �  |«       t        |t        «      r“t	        j
                  |j                  «       t	        j                  |j                  t        j                  t        j                  d|j                  dz   «      «      «       t	        j
                  |j                  «       y y )Nr'   )ri   Ú_init_weightsÚ
isinstancerZ   ÚinitÚones_r�   Úcopy_r�   r4   r�   rŽ   rl   r’   )rž   Úmoduler£   s     €r;   r<  z"BambaPreTrainedModel._init_weightsÎ  sq   ø€ ä‰Ñ˜fÔ%Ü�fœjÔ)Ü�J‰J�v—~‘~Ô&Ü�J‰J�v—|‘|¤U§Y¡Y¬u¯|©|¸A¸v×?OÑ?OÐRSÑ?SÓ/TÓ%UÔVÜ�J‰J�v—x‘xÕ ð *r:   )r0   r1   r2   r(   r6   Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_is_statefulÚ_can_compile_fullgraphr  rV   Ú_can_record_outputsr4   Úno_gradr<  r  r  s   @r;   r8  r8  ¾  sg   ø… àÓØÐØ&*Ð#Ø,Ð-ÐØ#4Ð"5ÐØÐØ€NØ€LØ!Ðà*Ø$ñÐð
 €U‡]�]ƒ_ó!ó ô!r:   r8  c                   óò   ‡ — e 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 )Ú
BambaModelr[   c           	      óZ  •— t         ‰| �  |«       |j                  | _        |j                  | _        t        j                  |j                  |j                  | j                  «      | _        g }t        |j                  «      D ],  }|j                  t        |||j                  |   ¬«      «       Œ. t        j                  |«      | _        |j                   | _        t#        |j                  |j$                  ¬«      | _        t)        |¬«      | _        d| _        | j/                  «        y )N)r\   r�   rd   ©r[   F)ri   rj   Úpad_token_idÚpadding_idxÚ
vocab_sizer   Ú	Embeddingrm   Úembed_tokensÚrangeÚnum_hidden_layersÚappendr  Úlayers_block_typeÚ
ModuleListr¼   Ú_attn_implementationr  r{   Úfinal_layernormr>   Ú
rotary_embÚgradient_checkpointingÚ	post_init)rž   r[   Údecoder_layersÚir£   s       €r;   rj   zBambaModel.__init__Ù  sð   ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒäŸL™L¨×):Ñ):¸F×<NÑ<NÐPT×P`ÑP`ÓaˆÔØˆÜ�v×/Ñ/Ó0ò 	rˆAØ×!Ñ!Ô"3°FÀaÐTZ×TlÑTlÐmnÑToÔ"pÕqð	rä—m‘m NÓ3ˆŒà$*×$?Ñ$?ˆÔ!Ü+¨F×,>Ñ,>ÀF×DWÑDWÔXˆÔÜ.°fÔ=ˆŒà&+ˆÔ#à�‰Õr:   NÚ	input_idsr¦   r)  r*  Úinputs_embedsr+  r  r-  c           
      óp  — |d u |d uz  rt        d«      ‚|€| j                  |«      }|}|r|€t        | j                  ¬«      }|€=t	        j
                  |j                  d   |j                  ¬«      j                  d«      }t        |x}	t        «      s)| j                  ||||dœ}
t        di |
¤Žt        di |
¤Ždœ}	| j                  ||¬«      }t        | j                  «      D ]1  \  }} ||f|	| j                  j                   |      ||||d	œ|¤Ž\  }}Œ3 | j#                  |«      }t%        ||¬
«      S )Nz:You must specify exactly one of input_ids or inputs_embedsrO  r'   râ   r   )r[   rb  r¦   r*  r)  )r!  r   )r)  )r¦   r)  r*  r+  r,  )Úlast_hidden_stater*  r9   )r&  rT  r	   r[   r4   rŽ   rF   rã   rE   r=  Údictr   r   r\  Ú	enumerater¼   rX  r[  r   )rž   ra  r¦   r)  r*  rb  r+  r  r¤   Úcausal_mask_mappingÚmask_kwargsr,  r`  Údecoder_layerÚattn_weightss                  r;   r  zBambaModel.forwardì  sn  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø ×-Ñ-¨iÓ8ˆMØ%ˆá˜Ð0Ü*°$·+±+Ô>ˆOàÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\×fÑfÐghÓiˆLä°Ð?Ð-ÄÔFð Ÿ+™+Ø!.Ø"0Ø#2Ø ,ñˆKô #5Ñ"C°{Ñ"CÜ$CÑ$RÀkÑ$Rñ#Ðð #Ÿo™o¨mÈ,˜oÓWÐä )¨$¯+©+Ó 6ò 		ÑˆAˆ}Ù*7Øð+à2°4·;±;×3PÑ3PÐQRÑ3SÑTØ)Ø /Ø#Ø$7ñ+ð ñ+Ñ'ˆM™<ð		ð ×,Ñ,¨]Ó;ˆä&Ø+Ø+ô
ð 	
r:   )NNNNNN)r0   r1   r2   r(   rj   r   r   r   r4   r5   r  r   r6  r4  r   r*   r   r  r  r  s   @r;   rM  rM  ×  sÍ   ø„ ð˜{õ ð&  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ñ7
à×#Ñ# dÑ*ð7
ð Ÿ™ tÑ+ð7
ð ×&Ñ&¨Ñ-ð	7
ð
  ™ð7
ð ×(Ñ(¨4Ñ/ð7
ð ˜$‘;ð7
ð Ð2Ñ3ð7
ð 
!ò7
ó ó ó  ô7
r:   rM  c                   ó0  ‡ — e Zd 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fd„«       «       Z	 	 	 	 	 	 dˆ fd„	Zˆ xZS )ÚBambaForCausalLMc                 óf   •— t         ‰| �  |«       |j                  | _        | j                  «        y )N)ri   rj   Úz_loss_coefficientr^  )rž   r[   r£   s     €r;   rj   zBambaForCausalLM.__init__*  s*   ø€ Ü‰Ñ˜Ô Ø"(×";Ñ";ˆÔð 	�‰Õr:   Nra  r¦   r)  r*  rb  Úlabelsr+  Úlogits_to_keepr-  c	           
      óL  —  | j                   d
||||||dœ|	¤Ž}
|
j                  }t        |t        «      rt	        | d«      n|}| j                  |dd…|dd…f   «      }d}|�” | j                  d
||| j                  j                  dœ|	¤Ž}| j                  dkD  r[|j                  d¬«      j                  |j                  ¬«      j                  d«      j                  «       }|| j                  |z  z   }t        |||
j                   |
j"                  |
j$                  ¬	«      S )aJ  
        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, BambaForCausalLM

        >>> model = BambaForCausalLM.from_pretrained("...")
        >>> tokenizer = AutoTokenizer.from_pretrained("...")

        >>> 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."
        ```)ra  r¦   r)  r*  rb  r+  N)Úlogitsro  rR  r   rB   rC   r¨   r   )Úlossrr  r*  r¤   r:  r9   )r9  rd  r=  r7   ÚsliceÚlm_headÚloss_functionr[   rR  rn  Ú	logsumexprÄ   r©   ÚpowÚmeanr   r*  r¤   r:  )rž   ra  r¦   r)  r*  rb  ro  r+  rp  r  Úoutputsr¤   Úslice_indicesrr  rs  Úz_losss                   r;   r  zBambaForCausalLM.forward1  s6  € ðH ,6¨4¯:©:ð ,
ØØ)Ø%Ø+Ø'Øñ,
ð ñ,
ˆð  ×1Ñ1ˆÜ8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%Ðp¨V¸FÈtÏ{É{×OeÑOeÑpÐioÑpˆDØ×&Ñ&¨Ò*Ø×)Ñ)¨bÐ)Ó1×4Ñ4¸4¿:¹:Ð4ÓF×JÑJÈ1ÓM×RÑRÓT�Ø˜d×5Ñ5¸Ñ>Ñ>�ä%ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r:   c           
      óh   •— | j                   j                  |d<   t        ‰
| �  |f||||||dœ|¤Ž}	|	S )Nrp  )r*  r¦   rb  r)  r+  Úis_first_iteration)r[   Únum_logits_to_keepri   Úprepare_inputs_for_generation)rž   ra  r*  r¦   rb  r)  r+  r~  r  Úmodel_inputsr£   s             €r;   r€  z.BambaForCausalLM.prepare_inputs_for_generationr  sU   ø€ ð $(§;¡;×#AÑ#AˆÐÑ Ü‘wÑ<Øð	
à+Ø)Ø'Ø%ØØ1ñ	
ð ñ	
ˆð Ðr:   )NNNNNNNr   )NNNNTF)r0   r1   r2   rj   r   r   r4   r5   r  r   r6  r4  r7   r   r  r€  r  r  s   @r;   rl  rl  )  sû   ø„ ôð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñ=
à×#Ñ# dÑ*ð=
ð Ÿ™ tÑ+ð=
ð ×&Ñ&¨Ñ-ð	=
ð
  ™ð=
ð ×(Ñ(¨4Ñ/ð=
ð × Ñ  4Ñ'ð=
ð ˜$‘;ð=
ð ˜eŸl™lÑ*ð=
ð 
 ò=
ó ó ð=
ðD ØØØØØ ÷ñ r:   rl  )rM  rl  r8  )r'   )Ir3   Útypingr   r4   r   Ú r   r>  Úactivationsr   Úcache_utilsr   r	   Úintegrations.accelerater
   Úintegrations.hub_kernelsr   Úmasking_utilsr   r   Úmodeling_outputsr   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.import_utilsr   Úutils.output_capturingr   Újamba.modeling_jambar   Úllama.modeling_llamar   r   r   r   r    r!   Úmamba2.modeling_mamba2r"   r#   r$   r%   r&   Úconfiguration_bambar(   Ú
get_loggerr0   rš   r*   r>   rT   rV   rX   ÚModulerZ   r  r  r  r8  rM  rl  Ú__all__r9   r:   r;   ú<module>r—     sD  ðñ& å ã Ý å &Ý !ß .Ý =Ý 8ß Pß OÝ -Ý &ß XÓ Xß MÝ 9Ý 5Ý =÷÷ ÷õ õ -ð 
ˆ×	Ñ	˜HÓ	%€ô 	°õ ô0	Ð/ô 	ó
#ðL ô	�^ó 	ó ð	ô	Ð)ô 	ô
lO�—‘ô lOô^	ˆxô 	ô	�<ô 	ô:0Ð2ô :0ðz ô!˜?ó !ó ð!ð0 ôN
Ð%ó N
ó ðN
ôb`Ð'ô `òF E�r:   