Ë
    ÜÓ^jª~  ã                   ó�  — d Z ddlZddlmZ ddlZddlmZ ddlmZ ddlm	Z
 ddlmZ 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 ddlmZmZmZ ddlmZm Z m!Z!m"Z" ddl#m$Z$  ejJ                  e&«      Z' e d«      rddl(m)Z) ndZ) e«       rddl*m+Z+ ndZ+ G d„ dejX                  «      Z- G d„ dejX                  «      Z. G d„ de«      Z/e G d„ de«      «       Z0 ed¬«      e G d „ d!e«      «       «       Z1 ed"¬«      e G d#„ d$e«      «       «       Z2e G d%„ d&e0«      «       Z3 ed'¬«       G d(„ d)e0e«      «       Z4g d*¢Z5y)+zPyTorch MAMBA model.é    N)Ú	dataclass)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úlazy_load_kernel)Úforce_accelerate_hooks)ÚGradientCheckpointingLayer)ÚPreTrainedModel)ÚModelOutputÚauto_docstringÚlogging)Úis_mambapy_availableÚis_torch_greater_or_equalÚ
is_tracingÚresolve_internal_importé   )ÚMambaConfigz2.9.0)Úassociative_scan)Úpscanc                   ó2  ‡ — e Zd ZdZddededefˆ fd„Z ej                  «       d„ «       Z
d„ Z	 	 dd	ej                  d
edz  dej                  dz  fd„Zdd
edz  dej                  dz  fd„Z ed«      	 	 dd
edz  dej                  dz  fd„«       Zˆ xZS )Ú
MambaMixeruƒ  
    Compute âˆ†, A, B, C, and D the state space parameters and compute the `contextualized_states`.
    A, D are input independent (see Mamba paper [1] Section 3.5.2 "Interpretation of A" for why A isn't selective)
    âˆ†, B, C are input-dependent (this is a key difference between Mamba and the linear time invariant S4,
    and is why Mamba is called **selective** state spaces)
    ÚconfigÚ	layer_idxÚinitialize_mixer_weightsc           	      óö  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        |j                  | _        |j                  | _        t        |j                  «      | _
        || _        |j                  | _        t        j                  | j                  | j                  |j                  |j                  | j                  |j                  dz
  ¬«      | _        |j                   | _        t$        |j                      | _        |j(                  | _        |j*                  | _        t        j,                  | j                  | j                  dz  |j.                  ¬«      | _        t        j,                  | j                  | j                  | j
                  dz  z   d¬«      | _        t        j,                  | j                  | j                  d¬«      | _        t        j6                  t9        j:                  | j                  | j
                  «      «      | _        t        j6                  t9        j:                  | j                  «      «      | _        |r=| j4                  j@                  jB                  jD                  dk7  r| jG                  «        t        j,                  | j                  | j                  |j.                  ¬«      | _$        |j.                  | _        tK        d«      a&tO        tL        d	d «      a(tO        tL        d
d «      a)tK        d«      a*tW        tT        d¬«      a,tO        tT        dd «      a-tO        tT        dd «      a.| j_                  «        |j`                  |   | _1        y )Nr   )Úin_channelsÚout_channelsÚbiasÚkernel_sizeÚgroupsÚpaddingé   ©r#   FTÚmetazcausal-conv1dÚcausal_conv1d_updateÚcausal_conv1d_fnz	mamba-ssmz8ops.triton.selective_state_update.selective_state_update)Úchained_pathÚselective_scan_fnÚmamba_inner_fn)2ÚsuperÚ__init__r   Úhidden_sizeÚ
state_sizeÚssm_state_sizeÚconv_kernelÚconv_kernel_sizeÚintermediate_sizeÚintÚtime_step_rankr   Úuse_conv_biasr   ÚConv1dÚconv1dÚ
hidden_actÚ
activationr   ÚactÚuse_mambapyÚuse_associative_scanÚLinearÚuse_biasÚin_projÚx_projÚdt_projÚ	ParameterÚtorchÚemptyÚA_logÚDÚweightÚdeviceÚtypeÚinit_mamba_weightsÚout_projr   Úcausal_conv1dÚgetattrr*   r+   Ú	mamba_ssmr   Úselective_state_updater-   r.   Úwarn_slow_implementationÚlayer_typesÚ
layer_type)Úselfr   r   r   Ú	__class__s       €ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/mamba/modeling_mamba.pyr0   zMambaMixer.__init__C   s¬  ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ$×/Ñ/ˆÔØ &× 2Ñ 2ˆÔØ!'×!9Ñ!9ˆÔÜ! &×"7Ñ"7Ó8ˆÔØ"ˆŒØ#×1Ñ1ˆÔÜ—i‘iØ×.Ñ.Ø×/Ñ/Ø×%Ñ%Ø×*Ñ*Ø×)Ñ)Ø×&Ñ&¨Ñ*ô
ˆŒð !×+Ñ+ˆŒÜ˜&×+Ñ+Ñ,ˆŒà!×-Ñ-ˆÔØ$*×$?Ñ$?ˆÔ!ô —y‘y ×!1Ñ!1°4×3IÑ3IÈAÑ3MÐTZ×TcÑTcÔdˆŒä—i‘i × 6Ñ 6¸×8KÑ8KÈd×NaÑNaÐdeÑNeÑ8eÐlqÔrˆŒä—y‘y ×!4Ñ!4°d×6LÑ6LÐSWÔXˆŒô —\‘\¤%§+¡+¨d×.DÑ.DÀd×FYÑFYÓ"ZÓ[ˆŒ
Ü—‘œeŸk™k¨$×*@Ñ*@ÓAÓBˆŒÙ#¨¯©×(;Ñ(;×(BÑ(B×(GÑ(GÈ6Ò(QØ×#Ñ#Ô%ÜŸ	™	 $×"8Ñ"8¸$×:JÑ:JÐQW×Q`ÑQ`ÔaˆŒØŸ™ˆŒô )¨Ó9ˆÜ&¤}Ð6LÈdÓSÐÜ"¤=Ð2DÀdÓKÐô % [Ó1ˆ	Ü!8ÜÐ$^ô"
Ðô $¤IÐ/BÀDÓIÐÜ ¤Ð,<¸dÓCˆà×%Ñ%Ô'à ×,Ñ,¨YÑ7ˆ�ó    c                 óÀ  — t        j                  d| j                  dz   t         j                  | j                  j
                  ¬«      d d d …f   }|j                  | j                  d«      j                  «       }t        j                  | j                  t        j                  |«      «       t        j                  | j                  «       | j                  j                  dz  | j                  j                   z  }| j                  j"                  dk(  r+t        j$                  | j&                  j(                  |«       nE| j                  j"                  dk(  r,t        j*                  | j&                  j(                  | |«       t        j,                  t        j.                  | j                  | j&                  j0                  j
                  t         j                  ¬«      t3        j                  | j                  j4                  «      t3        j                  | j                  j6                  «      z
  z  t3        j                  | j                  j6                  «      z   «      j9                  | j                  j:                  ¬«      }|t        j                  t        j<                  | «       «      z   }t        j                  | j&                  j0                  |«       y )	Nr   )ÚdtyperL   éÿÿÿÿg      à¿ÚconstantÚrandom©rL   r\   )Úmin)rG   Úaranger3   Úfloat32rI   rL   Úexpandr6   Ú
contiguousÚinitÚcopy_ÚlogÚones_rJ   r   r8   Útime_step_scaleÚtime_step_init_schemeÚ	constant_rE   rK   Úuniform_ÚexpÚrandr#   ÚmathÚtime_step_maxÚtime_step_minÚclampÚtime_step_floorÚexpm1)rW   ÚAÚdt_init_stdÚdtÚinv_dts        rY   rN   zMambaMixer.init_mamba_weights}   sâ  € ä�L‰L˜˜D×/Ñ/°!Ñ3¼5¿=¹=ÐQU×Q[ÑQ[×QbÑQbÔcÐdhÒjkÐdkÑlˆØ�H‰H�T×+Ñ+¨RÓ0×;Ñ;Ó=ˆÜ�
‰
�4—:‘:œuŸy™y¨›|Ô,Ü�
‰
�4—6‘6Ôà—k‘k×0Ñ0°$Ñ6¸¿¹×9TÑ9TÑTˆØ�;‰;×,Ñ,°
Ò:Ü�N‰N˜4Ÿ<™<×.Ñ.°Õ<Ø�[‰[×.Ñ.°(Ò:Ü�M‰M˜$Ÿ,™,×-Ñ-°¨|¸[ÔIä�Y‰YÜ�J‰J�t×-Ñ-°d·l±l×6GÑ6G×6NÑ6NÔV[×VcÑVcÔdÜ�x‰x˜Ÿ™×1Ñ1Ó2´T·X±X¸d¿k¹k×>WÑ>WÓ5XÑXñZä�h‰h�t—{‘{×0Ñ0Ó1ñ2ó
÷ ‰%�D—K‘K×/Ñ/ˆ%Ó
0ð	 	ð ”e—i‘i¤§¡¨b¨SÓ!1Ð 1Ó2Ñ2ˆÜ�
‰
�4—<‘<×$Ñ$ fÕ-rZ   c                 óê   — t        t        t        t        t        t
        f«      }|sM| j                  r+t        «       rt        j                  d«       y t        d«      ‚t        j                  d«       y y )Na’  The fast path is not available because one of `(selective_state_update, selective_scan_fn, causal_conv1d_fn, causal_conv1d_update, mamba_inner_fn)` is None. Falling back to the mamba.py backend. To install follow https://github.com/state-spaces/mamba/#installation for mamba-ssm and install the kernels library using `pip install kernels` or https://github.com/Dao-AILab/causal-conv1d for causal-conv1dzuse_mambapy is set to True but the mambapy package is not installed. To install it follow https://github.com/alxndrTL/mamba.py.a  The fast path is not available because one of `(selective_state_update, selective_scan_fn, causal_conv1d_fn, causal_conv1d_update, mamba_inner_fn)` is None. Falling back to the sequential implementation of Mamba, as use_mambapy is set to False. To install follow https://github.com/state-spaces/mamba/#installation for mamba-ssm and install the kernels library using `pip install kernels` or https://github.com/Dao-AILab/causal-conv1d for causal-conv1d. For the mamba.py backend, follow https://github.com/alxndrTL/mamba.py.)ÚallrS   r-   r+   r*   r.   r?   r   ÚloggerÚwarning_onceÚImportError)rW   Úis_fast_path_availables     rY   rT   z#MambaMixer.warn_slow_implementation“   sw   € Ü!$Ü#Ô%6Ô8HÔJ^Ô`nÐoó"
Ðñ &Ø×ÒÜ'Ô)Ü×'Ñ'ðSõô &ð Zóð ô ×#Ñ#ðWõð &rZ   NÚhidden_statesÚcache_paramsÚattention_maskc                 ó
  — | j                  |«      j                  dd«      }| j                  �r%|�€"t        || j                  j
                  | j                  r| j                  j                  nd | j                  j
                  | j                  j
                  | j                  j
                  | j                  r$| j                  j                  j                  «       nd t        j                  | j                  j                  «       «       d d | j                   j                  «       | j                  j                  j                  «       d¬«      }|S |j#                  dd¬«      \  }}|�||j%                  d«      z  }|d uxr |j'                  | j(                  «      }| j                  j
                  j+                  | j                  j
                  j-                  d«      | j                  j
                  j-                  d«      «      }|rrt/        |j1                  d«      |j2                  | j(                     j4                  d   || j                  j                  | j6                  «      }|j%                  d«      }n‡|�Xt8        j:                  j=                  || j>                  |j@                  d   z
  df«      }	|jC                  |	| j(                  «       tE        ||| j                  j                  | j6                  ¬«      }|�||j%                  d«      z  }| j                  |j                  dd«      «      }
t        jF                  |
| jH                  | jJ                  | jJ                  gd¬«      \  }}}| j                  j
                  |j                  dd«      z  }t        j                  | j                  j                  «       «       }tM        | j                  d	«      r$| j                  j                  j                  «       nd }|rjtO        |j2                  | j(                     jP                  d   |d
   |d
   ||d d …df   |d d …df   | j                   |d
   |d¬«
      j%                  d«      }nptS        ||||j                  dd«      |j                  dd«      | j                   j                  «       ||dd¬«
      \  }}|�|�|jU                  || j(                  «       | j                  |j                  dd«      «      }|S )Nr   r'   T)Ú
delta_biasÚdelta_softplus©Údimr   r]   )r=   r#   ).r   )Údt_softplus)r…   Úreturn_last_state)+rC   Ú	transposeÚtrainingr.   r;   rK   r9   r#   rD   rE   rO   rB   ÚfloatrG   rn   rI   rJ   ÚchunkÚ	unsqueezeÚhas_previous_stater   ÚviewÚsizer*   ÚsqueezeÚlayersÚconv_statesr=   r   Ú
functionalÚpadr5   ÚshapeÚupdate_conv_stater+   Úsplitr8   r3   ÚhasattrrS   Úrecurrent_statesr-   Úupdate_recurrent_state)rW   r€   r�   r‚   Úprojected_statesÚcontextualized_statesÚgateÚis_decodingÚconv_weightsr”   Ússm_parametersÚ	time_stepÚBÚCÚdiscrete_time_steprv   Útime_proj_biasÚscan_outputsÚ	ssm_states                      rY   Úcuda_kernels_forwardzMambaMixer.cuda_kernels_forwardª   sM  € ð  Ÿ<™<¨Ó6×@Ñ@ÀÀAÓFÐà�=‹=˜\Ñ1Ü$2Ø Ø—‘×"Ñ"Ø$(×$6Ò$6�—‘× Ò ¸DØ—‘×"Ñ"Ø—‘×#Ñ#Ø—‘×$Ñ$Ø.2¯mªm�—‘×"Ñ"×(Ñ(Ô*ÀÜ—‘˜4Ÿ:™:×+Ñ+Ó-Ó.Ð.ØØØ—‘—‘“ØŸ<™<×,Ñ,×2Ñ2Ó4Ø#ô%Ð!ðt %Ð$ðS #3×"8Ñ"8¸ÀÐ"8Ó"BÑˆM˜4àÐ)Ø -°×0HÑ0HÈÓ0KÑ K�à&¨dÐ2Òf°|×7VÑ7VÐW[×WeÑWeÓ7fˆKð  Ÿ;™;×-Ñ-×2Ñ2°4·;±;×3EÑ3E×3JÑ3JÈ1Ó3MÈtÏ{É{×OaÑOa×OfÑOfÐghÓOiÓjˆLÙÜ 4Ø!×)Ñ)¨"Ó-Ø ×'Ñ'¨¯©Ñ7×CÑCÀAÑFØ Ø—K‘K×$Ñ$Ø—O‘Oó!�ð !.× 7Ñ 7¸Ó ;‘àÐ+Ü"$§-¡-×"3Ñ"3Ø%¨×(=Ñ(=À×@SÑ@SÐTVÑ@WÑ(WÐYZÐ'[ó#�Kð !×2Ñ2°;ÀÇÁÔOÜ 0Ø! <°·±×1AÑ1AÈdÏoÉoô!�ð Ð)Ø -°×0HÑ0HÈÓ0KÑ K�ð "Ÿ[™[¨×)@Ñ)@ÀÀAÓ)FÓGˆNÜ#Ÿk™kØ ×!4Ñ!4°d×6IÑ6IÈ4×K^ÑK^Ð _Ðegô‰OˆI�q˜!ð "&§¡×!4Ñ!4°y×7JÑ7JÈ1ÈaÓ7PÑ!PÐä—‘˜4Ÿ:™:×+Ñ+Ó-Ó.Ð.ˆAä:AÀ$Ç,Á,ÐPVÔ:W˜TŸ\™\×.Ñ.×4Ñ4Ô6Ð]aˆNÙÜ5Ø ×'Ñ'¨¯©Ñ7×HÑHÈÑKØ! &Ñ)Ø& vÑ.ØØ’a˜�d‘GØ’a˜�d‘GØ—F‘FØ˜‘LØ"Ø $ô ÷ ‘)˜B“-ñ ô +<Ø!Ø&ØØ—K‘K  1Ó%Ø—K‘K  1Ó%Ø—F‘F—L‘L“NØØ"Ø#'Ø&*ô+Ñ'�˜ið Ð(¨\Ð-EØ ×7Ñ7¸	À4Ç>Á>ÔRð %)§M¡M°,×2HÑ2HÈÈAÓ2NÓ$OÐ!Ø$Ð$rZ   c           	      ó  — |j                   \  }}}|j                  }| j                  |«      j                  dd«      }|j	                  dd¬«      \  }	}
|�|	|j                  d«      z  }	|�P|j                  | j                  «      r5|j                  | j                     j                  d   j                  «       }n9t        j                  || j                  | j                  f|	j                  |¬«      }|��†|j                  | j                  «      s�t         j"                  j%                  |	| j&                  |	j                   d   z
  df«      }|j)                  || j                  «       | j+                  | j-                  |	«      dd |…f   «      }	�n|j)                  |	| j                  «      d| j&                   d …f   }|j/                  | j,                  j0                  j                  «      }t        j2                  || j,                  j0                  d d …dd d …f   z  d¬«      }	| j4                  r|	| j,                  j6                  z  }	| j+                  |	«      j/                  |«      j                  d«      }	n'| j+                  | j-                  |	«      dd |…f   «      }	|�|	|j                  d«      z  }	| j9                  |	j                  dd«      «      }t        j:                  || j<                  | j                  | j                  gd¬«      \  }}}| j?                  |«      }t         j"                  jA                  |«      j                  dd«      }t        jB                  | jD                  jG                  «       «       }t        jB                  |d d d …d d d …f   |d d …d d …d d …d f   z  «      }|d d …d d …d d …d f   |d d …d d d …d d …f   jG                  «       z  }||	d d …d d …d d …d f   jG                  «       z  }| jH                  r�| jJ                  r‘|€�tM        |j                  dd«      |j                  dd«      «      }||j                  d«      z  jO                  d«      j                  dd«      }||	| jP                  d d d …d f   z  z   }|| j+                  |
«      z  }�n¸| jR                  r¼tT        �¶tW        |	«      r«|€©d	„ }|j                  jX                  d
v rdnd}tU        |||fd|¬«      \  }}t        jZ                  |j]                  dddd«      j/                  |«      |j                  d«      «      jO                  d«      j]                  ddd«      }|d d …d d …dd d …f   }n¤g }t_        |«      D ]}  }|d d …d d …|d d …f   |z  |d d …d d …|d d …f   z   }t        jZ                  |j/                  |«      |d d …|d d …f   j                  d«      «      }|ja                  |d d …d d …df   «       Œ t        jb                  |d¬«      }||	| jP                  d d d …d f   z  z   }|| j+                  |
«      z  }|�|je                  || j                  «       | jg                  |j                  dd«      «      }|S )Nr   r'   r†   r   r`   r]   .r   c                 ó0   — | \  }}|\  }}||z  ||z  |z   fS ©N© )ÚleftÚrightÚa_leftÚb_leftÚa_rightÚb_rights         rY   Ú
combine_fnz+MambaMixer.slow_forward.<locals>.combine_fnS  s/   € Ø%)‘N�F˜FØ',Ñ$�G˜WØ" WÑ,¨g¸Ñ.>ÀÑ.HÐIÐIrZ   )ÚcudaÚxpuÚ	pointwiseÚgeneric)r‡   Úcombine_mode)4r—   r\   rC   rŠ   r�   rŽ   r�   r   r“   r›   ÚclonerG   Úzerosr6   r3   rL   r   r•   r–   r5   r˜   r>   r;   ÚtorK   Úsumr9   r#   rD   r™   r8   rE   Úsoftplusrn   rI   rŒ   r?   r‹   r   r’   rJ   r@   r   r   rM   ÚmatmulÚpermuteÚrangeÚappendÚstackrœ   rO   )rW   Úinput_statesr�   r‚   Ú
batch_sizeÚseq_lenÚ_r\   r�   r€   rŸ   r©   Ú
conv_stater¢   r£   r¤   r¥   r¦   rv   Ú
discrete_AÚ
discrete_BÚdeltaB_uÚhsÚscan_outputrµ   rº   Úall_hr¨   Úirž   s                                 rY   Úslow_forwardzMambaMixer.slow_forward  sð  € Ø!-×!3Ñ!3Ñˆ
�G˜QØ×"Ñ"ˆàŸ<™<¨Ó5×?Ñ?ÀÀ1ÓEÐØ.×4Ñ4°Q¸AÐ4Ó>Ñˆ�tàÐ%Ø)¨N×,DÑ,DÀQÓ,GÑGˆMàÐ#¨×(GÑ(GÈÏÉÔ(WØ$×+Ñ+¨D¯N©NÑ;×LÑLÈQÑO×UÑUÓW‰IäŸ™Ø˜T×3Ñ3°T×5HÑ5HÐIØ$×+Ñ+°5ôˆIð Ñ#Ø×2Ñ2°4·>±>ÔBÜŸ]™]×.Ñ.Ø!Ø×*Ñ*¨]×-@Ñ-@ÀÑ-DÑDÀaÐHó�
ð
 ×.Ñ.¨z¸4¿>¹>ÔJØ $§¡¨¯©°]Ó)CÀCÈÈ'ÈÀMÑ)RÓ S’à)×;Ñ;¸MÈ4Ï>É>ÓZÐ[^Ðae×avÑavÐ`vÑ`wÐ[wÑx�
Ø'Ÿ]™]¨4¯;©;×+=Ñ+=×+DÑ+DÓE�
Ü %§	¡	¨*°t·{±{×7IÑ7IÊ!ÈQÒPQÈ'Ñ7RÑ*RÐXZÔ [�Ø×%Ò%Ø! T§[¡[×%5Ñ%5Ñ5�MØ $§¡¨Ó 7× :Ñ :¸5Ó A× KÑ KÈBÓ O‘à ŸH™H T§[¡[°Ó%?ÀÀXÀgÀXÀÑ%NÓOˆMàÐ%Ø)¨N×,DÑ,DÀQÓ,GÑGˆMð Ÿ™ ]×%<Ñ%<¸QÀÓ%BÓCˆÜŸ+™+Ø˜T×0Ñ0°$×2EÑ2EÀt×GZÑGZÐ[Ðacô
‰ˆ	�1�að "Ÿ\™\¨)Ó4ÐÜŸ]™]×3Ñ3Ð4FÓG×QÑQÐRSÐUVÓWÐô �Y‰Y�t—z‘z×'Ñ'Ó)Ó*Ð*ˆÜ—Y‘Y˜q ¢q¨$²Ð!1Ñ2Ð5GÊÊ1ÊaÐQUÈÑ5VÑVÓWˆ
Ø'ªª1ªa°¨Ñ6¸º1¸dÂAÂq¸=Ñ9I×9OÑ9OÓ9QÑQˆ
Ø ªa²²A°t¨mÑ <× BÑ BÓ DÑDˆð ×Ò §¢°,Ð2FÜ�z×+Ñ+¨A¨qÓ1°8×3EÑ3EÀaÈÓ3KÓLˆBà §¡¨B£Ñ/×8Ñ8¸Ó;×EÑEÀaÈÓKˆKØ%¨¸¿¹¸tÂQÈ¸}Ñ8MÑ(MÑMˆKØ%¨¯©°«Ñ6ŠKð ×(Ò(Ô-=Ð-IÌjÐYfÔNgÐlxð  mAòJð
 /9×.?Ñ.?×.DÑ.DÈÑ.W™{Ð]f�Ü+¨J¸ÀXÐ8NÐTUÐdpÔq‘��5ä#Ÿl™l¨5¯=©=¸¸A¸qÀ!Ó+D×+GÑ+GÈÓ+NÐPQ×P[ÑP[Ð\^ÓP_Ó`×hÑhÐikÓl×tÑtÐuvÐxyÐ{|Ó}�Ø!¢!¢Q¨ªA +Ñ.‘	ð  "�Ü˜w›ò >�AØ *ª1ªa°²A¨:Ñ 6¸Ñ BÀXÊaÒQRÐTUÒWXÈjÑEYÑ Y�IÜ"'§,¡,¨y¯|©|¸EÓ/BÀAÂaÈÊAÀgÁJ×DXÑDXÐY[ÓD\Ó"]�KØ ×'Ñ'¨²A²q¸!°GÑ(<Õ=ð>ô $Ÿk™k¨,¸BÔ?�à%¨¸¿¹ÀÂaÈÀÑ9NÑ)NÑOˆKØ&¨¯©°$«Ñ7ˆKàÐ'Ø×3Ñ3°I¸t¿~¹~ÔNð !%§¡¨k×.CÑ.CÀAÀqÓ.IÓ JÐØ$Ð$rZ   r;   c                 ó  — t        t        t        t        t        t
        f«      }|rJd| j                  j                  j                  j                  v rt        |«      s| j                  |||«      S | j                  |||«      S )Nr¶   )r{   rS   r-   r+   r*   r.   rD   rK   rL   rM   r   rª   rÑ   )rW   r€   r�   r‚   Úkwargsr   s         rY   ÚforwardzMambaMixer.forwardq  sv   € ô "%Ü#Ô%6Ô8HÔJ^Ô`nÐoó"
Ðñ " f°·±×0BÑ0B×0IÑ0I×0NÑ0NÑ&NÔWaÐboÔWpØ×,Ñ,¨]¸LÈ.ÓYÐYØ× Ñ  °¸nÓMÐMrZ   )T©NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r7   Úboolr0   rG   Úno_gradrN   rT   ÚTensorr	   Ú
LongTensorrª   rÑ   r   rÔ   Ú__classcell__©rX   s   @rY   r   r   ;   sö   ø„ ññ88˜{ð 88°sð 88ÐVZõ 88ðt €U‡]�]ƒ_ñ.ó ð.ò*ð4 &*Ø26ñ	d%à—|‘|ðd%ð ˜d‘lðd%ð ×(Ñ(¨4Ñ/ó	d%ñN]%°u¸t±|ð ]%ÐZ_×ZjÑZjÐmqÑZqó ]%ñ@ ˜HÓ%ð &*Ø26ñ	Nð ˜d‘lðNð ×(Ñ(¨4Ñ/ò	Nó &ôNrZ   r   c                   ó,   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zˆ xZS )ÚMambaRMSNormc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)zL
        MambaRMSNorm is equivalent to T5LayerNorm and LlamaRMSNorm
        N)r/   r0   r   rF   rG   ÚonesrK   Úvariance_epsilon)rW   r1   ÚepsrX   s      €rY   r0   zMambaRMSNorm.__init__‚  s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕrZ   c                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S )Nr'   r]   T)Úkeepdim)	r\   r½   rG   rc   ÚpowÚmeanÚrsqrträ   rK   )rW   r€   Úinput_dtypeÚvariances       rY   rÔ   zMambaRMSNorm.forwardŠ  sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:rZ   c                 óR   — | j                   j                  d   › d| j                  › �S )Nr   z, eps=)rK   r—   rä   ©rW   s    rY   Ú
extra_reprzMambaRMSNorm.extra_repr‘  s*   € Ø—+‘+×#Ñ# AÑ&Ð' v¨d×.CÑ.CÐ-DÐEÐErZ   )g�íµ ÷Æ°>)rÖ   r×   rØ   r0   rÔ   rï   rÞ   rß   s   @rY   rá   rá   �  s   ø„ õ$ò;öFrZ   rá   c                   óT   ‡ — e Zd Zˆ fd„Z	 	 ddedz  dej                  dz  fd„Zˆ xZS )Ú
MambaBlockc                 óÒ   •— t         ‰| �  «        || _        || _        |j                  | _        t        |j                  |j                  ¬«      | _        t        ||d¬«      | _
        y )N©rå   F)r   r   )r/   r0   r   r   Úresidual_in_fp32rá   r1   Úlayer_norm_epsilonÚnormr   Úmixer)rW   r   r   rX   s      €rY   r0   zMambaBlock.__init__–  sU   ø€ Ü‰ÑÔØˆŒØ"ˆŒØ &× 7Ñ 7ˆÔÜ  ×!3Ñ!3¸×9RÑ9RÔSˆŒ	Ü °)ÐV[Ô\ˆ�
rZ   Nr�   r‚   c                 ó  — |}| j                  |j                  | j                   j                  j                  ¬«      «      }| j                  r|j                  t
        j                  «      }| j                  |||¬«      }||z   }|S )N)r\   ©r�   r‚   )rö   r½   rK   r\   rô   rG   rc   r÷   )rW   r€   r�   r‚   rÓ   Úresiduals         rY   rÔ   zMambaBlock.forwardž  su   € ð !ˆØŸ	™	 -×"2Ñ"2¸¿¹×9IÑ9I×9OÑ9OÐ"2Ó"PÓQˆØ× Ò Ø—{‘{¤5§=¡=Ó1ˆHàŸ
™
 =¸|Ð\j˜
ÓkˆØ  =Ñ0ˆØÐrZ   rÕ   )	rÖ   r×   rØ   r0   r	   rG   rÝ   rÔ   rÞ   rß   s   @rY   rñ   rñ   •  s9   ø„ ô]ð &*Ø26ñ	ð ˜d‘lðð ×(Ñ(¨4Ñ/÷	rZ   rñ   c                   óf   ‡ — e Zd ZU eed<   dZddgZdZdZ e	j                  «       ˆ fd„«       Zˆ xZS )ÚMambaPreTrainedModelr   Úbackbonerñ   r   Tc                 ó�  •— t         ‰| �  |«       t        |t        «      �r%|j	                  «        t        j                  |j                  j                  t        j                  d«      ¬«       |j                  j                  �)t        j                  |j                  j                  «       t        j                  |j                  j                  t        j                  d«      ¬«       | j                  j                  rC|j                  j                  }|t        j                  | j                  j                   «      z  }yyy)zInitialize the weights.é   )ÚaN)r/   Ú_init_weightsÚ
isinstancer   rN   rf   Úkaiming_uniform_r;   rK   rp   Úsqrtr#   Úzeros_rO   r   Úrescale_prenorm_residualÚnum_hidden_layers)rW   ÚmoduleÚprX   s      €rY   r  z"MambaPreTrainedModel._init_weights·  sÙ   ø€ ô 	‰Ñ˜fÔ%Ü�fœjÕ)ð ×%Ñ%Ô'ä×!Ñ! &§-¡-×"6Ñ"6¼$¿)¹)ÀA»,ÕGØ�}‰}×!Ñ!Ð-Ü—‘˜FŸM™M×.Ñ.Ô/Ü×!Ñ! &§/¡/×"8Ñ"8¼D¿I¹IÀa»LÕIà�{‰{×3Ò3ð —O‘O×*Ñ*�Ø”T—Y‘Y˜tŸ{™{×<Ñ<Ó=Ñ=‘ð 4ð *rZ   )rÖ   r×   rØ   r   Ú__annotations__Úbase_model_prefixÚ_no_split_modulesÚsupports_gradient_checkpointingÚ_is_statefulrG   rÛ   r  rÞ   rß   s   @rY   rü   rü   ¯  s?   ø… àÓØ"ÐØ% |Ð4ÐØ&*Ð#Ø€Là€U‡]�]ƒ_ó>ó ô>rZ   rü   z,
    Class for the MAMBA model outputs.
    )Úcustom_introc                   ó|   — e Zd ZU dZdZej                  dz  ed<   dZe	dz  ed<   dZ
eej                     dz  ed<   y)ÚMambaOutputa4  
    cache_params (`Cache`):
        The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to
        avoid providing the old `input_ids`.

        Includes both the State space model state matrices after the selective scan, and the Convolutional states
    NÚlast_hidden_stater�   r€   )rÖ   r×   rØ   rÙ   r  rG   ÚFloatTensorr
  r�   r	   r€   Útupler®   rZ   rY   r  r  Ô  sG   … ñð 37Ð�u×(Ñ(¨4Ñ/Ó6Ø!%€L�%˜$‘,Ó%Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ô9rZ   r  zK
    Base class for causal language model (or autoregressive) outputs.
    c                   ó¤   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	e
dz  ed<   dZeej                     dz  ed<   y)ÚMambaCausalLMOutputa™  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction).
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    cache_params (`Cache`):
        The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to
        avoid providing the old `input_ids`.

        Includes both the State space model state matrices after the selective scan, and the Convolutional states
    NÚlossÚlogitsr�   r€   )rÖ   r×   rØ   rÙ   r  rG   r  r
  r  r�   r	   r€   r  r®   rZ   rY   r  r  è  s[   … ñ
ð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø!%€L�%˜$‘,Ó%Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ô9rZ   r  c                   óÞ   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Ze	 	 	 	 	 	 	 ddej                  dz  dej                  dz  de
dz  d	edz  d
edz  dedz  dej                  dz  deez  fd„«       Zˆ xZS )Ú
MambaModelc           	      óÈ  •— t         ‰| �  |«       t        j                  |j                  |j
                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}«      | _        d| _        t        |j
                  |j                  ¬«      | _        | j!                  | j"                  «       | j%                  «        y c c}w )N)r   Fró   )r/   r0   r   Ú	EmbeddingÚ
vocab_sizer1   Ú
embeddingsÚ
ModuleListrÂ   r  rñ   r“   Úgradient_checkpointingrá   rõ   Únorm_fÚ"_register_load_state_dict_pre_hookÚ	load_hookÚ	post_init)rW   r   ÚidxrX   s      €rY   r0   zMambaModel.__init__  s¡   ø€ Ü‰Ñ˜Ô äŸ,™, v×'8Ñ'8¸&×:LÑ:LÓMˆŒÜ—m‘mÔRWÐX^×XpÑXpÓRqÖ$rÈ3¤Z°À#Ö%FÒ$rÓsˆŒà&+ˆÔ#Ü" 6×#5Ñ#5¸6×;TÑ;TÔUˆŒà×/Ñ/°·±Ô?Ø�‰Õùò %ss   Á&Cc                 óf   — |D ],  }d|v sŒ|j                  |«      ||j                  dd«      <    y  y )Nz
embedding.zembeddings.)ÚpopÚreplace)rW   Ú
state_dictÚprefixÚargsÚks        rY   r#  zMambaModel.load_hook  s;   € Øò 	ˆAØ˜qÒ ØEOÇ^Á^ÐTUÓEV�
˜1Ÿ9™9 \°=ÓAÑBÙñ	rZ   c                 ó   — | j                   S r­   ©r  rî   s    rY   Úget_input_embeddingszMambaModel.get_input_embeddings  s   € Ø�‰ÐrZ   c                 ó   — || _         y r­   r.  ©rW   Únew_embeddingss     rY   Úset_input_embeddingszMambaModel.set_input_embeddings  s	   € Ø(ˆ�rZ   NÚ	input_idsÚinputs_embedsr�   Ú	use_cacheÚoutput_hidden_statesÚreturn_dictr‚   Úreturnc                 ó^  — |�|n| j                   j                  }|�|n#| j                  s| j                   j                  nd}|�|n| j                   j                  }|du |duz  rt        d«      ‚|€| j                  |«      }| j                  r| j                  r|rd}|r|€t        | j                   ¬«      }|}	|rdnd}
| j                  D ]  } ||	||¬«      }	|sŒ|
|	fz   }
Œ | j                  |	«      }	|r|
|	fz   }
|st        d„ |	||
fD «       «      S t        |	|r||
¬«      S d|
¬«      S )	a¤  
        cache_params (`Cache`, *optional*):
            If passed along, the model uses the previous state in all the blocks (which will give the output for the
            `input_ids` provided as if the model add `state_input_ids + input_ids` as context).
        use_cache (`bool`, *optional*):
            If set to `True`, the `cache_params` is returned and can be used to quickly generate the next logits.
        NFz:You must specify exactly one of input_ids or inputs_embeds)r   r®   rù   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr­   r®   )Ú.0Úvs     rY   ú	<genexpr>z%MambaModel.forward.<locals>.<genexpr>R  s   è ø€ Òf˜qÐXYÑXeœÑfùs   ‚Š)r  r�   r€   )r   r7  r‹   r6  r8  Ú
ValueErrorr  r   r
   r“   r!  r  r  )rW   r4  r5  r�   r6  r7  r8  r‚   rÓ   r€   Úall_hidden_statesÚmixer_blocks               rY   rÔ   zMambaModel.forward  se  € ð( %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð "+Ð!6‘IÐZ^×ZgÒZg¸T¿[¹[×=RÒ=RÐmrˆ	Ø%0Ð%<‘kÀ$Ç+Á+×BYÑBYˆà˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø ŸO™O¨IÓ6ˆMà×&Ò&¨4¯=ª=¹YØˆIá˜Ð-Ü'¨t¯{©{Ô;ˆLà%ˆÙ"6™B¸DÐØŸ;™;ò 	IˆKÙ'ØØ)Ø-ôˆMò $Ø$5¸Ð8HÑ$HÑ!ð	Ið Ÿ™ MÓ2ˆáØ 1°]Ð4DÑ DÐáÜÑf ]°LÐBSÐ$TÔfÓfÐfäØ+Ù)2˜Ø+ô
ð 	
à8<Ø+ô
ð 	
rZ   )NNNNNNN)rÖ   r×   rØ   r0   r#  r/  r3  r   rG   rÝ   r	   rÚ   r  r  rÔ   rÞ   rß   s   @rY   r  r    sÆ   ø„ ô
òòò)ð ð .2Ø15Ø%)Ø!%Ø,0Ø#'Ø26ñ<
à×#Ñ# dÑ*ð<
ð ×'Ñ'¨$Ñ.ð<
ð ˜d‘lð	<
ð
 ˜$‘;ð<
ð # T™kð<
ð ˜D‘[ð<
ð ×(Ñ(¨4Ñ/ð<
ð 
�Ñ	ò<
ó ô<
rZ   r  zˆ
    The MAMBA Model transformer with a language modeling head on top (linear layer with weights tied to the input
    embeddings).
    c                   ój  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Z	 	 	 	 	 ddedz  dej                  dz  d	e
dz  fˆ fd
„Ze	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dedz  dej                  dz  de
dz  de
dz  de
dz  deej                  z  deez  fd„«       Zˆ xZS )ÚMambaForCausalLMzlm_head.weightzbackbone.embeddings.weightc                 óÆ   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  |j                  d¬«      | _        | j                  «        y )NFr(   )
r/   r0   r  rý   r   rA   r1   r  Úlm_headr$  )rW   r   rX   s     €rY   r0   zMambaForCausalLM.__init__d  sF   ø€ Ü‰Ñ˜Ô Ü" 6Ó*ˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒà�‰ÕrZ   c                 ó6   — | j                   j                  «       S r­   )rý   r/  rî   s    rY   r/  z%MambaForCausalLM.get_input_embeddingsk  s   € Ø�}‰}×1Ñ1Ó3Ð3rZ   c                 ó8   — | j                   j                  |«      S r­   )rý   r3  r1  s     rY   r3  z%MambaForCausalLM.set_input_embeddingsn  s   € Ø�}‰}×1Ñ1°.ÓAÐArZ   Nr�   r‚   Úis_first_iterationc           	      óF   •— t        ‰	| �  |f|||||dœ|¤Ž}|r|sd |d<   |S )N)r5  r6  r�   r‚   rH  r‚   )r/   Úprepare_inputs_for_generation)
rW   r4  r5  r6  r�   r‚   rH  rÓ   Úmodel_inputsrX   s
            €rY   rJ  z.MambaForCausalLM.prepare_inputs_for_generationq  sN   ø€ ô ‘wÑ<Øð
à'ØØ%Ø)Ø1ñ
ð ñ
ˆñ Ñ/Ø-1ˆLÐ)Ñ*àÐrZ   r4  r5  Úlabelsr7  r8  r6  Úlogits_to_keepr9  c
           	      óì  — |�|n| j                   j                  }| j                  |||||||¬«      }|d   }t        |	t        «      rt        |	 d«      n|	}| j                  |dd…|dd…f   j                  | j                  j                  j                  «      «      j                  «       }d}|��|j                  |j                  «      }|ddd…dd…f   j                  «       }|ddd…f   j                  «       }t        «       } ||j                  d|j                  d«      «      |j                  d«      «      }|s|f|dd z   }|�|f|z   S |S t!        |||j"                  |j$                  ¬«      S )aN  
        cache_params (`Cache`, *optional*):
            If passed along, the model uses the previous state in all the blocks (which will give the output for the
            `input_ids` provided as if the model add `state_input_ids + input_ids` as context).
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set
            `labels = input_ids` Indices are selected in `[-100, 0, ..., config.vocab_size]` All labels set to `-100`
            are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size]`
        use_cache (`bool`, *optional*):
            If set to `True`, the `cache_params` is returned and can be used to quickly generate the next logits.
        N)r�   r5  r7  r8  r6  r‚   r   .r]   r   )r  r  r�   r€   )r   r8  rý   r  r7   ÚslicerE  r½   rK   r\   rŒ   rL   re   r   r�   r‘   r  r�   r€   )rW   r4  r‚   r5  r�   rL  r7  r8  r6  rM  rÓ   Úmamba_outputsr€   Úslice_indicesr  r  Úshift_logitsÚshift_labelsÚloss_fctÚoutputs                       rY   rÔ   zMambaForCausalLM.forwardŠ  sƒ  € ð2 &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàŸ™ØØ%Ø'Ø!5Ø#ØØ)ð &ó 
ˆð & aÑ(ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@×CÑCÀDÇLÁL×DWÑDW×D]ÑD]Ó^Ó_×eÑeÓgˆàˆØÐà—Y‘Y˜vŸ}™}Ó-ˆFà! # s¨ sªA +Ñ.×9Ñ9Ó;ˆLØ! # q¡r '™?×5Ñ5Ó7ˆLä'Ó)ˆHÙ˜L×-Ñ-¨b°,×2CÑ2CÀBÓ2GÓHÈ,×J[ÑJ[Ð\^ÓJ_Ó`ˆDáØ�Y ¨q¨rÐ!2Ñ2ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä"ØØØ&×3Ñ3Ø'×5Ñ5ô	
ð 	
rZ   )NNNNF)	NNNNNNNNr   )rÖ   r×   rØ   Ú_tied_weights_keysr0   r/  r3  r	   rG   rÝ   rÚ   rJ  r   r  r7   rÜ   r  r  rÔ   rÞ   rß   s   @rY   rC  rC  [  sF  ø„ ð +Ð,HÐIÐôò4òBð ØØ%)Ø26Ø*/ñð
 ˜d‘lðð ×(Ñ(¨4Ñ/ðð ! 4™Kõð2 ð .2Ø26Ø26Ø%)Ø*.Ø,0Ø#'Ø!%Ø-.ñ=
à×#Ñ# dÑ*ð=
ð ×(Ñ(¨4Ñ/ð=
ð ×(Ñ(¨4Ñ/ð	=
ð
 ˜d‘lð=
ð × Ñ  4Ñ'ð=
ð # T™kð=
ð ˜D‘[ð=
ð ˜$‘;ð=
ð ˜eŸl™lÑ*ð=
ð 
Ð$Ñ	$ò=
ó ô=
rZ   rC  )rC  r  rü   )6rÙ   rp   Údataclassesr   rG   r   Útorch.nnr   Ú r   rf   Úactivationsr   Úcache_utilsr	   r
   Ú
generationr   Úintegrationsr   Úintegrations.accelerater   Úmodeling_layersr   Úmodeling_utilsr   Úutilsr   r   r   Úutils.import_utilsr   r   r   r   Úconfiguration_mambar   Ú
get_loggerrÖ   r|   Ú(torch._higher_order_ops.associative_scanr   Úmambapy.pscanr   ÚModuler   rá   rñ   rü   r  r  r  rC  Ú__all__r®   rZ   rY   ú<module>ri     s�  ðñ ã Ý !ã Ý Ý %å &Ý !ß .Ý )Ý ,Ý =Ý 9Ý -÷ñ ÷
ó õ -ð 
ˆ×	Ñ	˜HÓ	%€á˜WÔ%ÞIàÐñ ÔÞ#à€EôCN�—‘ô CNôL
F�2—9‘9ô Fô(Ð+ô ð4 ô!>˜?ó !>ó ð!>ñH ðôð
 ô:�+ó :ó óð:ñ ðôð
 ô:˜+ó :ó óð:ð& ôV
Ð%ó V
ó ðV
ñr ðôôg
Ð+¨_ó g
óðg
òT E�rZ   