Ë
    îÿæi�:  ã                   ó   — d dl Z d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZ ddlmZ ddlmZmZ ddlmZ e G d	„ d
e«      «       Z G d„ de
j.                  «      Z G d„ de
j.                  «      Z G d„ de
j.                  «      Z G d„ de
j.                  «      Z G d„ de
j.                  «      Zdededefd„Z G d„ de
j.                  «      Z  G d„ de
j.                  «      Z! G d„ de
j.                  «      Z"y)é    N)Ú	dataclass)ÚAnyÚOptional)ÚBaseModelArgsÚcreate_attention_maskÚcreate_ssm_maské   )Úswiglu)ÚArraysCacheÚKVCache)Ú
ssm_updatec                   ó$  — e Zd ZU dZeed<   dZeed<   dZeed<   dZ	e
ed<   d	Zeed
<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeee      ed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   d	Zeed<   dZeed<   d Zeed!<   y)"Ú	ModelArgsÚplamo2Ú
model_typei   Úhidden_sizeé    Únum_hidden_layersç�íµ ÷Æ°>Úrms_norm_epsTÚtie_word_embeddingsÚnum_attention_headsé   Únum_key_value_headsé€   Úhidden_size_per_headi   Úmax_position_embeddingsÚattention_window_sizeNÚfull_attention_idxé@   Úmamba_d_stateÚmamba_d_convÚmamba_num_headsé   Ú
mamba_stepé   Úmamba_chunk_sizeÚmamba_enabledi 4  Úintermediate_sizei }  Ú
vocab_size)Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__r   Úintr   r   Úfloatr   Úboolr   r   r   r   r   r   r   Úlistr!   r"   r#   r%   r'   r(   r)   r*   © ó    úi/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/plamo2.pyr   r      sÓ   … à€J�ÓØ€K�ÓØÐ�sÓØ€L�%ÓØ $Ð˜Ó$Ø!Ð˜Ó!Ø Ð˜Ó Ø #Ð˜#Ó#Ø#'Ð˜SÓ'Ø!%Ð˜3Ó%Ø.2Ð˜  c¡Ñ+Ó2Ø€M�3ÓØ€L�#ÓØ€O�SÓØ€J�ÓØÐ�cÓØ€M�4ÓØ"Ð�sÓ"Ø€J�Ôr5   r   c            	       ón   ‡ — e Zd Z	 	 d	dedededdfˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )
ÚRMSNormr   ÚepsÚoffsetÚreturnNc                 ór   •— t         ‰| �  «        t        j                  |«      | _        || _        || _        y ©N)ÚsuperÚ__init__ÚmxÚzerosÚweightÚvariance_epsilonr:   )Úselfr   r9   r:   Ú	__class__s       €r6   r?   zRMSNorm.__init__)   s/   ø€ ô 	‰ÑÔÜ—h‘h˜{Ó+ˆŒØ #ˆÔØˆ�r5   Úhidden_statesc                 ó†   — t         j                  j                  || j                  | j                  z   | j
                  «      S r=   )r@   ÚfastÚrms_normrB   r:   rC   )rD   rF   s     r6   Ú__call__zRMSNorm.__call__4   s3   € Ü�w‰w×ÑØ˜4Ÿ;™;¨¯©Ñ4°d×6KÑ6Kó
ð 	
r5   )r   ç      ð?)
r+   r,   r-   r0   r1   r?   r@   ÚarrayrJ   Ú__classcell__©rE   s   @r6   r8   r8   (   sQ   ø„ ð Øñ		àð	ð ð	ð ð		ð
 
õ	ð
 b§h¡hð 
°2·8±8÷ 
r5   r8   c                   ót  ‡ — e Zd Zdeddfˆ fd„Zdej                  dee   deej                     dej                  fd„Z	d	ej                  d
ej                  dej                  dej                  dee
   deej                     dej                  fd„Z	 	 ddej                  deej                     fd„Zˆ xZS )ÚMambaÚconfigr;   Nc                 ó´  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  | _        |j                  | _        | j                  | j                  z  | _        t        j                  | j                  d| j                  z  d¬«      | _        t        j"                  | j                  | j                  d| j                  | j                  d¬«      | _        t'        d| j                  dz  «      | _        t        j                  | j                  | j(                  d| j
                  z  z   d¬«      | _        t        j                  | j(                  | j                  d¬«      | _        t/        j0                  | j                  f¬«      | _        t/        j4                  t/        j6                  d	| j                  d	z   t.        j8                  ¬
«      «      | _        t/        j<                  | j                  «      | _        t/        j<                  | j(                  «      | _         t/        j<                  | j
                  «      | _!        t/        j<                  | j
                  «      | _"        t        j                  | j                  | j                  d¬«      | _#        y )Nr$   F©Úbiasr   )Úin_channelsÚout_channelsrT   Úkernel_sizeÚgroupsÚpaddingr    é   )Úshaper	   ©Údtype)$r>   r?   rQ   r   r!   Úd_stater"   Úconv_kernel_sizer'   Ú
chunk_sizer#   Ú	num_headsr   r)   ÚnnÚLinearÚin_projÚConv1dÚconv1dÚmaxÚdt_dimÚ	bcdt_projÚdt_projr@   rA   Údt_biasÚlogÚarangeÚfloat32ÚA_logÚonesÚDÚdt_norm_weightÚB_norm_weightÚC_norm_weightÚout_proj©rD   rQ   rE   s     €r6   r?   zMamba.__init__;   s   ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ×+Ñ+ˆŒØ &× 3Ñ 3ˆÔØ ×1Ñ1ˆŒØ×/Ñ/ˆŒØ$*×$?Ñ$?ˆÔ!à!%§¡°$×2KÑ2KÑ!KˆÔä—y‘yØ×Ñ˜a $×"8Ñ"8Ñ8¸uô
ˆŒô —i‘iØ×.Ñ.Ø×/Ñ/ØØ×-Ñ-Ø×)Ñ)Øô
ˆŒô ˜"˜d×.Ñ.°"Ñ4Ó5ˆŒÜŸ™Ø×"Ñ"Ø�K‰K˜!˜dŸl™lÑ*Ñ*Øô
ˆŒô
 —y‘y §¡¨d¯n©nÀ5ÔIˆŒä—x‘x t§~¡~Ð&7Ô8ˆŒÜ—V‘VœBŸI™I a¨¯©¸!Ñ);Ä2Ç:Á:ÔNÓOˆŒ
ä—‘˜Ÿ™Ó(ˆŒä Ÿg™g d§k¡kÓ2ˆÔÜŸW™W T§\¡\Ó2ˆÔÜŸW™W T§\¡\Ó2ˆÔäŸ	™	 $×"8Ñ"8¸$×:JÑ:JÐQVÔWˆ�r5   Ú
conv_inputÚcacheÚmaskc                 óò  — |�t        j                  |d   |d«      }|��|d   €It        j                  |j                  d   | j                  dz
  | j
                  f|j                  ¬«      }n|d   }t        j                  ||gd¬«      }| j                  dz
  }|j                  �q|j                  d   }t        j                  |j                  d||z
  «      }|d d …d f   t        j                  |«      z   d   }	t        j                  ||	d¬«      |d<   n;|d d …| d …d d …f   |d<   n(t        j                  |d| j                  dz
  dfdg«      }| j                  |«      }
t        j                  |
«      S )N).Nr   r	   r\   ©Úaxis)r   r   )r@   ÚwhererA   r[   r_   r)   r]   ÚconcatenateÚlengthsÚcliprm   Útake_along_axisÚpadrf   rb   Úsilu)rD   rw   rx   ry   Ú
conv_stateÚpadded_inputÚn_keepÚtÚendsÚ	positionsÚconv_outputs              r6   Ú_convzMamba._conve   sp  € ð ÐÜŸ™ $ y¡/°:¸qÓAˆJàÑØ�Q‰xÐÜŸX™Xà"×(Ñ(¨Ñ+Ø×-Ñ-°Ñ1Ø×.Ñ.ðð
 %×*Ñ*ô‘
ð # 1™X�
ÜŸ>™>¨:°zÐ*BÈÔKˆLØ×*Ñ*¨QÑ.ˆFØ�}‰}Ð(Ø ×&Ñ& qÑ)�Ü—w‘w˜uŸ}™}¨a°°V±Ó<�Ø!¢! T '™]¬R¯Y©Y°vÓ->Ñ>À	ÑJ�	Ü×-Ñ-¨l¸IÈAÔN��a’à'ª¨F¨7©8²Q¨Ñ7��a’äŸ6™6Ø˜V d×&;Ñ&;¸aÑ&?ÀÐ%CÀVÐLóˆLð —k‘k ,Ó/ˆÜ�w‰w�{Ó#Ð#r5   ÚxÚBÚCÚdtc                 óÐ  — |j                   \  }}}	|j                  ||| j                  | j                  «      }|j                  ||d| j                  «      }|j                  ||d| j                  «      }|r|d   }
|j
                  }nd\  }
}t        || j                  ||| j                  || j                  |
||¬«
      \  }}
|r|
|d<   |j                  ||| j                  «      S )Nr	   ©NN)ry   r   )r[   Úreshapera   r   r^   r   r   ro   rq   rk   r)   )rD   rŒ   r�   rŽ   r�   rx   ry   Ú
batch_sizeÚseq_lenÚ_Ústater   Úys                r6   Ú_ssmz
Mamba._ssm‹   sß   € ð "#§¡Ñˆ
�G˜Qà�I‰I�j '¨4¯>©>¸4×;TÑ;TÓUˆØ�I‰I�j '¨1¨d¯l©lÓ;ˆØ�I‰I�j '¨1¨d¯l©lÓ;ˆÙØ˜!‘HˆEØ—m‘m‰Gà'‰NˆE�7äØØ�J‰JØØØ�F‰FØØ�L‰LØØØô
‰ˆˆ5ñ ØˆE�!‰HØ�y‰y˜ W¨d×.DÑ.DÓEÐEr5   rF   c                 ó¬  — |j                   \  }}}| j                  |«      }|j                  ||| j                  d«      }t	        j
                  || j                  gd¬«      \  }}	|	j                  |d| j                  | j                  z  «      }	| j                  |	||«      }	| j                  |	«      }
t	        j
                  |
| j                  | j                  dz  gd¬«      \  }}}t	        j                  | j                  j                  t        j                  «      «       }t        j                  j                  || j                   | j"                  j$                  «      }t        j                  j                  || j&                  | j"                  j$                  «      }t        j                  j                  || j(                  | j"                  j$                  «      }| j+                  |«      }| j-                  |	|||||«      }|r|j/                  |j                   d   «       t1        |j3                  d«      |«      }| j5                  |«      S )Néÿÿÿÿr{   r$   r	   éþÿÿÿ)r[   rd   r’   ra   r@   Úsplitr   r‹   ri   r^   Úexpro   Úastypern   rH   rI   rr   rQ   r   rs   rt   rj   r˜   Úadvancer
   Úflattenru   )rD   rF   ry   rx   ÚbsizeÚlengthr•   ÚzxÚzrŒ   ÚBCdtr�   rŽ   r�   ÚAÚouts                   r6   rJ   zMamba.__call__¯   sÛ  € ð )×.Ñ.Ñˆˆv�qà�\‰\˜-Ó(ˆØ�Z‰Z˜˜v t§~¡~°rÓ:ˆô �x‰xØà×)Ñ)ðð ô
‰ˆˆ1ð �I‰I�e˜R §¡°$×2KÑ2KÑ!KÓLˆØ�J‰J�q˜% Ó&ˆà�~‰~˜aÓ ˆÜ—8‘8˜D 4§<¡<°·±ÀÑ1AÐ"BÈÔL‰ˆˆ1ˆbä�V‰V�D—J‘J×%Ñ%¤b§j¡jÓ1Ó2Ð2ˆÜ�W‰W×Ñ˜b $×"5Ñ"5°t·{±{×7OÑ7OÓPˆÜ�G‰G×Ñ˜Q × 2Ñ 2°D·K±K×4LÑ4LÓMˆÜ�G‰G×Ñ˜Q × 2Ñ 2°D·K±K×4LÑ4LÓMˆð �\‰\˜"ÓˆØ�i‰iØØØØØØó
ˆñ Ø�M‰M˜#Ÿ)™) A™,Ô'ä�Q—Y‘Y˜r“] CÓ(ˆØ�}‰}˜SÓ!Ð!r5   r‘   )r+   r,   r-   r   r?   r@   rL   r   r   r‹   r   r˜   rJ   rM   rN   s   @r6   rP   rP   :   sû   ø„ ð(X˜yð (X¨Tõ (XðT$$à—H‘Hð$$ð ˜Ñ$ð$$ð �r—x‘xÑ ð	$$ð
 
�‰ó$$ðL"Fà�8‰8ð"Fð �8‰8ð"Fð �8‰8ð	"Fð
 �H‰Hð"Fð ˜‰}ð"Fð �r—x‘xÑ ð"Fð 
�‰ó"FðN $(Øñ	-"à—x‘xð-"ð �r—x‘xÑ ÷-"r5   rP   c                   ól   ‡ — e Zd Zdeddfˆ fd„Z	 	 ddej                  deej                     fd„Zˆ xZ	S )	Ú	AttentionrQ   r;   Nc                 óT  •— t         ‰| �  «        || _        |j                  | _        |j                  }|j
                  | _        |dz  | _        |j                  | _        |x| _	        | _
        |j                  x| _        | _        | j                  | j                  z  dk(  sJ ‚| j                  | j                  z  | _        | j                  | j                  z  | _        | j                  | j                  z  | _        | j                  | j                  z  | _        t%        j&                  | j                  | j                  | j                   z   | j"                  z   d¬«      | _        t%        j&                  | j                  | j                  z  | j                  d¬«      | _        t-        j.                  | j                  | j                  f«      | _        t-        j.                  | j                  | j                  f«      | _        t%        j4                  | j                  «      | _        y )Ng      à¿r   FrS   )r>   r?   rQ   r   r   r   Úscaler   Úq_num_headsÚqk_dimÚv_dimr   Úk_num_headsÚv_num_headsÚn_groupÚ
q_proj_dimÚ
k_proj_dimÚ
v_proj_dimrb   rc   Úqkv_projÚo_projr@   rp   Úq_weightÚk_weightÚRoPEÚrope)rD   rQ   Úhead_dimrE   s      €r6   r?   zAttention.__init__à   s©  ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ×.Ñ.ˆØ'-×'EÑ'EˆÔ$Ø˜t‘^ˆŒ
à!×5Ñ5ˆÔØ#+Ð+ˆŒ�d”jØ.4×.HÑ.HÐHˆÔ˜4Ô+Ø×Ñ $×"2Ñ"2Ñ2°aÒ7Ð7Ð7Ø×'Ñ'¨4×+;Ñ+;Ñ;ˆŒà×*Ñ*¨T¯[©[Ñ8ˆŒØ×*Ñ*¨T¯[©[Ñ8ˆŒØ×*Ñ*¨T¯Z©ZÑ7ˆŒÜŸ	™	Ø×ÑØ�O‰O˜dŸo™oÑ-°·±Ñ?Øô
ˆŒô
 —i‘iØ×Ñ˜tŸz™zÑ)¨4×+;Ñ+;À%ô
ˆŒô Ÿ™ ×!1Ñ!1°4·;±;Ð ?Ó@ˆŒÜŸ™ ×!1Ñ!1°4·;±;Ð ?Ó@ˆŒä—G‘G˜DŸK™KÓ(ˆ�	r5   rF   ry   c                 óÔ  — |j                   \  }}}| j                  |«      }t        j                  || j                  | j                  | j
                  z   gd¬«      \  }}	}
|j                  ||| j                  | j                  «      j                  dddd«      }|	j                  ||| j                  | j                  «      j                  dddd«      }	|
j                  ||| j                  | j                  «      j                  dddd«      }
t        j                  j                  |d d¬«      | j                  d d …d f   z  }t        j                  j                  |	d d¬«      | j                   d d …d f   z  }	|�P| j#                  ||j$                  ¬	«      }| j#                  |	|j$                  ¬	«      }	|j'                  |	|
«      \  }	}
n"| j#                  |«      }| j#                  |	«      }	t        j                  j)                  ||	|
| j*                  |¬
«      }|j                  dddd«      j                  ||| j                  | j                  z  «      }| j-                  |«      S )Nrš   r{   r   r$   r	   é   r   )rB   r9   )r:   )r«   ry   )r[   rµ   r@   rœ   r²   r³   r’   r¬   r­   Ú	transposer¯   r°   r®   rH   rI   r·   r¸   rº   r:   Úupdate_and_fetchÚscaled_dot_product_attentionr«   r¶   )rD   rF   ry   rx   r�   ÚTr•   ÚqkvÚqÚkÚvÚoutputs               r6   rJ   zAttention.__call__ÿ   s  € ð  ×%Ñ%‰ˆˆ1ˆaà�m‰m˜MÓ*ˆÜ—(‘(Ø�$—/‘/ 4§?¡?°T·_±_Ñ#DÐEÈBô
‰ˆˆ1ˆað �I‰I�a˜˜D×,Ñ,¨d¯k©kÓ:×DÑDÀQÈÈ1ÈaÓPˆØ�I‰I�a˜˜D×,Ñ,¨d¯k©kÓ:×DÑDÀQÈÈ1ÈaÓPˆØ�I‰I�a˜˜D×,Ñ,¨d¯j©jÓ9×CÑCÀAÀqÈ!ÈQÓOˆä�G‰G×Ñ˜Q t°ÐÓ6¸¿¹ÂqÈ$ÀwÑ9OÑOˆÜ�G‰G×Ñ˜Q t°ÐÓ6¸¿¹ÂqÈ$ÀwÑ9OÑOˆàÐØ—	‘	˜! E§L¡L�	Ó1ˆAØ—	‘	˜! E§L¡L�	Ó1ˆAØ×)Ñ)¨!¨QÓ/‰DˆA‰qà—	‘	˜!“ˆAØ—	‘	˜!“ˆAä—‘×5Ñ5ØØØØ—*‘*Øð 6ó 
ˆð ×!Ñ! ! Q¨¨1Ó-×5Ñ5Øˆq�$×"Ñ" T§Z¡ZÑ/ó
ˆð �{‰{˜6Ó"Ð"r5   r‘   )
r+   r,   r-   r   r?   r@   rL   r   rJ   rM   rN   s   @r6   r©   r©   ß   sC   ø„ ð)˜yð )¨Tõ )ðD $(Øñ	%#à—x‘xð%#ð �r—x‘xÑ ÷%#r5   r©   c                   ó`   ‡ — e Zd Zdeddfˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚMLPrQ   r;   Nc                 ó>  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        t        j                  | j                  | j                  dz  d¬«      | _        t        j                  | j                  | j                  d¬«      | _        y )Nr$   FrS   )	r>   r?   rQ   r   r)   rb   rc   Úgate_up_projÚ	down_projrv   s     €r6   r?   zMLP.__init__(  s}   ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜŸI™IØ×Ñ˜d×4Ñ4°qÑ8¸uô
ˆÔô Ÿ™ 4×#9Ñ#9¸4×;KÑ;KÐRWÔXˆ�r5   rŒ   c                 ó–   — | j                  |«      }t        j                  |dd¬«      }| j                  t	        |d   |d   «      «      S )Nr$   rš   r{   r   r	   )rÊ   r@   rœ   rË   r
   )rD   rŒ   ÚhÚhss       r6   rJ   zMLP.__call__2  sB   € Ø×Ñ˜aÓ ˆÜ�X‰X�a˜ Ô$ˆØ�~‰~œf R¨¡U¨B¨q©EÓ2Ó3Ð3r5   ©	r+   r,   r-   r   r?   r@   rL   rJ   rM   rN   s   @r6   rÈ   rÈ   '  s4   ø„ ðY˜yð Y¨Tõ Yð4˜"Ÿ(™(ð 4 r§x¡x÷ 4r5   rÈ   c                   óp   ‡ — e Zd Zdededdfˆ fd„Z	 	 d	dej                  deej                     fd„Z	ˆ xZ
S )
ÚPlamoDecoderLayerrQ   Úis_mambar;   Nc                 ó  •— t         ‰| �  «        || _        |j                  | _        || _        |  |rt        |«      | _        nt        |«      | _        t        |«      | _	        t        |j                  |j                  d¬«      | _        t        |j                  |j                  d¬«      | _        t        |j                  |j                  d¬«      | _        t        |j                  |j                  d¬«      | _        y )NrK   )r9   r:   gš™™™™™É?gáWfÑ·å¶?)r>   r?   rQ   r   rÒ   rP   Úmixerr©   rÈ   Úmlpr8   r   Úpre_mixer_normÚpost_mixer_normÚpre_mlp_normÚpost_mlp_norm)rD   rQ   rÒ   rE   s      €r6   r?   zPlamoDecoderLayer.__init__9  sØ   ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ ˆŒÙÙÜ˜v›ˆD�Jä" 6Ó*ˆDŒJÜ�v“;ˆŒÜ%Ø×Ñ F×$7Ñ$7Àô
ˆÔô  'Ø×Ñ F×$7Ñ$7Àô 
ˆÔô $Ø×Ñ F×$7Ñ$7Àô
ˆÔô %Ø×Ñ F×$7Ñ$7Àô
ˆÕr5   rF   ry   c                 óð   — |}| j                  |«      }| j                  |||¬«      }| j                  |«      }||z   }|}| j                  |«      }| j	                  |«      }| j                  |«      }||z   S )N)rF   ry   rx   )rÖ   rÔ   r×   rØ   rÕ   rÙ   )rD   rF   ry   rx   ÚresidualÚhidden_states_saÚhidden_states_mlps          r6   rJ   zPlamoDecoderLayer.__call__Q  s›   € ð !ˆØ×+Ñ+¨MÓ:ˆàŸ:™:Ø'ØØð &ó 
Ðð  ×/Ñ/Ð0@ÓAÐØ Ð#3Ñ3ˆà ˆØ×)Ñ)¨-Ó8ˆð !ŸH™H ]Ó3Ðð !×.Ñ.Ð/@ÓAÐØÐ+Ñ+Ð+r5   r‘   )r+   r,   r-   r   r2   r?   r@   rL   r   rJ   rM   rN   s   @r6   rÑ   rÑ   8  sI   ø„ ð
˜yð 
°Dð 
¸Tõ 
ð6 $(Øñ	,à—x‘xð,ð �r—x‘xÑ ÷,r5   rÑ   rQ   Úir;   c                 óú   — | j                   sy| j                  dkD  sJ ‚|| j                  k  sJ ‚| j                  | j                  dz  k  r|| j                  dz
  k7  S || j                  z  | j                  dz  k7  S )NFr	   r$   )r(   r%   r   )rQ   rÞ   s     r6   rÒ   rÒ   n  s†   € Ø×ÒØØ×Ñ˜qÒ Ð Ð Øˆv×'Ñ'Ò'Ð'Ð'à×Ñ F×$5Ñ$5¸Ñ$:Ò;à�F×,Ñ,¨qÑ0Ñ0Ð0Ø�×!Ñ!Ñ! v×'8Ñ'8¸AÑ'=Ñ>Ð>r5   c                   óH   ‡ — e Zd Zdeddfˆ fd„Zdej                  fd„Zˆ xZS )ÚPlamoDecoderrQ   r;   Nc           
      óø   •— t         ‰| �  «        t        |j                  «      D �cg c]  }t	        |t        ||«      ¬«      ‘Œ c}| _        |j                  rdnd | _        |j                  dz  | _
        y c c}w )N)rÒ   r   r$   )r>   r?   Úranger   rÑ   rÒ   Úlayersr(   Ússm_idxr%   Úfa_idx)rD   rQ   rÞ   rE   s      €r6   r?   zPlamoDecoder.__init__{  sr   ø€ Ü‰ÑÔô ˜6×3Ñ3Ô4ó
á4�ô ˜f¬x¸ÀÓ/BÖCØ4ñ
ˆŒð #×0Ò0‘q°dˆŒØ×'Ñ'¨1Ñ,ˆ�ùò
s   §A7rŒ   c                 ó,  — |€d gt        | j                  «      z  }t        ||| j                     «      }| j                  �t        ||| j                     «      }nd }t        | j                  |«      D ]  \  }} |||j                  r|n||¬«      }Œ  |S )N)ry   rx   )Úlenrä   r   ræ   rå   r   ÚziprÒ   )rD   rŒ   rx   Ú	attn_maskÚ
mamba_maskÚlÚcs          r6   rJ   zPlamoDecoder.__call__…  s—   € Øˆ=Ø�FœS §¡Ó-Ñ-ˆEä)¨!¨U°4·;±;Ñ-?Ó@ˆ	Ø�<‰<Ð#Ü(¨¨E°$·,±,Ñ,?Ó@‰JàˆJô
 �—‘˜eÖ$ñ
ØØáØØ#$§:¢:‘Z°9Øô‰Að %ð ˆr5   rÏ   rN   s   @r6   rá   rá   z  s&   ø„ ð-˜yð -¨Tõ -ð˜"Ÿ(™(÷ r5   rá   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )Ú
PlamoModelrQ   c                 ó  •— t         ‰| �  «        || _        |j                  | _        t	        j
                  |j                  |j                  «      | _        t        |«      | _	        t        |j                  |j                  ¬«      | _        y )N)r9   )r>   r?   rQ   r*   rb   Ú	Embeddingr   Úembed_tokensrá   rä   r8   r   Únormrv   s     €r6   r?   zPlamoModel.__init__œ  sg   ø€ Ü‰ÑÔàˆŒØ ×+Ñ+ˆŒäŸL™L¨×):Ñ):¸F×<NÑ<NÓOˆÔÜ" 6Ó*ˆŒÜ˜F×.Ñ.°F×4GÑ4GÔHˆ�	r5   Úinputsc                 óˆ   — |j                   \  }}| j                  |«      }| j                  ||«      }| j                  |«      S r=   )r[   rò   rä   ró   )rD   rô   rx   r“   Ú
seq_lengthrÍ   r§   s          r6   rJ   zPlamoModel.__call__¦  sF   € ð
 "(§¡Ñˆ
�Jà×Ñ˜fÓ%ˆà�k‰kØØó
ˆð
 �y‰y˜‹~Ðr5   r=   rÏ   rN   s   @r6   rï   rï   ›  s'   ø„ ðI˜yõ Ið ñà—‘÷r5   rï   c                   óœ   ‡ — e Zd Zdeddfˆ fd„Zdeeef   deeef   fd„Zd„ Zdde	j                  de	j                  fd	„Zed
„ «       Zˆ xZS )ÚModelrQ   r;   Nc                 ó  •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  | _        |j                  s2t        j                  |j                  | j                  d¬«      | _        y y )NFrS   )r>   r?   rQ   r   rï   Úmodelr*   r   rb   rc   r   Úlm_headrv   s     €r6   r?   zModel.__init__¸  sj   ø€ Ü‰ÑÔØˆŒØ ×+Ñ+ˆŒÜ Ó'ˆŒ
à ×+Ñ+ˆŒà×)Ò)Ü&(§i¡iØ×"Ñ" D§O¡O¸%ô'ˆD�Lð *r5   Úweightsc                 ó�   — |j                  «       D ]2  \  }}d|v sŒ|j                  d   dk7  sŒ|j                  dd«      ||<   Œ4 |S )Nzconv1d.weightrš   r	   r$   )Úitemsr[   Úmoveaxis)rD   rü   rÄ   rÅ   s       r6   ÚsanitizezModel.sanitizeÅ  sH   € Ø—M‘M–O‰DˆAˆqØ !Ò#¨¯©°©°qÓ(8ØŸZ™Z¨¨1Ó-�˜’
ð $ð ˆr5   c                 ó€   — | j                   D �cg c]$  }|j                  rt        d¬«      n	t        «       ‘Œ& c}S c c}w )Nr$   )Úsize)rä   rÒ   r   r   )rD   rì   s     r6   Ú
make_cachezModel.make_cacheË  s4   € ð KOÏ+Ê+ÓVÉ+ÀQ q§z¢z” Õ#´w³yÑ@È+ÑVÐVùÒVs   �);rô   c                 óÈ   — | j                  ||¬«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S )N)rô   rx   )rú   rQ   r   rò   Ú	as_linearrû   )rD   rô   rx   ÚoutputsÚlogitss        r6   rJ   zModel.__call__Ð  s`   € Ø—*‘*ØØð ó 
ˆð �;‰;×*Ò*Ø—Z‘Z×,Ñ,×6Ñ6°wÓ?ˆFð ˆð —\‘\ 'Ó*ˆFàˆr5   c                 óB   — | j                   j                  j                  S r=   )rú   rä   )rD   s    r6   rä   zModel.layersÜ  s   € à�z‰z× Ñ ×'Ñ'Ð'r5   r=   )r+   r,   r-   r   r?   Údictr   r   r  r@   rL   rJ   Úpropertyrä   rM   rN   s   @r6   rø   rø   ·  sn   ø„ ð˜yð ¨Tõ ð  S¨# X¡ð °4¸¸S¸±>ó òWñ

˜rŸx™xð 
¸¿¹ó 
ð ñ(ó ô(r5   rø   )#ÚmathÚdataclassesr   Útypingr   r   Úmlx.coreÚcorer@   Úmlx.nnrb   Úmlx_lm.models.baser   r   r   Úactivationsr
   rx   r   r   Ússmr   r   ÚModuler8   rP   r©   rÈ   rÑ   r0   r2   rÒ   rá   rï   rø   r4   r5   r6   Ú<module>r     sâ   ðó Ý !ß  å Ý ç TÑ Tå ß 'Ý ð ô�ó ó ðô,
ˆb�i‰iô 
ô$b"ˆB�I‰Iô b"ôJE#�—	‘	ô E#ôP4ˆ"�)‰)ô 4ô"3,˜Ÿ	™	ô 3,ðl	?�Yð 	? 3ð 	?¨4ó 	?ô�2—9‘9ô ôB�—‘ô ô8'(ˆB�I‰Iõ '(r5   