ó
    ˆŽ¡j±¾  ã                   óö  • S SK r S SKJr  S SKJr  S SKrS SKrS SKJ	r	  S SK
J	s  Jr  S SKJr  SSKJr  SSKJr  SSKJr  SS	KJrJr  SS
KJr  SSKJrJr  SSKJrJr  SSK J!r!  SSK"J#r#J$r$J%r%J&r&  SSK'J(r(  SSK)J*r*  SSK+J,r,  SSK-J.r.  \%\ " S S\#5      5       5       r/\%\ " S S\#5      5       5       r0\%\ " S S\#5      5       5       r1 " S S\	Rd                  5      r3 " S S\	Rd                  5      r4S r5\" S 5      SWS! j5       r6S"\Rn                  S#\8S$\Rn                  4S% jr9 SXS&\	Rd                  S'\Rn                  S(\Rn                  S)\Rn                  S*\Rn                  S-  S+\:S,\:S-\!\$   4S. jjr;\" \65       " S/ S0\	Rd                  5      5       r<\" S15       " S2 S3\	Rd                  5      5       r= " S4 S5\5      r> " S6 S7\	Rd                  5      r?S8 r@ " S9 S:\	Rd                  5      rA " S; S<\	Rd                  5      rB " S= S>\	Rd                  5      rC " S? S@\	Rd                  5      rD " SA SB\	Rd                  5      rE " SC SD\	Rd                  5      rF " SE SF\	Rd                  5      rG " SG SH\	Rd                  5      rH " SI SJ\	Rd                  5      rI " SK SL\	Rd                  5      rJ " SM SN\	Rd                  5      rK " SO SP\	Rd                  5      rL\% " SQ SR\5      5       rM\%" SSST9 " SU SV\M5      5       rNSVSR/rOg)Yé    N)ÚCallable)Ú	dataclass)Ú	Parameteré   )Úinitialization)ÚACT2FN)ÚCache)Úuse_kernel_forward_from_hubÚuse_kernelized_func)ÚGradientCheckpointingLayer)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Údeprecate_kwarg)Úmaybe_autocasté   )Ú	AutoModelé   )ÚXcodec2Configc                   óº   • \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr\R                  S-  \S'   Sr\R                  S-  \S'   Srg)	ÚXcodec2Outputé-   a   
audio_values (`torch.FloatTensor` of shape `(batch_size, 1, sequence_length)`, *optional*):
    Decoded audio waveform values in the time domain, obtained using the decoder
    part of Xcodec2. These represent the reconstructed audio signal.
audio_codes (`torch.LongTensor` of shape `(batch_size, 1, codes_length)`, *optional*):
    Discrete code embeddings computed using `model.encode`. These are the quantized
    representations of the input audio used for further processing or generation.
latents (`torch.Tensor` of shape `(batch_size, dimension, time_steps)`):
    Quantized continuous representation of input's embedding.
audio_codes_mask (`torch.int32` of shape `(batch_size, 1, codes_length)`, *optional*):
    Downsampled `padding_mask` for indicating valid audio codes in `audio_codes`.
NÚaudio_valuesÚaudio_codesÚlatentsÚaudio_codes_mask© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r    Ú
LongTensorr!   ÚTensorr"   Ú__static_attributes__r#   ó    ÚºC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/xcodec2/modeling_xcodec2.pyr   r   -   sZ   ‡ ñð .2€L�%×#Ñ# dÑ*Ó1Ø+/€K�×!Ñ! DÑ(Ó/Ø#'€GˆU�\‰\˜DÑ Ó'Ø,0Ð�e—l‘l TÑ)Ö0r/   r   c                   ó’   • \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr\R                  S-  \S'   Srg)ÚXcodec2EncoderOutputéC   aP  
audio_codes (`torch.LongTensor` of shape `(batch_size, 1, codes_length)`, *optional*):
    Discrete code embeddings computed using `model.encode`. These represent
    the compressed, quantized form of the input audio signal that can be
    used for storage, transmission, or generation.
latents (`torch.Tensor` of shape `(batch_size, dimension, time_steps)`):
    Quantized continuous representation of input's embedding.
audio_codes_mask (`torch.int32` of shape `(batch_size, 1, codes_length)`, *optional*):
    Downsampled `padding_mask` for indicating valid audio codes in `audio_codes`.
Nr    r!   r"   r#   )r$   r%   r&   r'   r(   r    r)   r,   r+   r!   r-   r"   r.   r#   r/   r0   r2   r2   C   sE   ‡ ñ	ð ,0€K�×!Ñ! DÑ(Ó/Ø#'€GˆU�\‰\˜DÑ Ó'Ø,0Ð�e—l‘l TÑ)Ö0r/   r2   c                   óB   • \ rS rSr% SrSr\R                  S-  \S'   Sr	g)ÚXcodec2DecoderOutputéV   a)  
audio_values (`torch.FloatTensor` of shape `(batch_size, 1, segment_length)`, *optional*):
    Decoded audio waveform values in the time domain, obtained by converting
    the discrete codes back into continuous audio signals. This represents
    the reconstructed audio that can be played back.
Nr   r#   )
r$   r%   r&   r'   r(   r   r)   r*   r+   r.   r#   r/   r0   r5   r5   V   s   ‡ ñð .2€L�%×#Ñ# dÑ*Ö1r/   r5   c            	       óÒ   ^ • \ rS rSr\" SSS9SS\4U 4S jjj5       r\\" SSS9SS\S\\	R                  \4   4S jj5       5       r\	R                  " 5       \S	 5       5       rS
rU =r$ )ÚXcodec2RotaryEmbeddingéc   Údevicez5.18)ÚversionÚconfigc                 óÄ  >• [         TU ]  5         UR                  U l        UR                  U l        Xl        U R
                  R                  S   U l        U R                  nU R                  S:w  a  [        U R                     nU" U R
                  U5      u  o@l
        [        R                  " USS9U l        [        R                  " UR                  5       SS9U l        g )NÚ	rope_typeÚdefaultF©Ú
persistent)ÚsuperÚ__init__Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenr<   Úrope_parametersr>   Úcompute_default_rope_parametersr   Úattention_scalingÚnnÚBufferÚinv_freqÚcloneÚoriginal_inv_freq)Úselfr<   r:   Úrope_init_fnrL   Ú	__class__s        €r0   rC   ÚXcodec2RotaryEmbedding.__init__d   s¬   ø€ ä‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àŒàŸ™×4Ñ4°[ÑAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÓ&Ü.¨t¯~©~Ñ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆÔ(äŸ	š	 (°uÑ=ˆŒÜ!#§¢¨8¯>©>Ó+;ÈÑ!NˆÕr/   Úreturnc           	      ó   • U R                   S   n[        U SS5      =(       d    U R                  U R                  -  nSnSU[        R
                  " SUS[        R                  S9U-  -  -  nUR                  U5      U4$ )a~  
Computes the inverse frequencies according to the original RoPE implementation
Args:
    config ([`~transformers.PreTrainedConfig`]):
        The model configuration.
Returns:
    Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
    post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
Ú
rope_thetaÚhead_dimNç      ð?r   r   ©Údtype)rG   ÚgetattrÚhidden_sizeÚnum_attention_headsr)   ÚarangeÚfloatÚto)r<   r:   ÚkwargsÚbaseÚdimÚattention_factorrL   s          r0   rH   Ú6Xcodec2RotaryEmbedding.compute_default_rope_parametersu   s{   € ð ×%Ñ% lÑ3ˆÜ�f˜j¨$Ó/×c°6×3EÑ3EÈ×IcÑIcÑ3cˆàÐà˜$¤5§<¢<°°3¸ÄÇÁÑ#MÐPSÑ#SÑTÑUˆØ�{‰{˜6Ó"Ð$4Ð4Ð4r/   c                 ó  • U R                   S S S 2S 4   R                  UR                  S   SS5      R                  [        R
                  UR                  S9nUS S 2S S S 24   R                  5       n[        UR                  R                  [        5      (       a0  UR                  R                  S:w  a  UR                  R                  OSn[        USS9   X4-  R                  SS	5      n[        R                  " Xf4SS
9nUR                  5       U R                  -  nUR                  5       U R                  -  n	S S S 5        WR                  UR                   S9W	R                  UR                   S94$ ! , (       d  f       N@= f)Nr   éÿÿÿÿr   ©rY   r:   ÚmpsÚcpuF©Údevice_typeÚenabledr   ©rb   rX   )rL   ÚexpandÚshaper_   r)   r^   r:   Ú
isinstanceÚtypeÚstrr   Ú	transposeÚcatÚcosrI   ÚsinrY   )
rO   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedrk   ÚfreqsÚembru   rv   s
             r0   ÚforwardÚXcodec2RotaryEmbedding.forward‰   s;  € ð �M‰M˜$¢ 4˜-Ñ(×/Ñ/°×0BÑ0BÀ1Ñ0EÀrÈ1ÓM×PÑPÔW\×WbÑWbÐkl×ksÑksÐPÐtð 	ð !-ªQ°²a¨ZÑ 8× >Ñ >Ó @Ðä'1°!·(±(·-±-Ä×'EÑ'EÈ!Ï(É(Ï-É-Ð[`ÓJ`�a—h‘h—m’mÐfkˆä¨¸UÓCØ&Ñ>×IÑIÈ!ÈQÓOˆEÜ—)’)˜U˜N°Ñ3ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆC÷	 Dð �v‰v˜AŸG™GˆvÐ$ c§f¡f°1·7±7 fÐ&;Ð;Ð;÷ DÕCús   ÃA%E7Å7
F)rI   r<   rL   rE   rN   rF   r>   ©N)r$   r%   r&   r'   r   r   rC   ÚstaticmethodÚtupler)   r-   r^   rH   Úno_gradr   r}   r.   Ú__classcell__©rQ   s   @r0   r8   r8   c   sŒ   ø† Ù�X vÑ.ñO˜}÷ Oó /ðOð  Ù�X vÑ.ñ5°ð 5ÐY^Ð_d×_kÑ_kÐmrÐ_rÑYsô 5ó /ó ð5ð$ ‡]‚]ƒ_Øñ<ó ó ö<r/   r8   c                   ój   ^ • \ rS rSrS\4U 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )Ú
Xcodec2MLPéœ   r<   c                 ó  >• [         TU ]  5         Xl        [        UR                     U l        [        R                  " UR                  UR                  SS9U l
        [        R                  " UR                  UR                  SS9U l        g )NF©Úbias)rB   rC   r<   r   Ú
hidden_actÚactivation_fnrJ   ÚLinearr[   Úintermediate_sizeÚfc1Úfc2©rO   r<   rQ   s     €r0   rC   ÚXcodec2MLP.__init__�   sh   ø€ Ü‰ÑÔØŒÜ# F×$5Ñ$5Ñ6ˆÔÜ—9’9˜V×/Ñ/°×1IÑ1IÐPUÑVˆŒÜ—9’9˜V×5Ñ5°v×7IÑ7IÐPUÑVˆ�r/   Úhidden_statesrS   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ r   )r�   rŒ   r�   ©rO   r“   s     r0   r}   ÚXcodec2MLP.forward¤   s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆØÐr/   )rŒ   r<   r�   r�   ©r$   r%   r&   r'   r   rC   r)   r-   r}   r.   rƒ   r„   s   @r0   r†   r†   œ   s1   ø† ðW˜}÷ Wð U§\¡\ð °e·l±l÷ ò r/   r†   c                 ó–   • U SSU R                   S   S-  24   nU SU R                   S   S-  S24   n[        R                  " U* U4SS9$ )z*Rotates half the hidden dims of the input..Nrf   r   rm   )ro   r)   rt   )rw   Úx1Úx2s      r0   Úrotate_halfr›   «   sZ   € à	
ˆ3Ð"�!—'‘'˜"‘+ Ñ"Ð"Ð"Ñ	#€BØ	
ˆ3�—‘˜‘˜qÑ Ñ"Ð"Ñ	#€BÜ�9Š9�r�c˜2�Y BÑ'Ð'r/   Úrotary_pos_embc                 ó˜   • UR                  U5      nUR                  U5      nX-  [        U 5      U-  -   nX-  [        U5      U-  -   nXV4$ )aI  Applies Rotary Position Embedding to the query and key tensors.

Args:
    q (`torch.Tensor`): The query tensor.
    k (`torch.Tensor`): The key tensor.
    cos (`torch.Tensor`): The cosine part of the rotary embedding.
    sin (`torch.Tensor`): The sine part of the rotary embedding.
    unsqueeze_dim (`int`, *optional*, defaults to 1):
        The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
        sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
        that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
        k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
        cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
        the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
Returns:
    `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
)Ú	unsqueezer›   )ÚqÚkru   rv   Úunsqueeze_dimÚq_embedÚk_embeds          r0   Úapply_rotary_pos_embr¤   ²   sS   € ð& �-‰-˜Ó
&€CØ
�-‰-˜Ó
&€CØ‰wœ; q›>¨CÑ/Ñ0€GØ‰wœ; q›>¨CÑ/Ñ0€GØÐÐr/   r“   Ún_reprS   c                 ó    • U R                   u  p#pEUS:X  a  U $ U SS2SS2SSS2SS24   R                  X#XU5      n U R                  X#U-  XE5      $ )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)ro   rn   Úreshape)r“   r¥   ÚbatchÚnum_key_value_headsÚslenrV   s         r0   Ú	repeat_kvr«   Ì   s_   € ð
 2?×1DÑ1DÑ.€E Ø�ƒzØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐW\ÐdlÓm€MØ× Ñ  ¸eÑ(CÀTÓTÐTr/   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutr`   c                 ó  • [        X R                  5      n[        X0R                  5      n	[        R                  " XR	                  SS5      5      U-  n
Ub  X¤-   n
[
        R                  R                  U
S[        R                  S9R                  UR                  5      n
[
        R                  R                  X¦U R                  S9n
[        R                  " X©5      nUR	                  SS5      R                  5       nXº4$ )Nr   r   rf   ©rb   rY   ©ÚpÚtrainingr   )r«   Únum_key_value_groupsr)   Úmatmulrs   rJ   Ú
functionalÚsoftmaxÚfloat32r_   rY   r²   r·   Ú
contiguous)r¬   r­   r®   r¯   r°   r±   r²   r`   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r0   Úeager_attention_forwardrÂ   Ø   sÒ   € ô ˜3× ;Ñ ;Ó<€JÜ˜U×$?Ñ$?Ó@€Lä—<’< ×';Ñ';¸A¸qÓ'AÓBÀWÑL€LØÑ!Ø#Ñ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÐS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨È6Ï?É?Ð(Ð[€LÜ—,’,˜|Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ$Ð$r/   c                   ó  ^ • \ rS rSrSrS\S\4U 4S jjr   SS\R                  S\
\R                  \R                  4   S-  S	\R                  S-  S
\S-  S\\   S\
\R                  \R                  4   4S jjrSrU =r$ )ÚXcodec2Attentionéñ   z=Multi-headed attention from 'Attention Is All You Need' paperr<   Ú	layer_idxc                 óP  >• [         TU ]  5         Xl        X l        [	        USUR
                  UR                  -  5      U l        UR                  UR                  -  U l	        U R                  S-  U l
        UR                  U l        SU l        [        R                  " UR
                  UR                  U R                  -  UR                  S9U l        [        R                  " UR
                  UR                  U R                  -  UR                  S9U l        [        R                  " UR
                  UR                  U R                  -  UR                  S9U l        [        R                  " UR                  U R                  -  UR
                  UR                  S9U l        g )NrV   g      à¿Fr‰   )rB   rC   r<   rÆ   rZ   r[   r\   rV   r©   r¸   r±   Úattention_dropoutÚ	is_causalrJ   r�   Úattention_biasÚq_projÚk_projÚv_projÚo_proj©rO   r<   rÆ   rQ   s      €r0   rC   ÚXcodec2Attention.__init__õ   sI  ø€ Ü‰ÑÔØŒØ"ŒÜ ¨
°F×4FÑ4FÈ&×JdÑJdÑ4dÓeˆŒØ$*×$>Ñ$>À&×B\ÑB\Ñ$\ˆÔ!Ø—}‘} dÑ*ˆŒØ!'×!9Ñ!9ˆÔØˆŒä—i’iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfñ
ˆŒô —i’iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfñ
ˆŒô —i’iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfñ
ˆŒô —i’iØ×&Ñ&¨¯©Ñ6¸×8JÑ8JÐQW×QfÑQfñ
ˆ�r/   Nr“   Úposition_embeddingsr°   Úpast_key_valuesr`   rS   c                 ó  • UR                   S S n/ UQSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      n	U R                  U5      R                  U5      R	                  SS5      n
Uu  p¼[        X‰X¼SS9u  p‰Ub  UR                  XšU R                  5      u  pš[        R                  " U R                  R                  [        5      nU" U UU	U
U4U R                  (       d  SOU R                   U R"                  S.UD6u  pïUR$                  " / UQSP76 R'                  5       nU R)                  U5      nXï4$ )Nrf   r   r   )r¡   ç        )r²   r±   )ro   rV   rË   Úviewrs   rÌ   rÍ   r¤   ÚupdaterÆ   r   Úget_interfacer<   Ú_attn_implementationrÂ   r·   rÈ   r±   r§   r½   rÎ   )rO   r“   rÑ   r°   rÒ   r`   Úinput_shapeÚhidden_shapeÚquery_statesr¾   r¿   ru   rv   Úattention_interfacerÁ   rÀ   s                   r0   r}   ÚXcodec2Attention.forward  sƒ  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆà&‰ˆô $8¸ÐRUÐjkÑ#lÑ ˆàÑ&Ø'6×'=Ñ'=¸jÐX\×XfÑXfÓ'gÑ$ˆJä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}Ÿ}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆð "×)Ò)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØÐ(Ð(r/   )rÈ   r<   rV   rÉ   rÌ   rÆ   r¸   rÎ   rË   r±   rÍ   )NNN)r$   r%   r&   r'   r(   r   ÚintrC   r)   r-   r�   r	   r   r   r}   r.   rƒ   r„   s   @r0   rÄ   rÄ   ñ   sª   ø† áGð
˜}ð 
¸÷ 
ð4 IMØ.2Ø(,ñ))à—|‘|ð))ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð))ð Ÿ™ tÑ+ð	))ð
  ™ð))ð Ð+Ñ,ð))ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷))ó ))r/   rÄ   ÚRMSNormc                   óx   ^ • \ rS rSrS
S\SS4U 4S jjjrS\R                  S\R                  4S jrS r	S	r
U =r$ )ÚXcodec2RMSNormi8  ÚepsrS   Nc                 óŒ   >• [         TU ]  5         [        R                  " [        R
                  " U5      5      U l        X l        g)z-
Xcodec2RMSNorm is equivalent to T5LayerNorm
N)rB   rC   rJ   r   r)   ÚonesÚweightÚvariance_epsilon)rO   r[   râ   rQ   s      €r0   rC   ÚXcodec2RMSNorm.__init__:  s/   ø€ ô 	‰ÑÔÜ—l’l¤5§:¢:¨kÓ#:Ó;ˆŒØ #Õr/   r“   c                 ó  • UR                   nUR                  [        R                  5      nUR	                  S5      R                  SSS9nU[        R                  " X0R                  -   5      -  nU R                  UR                  U5      -  $ )Nr   rf   T)Úkeepdim)	rY   r_   r)   r¼   ÚpowÚmeanÚrsqrtræ   rå   )rO   r“   Úinput_dtypeÚvariances       r0   r}   ÚXcodec2RMSNorm.forwardB  sw   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ð>ˆØ%¬¯ª°H×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r/   c                 ó^   • [        U R                  R                  5       SU R                   3$ )Nz, eps=)r�   rå   ro   ræ   )rO   s    r0   Ú
extra_reprÚXcodec2RMSNorm.extra_reprI  s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr/   )ræ   rå   )ç�íµ ÷Æ°>)r$   r%   r&   r'   r^   rC   r)   r-   r}   rñ   r.   rƒ   r„   s   @r0   rá   rá   8  sB   ø† ñ$¨ð $¸$÷ $ð $ð; U§\¡\ð ;°e·l±lô ;÷Jð Jr/   rá   c                   ó  ^ • \ rS rSrS\S\4U 4S jjr     SS\R                  S\R                  S-  S\R                  S-  S	\
S-  S
\S-  S\\R                  \R                  4   S-  S\\   S\R                  4S jjrSrU =r$ )ÚXcodec2DecoderLayeriM  r<   rÆ   c                 ó  >• [         TU ]  5         UR                  U l        [        XS9U l        [        U5      U l        [        UR                  UR                  S9U l	        [        UR                  UR                  S9U l
        g )N)r<   rÆ   ©râ   )rB   rC   r[   rÄ   Ú	self_attnr†   Úmlprá   Úrms_norm_epsÚinput_layernormÚpost_attention_layernormrÏ   s      €r0   rC   ÚXcodec2DecoderLayer.__init__N  sj   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔä)°ÑMˆŒä˜fÓ%ˆŒÜ-¨f×.@Ñ.@Àf×FYÑFYÑZˆÔÜ(6°v×7IÑ7IÈv×ObÑObÑ(cˆÕ%r/   Nr“   r°   rx   rÒ   Ú	use_cacherÑ   r`   rS   c           
      óº   • UnU R                  U5      nU R                  " SUUUUUUS.UD6u  pX�-   nUnU R                  U5      nU R                  U5      nX�-   nU$ )N)r“   r°   rx   rÒ   rþ   rÑ   r#   )rû   rø   rü   rù   )
rO   r“   r°   rx   rÒ   rþ   rÑ   r`   ÚresidualÚ_s
             r0   r}   ÚXcodec2DecoderLayer.forwardX  sˆ   € ð !ˆØ×,Ñ,¨]Ó;ˆàŸ>š>ð 
Ø'Ø)Ø%Ø+ØØ 3ñ
ð ñ
Ñˆð !Ñ0ˆð !ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ Ñ0ˆØÐr/   )r[   rû   rù   rü   rø   )NNNFN)r$   r%   r&   r'   r   rÞ   rC   r)   r-   r,   r	   Úboolr�   r   r   r}   r.   rƒ   r„   s   @r0   rõ   rõ   M  sÃ   ø† ðd˜}ð d¸÷ dð /3Ø04Ø(,Ø!&ØHLñà—|‘|ðð Ÿ™ tÑ+ðð ×&Ñ&¨Ñ-ð	ð
  ™ðð ˜$‘;ðð # 5§<¡<°·±Ð#=Ñ>ÀÑEðð Ð+Ñ,ðð 
�‰÷ó r/   rõ   c                   ó6   ^ • \ rS rSrSrSU 4S jjrS rSrU =r$ )ÚXcodec2SnakeBetaix  aä  
A modified Snake function which uses separate parameters for the magnitude of the periodic components
Shape:
    - Input: (B, C, T)
    - Output: (B, C, T), same shape as the input
Parameters:
    - alpha - trainable parameter that controls frequency
    - beta - trainable parameter that controls magnitude
References:
    - This activation function is a modified version based on this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:
    https://huggingface.co/papers/2006.08195
c                 óØ   >• [         TU ]  5         Xl        [        [        R
                  " U5      U-  5      U l        [        [        R
                  " U5      U-  5      U l        SU l        g )Ng•Ö&è.>)	rB   rC   Úin_featuresr   r)   ÚzerosÚalphaÚbetaÚno_div_by_zero)rO   r  r	  rQ   s      €r0   rC   ÚXcodec2SnakeBeta.__init__†  sR   ø€ Ü‰ÑÔØ&Ôô œuŸ{š{¨;Ó7¸%Ñ?Ó@ˆŒ
ÜœeŸkšk¨+Ó6¸Ñ>Ó?ˆŒ	à)ˆÕr/   c                 óŠ  • U R                   R                  S5      R                  S5      nU R                  R                  S5      R                  S5      n[        R                  " U5      n[        R                  " U5      nUSX0R
                  -   -  [        R                  " [        R                  " X-  5      S5      -  -   nU$ )ur   
Forward pass of the function.
Applies the function to the input elementwise.
SnakeBeta âˆ¶= x + 1/b * sin^2 (xa)
r   rf   rW   r   )r	  rž   r
  r)   Úexpr  rê   rv   )rO   r“   r	  r
  s       r0   r}   ÚXcodec2SnakeBeta.forward�  s¡   € ð —
‘
×$Ñ$ QÓ'×1Ñ1°"Ó5ˆØ�y‰y×"Ñ" 1Ó%×/Ñ/°Ó3ˆÜ—	’	˜%Ó ˆÜ�yŠy˜‹ˆØ%¨°×7JÑ7JÑ0JÑ)KÌuÏyÊyÜ�IŠI�mÑ+Ó,¨aóP
ñ )
ñ 
ˆð Ðr/   )r	  r
  r  r  )rW   ©	r$   r%   r&   r'   r(   rC   r}   r.   rƒ   r„   s   @r0   r  r  x  s   ø† ñ÷*÷ð r/   r  c                 ól  • US-  S:H  nUS-  nSU-  nSUS-
  -  [         R                  -  U-  S-   nUS:”  a	  SUS	-
  -  nOUS
:¼  a  SUS-
  S-  -  SUS
-
  -  -   nOSn[        R                  " X'S[        R                  S9nU(       a  [        R
                  " U* U5      S-   n	O[        R
                  " U5      U-
  n	U S:X  a&  [        R                  " SSU4[        R                  S9$ [        R                  " SU -  U	-  5      n
SU -  U-  U
-  nX»R                  5       -  nUR                  SSU5      $ )a&  Generates a 1D Kaiser-windowed sinc filter.

Args:
    cutoff (float): Normalized cutoff frequency (0 to 0.5).
    half_width (float): Transition bandwidth.
    kernel_size (int): Number of filter taps.

Returns:
    torch.Tensor: A tensor of shape (1, 1, kernel_size) representing the filter.
r   r   é   gHáz®G@r   gÍÌÌÌÌÌ@g      I@gKê46¼?gffffff!@g      5@g¨WÊ2Ä±â?é   gš™™™™™Ù?gUjö@+0´?rÔ   F)r
  ÚperiodicrY   ç      à?rX   )
ÚmathÚpir)   Úkaiser_windowr¼   r]   r  ÚsincÚsumrÕ   )ÚcutoffÚ
half_widthÚkernel_sizeÚis_evenÚ	half_sizeÚdelta_fÚattenuationr
  r  Útime_indicesÚsinc_filterÚnormalized_filters               r0   Úkaiser_sinc_filter1dr%  ¡  sR  € ð ˜A‰o Ñ"€GØ˜qÑ €Ið �*‰n€GØ˜9 q™=Ñ)¬D¯G©GÑ3°gÑ=ÀÑD€Kà�TÓØ˜ sÑ*Ñ+‰Ø	˜Ó	Ø˜ rÑ)¨cÑ1Ñ1°G¸{ÈTÑ?QÑ4RÑR‰àˆä×'Ò'¨ÈÔV[×VcÑVcÑd€Mö Ü—|’| Y J°	Ó:¸SÑ@‰ä—|’| KÓ0°9Ñ<ˆð �ƒ{Ü�{Š{˜A˜q +Ð.´e·m±mÑDÐDä—*’*˜Q ™Z¨,Ñ6Ó7€KØ˜F™
 ]Ñ2°[Ñ@Ðð ×.Ñ.Ó0Ñ0Ðà×!Ñ! ! Q¨Ó4Ð4r/   c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚXcodec2DownSample1diÏ  c                 ód  >• [         TU ]  5         SU-  nSU-  nX0l        X@l        X l        US:  a  [        S5      eUS:”  a  [        S5      eUS-  S:H  U l        US-  [        U R                  5      -
  U l        US-  U l	        Xl
        [        X4U5      n[        R                  " USS	9U l        g )
Nr  ç333333ã?rÔ   z(Minimum cutoff must be larger than zero.z'A cutoff above 0.5 does not make sense.r   r   Fr@   )rB   rC   r  r  r  Ú
ValueErrorÚevenrÞ   Úpad_leftÚ	pad_rightÚstrider%  rJ   rK   Úfilter)rO   Úratior  r  r  r/  rQ   s         €r0   rC   ÚXcodec2DownSample1d.__init__Ð  s®   ø€ Ü‰ÑÔØ�u‘ˆØ˜5‘[ˆ
ØŒØ$ŒØ&Ôà�C‹<ÜÐGÓHÐHØ�C‹<ÜÐFÓGÐGà !‘O qÑ(ˆŒ	Ø# qÑ(¬3¨t¯y©y«>Ñ9ˆŒØ$¨Ñ)ˆŒØŒÜ% f¸+ÓFˆÜ—i’i °5Ñ9ˆ�r/   c                 ó$  • UR                   S   n[        R                  " XR                  U R                  4SS9n[        R
                  " UU R                  R                  UR                  5      R                  USS5      U R                  US9nU$ )Nr   Ú	replicate©Úmoderf   ©r.  Úgroups)ro   ÚFÚpadr,  r-  Úconv1dr/  r_   rY   rn   r.  )rO   r“   ÚchannelsÚouts       r0   r}   ÚXcodec2DownSample1d.forwardä  sw   € Ø ×&Ñ& qÑ)ˆÜŸš˜m¯m©m¸T¿^¹^Ð-LÐS^Ñ_ˆÜ�hŠhØà�K‰K�N‰N˜=×.Ñ.Ó/×6Ñ6°xÀÀRÓHØ—;‘;Øñ
ˆð ˆ
r/   )r  r+  r/  r  r  r,  r-  r.  ©r   N©r$   r%   r&   r'   rC   r}   r.   rƒ   r„   s   @r0   r'  r'  Ï  s   ø† ÷:÷(
ð 
r/   r'  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚXcodec2UpSample1diñ  c                 ó   >• [         TU ]  5         Xl        Uc  [        SU-  S-  5      S-  OUU l        Xl        U R                  U-  S-
  U l        U R                  U R
                  -  U R                  U R
                  -
  S-  -   U l        U R                  U R
                  -  U R                  U R
                  -
  S-   S-  -   U l        [        SU-  SU-  U R                  S9n[        R                  " USS9U l        g )	Né   r   r   r  r)  )r  r  r  Fr@   )rB   rC   r0  rÞ   r  r.  r9  r,  r-  r%  rJ   rK   r/  )rO   r0  r  r/  rQ   s       €r0   rC   ÚXcodec2UpSample1d.__init__ò  sá   ø€ Ü‰ÑÔØŒ
Ø6AÑ6Iœ3˜q 5™y¨A™~Ó.°Ò2È{ˆÔØŒØ×#Ñ# uÑ,¨qÑ0ˆŒØŸ™ 4§;¡;Ñ.°$×2BÑ2BÀTÇ[Á[Ñ2PÐUVÑ1VÑVˆŒØŸ™ D§K¡KÑ/°4×3CÑ3CÀdÇkÁkÑ3QÐTUÑ3UÐZ[Ñ2[Ñ[ˆŒä%¨S°5©[ÀSÈ5Á[Ð^b×^nÑ^nÑoˆÜ—i’i °5Ñ9ˆ�r/   c           	      óz  • UR                   S   n[        R                  " XR                  U R                  4SS9nU R                  [        R                  " UU R
                  R                  UR                  5      R                  USS5      U R                  US9-  nUSU R                  U R                  * 24   nU$ )Nr   r3  r4  rf   r6  .)ro   r8  r9  r0  Úconv_transpose1dr/  r_   rY   rn   r.  r,  r-  )rO   r“   r;  s      r0   r}   ÚXcodec2UpSample1d.forwardþ  s¢   € Ø ×&Ñ& qÑ)ˆÜŸš˜m¯h©h¸¿¹Ð-AÈÑTˆØŸ
™
¤Q×%7Ò%7Øà�K‰K�N‰N˜=×.Ñ.Ó/×6Ñ6°xÀÀRÓHØ—;‘;Øñ&
ñ 
ˆð & c¨4¯=©=¸D¿N¹N¸?Ð+JÐ&JÑKˆØÐr/   )r/  r  r9  r,  r-  r0  r.  r>  r?  r„   s   @r0   rA  rA  ñ  s   ø† ÷
:÷ð r/   rA  c            	       óN   ^ • \ rS rSr    S	S\S\S\S\4U 4S jjjrS rSrU =r$ )
ÚXcodec2AntiAliasedActivation1di  Úup_ratioÚ
down_ratioÚup_kernel_sizeÚdown_kernel_sizec                 ó¤   >• [         TU ]  5         [        U5      (       d  [        S5      eXl        [        X$5      U l        [        X55      U l        g )Nz$Activation function must be callable)	rB   rC   ÚcallableÚ	TypeErrorÚactrA  Úupsampler'  Ú
downsample)rO   Ú
activationrJ  rK  rL  rM  rQ   s         €r0   rC   Ú'Xcodec2AntiAliasedActivation1d.__init__  sD   ø€ ô 	‰ÑÔÜ˜
×#Ñ#ÜÐBÓCÐCØŒÜ)¨(ÓCˆŒÜ-¨jÓKˆ�r/   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ r   )rR  rQ  rS  r•   s     r0   r}   Ú&Xcodec2AntiAliasedActivation1d.forward  s2   € ØŸ™ mÓ4ˆØŸ™ Ó/ˆØŸ™¨Ó6ˆàÐr/   )rQ  rS  rR  )r   r   é   rX  )	r$   r%   r&   r'   rÞ   rC   r}   r.   rƒ   r„   s   @r0   rI  rI    sS   ø† ð ØØ Ø "ñLð ðLð ð	Lð
 ðLð ÷Lð L÷ð r/   rI  c                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚXcodec2ResidualUniti$  zY
A residual unit composed of Snake1d and weight-normalized Conv1d layers with dilations.
c                 óø   >• [         TU ]  5         SU-  S-  n[        [        U5      S9U l        [
        R                  " XSX#S9U l        [        [        U5      S9U l        [
        R                  " XSS9U l	        g )NrC  r   ©rT  é   )r  ÚdilationÚpaddingr   )r  )
rB   rC   rI  r  Úsnake1rJ   ÚConv1dÚconv1Úsnake2Úconv2)rO   Ú	dimensionr^  r9  rQ   s       €r0   rC   ÚXcodec2ResidualUnit.__init__)  si   ø€ Ü‰ÑÔØ˜Ñ! aÑ'ˆÜ4Ô@PÐQZÓ@[Ñ\ˆŒÜ—Y’Y˜yÀÈXÑcˆŒ
Ü4Ô@PÐQZÓ@[Ñ\ˆŒÜ—Y’Y˜yÀÑCˆ�
r/   c                 óô   • UnU R                  U R                  U5      5      nU R                  U R                  U5      5      nUR                  S   UR                  S   -
  S-  nUS:”  a	  USX3* 24   nX-   nU$ )a2  
Forward pass through the residual unit.

Args:
    hidden_state (`torch.Tensor` of shape `(batch_size, channels, time_steps)`):
        Input tensor .

Returns:
    output_tensor (`torch.Tensor` of shape `(batch_size, channels, time_steps)`):
        Input tensor after passing through the residual unit.
rf   r   r   .)rb  r`  rd  rc  ro   )rO   Úhidden_stateÚoutput_tensorr_  s       r0   r}   ÚXcodec2ResidualUnit.forward1  s…   € ð %ˆØŸ
™
 4§;¡;¨}Ó#=Ó>ˆØŸ
™
 4§;¡;¨}Ó#=Ó>ˆà×%Ñ% bÑ)¨M×,?Ñ,?ÀÑ,CÑCÈÑIˆØ�Q‹;Ø'¨¨W°XÐ-=Ð(=Ñ>ˆLØ$Ñ4ˆØÐr/   )rb  rd  r`  rc  r  r„   s   @r0   rZ  rZ  $  s   ø† ñõD÷ð r/   rZ  c                   óF   ^ • \ rS rSrSrS	S\S\S\4U 4S jjjrS rSr	U =r
$ )
ÚXcodec2EncoderBlockiH  z&Encoder block used in XCODEC2 encoder.r<   r.  Ústride_indexc           
      óZ  >• [         TU ]  5         UR                  SU-  -  n[        US-  SS9U l        [        US-  SS9U l        [        US-  SS9U l        [        [        US-  5      S9U l	        [        R                  " US-  USU-  U[        R                  " US-  5      S9U l        g )Nr   r   )r^  r   é	   r\  ©r  r.  r_  )rB   rC   Úencoder_hidden_sizerZ  Ú	res_unit1Ú	res_unit2Ú	res_unit3rI  r  r`  rJ   ra  r  Úceilrb  )rO   r<   r.  rm  re  rQ   s        €r0   rC   ÚXcodec2EncoderBlock.__init__K  s§   ø€ Ü‰ÑÔØ×.Ñ.°°L±Ñ@ˆ	Ü,¨Y¸!©^ÀaÑHˆŒÜ,¨Y¸!©^ÀaÑHˆŒÜ,¨Y¸!©^ÀaÑHˆŒÜ4Ô@PÐQZÐ^_ÑQ_Ó@`ÑaˆŒÜ—Y’YØ˜‰N˜I°1°v±:ÀfÔVZ×V_ÒV_Ð`fÐijÑ`jÓVkñ
ˆ�
r/   c                 ó¬   • U R                  U5      nU R                  U5      nU R                  U R                  U5      5      nU R	                  U5      nU$ r   )rr  rs  r`  rt  rb  )rO   rh  s     r0   r}   ÚXcodec2EncoderBlock.forwardV  sI   € Ø—~‘~ lÓ3ˆØ—~‘~ lÓ3ˆØ—{‘{ 4§>¡>°,Ó#?Ó@ˆØ—z‘z ,Ó/ˆàÐr/   )rb  rr  rs  rt  r`  )r   r   )r$   r%   r&   r'   r(   r   rÞ   rC   r}   r.   rƒ   r„   s   @r0   rl  rl  H  s/   ø† Ù0ñ	
˜}ð 	
°cð 	
ÈS÷ 	
ð 	
÷ð r/   rl  c                   ó:   ^ • \ rS rSrSrS\4U 4S jjrS rSrU =r	$ )ÚXcodec2Encoderi_  zXCODEC2 Encoderr<   c           	      ó
  >• [         TU ]  5         [        R                  " SUR                  SSS9U l        / U l        [        UR                  5       H(  u  p#US-   nU =R                  [        XUS9/-  sl        M*     [        R                  " U R                  5      U l        UR                  S[        UR                  5      -  -  n[        [        U5      S9U l        [        R                  " XAR                  SSS9U l        g )Nr   r]  r   ©r  r_  )r.  rm  r   r\  )rB   rC   rJ   ra  rq  rb  ÚblockÚ	enumerateÚdownsampling_ratiosrl  Ú
ModuleListÚlenrI  r  r`  r[   rd  )rO   r<   rm  r.  Úd_modelrQ   s        €r0   rC   ÚXcodec2Encoder.__init__b  sÕ   ø€ Ü‰ÑÔô —Y’Y˜q &×"<Ñ"<È!ÐUVÑWˆŒ
àˆŒ
ä$-¨f×.HÑ.HÖ$IÑ ˆLØ'¨!Ñ+ˆLØ�JŠJÔ.¨vÐS_Ñ`ÐaÑa�Jñ %Jô —]’] 4§:¡:Ó.ˆŒ
Ø×,Ñ,¨q´C¸×8RÑ8RÓ4SÑ/SÑSˆÜ4Ô@PÐQXÓ@YÑZˆŒÜ—Y’Y˜w×(:Ñ(:ÈÐSTÑUˆ�
r/   c                 ó¢   • U R                  U5      nU R                   H  nU" U5      nM     U R                  U5      nU R                  U5      nU$ r   )rb  r}  r`  rd  )rO   rh  r¬   s      r0   r}   ÚXcodec2Encoder.forwards  sL   € Ø—z‘z ,Ó/ˆà—j”jˆFÙ! ,Ó/ŠLñ !ð —{‘{ <Ó0ˆØ—z‘z ,Ó/ˆàÐr/   )r}  rb  rd  r`  )
r$   r%   r&   r'   r(   r   rC   r}   r.   rƒ   r„   s   @r0   rz  rz  _  s   ø† ÙðV˜}÷ V÷"	ð 	r/   rz  c                   ój   ^ • \ rS rSrS\4U 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )ÚXcodec2ResNetBlocki  r<   c                 ó  >• [         TU ]  5         [        R                  " SUR                  SSS9U l        [        R                  " 5       U l        [        R                  " UR                  UR                  SSSS9U l	        [        R                  " SUR                  SSS9U l
        [        R                  " 5       U l        UR                  U l        [        R                  " UR                  UR                  SSSS9U l        g )Né    ró   T)Ú
num_groupsÚnum_channelsrâ   Úaffiner   r   rp  )rB   rC   rJ   Ú	GroupNormr[   Únorm1ÚSiLUÚactivation1ra  rb  Únorm2Úactivation2Úactivation_dropoutrd  r‘   s     €r0   rC   ÚXcodec2ResNetBlock.__init__€  sÂ   ø€ Ü‰ÑÔÜ—\’\¨R¸f×>PÑ>PÐVZÐcgÑhˆŒ
ÜŸ7š7›9ˆÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÐSTÐ]^ÐhiÑjˆŒ
Ü—\’\¨R¸f×>PÑ>PÐVZÐcgÑhˆŒ
ÜŸ7š7›9ˆÔØ"(×";Ñ";ˆÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÐSTÐ]^ÐhiÑjˆ�
r/   r“   rS   c                 ó‚  • UR                  SS5      nUnU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      n[        R                  R                  XR                  U R                  S9nU R                  U5      nX-   R                  SS5      $ )Nr   r   rµ   )rs   rŽ  r�  rb  r‘  r’  rJ   rº   r²   r“  r·   rd  ©rO   r“   r   s      r0   r}   ÚXcodec2ResNetBlock.forwardŠ  s­   € Ø%×/Ñ/°°1Ó5ˆØ ˆØŸ
™
 =Ó1ˆØ×(Ñ(¨Ó7ˆØŸ
™
 =Ó1ˆØŸ
™
 =Ó1ˆØ×(Ñ(¨Ó7ˆÜŸ™×-Ñ-¨m×?VÑ?VÐae×anÑanÐ-ÐoˆØŸ
™
 =Ó1ˆØÑ(×3Ñ3°A°qÓ9Ð9r/   )r�  r’  r“  rb  rd  rŽ  r‘  r—   r„   s   @r0   r‡  r‡    s1   ø† ðk˜}÷ kð
: U§\¡\ð 
:°e·l±l÷ 
:ò 
:r/   r‡  c                   ó  ^ • \ rS rSrSrS\4U 4S jjrSS jrS\R                  S\R                  4S jr
SS	\R                  S
\S\R                  4S jjrS	\R                  S\\R                  \R                  4   4S jrSrU =r$ )ÚXcodec2FiniteScalarQuantizationi—  a  
Finite Scalar Quantization (FSQ) module that quantizes continuous latent representations into discrete codes.
Original code: https://github.com/lucidrains/vector-quantize-pytorch/blob/353d46027888dfb140c3c65a67a7356f1492d71d/vector_quantize_pytorch/finite_scalar_quantization.py#L64

Original modeling uses `ResidualFSQ` with a single quantizer: https://huggingface.co/HKUSTAudio/xcodec2/blob/main/vq/codec_decoder_vocos.py#L389
But we can directly use FSQ since a main feature of Xcodec2 is that it uses a single codebook.
r<   c                 ó  >• [         TU ]  5         [        UR                  5      U l        U R	                  5       u  p#n[
        R                  " USS9U l        [
        R                  " USS9U l        [
        R                  " USS9U l	        g )NFr@   )
rB   rC   ÚlistÚquantization_levelsÚ_compute_buffersrJ   rK   ÚlevelsÚbasisÚcodebook)rO   r<   rž  rŸ  r   rQ   s        €r0   rC   Ú(Xcodec2FiniteScalarQuantization.__init__   sj   ø€ Ü‰ÑÔÜ#'¨×(BÑ(BÓ#CˆÔ Ø"&×"7Ñ"7Ó"9Ñˆ�xÜ—i’i °5Ñ9ˆŒÜ—Y’Y˜u°Ñ7ˆŒ
ÜŸ	š	 (°uÑ=ˆ�r/   c                 ó²  • [         R                  " U R                  [         R                  US9n[         R                  " [         R                  " S/U R                  SS -   US9S[         R                  S9n[         R
                  " [        [        R                  " U R                  5      5      US9R                  S5      nXC-  U-  nUS-  nXV-
  U-  nX#U4$ )	zFCompute the levels, basis, and codebook buffers for the FSQ quantizer.rg   r   Nrf   ©r:   r   r´   r   )
r)   Útensorrœ  Úint32Úcumprodr]   rÞ   ÚnpÚprodrž   )rO   r:   rž  rŸ  ÚindicesÚlevel_indicesr  r   s           r0   r�  Ú0Xcodec2FiniteScalarQuantization._compute_buffers¨  s»   € ä—’˜d×6Ñ6¼e¿k¹kÐRXÑYˆÜ—’Ü�LŠL˜!˜˜t×7Ñ7¸¸Ð<Ñ<ÀVÑLÐRSÔ[`×[fÑ[fñ
ˆô —,’,œs¤2§7¢7¨4×+CÑ+CÓ#DÓEÈfÑU×_Ñ_Ð`bÓcˆØ Ñ)¨VÑ3ˆØ˜q‘[ˆ
Ø!Ñ.°*Ñ<ˆØ˜hÐ&Ð&r/   r©  rS   c                 óŠ   • UR                  S5      nXR                  -  U R                  -  nU R                  S-  nX#-
  U-  nU$ )zP
Convert integer codebook indices to normalized per-dimension codes in [-1, 1].
rf   r   )rž   rŸ  rž  )rO   r©  rª  r  Úcodess        r0   Ú_indices_to_codesÚ1Xcodec2FiniteScalarQuantization._indices_to_codes´  sI   € ð ×#Ñ# BÓ'ˆØ §J¡JÑ.°$·+±+Ñ=ˆØ—[‘[ AÑ%ˆ
ØÑ+¨zÑ9ˆØˆr/   r“   râ   c                 óÖ   • U R                   S-
  SU-   -  S-  n[        R                  " U R                   S-  S:H  SS5      nXC-  R                  5       nX-   R	                  5       U-  U-
  $ )a�  
Constrain `hidden_states` to the valid quantization range for each dimension.

Uses a scaled tanh to soft-clip values into the interval
$[-(L-1)/2, (L-1)/2]$ (offset by 0.5 for even-level dimensions), where $L$ is
the number of quantization levels. The small `eps` margin prevents values from
saturating exactly at the boundary, which would zero out gradients.

Args:
    hidden_states (`torch.Tensor`): Continuous input to be bounded.
    eps (`float`, *optional*, defaults to `1e-3`):
        Small margin added to the level range to avoid gradient saturation at boundaries.

Returns:
    `torch.Tensor`: Bounded values in the valid quantization range.
r   r   r   r  rÔ   )rž  r)   ÚwhereÚatanhÚtanh)rO   r“   râ   Ú
half_rangeÚoffsetÚshifts         r0   ÚboundÚ%Xcodec2FiniteScalarQuantization.bound¾  sk   € ð" —k‘k A‘o¨!¨c©'Ñ2°QÑ6ˆ
Ü—’˜TŸ[™[¨1™_°Ñ1°3¸Ó<ˆØÑ$×+Ñ+Ó-ˆØÑ%×+Ñ+Ó-°
Ñ:¸VÑCÐCr/   c                 ón  • UR                   n[        UR                  R                  [        5      (       a0  UR                  R                  S:w  a  UR                  R                  OSn[        USS9   UR                  5       nU R                  S-  nU R                  U5      nUR                  5       nXU-
  R                  5       -   nXd-  nXd-  U-   nXpR                  -  R                  SS9R                  [        R                  5      nS S S 5        WR                  U5      W4$ ! , (       d  f       N!= f)Nrh   ri   Frj   r   rf   rm   )rY   rp   r:   rq   rr   r   r^   rž  r·  ÚroundÚdetachrŸ  r  r_   r)   r¥  )	rO   r“   Úoriginal_dtyperk   r  Úroundedr­  Úcode_scaledr©  s	            r0   r}   Ú'Xcodec2FiniteScalarQuantization.forwardÔ  s  € à&×,Ñ,ˆô ˜-×.Ñ.×3Ñ3´S×9Ñ9¸m×>RÑ>R×>WÑ>WÐ[`Ó>`ð × Ñ ×%Ò%àð 	ô
 ¨¸UÓCØ)×/Ñ/Ó1ˆMØŸ™¨Ñ)ˆJà ŸJ™J }Ó5ˆMØ#×)Ñ)Ó+ˆGØ!¨}Ñ%<×$DÑ$DÓ$FÑFˆEØÑ&ˆEà Ñ-°Ñ;ˆKØ"§Z¡ZÑ/×4Ñ4¸Ð4Ð<×?Ñ?ÄÇÁÓLˆG÷ Dð �x‰x˜Ó'¨Ð0Ð0÷ DÕCús   Á2BD&Ä&
D4)rŸ  r   rž  rœ  r   )gü©ñÒMbP?)r$   r%   r&   r'   r(   r   rC   r�  r)   r-   r®  r^   r·  r�   r}   r.   rƒ   r„   s   @r0   r™  r™  —  sˆ   ø† ñð>˜}÷ >ô
'ð¨¯©ð ¸%¿,¹,ô ñD 5§<¡<ð D°eð DÀuÇ|Á|õ Dð,1 U§\¡\ð 1°e¸E¿L¹LÈ%Ï,É,Ð<VÑ6W÷ 1ò 1r/   r™  c                   ón   ^ • \ rS rSrSrS\4U 4S jjrS\R                  S\R                  4S jr	Sr
U =r$ )	ÚXcodec2ISTFTHeadiê  zé
Head for converting decoder outputs to waveform via STFT projection and ISTFT.

Uses custom "same" padding ISTFT from Vocos:
https://github.com/gemelo-ai/vocos/blob/c859e3b7b534f3776a357983029d34170ddd6fc3/vocos/spectral_ops.py#L47
r<   c                 ó‚  >• [         TU ]  5         [        R                  " UR                  UR
                  S-   5      U l        UR
                  U l        UR                  U l        U R
                  U R                  -
  S-  U l        [        R                  " UR
                  5      n[        R                  " USS9U l        g )Nr   Fr@   )rB   rC   rJ   r�   r[   Ún_fftÚlinearÚ
hop_lengthr_  r)   Úhann_windowrK   Úwindow)rO   r<   rÇ  rQ   s      €r0   rC   ÚXcodec2ISTFTHead.__init__ò  s†   ø€ Ü‰ÑÔÜ—i’i × 2Ñ 2°F·L±LÀ1Ñ4DÓEˆŒØ—\‘\ˆŒ
Ø ×+Ñ+ˆŒØŸ
™
 T§_¡_Ñ4¸Ñ:ˆŒÜ×"Ò" 6§<¡<Ó0ˆÜ—i’i °5Ñ9ˆ�r/   r“   rS   c                 óþ  • U R                  U5      nUR                  SSS9u  p4UR                  5       nUR                  5       n[        R                  " U5      R                  SS9n[        R                  " X45      n[        R                  R                  XPR                  SSS9R                  SS5      nX`R                  S S S 2S 4   -  nUR                  S   nUS-
  U R                  -  U R                  -   n[        R                  " USU4SU R                  4SU R                  4S	9S S 2S
S
U R                   U R                   * 24   n	[        R                  " U R                  R#                  5       R%                  SUS5      R                  SS5      SU4SU R                  4SU R                  4S	9R'                  5       U R                   U R                   *  n
U
R                  SS9n
Xš-  n	U	R)                  S5      $ )Nr   rf   rm   g      Y@)ÚmaxÚbackward)rb   Únormr   )Úoutput_sizer  r.  r   g•dyáý¥=)Úmin)rÄ  Úchunkr^   r)   r  ÚclampÚpolarÚfftÚirfftrÃ  rs   rÇ  ro   rÅ  r8  Úfoldr_  Úsquarern   Úsqueezerž   )rO   r“   Ú	stft_predÚ	magnitudeÚphaseÚspectrogram_complexÚtime_framesÚ
num_framesrÍ  ÚaudioÚwindow_envelopes              r0   r}   ÚXcodec2ISTFTHead.forwardû  sÍ  € Ø—K‘K Ó.ˆ	à$Ÿ?™?¨1°"˜?Ð5Ñˆ	à—O‘OÓ%ˆ	Ø—‘“ˆä—I’I˜iÓ(×.Ñ.°3Ð.Ð7ˆ	Ü#Ÿkšk¨)Ó;Ðô —i‘i—o‘oÐ&9¿:¹:È2ÐT^�oÐ_×iÑiÐjkÐmnÓoˆØ!§K¡K°²a¸°Ñ$>Ñ>ˆØ(×.Ñ.¨qÑ1ˆ
Ø! A‘~¨¯©Ñ8¸4¿:¹:ÑEˆÜ—’ØØ˜KÐ(Ø˜DŸJ™J˜Ø�t—‘Ð'ñ	
ò
 ˆQ��4—<‘< 4§<¡< -Ð/Ð
/ñ1ˆô Ÿ&š&Ø�K‰K×ÑÓ ×'Ñ'¨¨:°rÓ:×DÑDÀQÈÓJØ˜KÐ(Ø˜DŸJ™J˜Ø�t—‘Ð'ñ	
÷
 ‰'‹)�D—L‘L D§L¡L =ð2ˆð *×/Ñ/°EÐ/Ð:ˆØÑ'ˆØ�‰˜qÓ!Ð!r/   )rÅ  rÄ  rÃ  r_  rÇ  ©r$   r%   r&   r'   r(   r   rC   r)   r-   r}   r.   rƒ   r„   s   @r0   rÁ  rÁ  ê  s4   ø† ñð:˜}÷ :ð"" U§\¡\ð ""°e·l±l÷ ""ò ""r/   rÁ  c                   óÂ   ^ • \ rS rSrS\4U 4S jjrS\R                  S\R                  4S jrS\R                  S\	\R                  \R                  4   4S jr
S	rU =r$ )
ÚXcodec2Quantizeri   r<   c                 ó&  >• [         TU ]  5         [        U5      U l        [        R
                  " UR                  [        UR                  5      5      U l	        [        R
                  " [        UR                  5      UR                  5      U l
        g r   )rB   rC   r™  Ú	quantizerrJ   r�   Úquantization_dimr�  rœ  Ú
project_inÚproject_outr‘   s     €r0   rC   ÚXcodec2Quantizer.__init__!  sa   ø€ Ü‰ÑÔÜ8¸Ó@ˆŒÜŸ)š) F×$;Ñ$;¼SÀ×A[ÑA[Ó=\Ó]ˆŒÜŸ9š9¤S¨×)CÑ)CÓ%DÀf×F]ÑF]Ó^ˆÕr/   r©  rS   c                 óx   • UR                  S5      nU R                  R                  U   nU R                  U5      $ ©Nrf   )rÖ  rä  r   rç  )rO   r©  r­  s      r0   Ú
from_codesÚXcodec2Quantizer.from_codes'  s5   € Ø—/‘/ "Ó%ˆØ—‘×'Ñ'¨Ñ0ˆØ×Ñ Ó&Ð&r/   r“   c                 ó   • U R                  U5      nUR                  nU R                  R                  U5      nU R                  U5      u  p4U R	                  UR                  U5      5      nUR                  S5      nX44$ rê  )ræ  rY   rä  r·  rç  r_   rž   )rO   r“   r¼  Úquantized_outr©  s        r0   r}   ÚXcodec2Quantizer.forward,  st   € ØŸ™¨Ó6ˆØ&×,Ñ,ˆØŸ™×,Ñ,¨]Ó;ˆØ!%§¡°Ó!>ÑˆØ×(Ñ(¨×)9Ñ)9¸.Ó)IÓJˆØ×#Ñ# BÓ'ˆØÐ%Ð%r/   )ræ  rç  rä  )r$   r%   r&   r'   r   rC   r)   r-   rë  r�   r}   r.   rƒ   r„   s   @r0   râ  râ     sZ   ø† ð_˜}÷ _ð' %§,¡,ð '°5·<±<ô 'ð
& U§\¡\ð &°e¸E¿L¹LÈ%Ï,É,Ð<VÑ6W÷ &ò &r/   râ  c                   ón   ^ • \ rS rSrSrS\4U 4S jjrS\R                  S\R                  4S jr	Sr
U =r$ )	ÚXcodec2Decoderi6  zVVocos-based decoder with ResNet, Transformer, and ISTFT head for audio reconstruction.r<   c           	      ó  >• [         TU ]  5         [        R                  " UR                  UR
                  R                  -   UR                  5      U l        [        R                  " UR                  UR                  SSS9U l        [        R                  " [        U5      [        U5      /5      U l        UR                  U l        [        US9U l        [        R                  " [        UR                   5       Vs/ s H  n[#        X5      PM     sn5      U l        [        R                  " [        U5      [        U5      /5      U l        [        R(                  " UR                  SS9U l        [-        U5      U l        g s  snf )Nr]  r   r|  )r<   ró   r÷   )rB   rC   rJ   r�   r[   Úsemantic_model_configÚfcra  Úembedr€  r‡  Ú	prior_netr\   r8   Ú
rotary_embÚrangeÚnum_hidden_layersrõ   ÚlayersÚpost_netÚ	LayerNormrÌ  rÁ  ÚheadrÏ   s      €r0   rC   ÚXcodec2Decoder.__init__9  s!  ø€ Ü‰ÑÔÜ—)’)˜F×.Ñ.°×1MÑ1M×1YÑ1YÑYÐ[a×[mÑ[mÓnˆŒÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÐSTÐ^_Ñ`ˆŒ
ÜŸšÔ(:¸6Ó(BÔDVÐW]ÓD^Ð'_Ó`ˆŒØ#)×#=Ñ#=ˆÔ Ü0¸Ñ?ˆŒÜ—m’mÜEJÈ6×KcÑKcÔEdÓeÒEd¸	Ô  Ö3ÑEdÑeó
ˆŒô ŸšÔ'9¸&Ó'AÔCUÐV\ÓC]Ð&^Ó_ˆŒÜ—L’L ×!3Ñ!3¸Ñ>ˆŒ	Ü$ VÓ,ˆ�	ùò	 fs   Ã<Fr“   rS   c                 ó  • U R                  U5      nUR                  SS5      nU R                  U5      nUR                  SS5      nU R                   H  nU" U5      nM     [        R
                  " U R                  UR                  S9R                  S5      nU R                  X5      nU R                   H  nU" U4SU0UD6nM     U R                   H  nU" U5      nM     U R                  U R                  U5      5      $ )Nr   r   r£  r   rÑ   )rô  rs   rõ  rö  r)   r]   r\   r:   rž   r÷  rú  rû  rý  rÌ  )rO   r“   r`   Úlayerrx   rÑ   s         r0   r}   ÚXcodec2Decoder.forwardG  sí   € ØŸ™ Ó.ˆØ%×/Ñ/°°1Ó5ˆØŸ
™
 =Ó1ˆØ%×/Ñ/°°1Ó5ˆð —^”^ˆEÙ! -Ó0ŠMñ $ô —|’| D×$<Ñ$<À]×EYÑEYÑZ×dÑdÐefÓgˆØ"Ÿo™o¨mÓJÐØ—[”[ˆEÙ! -ÑcÐEXÐcÐ\bÑcŠMñ !ð —]”]ˆEÙ! -Ó0ŠMñ #ð �y‰y˜Ÿ™ =Ó1Ó2Ð2r/   )	rõ  rô  rý  rú  rÌ  r\   rû  rö  r÷  rà  r„   s   @r0   rñ  rñ  6  s2   ø† Ù`ð-˜}÷ -ð3 U§\¡\ð 3ÀÇÁ÷ 3ò 3r/   rñ  c                   ój   ^ • \ rS rSrS\4U 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )ÚXcodec2SemanticAdapterib  r<   c                 ó²  >• [         TU ]  5         [        R                  " UR                  R
                  UR                  R
                  SSSS9U l        [        R                  " 5       U l        [        R                  " UR                  R
                  UR                  R
                  SSSS9U l	        [        R                  " 5       U l
        [        R                  " UR                  R
                  UR                  R
                  SSSS9U l        [        R                  " UR                  R
                  UR                  R
                  SSSS9U l        g )Nr   r   F)Úin_channelsÚout_channelsr  r_  rŠ   T)r  r_  rŠ   )rB   rC   rJ   ra  ró  r[   rb  ÚReLUÚact1rd  Úact2Úconv3Úconv4r‘   s     €r0   rC   ÚXcodec2SemanticAdapter.__init__c  s
  ø€ Ü‰ÑÔÜ—Y’YØ×4Ñ4×@Ñ@Ø×5Ñ5×AÑAØØØñ
ˆŒ
ô —G’G“IˆŒ	Ü—Y’YØ×(Ñ(×4Ñ4Ø×(Ñ(×4Ñ4ØØØñ
ˆŒ
ô —G’G“IˆŒ	Ü—Y’YØ×(Ñ(×4Ñ4Ø×(Ñ(×4Ñ4ØØØñ
ˆŒ
ô —Y’YØ×4Ñ4×@Ñ@Ø×5Ñ5×AÑAØØØñ
ˆ�
r/   r“   rS   c                 óÞ   • U R                  U5      nU R                  U5      nUnU R                  U5      nU R                  U5      nU R	                  U5      nX-   nU R                  U5      nU$ r   )rb  r  rd  r	  r
  r  r–  s      r0   r}   ÚXcodec2SemanticAdapter.forward„  si   € ØŸ
™
 =Ó1ˆØŸ	™	 -Ó0ˆØ ˆØŸ
™
 =Ó1ˆØŸ	™	 -Ó0ˆØŸ
™
 =Ó1ˆØ%Ñ0ˆØŸ
™
 =Ó1ˆØÐr/   )r  r	  rb  rd  r
  r  r—   r„   s   @r0   r  r  b  s0   ø† ð
˜}÷ 
ðB	 U§\¡\ð 	°e·l±l÷ 	ò 	r/   r  c                   óp   ^ • \ rS rSr% \\S'   SrSrSrSr	S/r
SrSrSrSrSrSrSr\\S	.rU 4S
 jrSrU =r$ )ÚXcodec2PreTrainedModeli�  r<   Úxcodec2)rÝ  TNrÒ   Úinput_values)r“   Ú
attentionsc                 óP  >• [         TU ]  U5        [        U[        5      (       aA  [        R
                  " UR                  5        [        R
                  " UR                  5        g [        U[        5      (       aB  [        R                  " UR                  5      n[        R                  " UR                  U5        g [        U[        5      (       aŠ  UR                  UR                   R"                  S9u  p4n[        R                  " UR                   U5        [        R                  " UR$                  U5        [        R                  " UR&                  U5        g [        U[(        5      (       aS  [+        SUR,                  -  SUR,                  -  UR.                  5      n[        R                  " UR0                  U5        g [        U[2        5      (       aM  [+        UR4                  UR6                  UR.                  5      n[        R                  " UR0                  U5        g g )Nr£  r  r)  )rB   Ú_init_weightsrp   r  ÚinitÚzeros_r	  r
  rÁ  r)   rÆ  rÃ  Úcopy_rÇ  r™  r�  rž  r:   rŸ  r   rA  r%  r0  r  r/  r'  r  r  )rO   r¬   rÇ  rž  rŸ  r   Úfilter_tensorrQ   s          €r0   r  Ú$Xcodec2PreTrainedModel._init_weights¤  sc  ø€ Ü‰Ñ˜fÔ%Ü�fÔ.×/Ñ/Ü�KŠK˜Ÿ™Ô%Ü�KŠK˜Ÿ™Õ$Ü˜Ô 0×1Ñ1Ü×&Ò& v§|¡|Ó4ˆFÜ�JŠJ�v—}‘} fÕ-Ü˜Ô ?×@Ñ@Ø&,×&=Ñ&=ÀVÇ]Á]×EYÑEYÐ&=Ð&ZÑ#ˆF˜8Ü�JŠJ�v—}‘} fÔ-Ü�JŠJ�v—|‘| UÔ+Ü�JŠJ�v—‘¨Õ1Ü˜Ô 1×2Ñ2Ü0°°v·|±|Ñ1CÀSÈ6Ï<É<ÑEWÐY_×YkÑYkÓlˆMÜ�JŠJ�v—}‘} mÕ4Ü˜Ô 3×4Ñ4Ü0°·±À×@QÑ@QÐSY×SeÑSeÓfˆMÜ�JŠJ�v—}‘} mÕ4ð 5r/   r#   )r$   r%   r&   r'   r   r+   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_cache_classÚ_supports_attention_backendÚ_can_compile_fullgraphÚmain_input_namerõ   Ú_can_record_outputsr  r.   rƒ   r„   s   @r0   r  r  �  sj   ø‡ àÓØ!ÐØ!ÐØ&*Ð#ØÐØ#4Ð"5ÐØÐØ€NØÐØ ÐØ"&ÐØ!ÐØ$€Oà,Ø)ñÐ÷
5ó 5r/   r  z!Xcodec2 neural audio codec model.)Úcustom_introc                   ó  ^ • \ rS rSr\rS\4U 4S jjr\\   SS\	R                  S\	R                  S\	R                  S-  S\	R                  S-  S	\S
\\   S\\-  4S jj5       5       r\\  SS\	R                  S-  S\	R                  S-  S
\\   S\\-  4S jj5       5       r\\   SS\	R                  S\	R                  S\	R                  S-  S\	R                  S-  S	\S
\\   S\\-  4S jj5       5       rSrU =r$ )ÚXcodec2Modeli¹  r<   c                 óì  >• [         TU ]  U5        UR                  U l        [        R                  " UR
                  5      U l        [        U5      U l        [        U5      U l
        [        R                  " UR                  UR
                  R                  -   UR                  UR
                  R                  -   5      U l        [        U5      U l        [#        U5      U l        U R'                  5         g r   )rB   rC   rÅ  r   Úfrom_configró  Úsemantic_encoderr  Úsemantic_adapterrz  Úacoustic_encoderrJ   r�   r[   Ú
fc_encoderrâ  rä  rñ  Úacoustic_decoderÚ	post_initr‘   s     €r0   rC   ÚXcodec2Model.__init__½  s¹   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ )× 5Ò 5°f×6RÑ6RÓ SˆÔÜ 6°vÓ >ˆÔÜ .¨vÓ 6ˆÔÜŸ)š)Ø×Ñ ×!=Ñ!=×!IÑ!IÑIØ×Ñ ×!=Ñ!=×!IÑ!IÑIó
ˆŒô *¨&Ó1ˆŒÜ .¨vÓ 6ˆÔà�‰Õr/   Nr  Úinput_featuresÚpadding_maskÚinput_features_maskÚoutput_latentsr`   rS   c                 ó   • [         R                  " 5          U R                  X$S9nSSS5        WR                  R	                  SS5      nU R                  U5      nU R                  U5      n	[         R                  " X‰/SS9n
U R                  U
R	                  SS5      5      n
U R                  U
5      u  p¼UR	                  SS5      nUR	                  SS5      nSnUbx  UR                  SSS9nXàR                  -  n[         R                  " UR                  S   UR                  S	9R                  SS5      nUU:  R!                  UR"                  5      n[%        UU(       a  UUS
9$ SUS
9$ ! , (       d  f       GNO= f)a°  
input_values (`torch.Tensor` of shape `(batch_size, 1, sequence_length)`):
    Input audio waveform.
input_features (`torch.Tensor` of shape `(batch_size, mel_bins, time_steps)`):
    Input audio mel spectrogram for semantic encoding.
padding_mask (`torch.Tensor` of shape `(batch_size, 1, sequence_length)`):
    Padding mask used to pad `input_values`.
input_features_mask (`torch.Tensor` of shape `(batch_size, time_steps)`, *optional*):
    Attention mask for the spectrogram input to the semantic encoder. `1` for valid frames, `0` for padding.
output_latents (`bool`, *optional*, defaults to `False`):
    Whether to return the continuous latent representation from the quantizer.
)r°   Nr   r   rm   rf   T)rb   ré   r£  )r    r!   r"   )r)   r‚   r-  Úlast_hidden_staters   r.  r/  rt   r0  rä  r  rÅ  r]   ro   r:   rÕ   r_   rY   r2   )rO   r  r4  r5  r6  r7  r`   Úsemantic_outputÚsemantic_hidden_statesÚacoustic_hidden_statesr“   r!   r    r"   Úaudio_lengthÚtoken_lengthÚidxs                    r0   ÚencodeÚXcodec2Model.encodeÍ  sv  € ô2 �]Š]�_Ø"×3Ñ3°NÐ3ÐgˆO÷ à!0×!BÑ!B×!LÑ!LÈQÐPQÓ!RÐØ!%×!6Ñ!6Ð7MÓ!NÐð "&×!6Ñ!6°|Ó!DÐÜŸ	š	Ð#9Ð"RÐXYÑZˆØŸ™¨×(?Ñ(?ÀÀ1Ó(EÓFˆð  $Ÿ~™~¨mÓ<ÑˆØ×#Ñ# A qÓ)ˆØ!×+Ñ+¨A¨qÓ1ˆð  ÐØÑ#Ø'×+Ñ+°¸DÐ+ÐAˆLØ'¯?©?Ñ:ˆLÜ—,’,˜{×0Ñ0°Ñ4¸\×=PÑ=PÑQ×VÑVÐWXÐZ\Ó]ˆCØ # lÑ 2×6Ñ6°|×7IÑ7IÓJÐä#Ø#Þ-�GØ-ñ
ð 	
à37Ø-ñ
ð 	
÷/ Ž_ús   –E.Å.
E=r    r!   c                 óÞ   • Uc  Uc  [        S5      eUb,  U R                  R                  UR                  SS5      5      nOUR                  SS5      nU R                  " U40 UD6n[        US9$ )a  
audio_codes (`torch.LongTensor`  of shape `(batch_size, 1, codes_length)`):
    Discrete code indices computed using `model.encode`.
latents (torch.Tensor of shape `(batch_size, dimension, time_steps)`, *optional*):
    Quantized continuous representation of input.
z3Either `latents` or `audio_codes` must be provided.r   r   )r   )r*  rä  rë  rs   r1  r5   )rO   r    r!   r`   Úrecon_audios        r0   ÚdecodeÚXcodec2Model.decode  ss   € ð ‰?˜{Ñ2ÜÐRÓSÐSàÑ"Ø—n‘n×/Ñ/°×0EÑ0EÀaÈÓ0KÓL‰Gà×'Ñ'¨¨1Ó-ˆGà×+Ò+¨GÑ>°vÑ>ˆÜ#°Ñ=Ð=r/   c           	      ó   • UR                   S   nU R                  UUUUSSS9nU R                  " S	UR                  SS.UD6S   SSU24   n	[	        U	UR
                  U(       a  UR                  OSUR                  S9$ )
aG  
input_values (`torch.Tensor` of shape `(batch_size, 1, sequence_length)`):
    Input audio waveform.
input_features (`torch.Tensor` of shape `(batch_size, mel_bins, time_steps)`):
    Input audio mel spectrogram for semantic encoding.
padding_mask (`torch.Tensor` of shape `(batch_size, 1, sequence_length)`):
    Padding mask used to pad `input_values`.
input_features_mask (`torch.Tensor` of shape `(batch_size, time_steps)`, *optional*):
    Attention mask for the spectrogram input to the semantic encoder. `1` for valid frames, `0` for padding.
output_latents (`bool`, *optional*, defaults to `False`):
    Whether to return the continuous latent representation from the quantizer.

Examples:

```python
>>> from datasets import load_dataset
>>> from transformers import AutoFeatureExtractor, Xcodec2Model

>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> audio = dataset["train"]["audio"][0]["array"]

>>> model_id = "HKUSTAudio/xcodec2-hf"
>>> model = Xcodec2Model.from_pretrained(model_id)
>>> feature_extractor = AutoFeatureExtractor.from_pretrained(model_id)

>>> inputs = feature_extractor(audio=audio, sampling_rate=feature_extractor.sampling_rate, return_tensors="pt")

>>> outputs = model(**inputs)
>>> audio_codes = outputs.audio_codes
>>> audio_values = outputs.audio_values
```rf   T)r4  r5  r6  r7  Úreturn_dict)r!   rG  r   .N)r   r    r!   r"   r#   )ro   r@  rD  r!   r   r    r"   )
rO   r  r4  r5  r6  r7  r`   ÚlengthÚencoder_outputsr   s
             r0   r}   ÚXcodec2Model.forward  s£   € ðV ×#Ñ# BÑ'ˆàŸ+™+ØØ)Ø%Ø 3ØØð &ð 
ˆð —{’{Ð_¨?×+BÑ+BÐPTÑ_ÐX^Ñ_Ð`aÑbÐcfÐhoÐioÐhoÐcoÑpˆäØ%Ø'×3Ñ3Þ/=�O×+Ò+À4Ø,×=Ñ=ñ	
ð 	
r/   )r1  r/  r0  rÅ  rä  r.  r-  )NNF)NN)r$   r%   r&   r'   r   Úconfig_classrC   r   r   r)   r-   r  r   r   r�   r2   r@  r5   rD  r   r}   r.   rƒ   r„   s   @r0   r*  r*  ¹  sž  ø† à €Lð˜}÷ ð  Øð
 -1Ø37Ø$ñ2
à—l‘lð2
ð Ÿ™ð2
ð —l‘l TÑ)ð	2
ð
 #Ÿ\™\¨DÑ0ð2
ð ð2
ð Ð+Ñ,ð2
ð 
Ð%Ñ	%ô2
ó ó ð2
ðh Øð ,0Ø'+ñ>à—\‘\ DÑ(ð>ð —‘ Ñ$ð>ð Ð+Ñ,ð	>ð
 
Ð%Ñ	%ô>ó ó ð>ð. Øð
 -1Ø37Ø$ñ:
à—l‘lð:
ð Ÿ™ð:
ð —l‘l TÑ)ð	:
ð
 #Ÿ\™\¨DÑ0ð:
ð ð:
ð Ð+Ñ,ð:
ð 
�Ñ	ô:
ó ó ö:
r/   r*  )r   )rÔ   )Pr  Úcollections.abcr   Údataclassesr   Únumpyr§  r)   Útorch.nnrJ   Útorch.nn.functionalrº   r8  r   Ú r   r  Úactivationsr   Úcache_utilsr	   Úintegrationsr
   r   Úmodeling_layersr   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.deprecationr   Úutils.genericr   Úautor   Úconfiguration_xcodec2r   r   r2   r5   ÚModuler8   r†   r›   r¤   r-   rÞ   r«   r^   rÂ   rÄ   rá   rõ   r  r%  r'  rA  rI  rZ  rl  rz  r‡  r™  rÁ  râ  rñ  r  r  r*  Ú__all__r#   r/   r0   Ú<module>r`     s  ðó( Ý $Ý !ã Û Ý ß Ð Ý å &Ý !Ý  ß LÝ 9ß Kß FÝ &ß VÓ VÝ 0Ý +Ý Ý 0ð Ø
ô1�Kó 1ó ó ð1ð( Ø
ô1˜;ó 1ó ó ð1ð" Ø
ô2˜;ó 2ó ó ð2ô6<˜RŸY™Yô 6<ôr�—‘ô ò(ñ Ð-Ó.óó /ðð2	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ô 	Uð& ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ð%ð Ð'Ñ(õ%ñ2 Ð)Ó*ôC)�r—y‘yó C)ó +ðC)ñL ˜YÓ'ôJ�R—Y‘Yó Jó (ðJô((Ð4ô (ôV&�r—y‘yô &òR+5ô\˜"Ÿ)™)ô ôD˜Ÿ	™	ô ô6 R§Y¡Yô ô0!˜"Ÿ)™)ô !ôH˜"Ÿ)™)ô ô.�R—Y‘Yô ô@:˜Ÿ™ô :ô0P1 b§i¡iô P1ôf3"�r—y‘yô 3"ôl&�r—y‘yô &ô,)3�R—Y‘Yô )3ôX+˜RŸY™Yô +ð\ ô%5˜_ó %5ó ð%5ñP Ð@ÑAô^
Ð)ó ^
ó Bð^
ðB Ð3Ð
4�r/   