Ë
    ÜÓ^jFµ  ã                   ó’  — 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mZm	Z	 ddl
mZ ddlmZ dd	lmZmZ dd
lmZ 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  ddl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/  e'j`                  e1«      Z2 G d„ dejf                  «      Z4dejj                  de6dejj                  fd„Z7	 d<dejf                  dejj                  dejj                  d ejj                  d!ejj                  dz  d"e8d#e8fd$„Z9 G d%„ d&ejf                  «      Z: G d'„ d(ejf                  «      Z; G d)„ d*ejf                  «      Z< G d+„ d,ejf                  «      Z= G d-„ d.e«      Z> G d/„ d0e«      Z?e% G d1„ d2e «      «       Z@e% G d3„ d4e@«      «       ZA G d5„ d6e@e«      ZB e%d7¬8«       G d9„ d:e@«      «       ZCg d;¢ZDy)=zPyTorch Zamba model.é    N)ÚCallable)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úlazy_load_kernel)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚCausalLMOutputWithPastÚ SequenceClassifierOutputWithPast)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úresolve_internal_import)Úcapture_outputsé   )ÚZambaConfigc                   ó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 )	ÚZambaRMSNormÚepsÚreturnNc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)z;
        ZambaRMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__r   Ú	ParameterÚtorchÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizer"   Ú	__class__s      €ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/zamba/modeling_zamba.pyr&   zZambaRMSNorm.__init__2   s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕó    Úhidden_statesc                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S )Né   éÿÿÿÿT)Úkeepdim)	ÚdtypeÚtor(   Úfloat32ÚpowÚmeanÚrsqrtr+   r*   )r,   r1   Úinput_dtypeÚvariances       r/   ÚforwardzZambaRMSNorm.forward:   sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r0   c                 ó^   — t        | j                  j                  «      › d| j                  › �S )Nz, eps=)Útupler*   Úshaper+   )r,   s    r/   Ú
extra_reprzZambaRMSNorm.extra_reprA   s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr0   )g�íµ ÷Æ°>)
Ú__name__Ú
__module__Ú__qualname__Úfloatr&   r(   ÚTensorr>   rB   Ú__classcell__©r.   s   @r/   r!   r!   1   s7   ø„ ñ$¨ð $¸$õ $ð; U§\¡\ð ;°e·l±ló ;öJr0   r!   r1   Ún_repr#   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)rA   ÚexpandÚreshape)r1   rJ   ÚbatchÚnum_key_value_headsÚslenÚhead_dims         r/   Ú	repeat_kvrR   F   so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTr0   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutc                 ó  — 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 )Nr3   r   r4   )Údimr6   )ÚpÚtrainingr   )rR   Únum_key_value_groupsr(   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxr8   r7   r6   rY   r]   Ú
contiguous)rS   rT   rU   rV   rW   rX   rY   ÚkwargsÚ
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r/   Úeager_attention_forwardri   R   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à˜Ð$Ð$r0   c                   óä   ‡ — e Zd ZdZdedefˆ fd„Z	 ddej                  dedej                  dz  de	dz  d	e
e   d
eej                  ej                  dz  eej                     dz  f   fd„Zˆ xZS )ÚZambaAttentionaA  
    Multi-headed attention from 'Attention Is All You Need' paper. Modified to use sliding window attention: Longformer
    and "Generating Long Sequences with Sparse Transformers".

    Adapted from transformers.models.mistral.modeling_mistral.MistralAttention:
    The input dimension here is attention_hidden_size = 2 * hidden_size, and head_dim = attention_hidden_size // num_heads.
    The extra factor of 2 comes from the input being the concatenation of original_hidden_states with the output of the previous (mamba) layer
    (see fig. 2 in https://huggingface.co/papers/2405.16712).
    Additionally, replaced
    attn_weights = torch.matmul(query_states, key_states.transpose(2, 3)) / math.sqrt(self.head_dim) with
    attn_weights = torch.matmul(query_states, key_states.transpose(2, 3)) / math.sqrt(self.head_dim/2)
    ÚconfigÚ	layer_idxc                 ó.  •— t         ‰| �  «        || _        || _        |j                  | _        |j
                  | _        |j                  |j                  z  | _	        |j                  | _
        | j                  dz  dz  | _        d| _        |j                  | _        t        j                  |j                  |j                  | j                  z  d¬«      | _        t        j                  |j                  |j                  | j                  z  d¬«      | _        t        j                  |j                  |j                  | j                  z  d¬«      | _        t        j                  |j                  | j                  z  |j&                  d¬«      | _        y )Nr3   ç      à¿TF©Úbias)r%   r&   rl   rm   Úattention_hidden_sizeÚattention_head_dimrQ   Únum_attention_headsrO   r^   Úmax_position_embeddingsrX   Ú	is_causalÚattention_dropoutr   ÚLinearÚq_projÚk_projÚv_projr-   Úo_proj©r,   rl   rm   r.   s      €r/   r&   zZambaAttention.__init__y   s9  ø€ Ü‰ÑÔØˆŒØ"ˆŒà%+×%AÑ%AˆÔ"Ø×1Ñ1ˆŒØ$*×$>Ñ$>À&×B\ÑB\Ñ$\ˆÔ!Ø'-×'EÑ'EˆÔ$ØŸ™¨Ñ)¨dÑ2ˆŒØˆŒØ!'×!9Ñ!9ˆÔä—i‘i × <Ñ <¸f×>XÑ>XÐ[_×[hÑ[hÑ>hÐotÔuˆŒÜ—i‘i × <Ñ <¸f×>XÑ>XÐ[_×[hÑ[hÑ>hÐotÔuˆŒÜ—i‘i × <Ñ <¸f×>XÑ>XÐ[_×[hÑ[hÑ>hÐotÔuˆŒÜ—i‘i × :Ñ :¸T¿]¹]Ñ JÈF×L^ÑL^ÐejÔkˆ�r0   Nr1   rW   Úpast_key_valuesrd   r#   c                 óÊ  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }	| j                  |«      j                  |«      j	                  dd«      }
|�|j                  |	|
|«      \  }	}
t        j                  | j                  j                  t        «      } || ||	|
|f| j                  sdn| j                  | j                  dœ|¤Ž\  }} |j                   g |¢d‘­Ž j#                  «       }| j%                  |«      }||fS )Nr4   r   r3   ç        )rY   rX   )rA   rQ   ry   Úviewr`   rz   r{   Úupdater   Úget_interfacerl   Ú_attn_implementationri   r]   rw   rX   rM   rc   r|   )r,   r1   rm   rW   r~   rd   Úinput_shapeÚhidden_shapeÚquery_statesre   rf   Úattention_interfacerh   rg   s                 r/   r>   zZambaAttention.forward‹   sk  € ð $×)Ñ)¨#¨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ˆàÐ&Ø'6×'=Ñ'=¸jÈ,ÐXaÓ'bÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r0   ©N)rC   rD   rE   Ú__doc__r   Úintr&   r(   rG   r   r   r   r@   r>   rH   rI   s   @r/   rk   rk   k   s    ø„ ñðl˜{ð l°sõ lð. )-ñ#)à—|‘|ð#)ð ð#)ð Ÿ™ tÑ+ð	#)ð
  ™ð#)ð Ð+Ñ,ð#)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	M÷#)r0   rk   c                   ó~   ‡ — e Zd ZdZdefˆ fd„Z	 d
dej                  dedz  fd„Z	d
dedz  fd„Z
d
dedz  fd	„Zˆ xZS )ÚZambaMambaMixeruE  
    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)

    This module differs from `transformers.models.mamba.modeling_mamba.MambaMixer` in two ways:
    - Added multi-head: the output of `self.in_proj` is split into `self.n_mamba_heads` heads, and each head
    undergoes an independent forward pass, identical to the original `MambaMixer`, up until the pre-activations of
    `self.out_proj`. The pre-activations, coming from different mamba heads, are then concatenated and fed into `self.out_proj`.
    rl   c           	      ó8	  •— t         ‰| �  «        || _        || _        |j                  | _        |j
                  | _        |j                  | _        |j                  |j                  z  | _
        |j                  | _        |j                  | _        | j                  | j                  z  | _        |j                  | _        |j"                  | _        t'        j(                  | j                  | j                  | j                   | j                  | j                  | j                  dz
  ¬«      | _        |j,                  | _        t0        |j,                     | _        |j4                  | _        t'        j8                  | j                  | j                  dz  | j$                  ¬«      | _        t'        j<                  t?        j@                  | j                  | j                  | j                  dz  z   | j                  «      «      | _!        t'        j<                  t?        j@                  | j                  | j                  | j                  «      dz
  dz  | j                  dz  z  «      | _"        t'        j<                  t?        j@                  | j                  | j                  «      «      | _#        t?        jH                  d| j                  dz   t>        jJ                  ¬«      d d d …f   }|jM                  | j                  d«      jO                  «       }t'        j<                  t?        jP                  |«      jS                  | j                  | j                  d«      «      | _*        t'        j<                  t?        jV                  | j                  | j                  «      «      | _,        t'        j8                  | j                  | j                  | j$                  ¬«      | _-        t]        d«      a/ta        t^        d	d «      a1ta        t^        d
d «      a2t]        d«      a3ti        tf        d¬«      a5ta        tf        dd «      a6ta        tf        dd «      a7tq        tj        tl        td        tb        tn        f«      a9tr        stt        jw                  d«       |jx                  |   | _=        y )Nr   )Úin_channelsÚout_channelsrq   Úkernel_sizeÚgroupsÚpaddingr3   rp   g      à?©r6   r4   zcausal-conv1dÚcausal_conv1d_updateÚcausal_conv1d_fnz	mamba-ssmz8ops.triton.selective_state_update.selective_state_update)Úchained_pathÚselective_scan_fnÚmamba_inner_fnaq  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. To install follow https://github.com/state-spaces/mamba/#installation and https://github.com/Dao-AILab/causal-conv1d. If you want to use the naive implementation, set `use_mamba_kernels=False` in the model config)>r%   r&   rl   rm   r-   Úmamba_d_stateÚssm_state_sizeÚmamba_d_convÚconv_kernel_sizeÚmamba_expandÚintermediate_sizeÚmamba_dt_rankÚtime_step_rankÚn_mamba_headsÚmamba_head_dimÚmamba_conv_biasÚuse_conv_biasÚmamba_proj_biasÚuse_biasr   ÚConv1dÚconv1dÚhidden_mamba_actÚ
activationr
   ÚactÚuse_mamba_kernelsÚuse_fast_kernelsrx   Úin_projr'   r(   ÚzerosÚx_proj_weightÚdt_proj_weightÚdt_proj_biasÚaranger8   rL   rc   ÚlogrM   ÚA_logr)   ÚDÚout_projr   Úcausal_conv1dÚgetattrr•   r–   Ú	mamba_ssmr   Úselective_state_updater˜   r™   ÚallÚis_fast_path_availableÚloggerÚwarning_onceÚlayer_typesÚ
layer_type)r,   rl   rm   ÚAr.   s       €r/   r&   zZambaMambaMixer.__init__¾   s¥  ø€ Ü‰ÑÔØˆŒØ"ˆŒØ!×-Ñ-ˆÔØ$×2Ñ2ˆÔØ &× 3Ñ 3ˆÔØ!'×!4Ñ!4°v×7IÑ7IÑ!IˆÔØ$×2Ñ2ˆÔØ#×1Ñ1ˆÔØ"×4Ñ4¸×8JÑ8JÑJˆÔØ#×3Ñ3ˆÔØ×.Ñ.ˆŒÜ—i‘iØ×.Ñ.Ø×/Ñ/Ø×#Ñ#Ø×-Ñ-Ø×)Ñ)Ø×)Ñ)¨AÑ-ô
ˆŒð !×1Ñ1ˆŒÜ˜&×1Ñ1Ñ2ˆŒà &× 8Ñ 8ˆÔô —y‘y ×!1Ñ!1°4×3IÑ3IÈAÑ3MÐTX×TaÑTaÔbˆŒô  Ÿ\™\Ü�K‰KØ×"Ñ"Ø×#Ñ# d×&9Ñ&9¸AÑ&=Ñ=Ø×#Ñ#óó
ˆÔô !Ÿl™lÜ�[‰[˜×+Ñ+¨T×-@Ñ-@À$×BUÑBUÓVÐY\Ñ\Øñà×!Ñ! 3Ñ&ñ'ó
ˆÔô
 ŸL™L¬¯©°T×5GÑ5GÈ×I\ÑI\Ó)]Ó^ˆÔô �L‰L˜˜D×/Ñ/°!Ñ3¼5¿=¹=ÔIÈ$ÒPQÈ'ÑRˆØ�H‰H�T×+Ñ+¨RÓ0×;Ñ;Ó=ˆÜ—\‘\¤%§)¡)¨A£,×"6Ñ"6°t×7IÑ7IÈ4×K^ÑK^Ð`bÓ"cÓdˆŒ
Ü—‘œeŸj™j¨×);Ñ);¸T×=PÑ=PÓQÓRˆŒÜŸ	™	 $×"8Ñ"8¸$×:JÑ:JÐQU×Q^ÑQ^Ô_ˆŒô )¨Ó9ˆÜ&¤}Ð6LÈdÓSÐÜ"¤=Ð2DÀdÓKÐô % [Ó1ˆ	Ü!8ÜÐ$^ô"
Ðô $¤IÐ/BÀDÓIÐÜ ¤Ð,<¸dÓCˆô "%Ü#Ô%6Ô8HÔJ^Ô`nÐoó"
Ðõ &Ü×Ñð^ôð !×,Ñ,¨YÑ7ˆ�r0   Nr1   Úcache_paramsc                 ó(  — |j                   \  }}}|d uxr" |j                  | j                  «      xr |dk(  }| j                  |«      j	                  dd«      }|j                  |dd|«      j                  dd¬«      \  }}	|j                  d«      j                  «       }|	j                  d«      }	|	j                  || j                  d|«      j	                  dd«      }	| j                  j                  j                  | j                  j                  j                  d«      | j                  j                  j                  d«      «      }
|rrt        |j                  d«      |j                  | j                     j                   d   |
| j                  j"                  | j$                  «      }|j'                  d«      }nõ|�,t)        j*                  |dk(  «      s||j'                  d«      z  }|�jt,        j.                  j1                  || j2                  |j                   d   z
  df«      }|j5                  || j                  «      d| j2                   d …f   }t7        ||
| j                  j"                  | j$                  ¬«      }|�,t)        j*                  |dk(  «      s||j'                  d«      z  }|j                  d| j                  | j8                  |«      j	                  dd«      }| j:                  d d …d d d …d d …f   |z  j	                  dd«      }t)        j<                  || j>                  | j@                  | j@                  gd¬«      \  }}}| jB                  d d …d f   |j	                  dd«      z  }t)        jD                  | jF                  jI                  «       «       }| jJ                  �| jJ                  jI                  «       nd }t)        jL                  |d|f|jN                  |jP                  ¬	«      }|r¹tS        | j                  «      D ]Ÿ  }tU        |j                  | j                     jV                  d   d d …|f   ||ddf   ||ddf   ||   ||d d …df   ||d d …df   | jX                  |   |	|ddf   ||   d
¬«
      j'                  d«      }t)        jZ                  ||fd¬«      }Œ¡ �n5t)        jL                  |d| j8                  | j@                  f|jN                  |jP                  ¬	«      }tS        | j                  «      D ]¹  }t]        ||   ||   ||   ||   j	                  dd«      ||   j	                  dd«      | jX                  |   jI                  «       |	|   ||   d
d
¬«
      \  }}t)        jZ                  ||fd¬«      j                  «       }t)        jZ                  ||j'                  d«      fd¬«      }Œ» |�|�|j_                  || j                  «       | ja                  |j	                  dd«      «      }|S )Nr   r3   r4   ©r[   r   .)r«   éþÿÿÿ©Údevicer6   T)Údt_softplus)Údelta_softplusÚreturn_last_state)1rA   Úhas_previous_staterm   r¯   r`   r�   ÚchunkÚsqueezerc   rM   r¢   r©   r*   Úsizer•   ÚlayersÚconv_statesrq   r«   Ú	unsqueezer(   r½   r   ra   Úpadr�   Úupdate_conv_stater–   r£   r±   Úsplitr¡   r›   r²   Úexpr¶   rF   r³   ÚemptyrÉ   r6   Úranger¼   Úrecurrent_statesr·   Úcatr˜   Úupdate_recurrent_stater¸   )r,   r1   rÄ   rW   Ú
batch_sizeÚseq_lenÚ_Úuse_precomputed_statesÚprojected_statesÚgateÚconv_weightsrÒ   Ússm_parametersÚ	time_stepÚBÚCÚdiscrete_time_steprÃ   Útime_proj_biasÚscan_outputsÚnÚscan_outputs_Ú	ssm_stateÚ
ssm_state_Úcontextualized_statess                            r/   Úcuda_kernels_forwardz$ZambaMambaMixer.cuda_kernels_forward  s´  € ð "/×!4Ñ!4Ñˆ
�G˜Qà Ð$Òi¨×)HÑ)HÈÏÉÓ)XÒiÐ]dÐhiÑ]ið 	ð
  Ÿ<™<¨Ó6×@Ñ@ÀÀAÓFÐà.×3Ñ3°JÀÀAÀwÓO×UÑUÐVWÐ]^ÐUÓ_Ñˆ�tØ%×-Ñ-¨aÓ0×;Ñ;Ó=ˆØ�|‰|˜A‹ˆØ�|‰|˜J¨×(:Ñ(:¸BÀÓH×RÑRÐSTÐVWÓXˆð —{‘{×)Ñ)×.Ñ.¨t¯{©{×/AÑ/A×/FÑ/FÀqÓ/IÈ4Ï;É;×K]ÑK]×KbÑKbÐcdÓKeÓfˆÙ!Ü0Ø×%Ñ% bÓ)Ø×#Ñ# D§N¡NÑ3×?Ñ?ÀÑBØØ—‘× Ñ Ø—‘óˆMð *×3Ñ3°BÓ7‰MàÐ)´%·)±)¸NÈaÑ<OÔ2PØ -°×0HÑ0HÈÓ0KÑ K�ØÐ'Ü Ÿm™m×/Ñ/°À×@UÑ@UÐXe×XkÑXkÐlnÑXoÑ@oÐqrÐ?sÓt�Ø*×<Ñ<¸[È$Ï.É.ÓYØ˜$×/Ñ/Ð/Ñ1Ð1ñ�ô -¨]¸LÈ$Ï+É+×JZÑJZÐgk×gvÑgvÔwˆMØÐ)´%·)±)¸NÈaÑ<OÔ2PØ -°×0HÑ0HÈÓ0KÑ K�ð
 &×-Ñ-¨b°$×2DÑ2DÀd×FYÑFYÐ[bÓc×mÑmÐnoÐqrÓsˆØ×,Ñ,ªQ°²aº¨]Ñ;¸mÑK×VÑVÐWYÐ[]Ó^ˆäŸ+™+Ø˜T×0Ñ0°$×2EÑ2EÀt×GZÑGZÐ[Ðacô
‰ˆ	�1�að "×0Ñ0²°D°Ñ9¸I×<OÑ<OÐPRÐTVÓ<WÑWÐä�Y‰Y�t—z‘z×'Ñ'Ó)Ó*Ð*ˆð 7;×6GÑ6GÐ6S˜×*Ñ*×0Ñ0Ô2ÐY]ˆÜ—{‘{ J°°7Ð#;ÀM×DXÑDXÐ`m×`sÑ`sÔtˆá!Ü˜4×-Ñ-Ó.ò O�Ü 6Ø ×'Ñ'¨¯©Ñ7×HÑHÈÑKÊAÈqÈDÑQØ! ! S¨! )Ñ,Ø& q¨#¨q yÑ1Ø�a‘DØ�aš˜A�g‘JØ�aš˜A�g‘JØ—F‘F˜1‘IØ˜˜C ˜‘OØ" 1Ñ%Ø $ô!÷ ‘)˜B“-ð ô  %Ÿy™y¨,¸Ð)FÈAÔN‘òOô  Ÿ™Ø˜Q × 3Ñ 3°T×5HÑ5HÐIØ$×+Ñ+Ø#×)Ñ)ôˆIô
 ˜4×-Ñ-Ó.ò S�Ü,=Ø! !Ñ$Ø& qÑ)Ø�a‘DØ�a‘D—N‘N 1 aÓ(Ø�a‘D—N‘N 1 aÓ(Ø—F‘F˜1‘I—O‘OÓ%Ø˜‘GØ" 1Ñ%Ø#'Ø&*ô-Ñ)�˜zô  %Ÿy™y¨,¸Ð)FÈAÔN×YÑYÓ[�Ü!ŸI™I y°*×2FÑ2FÀqÓ2IÐ&JÐPQÔR‘	ðSð Ð$¨Ð)AØ×3Ñ3°I¸t¿~¹~ÔNð !%§¡¨l×.DÑ.DÀQÈÓ.JÓ KÐØ$Ð$r0   c           
      óF  — |j                   \  }}}|j                  }| j                  |«      j                  dd«      }|j	                  |dd|«      j                  dd¬«      \  }	}
|	j                  d«      j                  «       }	|
j                  d«      }
|
j                  || j                  d|«      j                  dd«      }
|�P|j                  | j                  «      r5|j                  | j                     j                  d   j                  «       }nDt        j                   || j                  | j"                  | j$                  f|	j&                  |¬«      }|��È|j                  | j                  «      rÁ|dk(  r¼|j)                  |	| j                  «      d| j*                   d …f   }t        j,                  || j.                  j0                  d d …dd d …f   z  d¬«      }	| j2                  r|	| j.                  j4                  z  }	| j7                  |	«      j9                  |«      j;                  d«      }	�n?|�+|	|d d …|	j                   d    d …f   j;                  d«      z  }	t<        j>                  jA                  |	| j*                  |	j                   d   z
  df«      }|j)                  || j                  «      d| j*                   d …f   }| j7                  | j/                  |	«      dd |…f   «      }	|�|	|d d …|	j                   d    d …f   j;                  d«      z  }	nS|�|	|j;                  d«      z  }	| j7                  | j/                  |	«      dd |…f   «      }	|�|	|j;                  d«      z  }	|	j                  d| j                  | j"                  |«      j                  dd«      }	| jB                  d d …d d d …d d …f   |	z  j                  dd«      }t        jD                  || jF                  | j$                  | j$                  gd¬«      \  }}}| jH                  d d …d f   |j                  dd«      z  | jJ                  d d …d d d …d f   z   }t<        j>                  jM                  |«      }t        jN                  | jP                  jS                  «       «       }t        jN                  |d d …d d d …d d d …f   |d d …d d …d d …d d …d f   z  «      }|d d …d d …d d …d d …d f   |d d …d d …d d d …d d …f   jS                  «       z  }||	d d …d d …d d …d d …d f   jS                  «       z  }g }tU        |«      D ]¹  }|d d …d d …d d …|d d …f   j                  dd«      |z  |d d …d d …d d …|d d …f   j                  dd«      z   }t        jV                  |j                  dd«      j9                  |«      |d d …d d …|d d …f   j;                  d«      «      }|jY                  |d d …d d …d d …df   «       Œ» t        jZ                  |d¬«      }||	| j\                  d d …d d d …d f   z  z   }|| j7                  |
«      z  }|�|j_                  || j                  «       | ja                  |j                  dd«      j                  |d|«      j                  dd«      «      }|S )	Nr   r3   r4   rÆ   r   rÈ   .rÇ   )1rA   r6   r¯   r`   r�   rÎ   rÏ   rc   rM   r¢   rÍ   rm   rÑ   rÚ   Úcloner(   r°   r£   r›   rÉ   rÕ   r�   Úsumr©   r*   r¥   rq   r¬   r7   rÓ   r   ra   rÔ   r±   rÖ   r¡   r²   r³   Úsoftplusr×   r¶   rF   rÙ   r_   ÚappendÚstackr·   rÜ   r¸   )r,   Úinput_statesrÄ   rW   rÝ   rÞ   rß   r6   rá   r1   râ   rí   Ú
conv_staterä   rå   ræ   rç   rè   rÃ   Ú
discrete_AÚ
discrete_BÚdeltaB_urê   ÚiÚscan_outputrï   s                             r/   Úslow_forwardzZambaMambaMixer.slow_forwardt  sM  € Ø!-×!3Ñ!3Ñˆ
�G˜QØ×"Ñ"ˆàŸ<™<¨Ó5×?Ñ?ÀÀ1ÓEÐà.×3Ñ3°JÀÀAÀwÓO×UÑUÐVWÐ]^ÐUÓ_Ñˆ�tØ%×-Ñ-¨aÓ0×;Ñ;Ó=ˆØ�|‰|˜A‹ˆØ�|‰|˜J¨×(:Ñ(:¸BÀÓH×RÑRÐSTÐVWÓXˆàÐ#¨×(GÑ(GÈÏÉÔ(Wà$×+Ñ+¨D¯N©NÑ;×LÑLÈQÑO×UÑUÓW‰IäŸ™Ø˜T×/Ñ/°×1DÑ1DÀd×FYÑFYÐZØ$×+Ñ+ØôˆIð Ñ#Ø×.Ñ.¨t¯~©~Ô>À7ÈaÂ<Ø)×;Ñ;¸MÈ4Ï>É>ÓZØ˜$×/Ñ/Ð/Ñ1Ð1ñ�
ô !&§	¡	¨*°t·{±{×7IÑ7IÊ!ÈQÒPQÈ'Ñ7RÑ*RÐXZÔ [�Ø×%Ò%Ø! T§[¡[×%5Ñ%5Ñ5�MØ $§¡¨Ó 7× :Ñ :¸5Ó A× KÑ KÈBÓ O’à!Ð-Ø$1°NÂ1À}×GZÑGZÐ[]ÑG^ÐF^ÑF`ÐC`Ñ4a×4kÑ4kÐlmÓ4nÑ$n�MÜŸ]™]×.Ñ.¨}¸t×?TÑ?TÐWd×WjÑWjÐkmÑWnÑ?nÐpqÐ>rÓs�
Ø)×;Ñ;¸JÈÏÉÓWÐX[Ð^b×^sÑ^sÐ]sÑ]uÐXuÑv�
Ø $§¡¨¯©°]Ó)CÀCÈÈ'ÈÀMÑ)RÓ S�Ø!Ð-Ø$1°NÂ1À}×GZÑGZÐ[]ÑG^ÐF^ÑF`ÐC`Ñ4a×4kÑ4kÐlmÓ4nÑ$n‘MàÐ)Ø -°×0HÑ0HÈÓ0KÑ K�Ø ŸH™H T§[¡[°Ó%?ÀÀXÀgÀXÀÑ%NÓOˆMØÐ)Ø -°×0HÑ0HÈÓ0KÑ K�ð &×-Ñ-¨b°$×2DÑ2DÀd×FYÑFYÐ[bÓc×mÑmÐnoÐqrÓsˆØ×,Ñ,ªQ°²aº¨]Ñ;¸mÑK×VÑVÐWYÐ[]Ó^ˆäŸ+™+Ø˜T×0Ñ0°$×2EÑ2EÀt×GZÑGZÐ[Ðacô
‰ˆ	�1�að #×1Ñ1²!°T°'Ñ:¸Y×=PÑ=PÐQSÐUWÓ=XÑXÐ\`×\mÑ\mÚˆt’Q˜Ðñ]
ñ 
Ðô  Ÿ]™]×3Ñ3Ð4FÓGÐô �Y‰Y�t—z‘z×'Ñ'Ó)Ó*Ð*ˆÜ—Y‘Y˜q¢ Dª!¨T²1Ð!4Ñ5Ð8JÊ1ÊaÒQRÒTUÐW[ÐK[Ñ8\Ñ\Ó]ˆ
Ø'ªª1ªa²°DÐ(8Ñ9¸AºaÂÀDÊ!ÊQÐ>NÑ<O×<UÑ<UÓ<WÑWˆ
Ø ªa²²A²q¸$Ð.>Ñ ?× EÑ EÓ GÑGˆàˆÜ�w“ò 	9ˆAØ"¢1¢aª¨Aªq =Ñ1×;Ñ;¸A¸qÓAÀIÑMÐPXÒYZÒ\]Ò_`ÐbcÒefÐYfÑPg×PqÑPqÐrsÐuvÓPwÑwˆIÜŸ,™, y×':Ñ':¸1¸aÓ'@×'CÑ'CÀEÓ'JÈAÊaÒQRÐTUÒWXÈjÉM×LcÑLcÐdfÓLgÓhˆKØ×Ñ ªAªq²!°Q¨JÑ 7Õ8ð	9ô —k‘k ,°BÔ7ˆØ! ]°T·V±VºA¸tÂQÈÐ<LÑ5MÑ%MÑNˆØ! D§H¡H¨T£NÑ2ˆàÐ#Ø×/Ñ/°	¸4¿>¹>ÔJð !%§¡Ø×!Ñ! ! QÓ'×/Ñ/°
¸BÀÓH×RÑRÐSTÐVWÓXó!
Ðð %Ð$r0   c                 ó  — t        t        t        t        t        t
        f«      }| j                  rC|r"d| j                  j                  j                  vrt        d«      ‚| j                  |||¬«      S | j                  |||¬«      S )NÚcudazôFast Mamba kernels are not available. Make sure to they are installed and that the mamba module is on a CUDA device. lease run 'pip install causal-conv1d>=1.2.0' and 'pip install mamba-ssm', or set use_mamba_kernels=False in the model's config.)rW   )r½   r¼   r˜   r–   r•   r™   r®   r±   rÉ   ÚtypeÚ
ValueErrorrð   rþ   )r,   r1   rÄ   rW   rd   r¾   s         r/   r>   zZambaMambaMixer.forwardÈ  sŒ   € Ü!$Ü#Ô%6Ô8HÔJ^Ô`nÐoó"
Ðð × Ò Ù)¨V¸4×;MÑ;M×;TÑ;T×;YÑ;YÑ-YÜ ðióð ð
 ×,Ñ,¨]¸LÐYgÐ,ÓhÐhØ× Ñ  °È^Ð Ó\Ð\r0   )NN)rC   rD   rE   rŠ   r   r&   r(   rG   r   rð   rþ   r>   rH   rI   s   @r/   r�   r�   ±   sd   ø„ ñ
ðO8˜{õ O8ðd ^bñc%Ø"Ÿ\™\ðc%Ø9>À¹óc%ñJR%°u¸t±|ó R%ñh]°5¸4±<÷ ]r0   r�   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚZambaMLPc                 óÊ  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        t        j                  | j                  | j                  d¬«      | _        t        j                  | j                  | j                  d¬«      | _        t        j                  | j                  | j                  d¬«      | _	        t        |j                     | _        y ©NFrp   )r%   r&   rl   r-   rŸ   r   rx   Ú	gate_projÚup_projÚ	down_projr
   Ú
hidden_actÚact_fn©r,   rl   r.   s     €r/   r&   zZambaMLP.__init__Ú  s¦   ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜŸ™ 4×#3Ñ#3°T×5KÑ5KÐRWÔXˆŒÜ—y‘y ×!1Ñ!1°4×3IÑ3IÐPUÔVˆŒÜŸ™ 4×#9Ñ#9¸4×;KÑ;KÐRWÔXˆŒÜ˜V×.Ñ.Ñ/ˆ�r0   c                 óˆ   — | j                  | j                  | j                  |«      «      | j                  |«      z  «      }|S r‰   )r	  r  r  r  )r,   Úxr	  s      r/   r>   zZambaMLP.forwardä  s6   € Ø—N‘N 4§;¡;¨t¯~©~¸aÓ/@Ó#AÀDÇLÁLÐQRÃOÑ#SÓTˆ	ØÐr0   )rC   rD   rE   r&   r>   rH   rI   s   @r/   r  r  Ù  s   ø„ ô0ör0   r  c                   ó
  ‡ — e Zd Zddededz  fˆ fd„Z	 	 	 ddej                  dej                  dedej                  dz  dedz  d	e	dz  d
e
e   deej                  eej                  ej                  f   dz  f   fd„Zˆ xZS )ÚZambaAttentionDecoderLayerNrl   rm   c                 óü   •— t         ‰| �  «        t        ||«      | _        t	        |«      | _        t        |j                  |j                  ¬«      | _	        t        |j                  |j                  ¬«      | _        y )N©r"   )r%   r&   rk   Ú	self_attnr  Úfeed_forwardr!   rr   Úrms_norm_epsÚinput_layernormr-   Úpre_ff_layernormr}   s      €r/   r&   z#ZambaAttentionDecoderLayer.__init__ê  s_   ø€ Ü‰ÑÔÜ'¨°	Ó:ˆŒä$ VÓ,ˆÔÜ+¨F×,HÑ,HÈf×NaÑNaÔbˆÔÜ ,¨V×-?Ñ-?ÀV×EXÑEXÔ YˆÕr0   r1   Úoriginal_hidden_statesrW   r~   Ú	use_cacherd   r#   c           	      óÔ   — t        j                  ||gd¬«      }| j                  |«      } | j                  d|||||dœ|¤Ž\  }}| j	                  |«      }| j                  |«      }|S )ac  
        Args:
            hidden_states (`torch.FloatTensor`): output of previous Mamba layer of shape `(batch, seq_len, embed_dim)`
            original_hidden_states (`torch.FloatTensor`): word embedding output of shape `(batch, seq_len, embed_dim)`.
                This is concatenated with `hidden_states` (which is the output of the previous (mamba) layer). The
                concatenated tensor is then used as input of the pre-attention RMSNorm
                (see fig. 2 in https://huggingface.co/papers/2405.16712).
            layer_idx (`int`): layer_idx in the forward pass. Used to distinguish Zamba's tied transformer layers.
            attention_mask (`torch.FloatTensor`, *optional*): attention mask of size
                `(batch, sequence_length)` where padding elements are indicated by 0.
            past_key_values (`Cache`, *optional*): cached past key and value projection states
            use_cache (`bool`, *optional*):
                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
                (see `past_key_values`).
        r4   rÆ   )r1   rm   rW   r~   r  © )r(   Úconcatenater  r  r  r  )	r,   r1   r  rm   rW   r~   r  rd   rß   s	            r/   r>   z"ZambaAttentionDecoderLayer.forwardò  sˆ   € ô2 ×)Ñ)¨=Ð:PÐ*QÐWYÔZˆØ×,Ñ,¨]Ó;ˆØ)˜4Ÿ>™>ð 
Ø'ØØ)Ø+Øñ
ð ñ
Ñˆ�qð ×-Ñ-¨mÓ<ˆØ×)Ñ)¨-Ó8ˆàÐr0   r‰   )NNF)rC   rD   rE   r   r‹   r&   r(   rG   r   Úboolr   r   r@   ÚFloatTensorr>   rH   rI   s   @r/   r  r  é  sÆ   ø„ ñZ˜{ð Z°s¸T±zõ Zð /3Ø(,Ø!&ñ'à—|‘|ð'ð !&§¡ð'ð ð	'ð
 Ÿ™ tÑ+ð'ð  ™ð'ð ˜$‘;ð'ð Ð+Ñ,ð'ð 
ˆu× Ñ  %¨×(9Ñ(9¸5×;LÑ;LÐ(LÑ"MÐPTÑ"TÐTÑ	U÷'r0   r  c                   ór  ‡ — e Zd Zdedefˆ fd„Z	 	 	 	 	 	 	 	 ddej                  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	dz  dej                  dz  dej                  dz  dee   deej                  eej                  ej                  f   dz  f   fd„Zˆ xZS )ÚZambaMambaDecoderLayerrl   rm   c                 ó    •— t         ‰| �  «        t        ||¬«      | _        t	        |j
                  |j                  ¬«      | _        || _        y )N)rl   rm   r  )	r%   r&   r�   Úmambar!   r-   r  r  rm   r}   s      €r/   r&   zZambaMambaDecoderLayer.__init__  s>   ø€ Ü‰ÑÔÜ$¨F¸iÔHˆŒ
Ü+¨F×,>Ñ,>ÀF×DWÑDWÔXˆÔØ"ˆ�r0   Nr1   r  rW   Úcausal_maskr~   r  Úposition_idsÚtransformer_hidden_statesrd   r#   c
                 ót   — |}|	�||	z   n|}| j                  |«      } | j                  d|||dœ|
¤Ž}||z   }|S )aX  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`, *optional*): attention mask of size
                `(batch, sequence_length)` where padding elements are indicated by 0.
            past_key_values (`Cache`, *optional*): cached past key and value projection states
            use_cache (`bool`, *optional*):
                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
                (see `past_key_values`).
        )r1   rÄ   rW   r  )r  r"  )r,   r1   r  rm   rW   r#  r~   r  r$  r%  rd   Úresiduals               r/   r>   zZambaMambaDecoderLayer.forward#  sn   € ð0 !ˆð
 :SÐ9^ˆMÐ5Ò5Ðdqð 	ð ×,Ñ,¨]Ó;ˆà"˜Ÿ
™
ð 
Ø'Ø(Ø)ñ
ð ñ	
ˆð ! =Ñ0ˆàÐr0   )NNNNNFNN)rC   rD   rE   r   r‹   r&   r(   rG   r   r  Ú
LongTensorr   r   r@   r  r>   rH   rI   s   @r/   r   r     s  ø„ ð#˜{ð #°sõ #ð 7;Ø $Ø.2Ø+/Ø(,Ø!&Ø04Ø9=ñ*à—|‘|ð*ð !&§¡¨tÑ 3ð*ð ˜‘:ð	*ð
 Ÿ™ tÑ+ð*ð —\‘\ DÑ(ð*ð  ™ð*ð ˜$‘;ð*ð ×&Ñ&¨Ñ-ð*ð $)§<¡<°$Ñ#6ð*ð Ð+Ñ,ð*ð 
ˆu× Ñ  %¨×(9Ñ(9¸5×;LÑ;LÐ(LÑ"MÐPTÑ"TÐTÑ	U÷*r0   r   c                   óJ  ‡ — e Zd Zdedej
                  defˆ fd„Z	 	 	 	 	 	 ddej                  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dz  dee   deej                   eej                   ej                   f   dz  f   fd„Zˆ xZS )ÚZambaHybridLayerÚshared_transfÚlinearr"  c                 óL   •— t         ‰| �  «        || _        || _        || _        y r‰   )r%   r&   r+  r,  Úmamba_decoder)r,   r+  r,  r"  r.   s       €r/   r&   zZambaHybridLayer.__init__Q  s%   ø€ Ü‰ÑÔØ*ˆÔØˆŒØ"ˆÕr0   Nr1   r  rm   rW   r#  r~   r  rd   r#   c           	      óŠ   —  | j                   |f|||||dœ|¤Ž}	| j                  |	«      }	 | j                  |f|	|||dœ|¤Ž}|S )aF  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            original_hidden_states (`torch.FloatTensor`): word embedding output that will be concatenated with
            hidden activations to form the input of the shared transformer layer.
            layer_idx (`int`): layer number.
            attention_mask (`torch.FloatTensor`, *optional*): attention mask of size
                `(batch, sequence_length)` where padding elements are indicated by 0.
            past_key_values (`Cache`, *optional*): cached past key and value projection states
            use_cache (`bool`, *optional*):
                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
                (see `past_key_values`).
        )r  rm   rW   r~   r  )r%  rW   r~   r  )r+  r,  r.  )
r,   r1   r  rm   rW   r#  r~   r  rd   r%  s
             r/   r>   zZambaHybridLayer.forwardW  s‚   € ð2 %7 D×$6Ñ$6Øð%
à#9ØØ&Ø+Øñ%
ð ñ%
Ð!ð %)§K¡KÐ0IÓ$JÐ!à*˜×*Ñ*Øð
à&?Ø)Ø+Øñ
ð ñ
ˆð Ðr0   )NNNNNF)rC   rD   rE   r  r   rx   r   r&   r(   rG   r‹   r   r  r   r   r@   r  r>   rH   rI   s   @r/   r*  r*  P  sñ   ø„ ð#Ð&@ð #È"Ï)É)ð #Ð\rõ #ð 7;Ø $Ø.2Ø+/Ø(,Ø!&ñ-à—|‘|ð-ð !&§¡¨tÑ 3ð-ð ˜‘:ð	-ð
 Ÿ™ tÑ+ð-ð —\‘\ DÑ(ð-ð  ™ð-ð ˜$‘;ð-ð Ð+Ñ,ð-ð 
ˆu× Ñ  %¨×(9Ñ(9¸5×;LÑ;LÐ(LÑ"MÐPTÑ"TÐTÑ	U÷-r0   r*  c                   ó~   ‡ — e Zd ZU eed<   dZdZddgZdgZdZ	dZ
dZeedœZ ej                   «       ˆ fd„«       Zˆ xZS )	ÚZambaPreTrainedModelrl   ÚmodelTr*  r   r~   )r1   Ú
attentionsc                 óÄ  •— | j                   j                  }t        ‰| �  |«       t	        |t
        «      �r©t        j                  |j                  d|¬«       | j                   j                  dz  }t        j                  |j                  | |«       | j                   j                  | j                   j                  z  | j                   j                  z  }t        j                   t        j"                  | j                   j                  |«      t%        j&                  | j                   j(                  «      t%        j&                  | j                   j*                  «      z
  z  t%        j&                  | j                   j*                  «      z   «      j-                  | j                   j.                  ¬«      }|t        j&                  t        j0                  | «       «      z   }t        j2                  |j4                  |«       t        j6                  d|j8                  dz   t        j:                  ¬«      d d d …f   }|j=                  |j>                  d«      jA                  «       }t        j2                  |jB                  t        j&                  |«      jE                  |j                  |jF                  d«      «       t        jH                  |jJ                  «       y y )Nr€   )r:   Ústdro   )Úminr   r”   r4   )&rl   Úinitializer_ranger%   Ú_init_weightsÚ
isinstancer�   ÚinitÚnormal_r±   r    Úuniform_r²   rž   r-   r¢   r(   r×   ÚrandÚmathrµ   Útime_step_maxÚtime_step_minÚclampÚtime_step_floorÚexpm1Úcopy_r³   r´   r›   r8   rL   rŸ   rc   r¶   rM   r£   Úones_r·   )	r,   rS   r5  Údt_init_stdr£   ÚdtÚinv_dtrÃ   r.   s	           €r/   r8  z"ZambaPreTrainedModel._init_weights–  sú  ø€ à�k‰k×+Ñ+ˆÜ‰Ñ˜fÔ%Ü�fœoÕ.Ü�L‰L˜×-Ñ-°C¸SÕAØŸ+™+×3Ñ3°TÑ9ˆKÜ�M‰M˜&×/Ñ/°+°¸{ÔKà!Ÿ[™[×5Ñ5¸¿¹×8OÑ8OÑOÐSW×S^ÑS^×SlÑSlÑlˆNÜ—‘Ü—
‘
˜4Ÿ;™;×4Ñ4°nÓEÜ—8‘8˜DŸK™K×5Ñ5Ó6¼¿¹À$Ç+Á+×B[ÑB[Ó9\Ñ\ñ^ä—(‘(˜4Ÿ;™;×4Ñ4Ó5ñ6ó÷ ‰e˜Ÿ™×3Ñ3ˆeÓ4ð	 ð œ%Ÿ)™)¤U§[¡[°"°Ó%5Ð$5Ó6Ñ6ˆFÜ�J‰J�v×*Ñ*¨FÔ3ä—‘˜Q × 5Ñ 5¸Ñ 9ÄÇÁÔOÐPTÒVWÐPWÑXˆAØ—‘˜×1Ñ1°2Ó6×AÑAÓCˆAÜ�J‰J�v—|‘|¤U§Y¡Y¨q£\×%9Ñ%9¸&×:NÑ:NÐPV×PeÑPeÐgiÓ%jÔkÜ�J‰J�v—x‘xÕ ð% /r0   )rC   rD   rE   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_is_statefulr   rk   Ú_can_record_outputsr(   Úno_gradr8  rH   rI   s   @r/   r1  r1  ‡  sd   ø… àÓØÐØ&*Ð#Ø+Ð-EÐFÐØ#4Ð"5ÐØÐØ€NØ€Là/Ø$ñÐð
 €U‡]�]ƒ_ó!ó ô!r0   r1  c                   óü   ‡ — e Zd 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ez  fd„«       «       «       Zˆ xZS )Ú
ZambaModelz›
    Transformer decoder consisting of *config.num_hidden_layers* layers. Each layer is a [`ZambaDecoderLayer`]

    Args:
        config: ZambaConfig
    rl   c                 óF  •— t         ‰| �  |«       |j                  | _        |j                  | _        t        j                  |j                  |j                  | j                  «      | _        |j                  | _	        g }d | _
        t        | j                  «      D ]¬  \  }}t        ||¬«      }|dk(  r„t        j                  | j                  j                  | j                  j                  d¬«      }|j                  t!        t#        |«      ||«      «       | j                  �ŒŠd|› d�d|› d�i| _
        Œœ|j                  |«       Œ® t        j$                  |«      | _        t)        |j                  |j*                  ¬	«      | _        d| _        | j1                  «        y )
N)rm   ÚhybridFrp   z
layers.(?!z\.)\d+.shared_transfzlayers.z.shared_transfr  )r%   r&   Úpad_token_idÚpadding_idxÚ
vocab_sizer   Ú	Embeddingr-   Úembed_tokensÚlayers_block_typeÚ_tied_weights_keysÚ	enumerater   rx   rl   rõ   r*  r  Ú
ModuleListrÑ   r!   r  Úfinal_layernormÚgradient_checkpointingÚ	post_init)r,   rl   rÑ   Úlayer_idrÂ   r"  r,  r.   s          €r/   r&   zZambaModel.__init__¸  sc  ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒäŸL™L¨×):Ñ):¸F×<NÑ<NÐPT×P`ÑP`ÓaˆÔØ!'×!9Ñ!9ˆÔØˆØ"&ˆÔÜ$-¨d×.DÑ.DÓ$Eò 
	%Ñ ˆH�jÜ*¨6¸XÔFˆEØ˜XÒ%ÜŸ™ 4§;¡;×#:Ñ#:¸D¿K¹K×<SÑ<SÐZ_Ô`�Ø—‘Ô.Ô/IÈ&Ó/QÐSYÐ[`ÓaÔbØ×*Ñ*Ñ2à% h ZÐ/CÐDÈÐPXÈzÐYgÐFhð/�DÕ+ð —‘˜eÕ$ð
	%ô —m‘m FÓ+ˆŒä+¨F×,>Ñ,>ÀF×DWÑDWÔXˆÔà&+ˆÔ#à�‰Õr0   NÚ	input_idsrW   r$  r~   Úinputs_embedsr  rd   r#   c                 ó>  — |d u |d uz  rt        d«      ‚|€| j                  |«      }|}t        j                  |«      }	|r|€t	        | j
                  ¬«      }|€V|�|j                  «       nd}
t        j                  |j                  d   |j                  ¬«      |
z   }|j                  d«      }t        | j
                  ||||¬«      }t        | j                  «      D ]  \  }} |||	|||f||dœ|¤Ž}Œ | j                  |«      }t        ||r|¬«      S d ¬«      S )	NzaYou cannot specify both input_ids and inputs_embeds at the same time, and must specify either one)rl   r   r   ©rÉ   )rl   re  rW   r~   r$  )r~   r  )Úlast_hidden_stater~   )r  r[  r(   rò   r   rl   Úget_seq_lengthr´   rA   rÉ   rÓ   r   r^  rÑ   r`  r   )r,   rd  rW   r$  r~   re  r  rd   r1   r  Úpast_seen_tokensr#  rm   Úlayers                 r/   r>   zZambaModel.forwardÔ  s^  € ð ˜Ð -°tÐ";Ò<ÜØsóð ð Ð Ø ×-Ñ-¨iÓ8ˆMà%ˆä!&§¡¨]Ó!;Ðñ ˜Ð0Ü*°$·+±+Ô>ˆOàÐØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\Ð_oÑoˆLØ'×1Ñ1°!Ó4ˆLä(Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆô !*¨$¯+©+Ó 6ò 
	ÑˆI�uÙ!ØØ&ØØØð	ð !0Ø#ñ	ð ñ	‰Mð
	ð ×,Ñ,¨]Ó;ˆä&Ø+Ù/8˜Oô
ð 	
à>Bô
ð 	
r0   )NNNNNN)rC   rD   rE   rŠ   r   r&   r   r   r   r(   r(  rG   r   r  r  r   r   r@   r   r>   rH   rI   s   @r/   rT  rT  ¯  sØ   ø„ ñð˜{õ ð8  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ñ8
à×#Ñ# dÑ*ð8
ð Ÿ™ tÑ+ð8
ð ×&Ñ&¨Ñ-ð	8
ð
  ™ð8
ð ×(Ñ(¨4Ñ/ð8
ð ˜$‘;ð8
ð Ð+Ñ,ð8
ð 
Ð(Ñ	(ò8
ó ó ó  ô8
r0   rT  c                   óN  ‡ — e Zd ZddiZdefˆ 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e   deez  fd„«       «       Z	 	 	 	 	 	 dˆ fd„	Zˆ xZS )ÚZambaForCausalLMzlm_head.weightzmodel.embed_tokens.weightrl   c                 óè   •— t         ‰| �  |«       t        |«      | _        |j                  | _        t        j                  |j                  |j                  d¬«      | _        | j                  «        y r  )
r%   r&   rT  r2  rY  r   rx   r-   Úlm_headrb  r  s     €r/   r&   zZambaForCausalLM.__init__  sU   ø€ Ü‰Ñ˜Ô Ü Ó'ˆŒ
Ø ×+Ñ+ˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒð 	�‰Õr0   Nrd  rW   r$  r~   re  Úlabelsr  Úlogits_to_keeprd   r#   c	           
      ób  —  | j                   d||||||dœ|	¤Ž}
|
j                  }t        |t        «      rt	        | d«      n|}| j                  |dd…|dd…f   «      }d}|� | j                  ||| j                  fi |	¤Ž}t        |||
j                  |
j                  |
j                  ¬«      S )ah  
        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, ZambaForCausalLM

        >>> model = ZambaForCausalLM.from_pretrained("Zyphra/Zamba-7B-v1")
        >>> tokenizer = AutoTokenizer.from_pretrained("Zyphra/Zamba-7B-v1")

        >>> 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."
        ```)rd  rW   r$  r~   re  r  N©ÚlossÚlogitsr~   r1   r3  r  )r2  rh  r9  r‹   Úslicero  Úloss_functionrY  r   r~   r1   r3  )r,   rd  rW   r$  r~   re  rp  r  rq  rd   Úoutputsr1   Úslice_indicesru  rt  s                  r/   r>   zZambaForCausalLM.forward  sÜ   € ðH ,6¨4¯:©:ð ,
ØØ)Ø%Ø+Ø'Øñ,
ð ñ,
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%ØØØ—‘ñð ñ	ˆDô &ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r0   c           
      óh   •— | j                   j                  |d<   t        ‰
| �  |f||||||dœ|¤Ž}	|	S )Nrq  )r~   rW   re  r$  r  Úis_first_iteration)rl   Únum_logits_to_keepr%   Úprepare_inputs_for_generation)r,   rd  r~   rW   re  r$  r  r{  rd   Úmodel_inputsr.   s             €r/   r}  z.ZambaForCausalLM.prepare_inputs_for_generationc  sU   ø€ ð $(§;¡;×#AÑ#AˆÐÑ Ü‘wÑ<Øð	
à+Ø)Ø'Ø%ØØ1ñ	
ð ñ	
ˆð Ðr0   )NNNNNNNr   )NNNNTF)rC   rD   rE   r]  r   r&   r   r   r(   r(  rG   r   r  r  r‹   r   r   r@   r   r>   r}  rH   rI   s   @r/   rm  rm    s0  ø„ Ø*Ð,GÐHÐð˜{õ ð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñ@
à×#Ñ# dÑ*ð@
ð Ÿ™ tÑ+ð@
ð ×&Ñ&¨Ñ-ð	@
ð
  ™ð@
ð ×(Ñ(¨4Ñ/ð@
ð × Ñ  4Ñ'ð@
ð ˜$‘;ð@
ð ˜eŸl™lÑ*ð@
ð Ð+Ñ,ð@
ð 
Ð'Ñ	'ò@
ó ó ð@
ðJ ØØØØØ ÷ñ r0   rm  aÊ  
    The Zamba Model with a sequence classification head on top (linear layer).

    [`ZambaForSequenceClassification`] uses the last token in order to do the classification, as other causal models
    (e.g. GPT-2) do.

    Since it does classification on the last token, it requires to know the position of the last token. If a
    `pad_token_id` is defined in the configuration, it finds the last token that is not a padding token in each row. If
    no `pad_token_id` is defined, it simply takes the last value in each row of the batch. Since it cannot guess the
    padding tokens when `inputs_embeds` are passed instead of `input_ids`, it does the same (take the last value in
    each row of the batch).
    )Úcustom_introc                   ó  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  de	dz  dej                  dz  dej                  dz  d	edz  d
ee   deez  fd„«       «       Zˆ xZS )ÚZambaForSequenceClassificationc                 óè   •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  |j                  | j                  d¬«      | _        | j                  «        y r  )
r%   r&   Ú
num_labelsrT  r2  r   rx   r-   Úscorerb  r  s     €r/   r&   z'ZambaForSequenceClassification.__init__Œ  sS   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ Ó'ˆŒ
Ü—Y‘Y˜v×1Ñ1°4·?±?ÈÔOˆŒ
ð 	�‰Õr0   Nrd  rW   r$  r~   re  rp  r  rd   r#   c           	      óª  —  | j                   |f|||||dœ|¤Ž}	|	j                  }
| j                  |
«      }|�|j                  d   }n|j                  d   }| j                  j
                  €|dk7  rt        d«      ‚| j                  j
                  €d}nÃ|�“|| j                  j
                  k7  j                  |j                  t        j                  «      }t        j                  |j                  d   |j                  t        j                  ¬«      }||z  j                  d«      }n.d}t        j                  | j                  j                   › d�«       |t        j                  ||j                  ¬	«      |f   }d}|��¢|j                  |j                  «      }| j                  j"                  €�| j$                  dk(  rd
| j                  _        nl| j$                  dkD  rL|j&                  t        j(                  k(  s|j&                  t        j*                  k(  rd| j                  _        nd| j                  _        | j                  j"                  d
k(  rIt-        «       }| j$                  dk(  r& ||j/                  «       |j/                  «       «      }nŒ |||«      }n‚| j                  j"                  dk(  r=t1        «       } ||j3                  d| j$                  «      |j3                  d«      «      }n,| j                  j"                  dk(  rt5        «       } |||«      }t7        |||	j8                  |	j:                  |	j<                  ¬«      S )a�  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        )rW   r$  r~   re  r  Nr   r   z=Cannot handle batch sizes > 1 if no padding token is defined.r4   rÈ   zŠ will not detect padding tokens in `inputs_embeds`. Results may be unexpected if using padding tokens in conjunction with `inputs_embeds.`rg  Ú
regressionÚsingle_label_classificationÚmulti_label_classificationrs  )r2  rh  r„  rA   rl   rW  r  r7   rÉ   r(   Úint32r´   Úargmaxr¿   rÀ   r.   rC   Úproblem_typerƒ  r6   Úlongr‹   r   rÏ   r   r�   r   r   r~   r1   r3  )r,   rd  rW   r$  r~   re  rp  r  rd   Útransformer_outputsr1   ru  rÝ   Úlast_non_pad_tokenÚnon_pad_maskÚtoken_indicesÚpooled_logitsrt  Úloss_fcts                      r/   r>   z&ZambaForSequenceClassification.forward•  sÚ  € ð& 8B°t·z±zØð8
à)Ø%Ø+Ø'Øñ8
ð ñ8
Ðð ,×=Ñ=ˆØ—‘˜MÓ*ˆàÐ Ø"Ÿ™¨Ñ+‰Jà&×,Ñ,¨QÑ/ˆJà�;‰;×#Ñ#Ð+°
¸a²ÜÐ\Ó]Ð]Ø�;‰;×#Ñ#Ð+Ø!#ÑØÐ"à%¨¯©×)AÑ)AÑA×EÑEÀfÇmÁmÔUZ×U`ÑU`ÓaˆLÜ!ŸL™L¨¯©¸Ñ)<ÀVÇ]Á]ÔZ_×ZeÑZeÔfˆMØ"/°,Ñ">×!FÑ!FÀrÓ!JÑà!#ÐÜ×ÑØ—>‘>×*Ñ*Ð+ð ,Zð Zôð
 œuŸ|™|¨J¸v¿}¹}ÔMÐOaÐaÑbˆàˆØÑØ—Y‘Y˜vŸ}™}Ó-ˆFØ�{‰{×'Ñ'Ð/Ø—?‘? aÒ'Ø/;�D—K‘KÕ,Ø—_‘_ qÒ(¨f¯l©l¼e¿j¹jÒ.HÈFÏLÉLÔ\a×\eÑ\eÒLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—?‘? aÒ'Ù# M×$9Ñ$9Ó$;¸V¿^¹^Ó=MÓN‘Dá# M°6Ó:‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù × 2Ñ 2°2°t·±Ó GÈÏÉÐUWËÓY‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨vÓ6�ä/ØØ Ø/×?Ñ?Ø-×;Ñ;Ø*×5Ñ5ô
ð 	
r0   )NNNNNNN)rC   rD   rE   r&   r   r   r(   r(  rG   r   r  r  r   r   r@   r   r>   rH   rI   s   @r/   r�  r�  }  sç   ø„ ôð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%ñR
à×#Ñ# dÑ*ðR
ð Ÿ™ tÑ+ðR
ð ×&Ñ&¨Ñ-ð	R
ð
  ™ðR
ð ×(Ñ(¨4Ñ/ðR
ð × Ñ  4Ñ'ðR
ð ˜$‘;ðR
ð Ð+Ñ,ðR
ð 
Ð1Ñ	1òR
ó ó ôR
r0   r�  )rm  r�  rT  r1  )r€   )ErŠ   r>  Úcollections.abcr   r(   r   Útorch.nnr   r   r   Ú r	   r:  Úactivationsr
   Úcache_utilsr   r   Ú
generationr   Úintegrations.hub_kernelsr   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.import_utilsr   Úutils.output_capturingr   Úconfiguration_zambar   Ú
get_loggerrC   r¿   ÚModuler!   rG   r‹   rR   rF   ri   rk   r�   r  r  r   r*  r1  rT  rm  r�  Ú__all__r  r0   r/   ú<module>r§     så  ðñ& ã Ý $ã Ý ß AÑ Aå &Ý !ß .Ý )Ý 8Ý /Ý 9ß qÑ qß FÝ &ß RÓ RÝ 7Ý 9Ý 5Ý ,ð 
ˆ×	Ñ	˜HÓ	%€ôJ�2—9‘9ô Jð*	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uð& ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ó%ô2C)�R—Y‘Yô C)ôLd]�b—i‘iô d]ôP	ˆr�y‰yô ô 0 §¡ô 0ôf1Ð7ô 1ôh4Ð1ô 4ðn ô$!˜?ó $!ó ð$!ðN ô_
Ð%ó _
ó ð_
ôFgÐ+¨_ô gñT ðôô^
Ð%9ó ^
óð^
òB g�r0   