Ë
    ÛÓ^jÑ  ã                   ó4  — d dl mZ d dlmZ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 ddlmZ ddlmZmZ ddlm Z m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5  e,jl                  e7«      Z8 G d„ ded¬«      Z9 G d„ dejt                  «      Z;d„ Z<d ejz                  d!e>d"ejz                  fd#„Z?	 dHd$ejt                  d%ejz                  d&ejz                  d'ejz                  d(ejz                  dz  d)e@d*e@d+e&e(   fd,„ZAdId-„ZB G d.„ d/ejt                  «      ZC G d0„ d1ej                  jt                  «      ZDd2ejz                  d3e>fd4„ZEd5„ ZFd6„ ZGd7„ ZH G d8„ d9ejt                  «      ZI G d:„ d;ejt                  «      ZJ ed<«       G d=„ d>ejt                  «      «       ZK G d?„ d@e«      ZLe) G dA„ dBe$«      «       ZMe) G dC„ dDeM«      «       ZNe) G dE„ dFeMe«      «       ZOg dG¢ZPy)Jé    )ÚCallable)ÚOptionalÚ	TypedDictN)Únné   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úuse_kernel_forward_from_hub)Úforce_accelerate_hooks)Úlazy_load_kernel)Úcreate_causal_maskÚcreate_recurrent_attention_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚis_torchdynamo_compilingÚlogging)Úmaybe_autocastÚmerge_with_config_defaults)Úresolve_internal_import)Úcapture_outputsé   )Ú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© ó    ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/bamba/modeling_bamba.pyr&   r&   7   s7   … ñð  ×#Ñ#Ó#Ø×#Ñ#Ó#ØÓØÓØ�_‰_Ôr6   r&   F)Útotalc                   óÄ   ‡ — e Zd ZU ej                  ed<   ddefˆ fd„Ze	 	 	 ddedz  de	d   de
dz  ded	ef   fd
„«       Z ej                  «       ed„ «       «       Zˆ xZS )ÚBambaRotaryEmbeddingÚinv_freqNÚconfigc                 ó®  •— t         ‰| �  «        |j                  | _        |j                  | _        || _        | j
                  j                  d   | _        | j                  }| j                  dk7  rt        | j                     } || j
                  |«      \  }| _
        | j                  d|d¬«       | j                  d|j                  «       d¬«       y )NÚ	rope_typeÚdefaultr;   F)Ú
persistentÚoriginal_inv_freq)ÚsuperÚ__init__Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenr<   Úrope_parametersr>   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚclone)Úselfr<   ÚdeviceÚrope_init_fnr;   Ú	__class__s        €r7   rC   zBambaRotaryEmbedding.__init__R   s¶   ø€ Ü‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àˆŒàŸ™×4Ñ4°[ÑAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÒ&Ü.¨t¯~©~Ñ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆ�$Ô(à×Ñ˜Z¨¸eÐÔDØ×ÑÐ0°(·.±.Ó2BÈuÐÕUr6   rM   ztorch.deviceÚseq_lenÚreturnztorch.Tensorc                 ó  — | j                   d   }t        | dd«      xs | j                  | j                  z  }d}d|t	        j
                  d|dt        j                  ¬«      j                  |t        j                  ¬«      |z  z  z  }||fS )	a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚhead_dimNg      ð?r   é   ©Údtype©rM   rW   )	rG   ÚgetattrÚhidden_sizeÚnum_attention_headsr0   ÚarangeÚint64ÚtoÚfloat)r<   rM   rP   ÚbaseÚdimÚattention_factorr;   s          r7   rH   z4BambaRotaryEmbedding.compute_default_rope_parametersb   s�   € ð& ×%Ñ% lÑ3ˆÜ�f˜j¨$Ó/Òc°6×3EÑ3EÈ×IcÑIcÑ3cˆàÐð Ø”U—\‘\ ! S¨!´5·;±;Ô?×BÑBÈ&ÔX]×XcÑXcÐBÓdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r6   c                 óN  — | j                   d d d …d f   j                  «       j                  |j                  d   dd«      j	                  |j
                  «      }|d d …d d d …f   j                  «       }t        |j
                  j                  t        «      r/|j
                  j                  dk7  r|j
                  j                  nd}t        |d¬«      5  |j                  «       |j                  «       z  j                  dd«      }t        j                  ||fd¬	«      }|j                  «       | j                  z  }|j                  «       | j                  z  }	d d d «       j	                  |j                   ¬
«      	j	                  |j                   ¬
«      fS # 1 sw Y   ŒAxY w)Nr   éÿÿÿÿr#   ÚmpsÚcpuF)Údevice_typeÚenabledrU   ©ra   rV   )r;   r_   ÚexpandÚshaper^   rM   Ú
isinstanceÚtypeÚstrr   Ú	transposer0   ÚcatÚcosrI   ÚsinrW   )
rL   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedrg   ÚfreqsÚembrq   rr   s
             r7   ÚforwardzBambaRotaryEmbedding.forward€   sR  € ð !ŸM™M¨$²°4¨-Ñ8×>Ñ>Ó@×GÑGÈ×HZÑHZÐ[\ÑH]Ð_aÐcdÓe×hÑhÐij×iqÑiqÓrÐØ ,ªQ°²a¨ZÑ 8× >Ñ >Ó @Ðä'1°!·(±(·-±-ÄÔ'EÈ!Ï(É(Ï-É-Ð[`ÒJ`�a—h‘h—m’mÐfkˆÜ¨¸UÔCñ 	5Ø&×,Ñ,Ó.Ð1F×1LÑ1LÓ1NÑN×YÑYÐZ[Ð]^Ó_ˆEÜ—)‘)˜U E˜N°Ô3ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆC÷		5ð �v‰v˜AŸG™GˆvÓ$ c§f¡f°1·7±7 fÓ&;Ð;Ð;÷	5ð 	5ús   ÃBFÆF$©N©NNN)r,   r-   r.   r0   ÚTensorr2   r$   rC   Ústaticmethodr   r3   Útupler_   rH   Úno_gradr   ry   Ú__classcell__©rO   s   @r7   r:   r:   O   s˜   ø… Ø�l‰lÓñV˜{õ Vð  à%)Ø+/Ø"ñ*Ø˜dÑ"ð*à˜Ñ(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ñ	%ò	*ó ð*ð: €U‡]�]ƒ_Øñ<ó ó ô<r6   r:   c                 óš   — | dd| j                   d   dz  …f   }| d| j                   d   dz  d…f   }t        j                  | |fd¬«      S )z*Rotates half the hidden dims of the input..Nrd   rU   ri   )rk   r0   rp   )rs   Úx1Úx2s      r7   Úrotate_halfr…   �   sZ   € à	
ˆ3Ð"�!—'‘'˜"‘+ Ñ"Ð"Ð"Ñ	#€BØ	
ˆ3�—‘˜‘˜qÑ Ñ"Ð"Ñ	#€BÜ�9‰9�r�c˜2�Y BÔ'Ð'r6   Úhidden_statesÚn_reprQ   c                 óª   — | j                   \  }}}}|dk(  r| S | dd…dd…ddd…dd…f   j                  |||||«      } | j                  |||z  ||«      S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r#   N)rk   rj   Úreshape)r†   r‡   ÚbatchÚnum_key_value_headsÚslenrT   s         r7   Ú	repeat_kvr�   —   so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTr6   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t        || j                  «      }t        || j                  «      }	t        j                  ||j	                  dd«      «      |z  }
|�|
|z   }
t
        j                  j                  |
dt        j                  ¬«      j                  |j                  «      }
t
        j                  j                  |
|| j                  ¬«      }
t        j                  |
|	«      }|j	                  dd«      j                  «       }||
fS )NrU   r   rd   )ra   rW   )ÚpÚtrainingr#   )r�   Únum_key_value_groupsr0   Úmatmulro   r   Ú
functionalÚsoftmaxÚfloat32r^   rW   r”   r˜   Ú
contiguous)rŽ   r�   r�   r‘   r’   r“   r”   r•   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r7   Úeager_attention_forwardr£   £   sà   € ô ˜3 × ;Ñ ;Ó<€JÜ˜U F×$?Ñ$?Ó@€Lä—<‘<  z×';Ñ';¸A¸qÓ'AÓBÀWÑL€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r6   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.
    rd   .Nri   )Ú	unsqueezerk   r…   r0   rp   )ÚqÚkrq   rr   Úunsqueeze_dimÚ
rotary_dimÚq_rotÚq_passÚk_rotÚk_passÚq_embedÚk_embeds               r7   Úapply_rotary_pos_embr°   ½   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ÐÐr6   c                   óø   ‡ — e Zd ZdZdedefˆ fd„Z	 	 	 ddej                  de	ej                  ej                  f   dz  dej                  dz  d	e
dz  d
ee   de	ej                  ej                  f   fd„Zˆ xZS )ÚBambaAttentionz=Multi-headed attention from 'Attention Is All You Need' paperr<   Ú	layer_idxc                 ód  •— t         ‰| �  «        || _        || _        t	        |d|j
                  |j                  z  «      | _        |j                  |j                  z  | _	        | j                  dz  | _
        |j                  | _        d| _        t        j                  |j
                  |j                  | j                  z  |j                  ¬«      | _        t        j                  |j
                  |j                  | j                  z  |j                  ¬«      | _        t        j                  |j
                  |j                  | j                  z  |j                  ¬«      | _        t        j                  |j                  | j                  z  |j
                  |j                  ¬«      | _        y )NrT   g      à¿T©Úbias)rB   rC   r<   r³   rY   rZ   r[   rT   r‹   r™   r“   Úattention_dropoutÚ	is_causalr   ÚLinearÚattention_biasÚq_projÚk_projÚv_projÚo_proj)rL   r<   r³   rO   s      €r7   rC   zBambaAttention.__init__æ   sM  ø€ Ü‰ÑÔØˆŒØ"ˆŒÜ ¨
°F×4FÑ4FÈ&×JdÑJdÑ4dÓeˆŒØ$*×$>Ñ$>À&×B\ÑB\Ñ$\ˆÔ!Ø—}‘} dÑ*ˆŒØ!'×!9Ñ!9ˆÔØˆŒä—i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfô
ˆŒô —i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfô
ˆŒô —i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfô
ˆŒô —i‘iØ×&Ñ&¨¯©Ñ6¸×8JÑ8JÐQW×QfÑQfô
ˆ�r6   Nr†   Úposition_embeddingsr’   Úpast_key_valuesr•   rQ   c                 ó
  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }	| j                  |«      j                  |«      j	                  dd«      }
|\  }}t        ||	||«      \  }}	|� |j                  |	|
| j                  «      \  }	}
t        j                  | j                  j                  t        «      } || ||	|
|f| j                  sdn| j                   | j"                  dœ|¤Ž\  }} |j$                  g |¢d‘­Ž j'                  «       }| j)                  |«      }||fS )Nrd   r#   rU   ç        )r”   r“   )rk   rT   r»   Úviewro   r¼   r½   r°   Úupdater³   r   Úget_interfacer<   Ú_attn_implementationr£   r˜   r·   r“   r‰   rž   r¾   )rL   r†   r¿   r’   rÀ   r•   Úinput_shapeÚhidden_shapeÚquery_statesrŸ   r    rq   rr   Úattention_interfacer¢   r¡   s                   r7   ry   zBambaAttention.forwardý   s‘  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆà&‰ˆˆSÜ#7¸ÀjÐRUÐWZÓ#[Ñ ˆ�jàÐ&Ø'6×'=Ñ'=¸jÈ,ÐX\×XfÑXfÓ'gÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r6   r{   )r,   r-   r.   r/   r$   r3   rC   r0   r|   r~   r
   r   r   ry   r€   r�   s   @r7   r²   r²   ã   s¥   ø„ ÙGð
˜{ð 
°sõ 
ð4 IMØ.2Ø(,ñ&)à—|‘|ð&)ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð&)ð Ÿ™ tÑ+ð	&)ð
  ™ð&)ð Ð+Ñ,ð&)ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷&)r6   r²   c                   ó(   ‡ — e Zd Zdˆ fd„	Zdd„Zˆ xZS )ÚBambaRMSNormGatedc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y rz   ©rB   rC   r   Ú	Parameterr0   ÚonesÚweightÚvariance_epsilon©rL   rZ   ÚepsrO   s      €r7   rC   zBambaRMSNormGated.__init__'  s/   ø€ Ü‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕr6   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 ©NrU   rd   T)Úkeepdim)rW   r^   r0   r�   r   r›   ÚsiluÚpowÚmeanÚrsqrtrÒ   rÑ   )rL   r†   ÚgateÚinput_dtypeÚvariances        r7   ry   zBambaRMSNormGated.forward,  s¥   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆàÐØ)¬B¯M©M×,>Ñ,>¸t¿w¹wÄuÇ}Á}Ó?UÓ,VÑVˆMØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆà�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r6   ©g�íµ ÷Æ°>rz   ©r,   r-   r.   rC   ry   r€   r�   s   @r7   rÌ   rÌ   &  s   ø„ õ$÷
	;r6   rÌ   Ú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)Úmoder‘   )Úlenrk   r0   r   r›   Úpad)rá   râ   Ú	pad_shapes      r7   Ú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ÐUr6   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   rd   rU   )rê   rç   rk   r‰   )rá   râ   Ú
chunk_sizes      r7   Úreshape_into_chunksrí   F  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_ó
ð 	
r6   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.
    rd   ©.NrX   )Údiagonalr   éþÿÿÿri   )
Úsizerj   r0   ÚtrilrÐ   rM   ÚboolÚmasked_fillÚcumsumÚinf)rá   rì   ÚmaskÚtensor_segsums       r7   Úsegment_sumrú   Z  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ØÐr6   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   )rk   rW   r^   )r†   r’   rW   s      r7   Úapply_mask_to_padding_statesrü   n  sa   € ð
 Ð! n×&:Ñ&:¸1Ñ&=ÀÒ&AÀn×FZÑFZÐ[\ÑF]Ð`aÒFaØ×#Ñ#ˆØ&¨ºº1¸d¸
Ñ)CÑC×GÑGÈÓNˆàÐr6   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
    r<   r³   c           	      ó  •— 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 )NrU   r#   )Úin_channelsÚout_channelsr¶   Úkernel_sizeÚgroupsÚpaddingrµ   ©rÔ   z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)?rB   rC   Úmamba_n_headsÚ	num_headsrZ   Úmamba_d_stateÚssm_state_sizeÚmamba_d_convÚconv_kernel_sizer3   Ú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_headrT   Úmamba_chunk_sizerì   Útime_step_limitÚtime_step_minÚtime_step_maxÚconv_dimr   ÚConv1dÚconv1dr¹   Úin_projrÏ   r0   rÐ   Údt_biasr\   ÚlogÚA_logrÌ   ÚnormÚDÚout_projr   rY   r  r  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)rL   r<   r³   Úprojection_sizeÚAÚcausal_conv1dÚ	mamba_ssmrO   s          €r7   rC   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ˆ�r6   Nr†   Úcache_paramsr’   r+   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#   rd   ri   .rV   T)Úzr%  Údt_softplusrÂ   r÷   Údt_limitF)r)  rì   r+   r  Úrmsnorm_weightÚrmsnorm_epsÚoutproj_weightÚoutproj_biasÚheaddimÚngroupsÚnorm_before_gateÚreturn_final_statesrU   )rØ   Úswish)rs   rÑ   r¶   r  r+   )rì   r)  r:  r+   rD  r%  r;  Úinitial_states)2rü   r$  rk   r  r  Úhas_previous_stater³   ÚlayersÚconv_statesÚrecurrent_statesÚsqueezeÚsplitr  r!  r
  r  r#  rÑ   r¶   r  r0   Úexpr'  r_   rj   rT   r^   r�   r%  r)  rÃ   r+  r(  r*  r  r˜   r-  rì   rÒ   ro   rp   r   r›   rè   r  Úupdate_conv_stater  r  r,  Úupdate_recurrent_state)rL   r†   r8  r’   r+   Úprojected_statesÚ
batch_sizerP   Ú_Úgroups_time_state_sizeÚuse_precomputed_statesÚ
conv_stateÚrecurrent_staterÜ   Úhidden_states_B_CÚdtÚBÚCr5  r%  r)  Úhidden_states_reshapedÚoutÚdt_limit_kwargsrI  Úscan_outputÚ	ssm_states                              r7   Ú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�Øˆ
r6   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 )Nrd   ri   r#   rU   r   .rï   ).NNrV   ©rM   rX   )ra   Úoutput_sizer   rä   rñ   )rW   rM   )r#   r   ):rk   rW   rü   r$  rL  r  r!  r
  ro   rG  r³   rH  rI  rN  r  r0   Úsumr#  rÑ   rK  r  r¶   r  rp   r   r›   rè   r  r  rM  r'  r_   rJ  rM   rj   rT   r%  Úsoftplusr^   Úclampr  r�   r‰   rž   rO  rÃ   Úbmmr)  Úrepeat_interleaverì   rê   rí   Úpermuterö   rú   Ú
zeros_liker(  r*  )4rL   Úinput_statesr8  r’   rQ  rP   rR  rW   rP  rÜ   rW  rX  rT  rU  rI  r†   rY  rZ  r5  Ú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                                                       r7   Ú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Ñ   rM   rm   r   r`  ÚNotImplementedErrorrW   rk   r^   rˆ  )rL   r†   r8  r’   r+   r•   rW   s          r7   ry   zBambaMixer.forwardS  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ÐNr6   r{   )NN)r,   r-   r.   r/   r$   r3   rC   r0   r|   r
   r4   r`  rˆ  r   ry   r€   r�   s   @r7   rþ   rþ   {  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r6   rþ   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚBambaMLPc                 ó  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                  ¬«      | _	        t        j                  | j                  | j                  |j                  ¬«      | _
        t        |j                     | _        y )Nrµ   )rB   rC   r<   rZ   r  r   r¹   Úmlp_biasÚ	gate_projÚup_projÚ	down_projr	   r  Úact_fn©rL   r<   rO   s     €r7   rC   zBambaMLP.__init__k  s¸   ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜŸ™ 4×#3Ñ#3°T×5KÑ5KÐRX×RaÑRaÔbˆŒÜ—y‘y ×!1Ñ!1°4×3IÑ3IÐPV×P_ÑP_Ô`ˆŒÜŸ™ 4×#9Ñ#9¸4×;KÑ;KÐRX×RaÑRaÔbˆŒÜ˜V×.Ñ.Ñ/ˆ�r6   c                 óˆ   — | j                  | j                  | j                  |«      «      | j                  |«      z  «      }|S rz   )r’  r“  r�  r‘  )rL   rs   r’  s      r7   ry   zBambaMLP.forwardu  s6   € Ø—N‘N 4§;¡;¨t¯~©~¸aÓ/@Ó#AÀDÇLÁLÐQRÃOÑ#SÓTˆ	ØÐr6   rà   r�   s   @r7   r�  r�  j  s   ø„ ô0ör6   r�  ÚRMSNormc                   óh   ‡ — e Zd Zddeddfˆ fd„Zdej                  dej                  fd„Zd„ Zˆ xZ	S )	ÚBambaRMSNormrÔ   rQ   Nc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)z;
        BambaRMSNorm is equivalent to T5LayerNorm
        NrÎ   rÓ   s      €r7   rC   zBambaRMSNorm.__init__|  s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕr6   r†   c                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S rÖ   )	rW   r^   r0   r�   rÙ   rÚ   rÛ   rÒ   rÑ   )rL   r†   rÝ   rÞ   s       r7   ry   zBambaRMSNorm.forward„  sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r6   c                 ó^   — t        | j                  j                  «      › d| j                  › �S )Nz, eps=)r~   rÑ   rk   rÒ   )rL   s    r7   Ú
extra_reprzBambaRMSNorm.extra_repr‹  s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr6   rß   )
r,   r-   r.   r_   rC   r0   r|   ry   rœ  r€   r�   s   @r7   r˜  r˜  z  s7   ø„ ñ$¨ð $¸$õ $ð; U§\¡\ð ;°e·l±ló ;öJr6   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³   r3  c                 óx  •— t         ‰| �  «        d}|dk(  rt        nd } ||«      | _        t	        |j
                  |j                  ¬«      | _        t	        |j
                  |j                  ¬«      | _        || _	        |dk(  rt        ||¬«      | _        y |dk(  rt        ||«      | _        y t        d|›�«      ‚)Nr#   r  Úlinear_attention)r<   r³   Úfull_attentionzInvalid layer_type: )rB   rC   r�  Úfeed_forwardr˜  rZ   r  Úinput_layernormÚpre_ff_layernormÚ
block_typerþ   Úmambar²   Ú	self_attnÚ
ValueError)rL   r<   r³   r3  Únum_expertsÚffn_layer_classrO   s         €r7   rC   zBambaDecoderLayer.__init__�  s¬   ø€ Ü‰ÑÔàˆØ&1°QÒ&6�(¸DˆÙ+¨FÓ3ˆÔÜ+¨F×,>Ñ,>ÀF×DWÑDWÔXˆÔÜ ,¨V×-?Ñ-?ÀV×EXÑEXÔ YˆÔà$ˆŒØÐ+Ò+Ü#¨6¸YÔGˆD�JØÐ+Ò+Ü+¨F°IÓ>ˆD�NäÐ3°J°>ÐBÓCÐCr6   Nr†   r’   rt   rÀ   Ú	use_cacher¿   r•   rQ   c           
      ó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†   r8  r’   r¡  )r†   r’   rt   rÀ   r«  r¿   r5   )r£  r¥  r¦  r§  r¤  r¢  )
rL   r†   r’   rt   rÀ   r«  r¿   r•   ÚresidualÚself_attn_weightss
             r7   ry   zBambaDecoderLayer.forward¡  sá   € ð !ˆà×,Ñ,¨]Ó;ˆà�?‰?Ð0Ò0Ø&˜DŸJ™Jð Ø+Ø,Ø-ñð ñ	ˆMð !%ÑØ�_‰_Ð 0Ò0Ø/=¨t¯~©~ð 0Ø+Ø-Ø)Ø /Ø#Ø$7ñ0ð ñ0Ñ,ˆMÐ,ð ! =Ñ0ˆà ˆØ×-Ñ-¨mÓ<ˆØ×)Ñ)¨-Ó8ˆØ  =Ñ0ˆàÐ/Ð/Ð/r6   )r   )NNNFN)r,   r-   r.   r$   r3   rn   rC   r0   r|   r1   r
   rô   r~   r   r&   ÚFloatTensorry   r€   r�   s   @r7   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÷(0r6   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#   )rB   Ú_init_weightsrl   rþ   ÚinitÚones_r%  Úcopy_r'  r0   r&  r\   r
  r)  )rL   rŽ   rO   s     €r7   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Õ ð *r6   )r,   r-   r.   r$   r2   Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_is_statefulÚ_can_compile_fullgraphrž  r²   Ú_can_record_outputsr0   r   rµ  r€   r�   s   @r7   r±  r±  Ì  sg   ø… àÓØÐØ&*Ð#Ø,Ð-ÐØ#4Ð"5ÐØÐØ€NØ€LØ!Ðà*Ø$ñÐð
 €U‡]�]ƒ_ó!ó ô!r6   r±  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³   r3  r  ©r<   F)rB   rC   Úpad_token_idÚpadding_idxÚ
vocab_sizer   Ú	EmbeddingrZ   Úembed_tokensÚrangeÚnum_hidden_layersÚappendrž  Úlayers_block_typeÚ
ModuleListrH  rÆ   r˜  r  Úfinal_layernormr:   Ú
rotary_embÚgradient_checkpointingÚ	post_init)rL   r<   Údecoder_layersÚirO   s       €r7   rC   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Ô=ˆŒà&+ˆÔ#à�‰Õr6   NÚ	input_idsr’   rt   rÀ   Úinputs_embedsr«  r•   rQ   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_embedsrÅ  r#   rb  r   )r<   r×  r’   rÀ   rt   )r¡  r   )rt   )r’   rt   rÀ   r«  r¿   )Úlast_hidden_staterÀ   r5   )r¨  rÊ  r   r<   r0   r\   rk   rM   r¥   rl   Údictr   r   rÑ  Ú	enumeraterH  rÎ  rÐ  r   )rL   rÖ  r’   rt   rÀ   r×  r«  r•   r†   Úcausal_mask_mappingÚmask_kwargsr¿   rÕ  Údecoder_layerr¡   s                  r7   ry   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™<ð		ð ×,Ñ,¨]Ó;ˆä&Ø+Ø+ô
ð 	
r6   )NNNNNN)r,   r-   r.   r$   rC   r    r"   r   r0   r1   r|   r
   r¯  rô   r   r&   r   ry   r€   r�   s   @r7   rÃ  rÃ  å  sÍ   ø„ ð˜{õ ð&  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ñ7
à×#Ñ# dÑ*ð7
ð Ÿ™ tÑ+ð7
ð ×&Ñ&¨Ñ-ð	7
ð
  ™ð7
ð ×(Ñ(¨4Ñ/ð7
ð ˜$‘;ð7
ð Ð2Ñ3ð7
ð 
!ò7
ó ó ó  ô7
r6   rÃ  c                   óP  ‡ — e Zd ZddiZddiZddgdgfiZˆ fd„Zee	 	 	 	 	 	 	 	 dd	e	j                  dz  d
e	j                  dz  de	j                  dz  dedz  de	j                  dz  de	j                  dz  dedz  dee	j                  z  defd„«       «       Z	 	 	 	 	 	 dˆ fd„	Zˆ xZS )ÚBambaForCausalLMzlm_head.weightzmodel.embed_tokens.weightÚlm_headÚcolwise_gather_outputr†   Úlogitsc                 ó
  •— t         ‰| �  |«       t        |«      | _        |j                  | _        t        j                  |j                  |j                  d¬«      | _        |j                  | _	        | j                  «        y )NFrµ   )rB   rC   rÃ  r²  rÈ  r   r¹   rZ   rá  Úz_loss_coefficientrÓ  r”  s     €r7   rC   zBambaForCausalLM.__init__=  sc   ø€ Ü‰Ñ˜Ô Ü Ó'ˆŒ
Ø ×+Ñ+ˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒØ"(×";Ñ";ˆÔð 	�‰Õr6   NrÖ  r’   rt   rÀ   r×  Úlabelsr«  Úlogits_to_keeprQ   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."
        ```)rÖ  r’   rt   rÀ   r×  r«  N)rã  ræ  rÈ  r   rd   ri   rV   rU   )Úlossrã  rÀ   r†   r³  r5   )r²  rÙ  rl   r3   Úslicerá  Úloss_functionr<   rÈ  rå  Ú	logsumexpr^   rW   rÙ   rÚ   r   rÀ   r†   r³  )rL   rÖ  r’   rt   rÀ   r×  ræ  r«  rç  r•   Úoutputsr†   Úslice_indicesrã  ré  Úz_losss                   r7   ry   zBambaForCausalLM.forwardG  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Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r6   c           
      óh   •— | j                   j                  |d<   t        ‰
| �  |f||||||dœ|¤Ž}	|	S )Nrç  )rÀ   r’   r×  rt   r«  Úis_first_iteration)r<   Únum_logits_to_keeprB   Úprepare_inputs_for_generation)rL   rÖ  rÀ   r’   r×  rt   r«  rñ  r•   Úmodel_inputsrO   s             €r7   ró  z.BambaForCausalLM.prepare_inputs_for_generationˆ  sU   ø€ ð $(§;¡;×#AÑ#AˆÐÑ Ü‘wÑ<Øð	
à+Ø)Ø'Ø%ØØ1ñ	
ð ñ	
ˆð Ðr6   )NNNNNNNr   )NNNNTF)r,   r-   r.   Ú_tied_weights_keysÚ_tp_planÚ_pp_planrC   r   r   r0   r1   r|   r
   r¯  rô   r3   r   ry   ró  r€   r�   s   @r7   rà  rà  7  s&  ø„ à*Ð,GÐHÐØÐ2Ð3€HØ˜_Ð-°¨zÐ:Ð;€Hôð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñ=
à×#Ñ# dÑ*ð=
ð Ÿ™ tÑ+ð=
ð ×&Ñ&¨Ñ-ð	=
ð
  ™ð=
ð ×(Ñ(¨4Ñ/ð=
ð × Ñ  4Ñ'ð=
ð ˜$‘;ð=
ð ˜eŸl™lÑ*ð=
ð 
 ò=
ó ó ð=
ðD ØØØØØ ÷ñ r6   rà  )rÃ  rà  r±  )rÂ   )r#   )QÚcollections.abcr   Útypingr   r   r0   r   Ú r   r¶  Úactivationsr	   Úcache_utilsr
   r   Ú
generationr   Úintegrationsr   Úintegrations.accelerater   Úintegrations.hub_kernelsr   Úmasking_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   r    Úutils.import_utilsr!   Úutils.output_capturingr"   Úconfiguration_bambar$   Ú
get_loggerr,   r0  r&   ÚModuler:   r…   r|   r3   r�   r_   r£   r°   r²   rÌ   rê   rí   rú   rü   rþ   r�  r˜  rž  r±  rÃ  rà  Ú__all__r5   r6   r7   ú<module>r     s4  ðõ4 %ß &ã Ý å &Ý !ß .Ý )Ý 7Ý =Ý 8ß PÝ 9ß Oß Kß FÝ &ß lÕ lß GÝ 9Ý 5Ý ,ð 
ˆ×	Ñ	˜HÓ	%€ô 	°õ ô0><˜2Ÿ9™9ô ><òB(ð	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uð& ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ð%ð Ð'Ñ(ó%ó4#ôL@)�R—Y‘Yô @)ôF;˜Ÿ™Ÿ™ô ;ð*V U§\¡\ð V¸Só Vò
ò(ò(	ôlO�—‘ô lOô^ˆr�y‰yô ñ  ˜YÓ'ôJ�2—9‘9ó Jó (ðJô(:0Ð2ô :0ðz ô!˜?ó !ó ð!ð0 ôN
Ð%ó N
ó ðN
ðb ôgÐ+¨_ó gó ðgòT E�r6   