ó
    ð“,j+U  ã            
       ó®  • S SK Jr  S SKJrJr  S SKrS SKJr  S SKJ	r	J
r
JrJr  S SKJrJrJrJr  \ " S S5      5       r  S S	\S
\S\4S jjrS\R,                  S\R,                  S\R,                  S\\R,                  \R,                  4   4S jrS\R,                  S\R,                  4S jr " S S\R2                  R4                  5      r " S S\R2                  R4                  5      r " S S\5      r " S S\R2                  R4                  5      r " S S\R2                  R4                  5      r " S S\R2                  R4                  5      r g)!é    )Ú	dataclass)ÚOptionalÚTupleN©Ú	rearrange)ÚConv1dÚ	LayerNormÚLinearÚMultiHeadAttention)Úmake_non_pad_maskÚmask_to_biasÚ
onnx2torchÚmerge_tokenized_segmentsc                   óx   • \ rS rSr% Sr\\S'   Sr\\S'   Sr\\S'   Sr	\\S	'   S
r
\\S'   Sr\\S'   Sr\\S'   Srg)ÚModelConfigé   é€   Ún_melsiÜ  Ún_audio_ctxi   Ún_audio_stateé   Ún_audio_headé   Ún_audio_layeré¡  Ún_codebook_sizeFÚuse_sdpa© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚintÚ__annotations__r   r   r   r   r   r   ÚboolÚ__static_attributes__r   ó    Ú¢C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\s3tokenizer/model_v2.pyr   r      sH   ‡ à€FˆCÓØ€K�ÓØ€M�3ÓØ€L�#ÓØ€M�3ÓØ€O�SÓà€HˆdÖr'   r   ÚdimÚendÚthetac                 ó€  • SU[         R                  " SU S5      S U S-   R                  5       U -  -  -  n[         R                  " XR                  S9nUb  XS-  n[         R                  " XT5      R                  5       n[         R
                  " [         R                  " U5      U5      n[         R                  " Xf4SS9$ )Nç      ð?r   é   ©Údeviceéÿÿÿÿ©r)   )ÚtorchÚarangeÚfloatr0   ÚouterÚpolarÚ	ones_likeÚcat)r)   r*   r+   ÚscalingÚfreqsÚtÚ	freqs_ciss          r(   Úprecompute_freqs_cisr>   %   sœ   € ð �5œ5Ÿ<š<¨¨3°Ó2°;°S¸A±XÐ?×EÑEÓGÈ#ÑMÑNÑO€EÜ�Š�S§¡Ñ.€AØÑØ‰KˆÜ�KŠK˜Ó!×'Ñ'Ó)€EÜ—’œEŸOšO¨EÓ2°EÓ:€Iä�9Š9�iÐ+°Ñ4Ð4r'   ÚxqÚxkr=   Úreturnc                 óœ  • [         R                  " U5      nUS S 2S S 2S4   US S 2S S 2S4   pTUR                  S5      R                  S5      R                  U R                  5      nUR                  S5      R                  S5      R                  U R                  5      nU R
                  S   nU S S 2S S 2S S 2S US-  24   U S S 2S S 2S S 2US-  S 24   p‡[         R                  " U* U4SS9n	UR
                  S   nUS S 2S S 2S S 2S US-  24   US S 2S S 2S S 2US-  S 24   p‡[         R                  " U* U4SS9n
X-  X•-  -   X-  X¥-  -   4$ )Nr   é   r.   r1   r2   )r3   Úview_as_realÚ	unsqueezeÚtoÚdtypeÚshaper9   )r?   r@   r=   ÚrealÚcosÚsinÚDÚhalf_lÚhalf_rÚxq_rÚxk_rs              r(   Úapply_rotary_embrQ   3   sF  € ô
 ×Ò˜iÓ(€DØ’A’q˜!�G‰}˜d¢1¢a¨ 7™mˆØ
�-‰-˜Ó
×
$Ñ
$ QÓ
'×
*Ñ
*¨2¯8©8Ó
4€CØ
�-‰-˜Ó
×
$Ñ
$ QÓ
'×
*Ñ
*¨2¯8©8Ó
4€Cà
�‰�‰€AØšš1ša  ! q¡& Ð(Ñ)¨2ªa²²A°q¸A±v±wÐ.>Ñ+?ˆFÜ�9Š9�v�g˜vÐ&¨BÑ/€Dà
�‰�‰€Aàšš1ša  ! q¡& Ð(Ñ)¨2ªa²²A°q¸A±v±wÐ.>Ñ+?ˆFÜ�9Š9�v�g˜vÐ&¨BÑ/€Dà‰8�d‘jÑ  "¡(¨T©ZÑ"7Ð7Ð7r'   Úxc                 ó6  • UR                   nSSs=::  a  U:  d   e   eU R                  UR                  S   UR                  S   4:X  d   e[        UR                  5       VVs/ s H  u  p4US:X  d  X2S-
  :X  a  UOSPM     nnnU R                  " U6 $ s  snnf )Nr   rC   r1   )ÚndimrH   Ú	enumerateÚview)r=   rR   rT   ÚiÚdrH   s         r(   Úreshape_for_broadcastrY   I   s˜   € Ø�6‰6€DØ��=�D‹=Ð‰=Ðˆ=Ø�?‰?˜qŸw™w q™z¨1¯7©7°2©;Ð7Ó7Ð7Ð7ä8AÀ!Ç'Á'Ô8JôÚ8J±°ˆQ�!‹V�q 1™H“}‰¨!Ò+Ñ8Jð 
ñ ð �>Š>˜5Ð!Ð!ùós   Á%Bc                   ó^  ^ • \ rS rSrSS\S\4U 4S jjjr\R                  " 5       S\R                  S\R                  4S j5       r	\R                  " 5       S\R                  S\R                  4S j5       r
\R                  " 5       S	\R                  S\R                  4S
 j5       rSrU =r$ )ÚFSQCodebookéS   r)   Úlevelc                 ó†   >• [         TU ]  5         [        R                  R	                  US5      U l        X l        S U l        g )Né   )ÚsuperÚ__init__r3   Únnr
   Úproject_downr]   Úembed)Úselfr)   r]   Ú	__class__s      €r(   ra   ÚFSQCodebook.__init__U   s1   ø€ Ü‰ÑÔÜ!ŸH™HŸO™O¨C°Ó3ˆÔØŒ
Øˆ�
r'   rR   rA   c                 ó   • [        US5      nU$ )Nz... d -> (...) dr   ©re   rR   s     r(   Ú
preprocessÚFSQCodebook.preprocess[   s   € ä�aÐ+Ó,ˆØˆr'   c           	      ó  • UR                   nU R                  U5      nU R                  U5      R                  5       nUR	                  5       nUS-  nUR                  5       S-   n[        R                  " U R                  [        R                  " SU R                  -  UR                  UR                  S95      n[        R                  " X4R                  S5      -  SS9nUR                  US   US   5      R                  5       nU$ )Ng   àÎ÷ï?rC   r.   )r0   rG   r   r1   r2   )rH   rj   rc   r5   ÚtanhÚroundr3   Úpowr]   r4   r0   rG   ÚsumrE   Úreshaper#   )re   rR   Úx_shapeÚhÚpowersÚmuÚinds          r(   ÚencodeÚFSQCodebook.encode`   sÓ   € à—'‘'ˆà�O‰O˜AÓˆà×Ñ˜aÓ ×&Ñ&Ó(ˆØ�F‰F‹HˆØÐ"Ñ"ˆØ�G‰G‹I˜‰Mˆä—’Ø�J‰JÜ�LŠL˜˜DŸJ™J™¨q¯x©x¸q¿w¹wÑGóIˆô �YŠY�q×+Ñ+¨AÓ.Ñ.°BÑ7ˆØ�j‰j˜ ™ W¨Q¡ZÓ0×4Ñ4Ó6ˆØˆ
r'   Ú	embed_indc                 ó   • [        S5      e)Nz2There is no official up project component provided)ÚNotImplementedError)re   ry   s     r(   ÚdecodeÚFSQCodebook.decoder   s   € ä!Ø@óBð 	Br'   )rd   r]   rc   )é   )r   r    r!   r"   r#   ra   r3   Úinference_modeÚTensorrj   rw   r|   r&   Ú__classcell__©rf   s   @r(   r[   r[   S   s¸   ø† ñ˜Cð ¨÷ ð ð ×ÒÓð˜EŸL™Lð ¨U¯\©\ó ó ðð ×ÒÓð˜Ÿ™ð ¨¯©ó ó ðð" ×ÒÓðB §¡ð B°·±ó Bó öBr'   r[   c                   ó  ^ • \ rS rSrSrS\S\4U 4S jjr\S 5       r\	R                  " 5       S\	R                  S\	R                  4S	 j5       r\	R                  " 5       S
\	R                  S\	R                  4S j5       rSrU =r$ )ÚFSQVectorQuantizationéx   z{Vector quantization implementation (inference-only).
Args:
    dim (int): Dimension
    codebook_size (int): Codebook size
r)   Úcodebook_sizec                 ó\   >• [         TU ]  5         SU:X  d   e[        USS9U l        X l        g )Nr   r~   )r)   r]   )r`   ra   r[   Ú	_codebookr†   )re   r)   r†   rf   s      €r(   ra   ÚFSQVectorQuantization.__init__   s2   ø€ ô
 	‰ÑÔØ�}Ó$Ð$Ð$Ü$¨°AÑ6ˆŒØ*Õr'   c                 ó.   • U R                   R                  $ ©N)rˆ   rd   ©re   s    r(   ÚcodebookÚFSQVectorQuantization.codebook‰   s   € à�~‰~×#Ñ#Ð#r'   rR   rA   c                 ó8   • U R                   R                  U5      $ r‹   )rˆ   rw   ri   s     r(   rw   ÚFSQVectorQuantization.encode�   s   € à�~‰~×$Ñ$ QÓ'Ð'r'   ry   c                 óT   • U R                   R                  U5      n[        US5      nU$ )Nzb n d -> b d n)rˆ   r|   r   )re   ry   Úquantizes      r(   r|   ÚFSQVectorQuantization.decode‘   s(   € à—>‘>×(Ñ(¨Ó3ˆÜ˜XÐ'7Ó8ˆØˆr'   )rˆ   r†   )r   r    r!   r"   Ú__doc__r#   ra   Úpropertyr�   r3   r   r€   rw   r|   r&   r�   r‚   s   @r(   r„   r„   x   s™   ø† ñð+àð+ð ÷+ð ñ$ó ð$ð ×ÒÓð(˜Ÿ™ð (¨¯©ó (ó ð(ð ×ÒÓð §¡ð °·±ó ó ör'   r„   c                   óÆ  ^ • \ rS rSr  SS\S\S\S\4U 4S jjjr SS\R                  S\	\R                     4S	 jjr
   SS
\R                  S\R                  S\R                  S\	\R                     S\	\R                     S\	\R                     4S jjr   SS\R                  S\	\R                     S\	\R                     S\	\R                     4S jjrSrU =r$ )ÚFSMNMultiHeadAttentioné˜   Ún_stateÚn_headÚkernel_sizer   c           
      ó\  >• [         TU ]  X5        [        R                  R	                  UUUSSUSS9U l        US-
  S-  U l        US-
  U R                  -
  U l        [        R                  R                  U R                  U R                  4S5      U l	        X@l
        [        XSS9U l        g )NrC   r   F)ÚstrideÚpaddingÚgroupsÚbiasr.   ç        )r    )r`   ra   r3   rb   r   Ú
fsmn_blockÚleft_paddingÚright_paddingÚConstantPad1dÚpad_fnr   r
   Úkey)re   r™   rš   r›   r   rf   s        €r(   ra   ÚFSMNMultiHeadAttention.__init__š   sª   ø€ ô 	‰Ñ˜Ô)äŸ(™(Ÿ/™/¨'Ø*1Ø*5Ø12Ø23Ø18Ø/4ð *ð 6ˆŒð )¨1™_°Ñ2ˆÔØ(¨1™_¨t×/@Ñ/@Ñ@ˆÔÜ—h‘h×,Ñ,Ø×Ñ × 2Ñ 2Ð3°Só:ˆŒð !ŒÜ˜'°Ñ7ˆ�r'   ÚinputsÚmaskc                 ó"  • UR                  5       u  p4  nUR                  X4S5      nUb  UR                  S5      S:”  a  X-  nUR                  SS5      nU R                  U5      nU R	                  U5      nUR                  SS5      nXa-  nXb-  $ )Nr1   r.   r   rC   )ÚsizerV   Ú	transposer¦   r¢   )re   r©   rª   Úbr<   Ú_rR   s          r(   Úforward_fsmnÚ#FSMNMultiHeadAttention.forward_fsmn²   sŒ   € ð —[‘[“]‰
ˆˆa�Ø—‘˜Q 2Ó&ˆØÑ §	¡	¨!£¨qÓ 0Ø‘]ˆFØ×Ñ˜Q Ó"ˆØ�K‰K˜‹NˆØ�O‰O˜AÓˆØ�K‰K˜˜1ÓˆØ	‰ˆØ‰xˆr'   ÚqÚkÚvÚmask_padr=   c           	      óp  • UR                   u    pxX€R                  -  S-  n	UR                  " / UR                   S S QU R                  PSP76 nUR                  " / UR                   S S QU R                  PSP76 nUR                  " / UR                   S S QU R                  PSP76 nUb  [        XUS9u  pU R	                  X55      n
UR                  SSSS5      U	-  nUR                  SSSS5      nU R                  (       d§  UR                  SSSS5      U	-  nX-  nUb  X´-   nUR                  5       n[        R                  R                  R                  USS9R                  UR                  5      nXÃ-  R                  SSSS5      R                  SS	9UR                  5       U
4$ UR                  SSSS5      U	-  nUc   e[        R                  R                  R!                  UUUUS
SS9nUR#                  SS5      R%                  5       R                  UR'                  S5      SU5      nUS U
4$ )Ng      Ð¿r.   r1   )r=   r   rC   r~   r2   )Ú	start_dimr¡   r-   )Ú	attn_maskÚ	dropout_pÚscale)rH   rš   rV   rQ   r°   Úpermuter   r5   r3   rb   Ú
functionalÚsoftmaxrF   rG   ÚflattenÚdetachÚscaled_dot_product_attentionr­   Ú
contiguousr¬   )re   r²   r³   r´   rª   rµ   r=   r¯   rL   rº   Ú
fsm_memoryÚqkÚwÚoutputs                 r(   Úqkv_attentionÚ$FSMNMultiHeadAttention.qkv_attentionÀ   s2  € ð —'‘'‰ˆˆ1Ø—k‘kÑ! EÑ)ˆØ�FŠFÐ1�A—G‘G˜B˜Q�KÐ1 §¡Ð1¨bÒ1ˆØ�FŠFÐ1�A—G‘G˜B˜Q�KÐ1 §¡Ð1¨bÒ1ˆØ�FŠFÐ1�A—G‘G˜B˜Q�KÐ1 §¡Ð1¨bÒ1ˆàÑ Ü# A°IÑ>‰DˆAà×&Ñ& qÓ3ˆ
à�I‰I�a˜˜A˜qÓ! EÑ)ˆØ�I‰I�a˜˜A˜qÓ!ˆà�}�}Ø—	‘	˜!˜Q  1Ó%¨Ñ-ˆAØ‘ˆBØÑØ‘Y�Ø—‘“ˆBÜ—‘×#Ñ#×+Ñ+¨B°BÐ+Ð7×:Ñ:¸1¿7¹7ÓCˆAØ‘E—?‘?Ø�1�a˜óß#™G¨a˜GÐ0°"·)±)³+¸zðJð Jð —	‘	˜!˜Q  1Ó%¨Ñ-ˆAØÑ#Ð#Ð#Ü—X‘X×(Ñ(×EÑEØØØØØØð Fð ˆFð ×&Ñ& qØ'(ó*ß*4©*«,·t±t¸A¿F¹FÀ1»IÀrÈ1Ó7Mð ð ˜4 Ð+Ð+r'   rR   c                 óÂ   • U R                  U5      nU R                  U5      nU R                  U5      nU R                  XVXrUU5      u  p‰n
U R	                  U5      U
-   U	4$ r‹   )Úqueryr§   ÚvaluerÆ   Úout)re   rR   rª   rµ   r=   r²   r³   r´   ÚwvrÃ   rÂ   s              r(   ÚforwardÚFSMNMultiHeadAttention.forwardî   sa   € ð �J‰J�q‹MˆØ�H‰H�Q‹KˆØ�J‰J�q‹Mˆà!×/Ñ/°°a¸xØ09ó;Ñˆ�
à�x‰x˜‹|˜jÑ(¨"Ð,Ð,r'   )r¢   r§   r£   r¦   r¤   r   ©é   Fr‹   ©NNN)r   r    r!   r"   r#   r%   ra   r3   r€   r   r°   rÆ   rÍ   r&   r�   r‚   s   @r(   r—   r—   ˜   s*  ø† ð Øñ8àð8ð ð8ð ð	8ð
 ÷8ð 8ð4 59ñØ"Ÿ\™\ðà# E§L¡LÑ1õð$ 6:Ø9=Ø:>ñ,,ØŸ™ð,,àŸ™ð,,ð Ÿ™ð,,ð % U§\¡\Ñ2ð	,,ð
 !)¨¯©Ñ 6ð,,ð "*¨%¯,©,Ñ!7õ,,ð` 04Ø37Ø48ñ	-Ø—<‘<ð-à˜uŸ|™|Ñ,ð-ð # 5§<¡<Ñ0ð-ð $ E§L¡LÑ1÷	-ó -r'   r—   c            
       óÊ   ^ • \ rS rSr  SS\S\S\S\4U 4S jjjr   SS\R                  S\	\R                     S	\	\R                     S
\	\R                     4S jjr
SrU =r$ )ÚResidualAttentionBlockéý   r™   rš   r›   r   c                 ó4  >• [         TU ]  5         [        UUUUS9U l        [	        USS9U l        US-  n[        R                  R                  [        X5      [        R                  R                  5       [        XQ5      5      U l        [	        U5      U l        g )N©r   gñhãˆµøä>)Úepsé   )r`   ra   r—   Úattnr	   Úattn_lnr3   rb   Ú
Sequentialr
   ÚGELUÚmlpÚmlp_ln)re   r™   rš   r›   r   Ún_mlprf   s         €r(   ra   ÚResidualAttentionBlock.__init__ÿ   s}   ø€ ô 	‰ÑÔä*¨7Ø+1Ø+6Ø4<ñ>ˆŒ	ô ! ¨dÑ3ˆŒà˜!‘ˆä—8‘8×&Ñ&¤v¨gÓ'=¼u¿x¹x¿}¹}»Ü'-¨eÓ'=ó?ˆŒä Ó(ˆ�r'   rR   rª   rµ   r=   c                 ó”   • XR                  U R                  U5      X#US9S   -   nXR                  U R                  U5      5      -   nU$ )N)rª   rµ   r=   r   ©rÙ   rÚ   rÝ   rÞ   )re   rR   rª   rµ   r=   s        r(   rÍ   ÚResidualAttentionBlock.forward  sT   € ð —	‘	Ø�L‰L˜‹O $Øð ð !à!"ñ$ñ $ˆð —‘˜Ÿ™ Q›Ó(Ñ(ˆØˆr'   râ   rÏ   rÑ   )r   r    r!   r"   r#   r%   ra   r3   r€   r   rÍ   r&   r�   r‚   s   @r(   rÓ   rÓ   ý   s•   ø† ð Øñ)àð)ð ð)ð ð	)ð
 ÷)ð )ð0 (,Ø+/Ø,0ñà�<‰<ðð �u—|‘|Ñ$ðð ˜5Ÿ<™<Ñ(ð	ð
 ˜EŸL™LÑ)÷ó r'   rÓ   c                   ó´   ^ • \ rS rSrS\S\S\S\S\S\4U 4S jjrS	\R                  S
\R                  S\	\R                  \R                  4   4S jr
SrU =r$ )ÚAudioEncoderV2i#  r   r™   rš   Ún_layerr�   r   c                 ó.  >• [         TU ]  5         XPl        [        UUSUSS9U l        [        UUSSSS9U l        [        SS5      U l        [        R                  R                  [        U5       Vs/ s H  n[        X#US9PM     sn5      U l        g s  snf )Nr~   rC   )r›   r�   rž   r.   é@   i   rÖ   )r`   ra   r�   r   Úconv1Úconv2r>   r=   r3   rb   Ú
ModuleListÚrangerÓ   Úblocks)	re   r   r™   rš   ræ   r�   r   r¯   rf   s	           €r(   ra   ÚAudioEncoderV2.__init__%  sœ   ø€ ô 	‰ÑÔØŒä˜FØ#Ø()Ø#)Ø$%ñ	'ˆŒ
ô
 ˜GØ#Ø()Ø#$Ø$%ñ	'ˆŒ
ô
 .¨b°(Ó;ˆŒÜ—h‘h×)Ñ)ä˜7”^ó+
â#�ô # 7¸XÔFÙ#ñ+
ó ˆ�ùò +
s   Á1BrR   Úx_lenrA   c                 óØ  • UR                   S   n[        X#5      R                  S5      n[        R                  R
                  R                  U R                  X-  5      5      nUS-   S-
  S-
  U R                  -  S-   nUS-   S-
  S-
  U R                  -  S-   n[        X%5      R                  S5      n[        R                  R
                  R                  U R                  X-  5      5      nUS-   S-
  S-
  S-  S-   nUS-   S-
  S-
  U R                  -  S-   n[        X%5      R                  S5      nUR                  SSS5      nU R                  R                  UR                  5      nUR                  SS5      n[        XAR                   5      n[        R"                  " U5      nUSS2SS2S4   USS2SS2S4   p©[        R$                  " X™4SS9n	[        R$                  " Xª4SS9n
U	R                  S5      R                  S5      n	U
R                  S5      R                  S5      n
U R&                   H-  nU" XR                  S5      XvSUR)                  S5       5      nM/     X4$ )z¡
x : torch.Tensor, shape = (batch_size, n_mels, T)
    the mel spectrogram of the audio
x_len: torch.Tensor, shape = (batch_size,)
    length of each audio in x
r1   rC   r.   r   Nr2   )rH   r   rE   r3   rb   r¼   Úgeluré   r�   rê   r»   r=   rF   r0   r­   r   rG   rD   r9   rí   r¬   )re   rR   rï   ÚTrª   Úx_slenr=   rµ   ÚtmprJ   rK   Úblocks               r(   rÍ   ÚAudioEncoderV2.forwardA  s  € ð �G‰G�B‰KˆÜ  Ó*×4Ñ4°QÓ7ˆÜ�H‰H×Ñ×$Ñ$ T§Z¡Z°±Ó%9Ó:ˆØ˜‘˜[Ñ(¨1Ñ,°·±Ñ<¸qÑ@ˆØ�a‘%˜+Ñ%¨Ñ)¨d¯k©kÑ9¸AÑ=ˆÜ  Ó/×9Ñ9¸!Ó<ˆÜ�H‰H×Ñ×$Ñ$ T§Z¡Z°±Ó%9Ó:ˆØ˜‘˜[Ñ(¨1Ñ,°Ñ2°QÑ6ˆØ˜1‘*˜{Ñ*¨QÑ.°4·;±;Ñ>ÀÑBˆÜ  Ó/×9Ñ9¸!Ó<ˆØ�I‰I�a˜˜AÓˆØ—N‘N×%Ñ% a§h¡hÓ/ˆ	Ø—>‘> ! QÓ'ˆÜ˜D§'¡'Ó*ˆä× Ò  Ó+ˆØ’qš!˜Q�w‘< ¢Qª¨1 W¡ˆSä�iŠi˜˜
¨Ñ+ˆÜ�iŠi˜˜
¨Ñ+ˆØ�m‰m˜AÓ×(Ñ(¨Ó+ˆØ�m‰m˜AÓ×(Ñ(¨Ó+ˆà—[”[ˆEÙ�aŸ™¨Ó*¨HÀ
ÀÇÁÈÃÐ6KÓLŠAñ !ð ˆxˆr'   )rí   ré   rê   r=   r�   )r   r    r!   r"   r#   r%   ra   r3   r€   r   rÍ   r&   r�   r‚   s   @r(   rå   rå   #  s}   ø† ðàðð ðð ð	ð
 ðð ðð ÷ð8"˜Ÿ™ð "Ø—|‘|ð"Ø(-¨e¯l©l¸E¿L¹LÐ.HÑ(I÷"ò "r'   rå   c                   ó6  ^ • \ rS rSrSr\" 5       4S\S\4U 4S jjjrS\R                  S\R                  S\
\R                  \R                  4   4S	 jr\R                  " 5       S\R                  S\R                  S\
\R                  \R                  4   4S
 j5       r\R                  " 5       S\R                  S\R                  S\R                  S\S\
\R                  \R                  4   4
S j5       r\S 5       rS\4S jrS\4S jrS rSrU =r$ )ÚS3TokenizerV2if  zXS3 tokenizer v2 implementation (inference-only).
Args:
    config (ModelConfig): Config
ÚnameÚconfigc                 óÈ  >• [         TU ]  5         Xl        SU;  a  SU;   d   eSUl        X l        [        U R                  R                  U R                  R                  U R                  R                  U R                  R                  SU R                  R                  5      U l        [        U R                  R                  U R                  R                  5      U l        g )NÚv1Úv2r   r.   )r`   ra   rù   r   rú   rå   r   r   r   r   r   Úencoderr„   Ú	quantizer)re   rù   rú   rf   s      €r(   ra   ÚS3TokenizerV2.__init__l  s¬   ø€ Ü‰ÑÔØŒ	Ø�tÓØ˜4“<Ð�<à%)ˆFÔ"ØŒÜ%Ø�K‰K×ÑØ�K‰K×%Ñ%Ø�K‰K×$Ñ$Ø�K‰K×%Ñ%ØØ�K‰K× Ñ ó
ˆŒô /Ø�K‰K×%Ñ%Ø�K‰K×'Ñ'ó
ˆ�r'   ÚmelÚmel_lenrA   c                 ó$   • U R                  X5      $ r‹   )r’   )re   r  r  s      r(   rÍ   ÚS3TokenizerV2.forward�  s   € à�}‰}˜SÓ*Ð*r'   c                 óÀ   • SnX#:„  nUR                  5       (       a  U R                  XUU5      $ U R                  X5      u  pVU R                  R	                  U5      nXv4$ )a0  
Quantize mel spectrogram to tokens, with automatic long audio handling.

Args:
    mel: mel spectrogram tensor, shape (batch_size, n_mels, T)
    mel_len: mel length tensor, shape (batch_size,)

Returns:
    code: quantized tokens, shape (batch_size, T')
    code_len: token length, shape (batch_size,)
i¸  )ÚanyÚ_quantize_mixed_batchrþ   rÿ   rw   )re   r  r  Ú
max_framesÚlong_audio_maskÚhiddenÚcode_lenÚcodes           r(   r’   ÚS3TokenizerV2.quantize…  sk   € ð  ˆ
ð "Ñ.ˆà×Ñ× Ñ à×-Ñ-¨c¸OØ.8ó:ð :ð  $Ÿ|™|¨CÓ9ÑˆFØ—>‘>×(Ñ(¨Ó0ˆDØ�>Ð!r'   r	  r  c                 óŠ	  • UR                  S5      nSnSnSnSn	X†-  U-  n
X–-  U-  nX«-
  n/ n/ n/ n[        U5       GHË  nUU   nUU   nUU   R                  5       nU(       d©  USS2SU24   nUR                  5       nUU
:  a1  U
U-
  n[        R                  R
                  R                  USU45      nUR                  U5        UR                  [        R                  " UUR                  S95        UR                  USSS	S
.5        MÑ  SnSnUU:  aÉ  [        UU
-   U5      nUSS2UU24   nUR                  S	5      nUU
:  a1  U
U-
  n[        R                  R
                  R                  USU45      nUR                  U5        UR                  [        R                  " UUR                  S95        UR                  USUSS
.5        US	-  nUU-  nUU:  a  MÉ  UnU H  nUS   U:X  d  M  US   (       d  M  UUS'   M!     GMÎ     U(       d]  [        R                  " US[        R                  UR                  S9[        R                  " U[        R                  UR                  S94$ [        R                  " U5      n[        R                  " U5      nU R                  UU5      u  nnU R                  R!                  U5      n 0 n![#        U5       H¿  u  n"nUS   nUS   nUS   nU U"SUU"   R                  5       24   R%                  5       R'                  5       R)                  5       n#U(       d@  [        R                  " U#[        R                  UR                  S9n$U$[+        U#5      4U!U'   M   UU!;  a  / U!U'   U!U   R                  U#5        MÁ     [        U5       Hm  nUU   R                  5       (       d  M  U!U   n%Sn&[-        U%U	U&S9n'[        R                  " U'[        R                  UR                  S9n(U([+        U'5      4U!U'   Mo     [/        S U!R1                  5        5       5      n)[        R                  " UU)[        R                  UR                  S9n*[        R                  " U[        R                  UR                  S9n+U!R3                  5        H  u  nu  n$nU$U*USU24'   UU+U'   M     U*U+4$ )a¯  
Handle mixed batch with both short and long audio using unified batch processing.

Args:
    mel: mel spectrogram tensor, shape (batch_size, n_mels, T)
    mel_len: mel length tensor, shape (batch_size,)
    long_audio_mask: boolean mask for long audio, shape (batch_size,)
    max_frames: maximum frames for short audio

Returns:
    code: quantized tokens, shape (batch_size, T')
    code_len: token length, shape (batch_size,)
r   i€>  é    é   rØ   Nr/   FrC   )Ú	batch_idxÚis_long_audioÚsegment_idxÚtotal_segmentsTr  r  r  )rG   r0   r  r   )ÚoverlapÚ
token_ratec              3   ó*   #   • U  H	  oS    v •  M     g7f)rC   Nr   )Ú.0Ú	code_infos     r(   Ú	<genexpr>Ú6S3TokenizerV2._quantize_mixed_batch.<locals>.<genexpr>B  s   é € ÐJÒ9I¨I Qž<Ò9Iùs   ‚)r¬   rì   Úitemr3   rb   r¼   ÚpadÚappendÚtensorr0   ÚminÚzerosÚlongÚstackrþ   rÿ   rw   rU   ÚcpuÚnumpyÚtolistÚlenr   ÚmaxÚvaluesÚitems),re   r  r  r	  r  Ú
batch_sizeÚsample_rateÚ
hop_lengthÚwindow_sizer  Úframes_per_windowÚframes_per_overlapÚframes_per_strideÚall_segmentsÚall_segments_lenÚsegment_infor  Ú	audio_melÚaudio_mel_lenr  ÚsegmentÚseg_lenÚpad_sizeÚstartr  r*   r  ÚinfoÚunified_batch_melÚunified_batch_lensr
  r  ÚcodesÚresultsÚseg_idxÚsegment_codeÚcode_tensorÚaudio_codesr  Úmerged_codesÚmerged_codes_tensorÚmax_code_lenÚoutput_codesÚoutput_codes_lens,                                               r(   r  Ú#S3TokenizerV2._quantize_mixed_batch¤  sö  € ð$ —X‘X˜a“[ˆ
ð ˆØˆ
ØˆØˆð (Ñ5¸ÑCÐØ$Ñ2°jÑ@ÐØ-ÑBÐð ˆØÐð
ˆô ˜z×*ˆIØ˜I™ˆIØ# IÑ.ˆMØ+¨IÑ6×;Ñ;Ó=ˆMæ à#¢A ~¨ ~Ð$5Ñ6�Ø'×,Ñ,Ó.�ð Ð.Ó.Ø0°7Ñ:�HÜ#Ÿh™h×1Ñ1×5Ñ5°gÀÀ8¸}ÓM�Gà×#Ñ# GÔ,Ø ×'Ñ'Ü—L’L °·±Ñ<ô>à×#Ñ#Ø!*Ø%*Ø#$Ø&'ñ	%ö ð �Ø�Ø˜mÓ+Ü˜eÐ&7Ñ7¸ÓG�CØ'ª¨5°¨9¨Ñ5�Gà%Ÿl™l¨1›o�GàÐ!2Ó2Ø#4°wÑ#>˜Ü"'§(¡(×"5Ñ"5×"9Ñ"9Ø# a¨ ]ó#4˜ð !×'Ñ'¨Ô0Ø$×+Ñ+ÜŸš W°S·Z±ZÑ@ôBà ×'Ñ'Ø%.Ø)-Ø'2Ø*.ñ	)ô ð   1Ñ$�KØÐ.Ñ.�Eð- ˜mÕ+ð2 "-�Û(�DØ˜KÑ(¨IÕ5¸$¸×:OÑ:OØ1?˜Ð-Ó.ô )ñm +öt ä—;’;˜zØ Ü%*§Z¡ZØ&)§j¡jñ2ô 49·;²;Ø#-Ü).¯©Ø*-¯*©*ñ46ð6ð 6ô "ŸKšK¨Ó5ÐÜ"Ÿ[š[Ð)9Ó:Ðð  Ÿ<™<Ð(9Ð;MÓNÑˆ�Ø—‘×%Ñ% fÓ-ˆð ˆä& |Ö4‰MˆG�TØ˜[Ñ)ˆIØ  Ñ1ˆMØ˜}Ñ-ˆKð !ØÐ2˜( 7Ñ+×0Ñ0Ó2Ð2Ð2ñ4ß47±C³E¿%¹%»'Ç&Á&Ã(ð ö !ä#Ÿlšl¨<Ü16·±Ø25·*±*ñ>�ð '2´3°|Ó3DÐ%E�˜	Ó"ð  GÓ+Ø)+�G˜IÑ&Ø˜	Ñ"×)Ñ)¨,Ö7ñ' 5ô, ˜zÖ*ˆIØ˜yÑ)×.Ñ.×0Ó0à% iÑ0�ð  �
ä7¸Ø@GØCMñ O�ô
 ',§l¢l°<Ü9>¿¹Ø:=¿*¹*ñ'FÐ#ð ':¼3¸|Ó;LÐ%M�˜	Ó"ñ! +ô& ÑJ¸¿¹Ô9IÓJÓJˆä—{’{ :Ø#/Ü).¯©Ø*-¯*©*ñ6ˆô !Ÿ;š; zÜ-2¯Z©ZØ.1¯j©jñ:Ðð 3:·-±-¶/Ñ.ˆIÑ.˜ XØ1<ˆL˜ I X IÐ-Ñ.Ø*2Ð˜YÓ'ñ 3Bð Ð-Ð-Ð-r'   c                 óH   • [        U R                  5       5      R                  $ r‹   )ÚnextÚ
parametersr0   rŒ   s    r(   r0   ÚS3TokenizerV2.deviceR  s   € ä�D—O‘OÓ%Ó&×-Ñ-Ð-r'   Ú	onnx_pathc                 ó>   • [        US S5      nU R                  USS9  g )NFT©Ústrict)r   Úload_state_dict)re   rN  Úckpts      r(   Úinit_from_onnxÚS3TokenizerV2.init_from_onnxV  s#   € Ü˜) T¨5Ó1ˆØ×Ñ˜T¨$ÐÒ/r'   Ú	ckpt_pathc                 óP   • [         R                  " USSS9nU R                  USS9  g )Nr$  T)Úmap_locationÚmmaprP  )r3   ÚloadrR  )re   rV  rS  s      r(   Úinit_from_ptÚS3TokenizerV2.init_from_ptZ  s'   € Ü�zŠz˜)°%¸dÑCˆØ×Ñ˜T¨$ÐÒ/r'   c                 óD   • U R                  5        H  u  pSUl        M     g )NF)Únamed_parametersÚrequires_grad)re   r¯   Úparams      r(   ÚfreezeÚS3TokenizerV2.freeze^  s   € Ø×-Ñ-Ö/‰HˆAØ"'ˆEÖò 0r'   )rú   rþ   rù   rÿ   )r   r    r!   r"   r”   r   Ústrra   r3   r€   r   rÍ   r   r’   r#   r  r•   r0   rT  r[  ra  r&   r�   r‚   s   @r(   rø   rø   f  sQ  ø† ññ
 9D»ñ 
˜Sð 
¨+÷ 
ð 
ð*+˜5Ÿ<™<ð +ØŸ™ð+Ø*/°·±¸e¿l¹lÐ0JÑ*Kô+ð ×ÒÓð"˜EŸL™Lð "ØŸ,™,ð"Ø+0°·±¸u¿|¹|Ð1KÑ+Ló"ó ð"ð< ×ÒÓðk.Ø—|‘|ðk.Ø.3¯l©lðk.à"Ÿ\™\ðk.ð ðk.ð !& e§l¡l°E·L±LÐ&@Ñ Aók.ó ðk.ðZ ñ.ó ð.ð0¨ô 0ð0 cô 0÷(ð (r'   rø   )g     ˆÃ@N)!Údataclassesr   Útypingr   r   r3   Úeinopsr   Ús3tokenizer.modelr   r	   r
   r   Ús3tokenizer.utilsr   r   r   r   r   r#   r5   r>   r€   rQ   rY   rb   ÚModuler[   r„   r—   rÓ   rå   rø   r   r'   r(   Ú<module>rj     s<  ðõ "ß "ã Ý ç KÓ Kß cÓ cð ÷ð ó ðð )0Ø!%ñ5˜cð 5Ø!ð5à %õ5ð8Ø�‰ð8à�‰ð8ð �|‰|ð8ð ˆ5�<‰<˜Ÿ™Ð%Ñ&ô	8ð," U§\¡\ð "°e·l±lô "ô"B�%—(‘(—/‘/ô "BôJ˜EŸH™HŸO™Oô ô@b-Ð/ô b-ôJ#˜UŸX™XŸ_™_ô #ôL@�U—X‘X—_‘_ô @ôFz(�E—H‘H—O‘Oõ z(r'   