Ë
    ÜÓ^j€„  ã                   ó.  — d dl mZ d dlmZ d dlZd dlZd dlmZ d dl	mc m
Z d dlmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZmZmZmZ ddlm Z  ddl!m"Z"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:  ed¬«      e G d„ de,«      «       «       Z;ee G d„ de«      «       «       Z<ee G d„ de«      «       «       Z=ee G d„ de«      «       «       Z> G d„ d e0«      Z? G d!„ d"e&«      Z@ G d#„ d$e.«      ZA G d%„ d&e/«      ZB G d'„ d(e6«      ZC G d)„ d*e5«      ZD G d+„ d,e7«      ZE G d-„ d.e4«      ZF G d/„ d0e*«      ZG G d1„ d2e)«      ZH G d3„ d4e(«      ZI G d5„ d6ej”                  «      ZK G d7„ d8ej”                  «      ZL G d9„ d:ej”                  «      ZM G d;„ d<ej”                  «      ZN G d=„ d>ej”                  «      ZO G d?„ d@ej”                  «      ZP G dA„ dBe:«      ZQ edC¬D«       G dE„ dFeQ«      «       ZRg dG¢ZSy)Hé    )ÚCallable)Ú	dataclassN)Ústricté   )Úinitialization)ÚCache)ÚPreTrainedConfig)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Úmaybe_autocasté   )ÚCONFIG_MAPPINGÚ
AutoConfigÚ	AutoModel)ÚCLIPMLP)Ú
DacEncoderÚDacEncoderBlockÚDacResidualUnit)ÚLlamaConfig)ÚLlamaAttentionÚLlamaDecoderLayerÚLlamaRotaryEmbeddingÚapply_rotary_pos_embÚeager_attention_forward)Ú"Qwen2_5OmniAntiAliasedActivation1dÚQwen2_5OmniDownSample1dÚQwen2_5OmniSnakeBetaÚQwen2_5OmniUpSample1dÚkaiser_sinc_filter1d)ÚVoxtralPreTrainedModelzHKUSTAudio/xcodec2-hf)Ú
checkpointc                   óÈ  ‡ — e Zd ZU dZdZdeiZdZee	d<   dZ
ee   eedf   z  e	d<   d	Zeez  d	z  e	d<   d
Zee	d<   dZee	d<   dZee	d<   dZee   eedf   z  e	d<   dZee	d<   dZee	d<   dZee	d<   dZee	d<   dZee	d<   dZee	d<   dZee	d<    e«       Z e«       Z e«       Z e«       Z  e«       Z! e«       Z" e«       Z# e«       Z$ˆ fd„Z%e&defd „«       Z'e&defd!„«       Z(ˆ xZ)S )"ÚXcodec2Configa©  
    downsampling_ratios (`list[int]`, *optional*, defaults to `[2, 2, 4, 4, 5]`):
        Ratios for downsampling in the encoder.
    semantic_model_config (`Union[Dict, Wav2Vec2BertConfig]`, *optional*):
        An instance of the configuration object for the semantic (Wav2Vec2BertConfig) model.
    quantization_dim (`int`, *optional*, defaults to 2048):
        Dimension for the vector quantization codebook.
    quantization_levels (`list[int]`, *optional*, defaults to `[4, 4, 4, 4, 4, 4, 4, 4]`):
        Levels for the vector quantization codebook.

    Example:

    ```python
    >>> from transformers import Xcodec2Config, Xcodec2Model

    >>> # Initializing configuration
    >>> configuration = Xcodec2Config()

    >>> # Initializing a model (with random weights) from the configuration
    >>> model = Xcodec2Model(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```Úxcodec2Úsemantic_model_configé0   Úencoder_hidden_size)r   r   é   r-   é   .Údownsampling_ratiosNi€>  Úsampling_rategš™™™™™¹?Úactivation_dropouti   Úquantization_dim)r-   r-   r-   r-   r-   r-   r-   r-   Úquantization_levelsi   Úhidden_sizei   Úintermediate_sizeé   Únum_attention_headsÚnum_key_value_headsé   Únum_hidden_layersé@   Úhead_dimÚmax_position_embeddingsc                 ó@  •— t        | j                  t        «      rT| j                  j                  dd«      | j                  d<   t	        | j                  d      di | j                  ¤Ž| _        n | j                  €t	        d   d¬«      | _        t        ‰| �  di |¤Ž y )NÚ
model_typezwav2vec2-bertr6   )r:   © )Ú
isinstancer*   ÚdictÚgetr   ÚsuperÚ__post_init__)ÚselfÚkwargsÚ	__class__s     €úv/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/xcodec2/modular_xcodec2.pyrE   zXcodec2Config.__post_init__n   s•   ø€ Ü�d×0Ñ0´$Ô7Ø7;×7QÑ7Q×7UÑ7UÐVbÐdsÓ7tˆD×&Ñ& |Ñ4Ü)7¸×8RÑ8RÐS_Ñ8`Ñ)añ *Ø×,Ñ,ñ*ˆDÕ&ð ×'Ñ'Ð/Ü)7¸Ñ)HÐ[]Ô)^ˆDÔ&ä‰ÑÑ' Ó'ó    Úreturnc                 óR   — t        t        j                  | j                  «      «      S ©N)ÚintÚnpÚprodr/   ©rF   s    rI   Ú
hop_lengthzXcodec2Config.hop_lengthy   s   € ä”2—7‘7˜4×3Ñ3Ó4Ó5Ð5rJ   c                 ó    — | j                   dz  S )Nr-   )rR   rQ   s    rI   Ún_fftzXcodec2Config.n_fft}   s   € à�‰ Ñ"Ð"rJ   )*Ú__name__Ú
__module__Ú__qualname__Ú__doc__r?   r   Úsub_configsr,   rN   Ú__annotations__r/   ÚlistÚtupler*   rB   r	   r0   r1   Úfloatr2   r3   r4   r5   r7   r8   r:   r<   r=   ÚAttributeErrorÚ
vocab_sizeÚbos_token_idÚeos_token_idÚpretraining_tpÚmlp_biasÚ	use_cacheÚbase_model_tp_planÚbase_model_pp_planrE   ÚpropertyrR   rT   Ú__classcell__©rH   s   @rI   r(   r(   8   sZ  ø… ñð2 €JØ*¨JÐ7€Kà!Ð˜Ó!Ø7FÐ˜˜c™ U¨3°¨8¡_Ñ4ÓFØ<@Ð˜4Ð"2Ñ2°TÑ9Ó@Ø€M�3ÓØ #Ð˜Ó#Ø Ð�cÓ Ø7OÐ˜˜c™ U¨3°¨8¡_Ñ4ÓOØ€K�ÓØ!Ð�sÓ!Ø!Ð˜Ó!Ø!Ð˜Ó!ØÐ�sÓØ€HˆcÓØ#'Ð˜SÓ'ÙÓ!€JÙ!Ó#€LÙ!Ó#€LÙ#Ó%€NÙÓ€HÙÓ €IÙ'Ó)ÐÙ'Ó)Ðô	(ð ð6˜Cò 6ó ð6ð ð#�sò #ó ô#rJ   r(   c                   ó²   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ
ej                  dz  ed<   dZej                  dz  ed<   y)ÚXcodec2OutputaL  
    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)rU   rV   rW   rX   rl   ÚtorchÚFloatTensorrZ   rm   Ú
LongTensorrn   ÚTensorro   r@   rJ   rI   rk   rk   ‚   sZ   … ñð .2€L�%×#Ñ# dÑ*Ó1Ø+/€K�×!Ñ! DÑ(Ó/Ø#'€GˆU�\‰\˜DÑ Ó'Ø,0Ð�e—l‘l TÑ)Ô0rJ   rk   c                   óŠ   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ
ej                  dz  ed<   y)ÚXcodec2EncoderOutputat  
    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`.
    Nrm   rn   ro   )rU   rV   rW   rX   rm   rp   rr   rZ   rn   rs   ro   r@   rJ   rI   ru   ru   ˜   sE   … ñ	ð ,0€K�×!Ñ! DÑ(Ó/Ø#'€GˆU�\‰\˜DÑ Ó'Ø,0Ð�e—l‘l TÑ)Ô0rJ   ru   c                   ó:   — e Zd ZU dZdZej                  dz  ed<   y)ÚXcodec2DecoderOutputa=  
    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.
    Nrl   )rU   rV   rW   rX   rl   rp   rq   rZ   r@   rJ   rI   rw   rw   «   s   … ñð .2€L�%×#Ñ# dÑ*Ô1rJ   rw   c                   ó   — e Zd Zy)ÚXcodec2RotaryEmbeddingN©rU   rV   rW   r@   rJ   rI   ry   ry   ¸   ó   „ ØrJ   ry   c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )Ú
Xcodec2MLPÚconfigc                 óè   •— t         ‰| �  |«       t        j                  |j                  |j
                  d¬«      | _        t        j                  |j
                  |j                  d¬«      | _        y )NF)Úbias)rD   Ú__init__ÚnnÚLinearr4   r5   Úfc1Úfc2©rF   r~   rH   s     €rI   r�   zXcodec2MLP.__init__½   sR   ø€ Ü‰Ñ˜Ô Ü—9‘9˜V×/Ñ/°×1IÑ1IÐPUÔVˆŒÜ—9‘9˜V×5Ñ5°v×7IÑ7IÐPUÔVˆ�rJ   ©rU   rV   rW   r(   r�   rh   ri   s   @rI   r}   r}   ¼   s   ø„ ðW˜}÷ Wñ WrJ   r}   c                   óô   ‡ — e Zd Zdedefˆ fd„Z	 	 	 ddej                  deej                  ej                  f   dz  dej                  dz  de	dz  d	e
e   d
eej                  ej                  f   fd„Zˆ xZS )ÚXcodec2Attentionr~   Ú	layer_idxc                 ó4   •— t         ‰| �  ||«       d| _        y )NF)rD   r�   Ú	is_causal©rF   r~   rŠ   rH   s      €rI   r�   zXcodec2Attention.__init__Ä   s   ø€ Ü‰Ñ˜ Ô+Øˆ�rJ   NÚhidden_statesÚposition_embeddingsÚattention_maskÚpast_key_valuesrG   rK   c                 ó  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }	| j                  |«      j                  |«      j	                  dd«      }
|\  }}t        ||	||d¬«      \  }}	|� |j                  |	|
| j                  «      \  }	}
t        j                  | j                  j                  t        «      } || ||	|
|f| j                  sdn| j                   | j"                  dœ|¤Ž\  }} |j$                  g |¢d‘­Ž j'                  «       }| j)                  |«      }||fS )Néÿÿÿÿé   r   )Úunsqueeze_dimç        )ÚdropoutÚscaling)Úshaper<   Úq_projÚviewÚ	transposeÚk_projÚv_projr   ÚupdaterŠ   r
   Úget_interfacer~   Ú_attn_implementationr   ÚtrainingÚattention_dropoutr˜   ÚreshapeÚ
contiguousÚo_proj)rF   rŽ   r�   r�   r‘   rG   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚcosÚsinÚattention_interfaceÚattn_outputÚattn_weightss                   rI   Úforwardz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ˆà&‰ˆˆSô $8¸ÀjÐRUÐWZÐjkÔ#lÑ ˆ�jàÐ&Ø'6×'=Ñ'=¸jÈ,ÐX\×XfÑXfÓ'gÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(rJ   )NNN)rU   rV   rW   r(   rN   r�   rp   rs   r\   r   r   r   r±   rh   ri   s   @rI   r‰   r‰   Ã   s¢   ø„ ð˜}ð ¸õ ð IMØ.2Ø(,ñ))à—|‘|ð))ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð))ð Ÿ™ tÑ+ð	))ð
  ™ð))ð Ð+Ñ,ð))ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷))rJ   r‰   c                   ó   — e Zd Zy)ÚXcodec2DecoderLayerNrz   r@   rJ   rI   r³   r³   ô   r{   rJ   r³   c                   ó   — e Zd Zy)ÚXcodec2SnakeBetaNrz   r@   rJ   rI   rµ   rµ   ø   r{   rJ   rµ   c                   ó   — e Zd Zd„ Zy)ÚXcodec2DownSample1dc                 ó.  — |j                   d   }t        j                  || j                  | j                  fd¬«      }t        j
                  || j                  j                  |j                  «      j                  |dd«      | j                  |¬«      }|S )Nr”   Ú	replicate©Úmoder“   ©ÚstrideÚgroups)r™   ÚFÚpadÚpad_leftÚ	pad_rightÚconv1dÚfilterÚtoÚdtypeÚexpandr½   )rF   rŽ   ÚchannelsÚouts       rI   r±   zXcodec2DownSample1d.forwardý   sy   € Ø ×&Ñ& qÑ)ˆÜŸ™˜m¨d¯m©m¸T¿^¹^Ð-LÐS^Ô_ˆÜ�h‰hØà�K‰K�N‰N˜=×.Ñ.Ó/×6Ñ6°xÀÀRÓHØ—;‘;Øô
ˆð ˆ
rJ   N©rU   rV   rW   r±   r@   rJ   rI   r·   r·   ü   s   „ ó
rJ   r·   c                   ó   — e Zd Zd„ Zy)ÚXcodec2UpSample1dc           	      ó„  — |j                   d   }t        j                  || j                  | j                  fd¬«      }| j                  t        j                  || j
                  j                  |j                  «      j                  |dd«      | j                  |¬«      z  }|d| j                  | j                   …f   }|S )Nr”   r¹   rº   r“   r¼   .)r™   r¿   rÀ   ÚratioÚconv_transpose1drÄ   rÅ   rÆ   rÇ   r½   rÁ   rÂ   )rF   rŽ   rÈ   s      rI   r±   zXcodec2UpSample1d.forward  s¤   € Ø ×&Ñ& qÑ)ˆÜŸ™˜m¨d¯h©h¸¿¹Ð-AÈÔTˆØŸ
™
¤Q×%7Ñ%7Øà�K‰K�N‰N˜=×.Ñ.Ó/×6Ñ6°xÀÀRÓHØ—;‘;Øô&
ñ 
ˆð & c¨4¯=©=¸D¿N¹N¸?Ð+JÐ&JÑKˆØÐrJ   NrÊ   r@   rJ   rI   rÌ   rÌ   
  s   „ órJ   rÌ   c            	       ó:   ‡ — e Zd Z	 	 	 	 ddedededefˆ fd„Zˆ xZS )ÚXcodec2AntiAliasedActivation1dÚup_ratioÚ
down_ratioÚup_kernel_sizeÚdown_kernel_sizec                 ór   •— t         ‰| �  |||||¬«       t        ||«      | _        t	        ||«      | _        y )N)Ú
activationrÒ   rÓ   rÔ   rÕ   )rD   r�   rÌ   Úupsampler·   Ú
downsample)rF   r×   rÒ   rÓ   rÔ   rÕ   rH   s         €rI   r�   z'Xcodec2AntiAliasedActivation1d.__init__  sE   ø€ ô 	‰ÑØ!ØØ!Ø)Ø-ð 	ô 	
ô *¨(°NÓCˆŒÜ-¨jÐ:JÓKˆ�rJ   )r   r   r9   r9   )rU   rV   rW   rN   r�   rh   ri   s   @rI   rÑ   rÑ     sI   ø„ ð ØØ Ø "ñLð ðLð ð	Lð
 ðLð ÷Lñ LrJ   rÑ   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚXcodec2ResidualUnitc                 óŽ   •— t         ‰| �  ||«       t        t        |«      ¬«      | _        t        t        |«      ¬«      | _        y )N©r×   )rD   r�   rÑ   rµ   Úsnake1Úsnake2)rF   Ú	dimensionÚdilationrH   s      €rI   r�   zXcodec2ResidualUnit.__init__.  s8   ø€ Ü‰Ñ˜ HÔ-Ü4Ô@PÐQZÓ@[Ô\ˆŒÜ4Ô@PÐQZÓ@[Ô\ˆ�rJ   )rU   rV   rW   r�   rh   ri   s   @rI   rÛ   rÛ   -  s   ø„ ÷]ð ]rJ   rÛ   c                   ó.   ‡ — e Zd Zddededefˆ fd„Zˆ xZS )ÚXcodec2EncoderBlockr~   r½   Ústride_indexc                 ó†   •— t         ‰| �  |||«       |j                  d|z  z  }t        t	        |dz  «      ¬«      | _        y ©Nr   rÝ   )rD   r�   r,   rÑ   rµ   rÞ   )rF   r~   r½   rä   rà   rH   s        €rI   r�   zXcodec2EncoderBlock.__init__5  sA   ø€ Ü‰Ñ˜ ¨Ô6Ø×.Ñ.°°L±Ñ@ˆ	Ü4Ô@PÐQZÐ^_ÑQ_Ó@`Ôaˆ�rJ   )r”   r”   )rU   rV   rW   r(   rN   r�   rh   ri   s   @rI   rã   rã   4  s'   ø„ ñb˜}ð b°cð bÈS÷ bñ brJ   rã   c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )ÚXcodec2Encoderr~   c                 ó¢   •— t         ‰| �  |«       |j                  dt        |j                  «      z  z  }t        t        |«      ¬«      | _        y ræ   )rD   r�   r,   Úlenr/   rÑ   rµ   rÞ   )rF   r~   Úd_modelrH   s      €rI   r�   zXcodec2Encoder.__init__<  sC   ø€ Ü‰Ñ˜Ô Ø×,Ñ,¨q´C¸×8RÑ8RÓ4SÑ/SÑSˆÜ4Ô@PÐQXÓ@YÔZˆ�rJ   r‡   ri   s   @rI   rè   rè   ;  s   ø„ ð[˜}÷ [ñ [rJ   rè   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚXcodec2ResNetBlockr~   c                 ó  •— t         ‰| �  «        t        j                  d|j                  dd¬«      | _        t        j                  «       | _        t        j                  |j                  |j                  ddd¬«      | _	        t        j                  d|j                  dd¬«      | _
        t        j                  «       | _        |j                  | _        t        j                  |j                  |j                  ddd¬«      | _        y )Né    ç�íµ ÷Æ°>T)Ú
num_groupsÚnum_channelsÚepsÚaffiner   r”   )Úkernel_sizer½   Úpadding)rD   r�   r‚   Ú	GroupNormr4   Únorm1ÚSiLUÚactivation1ÚConv1dÚconv1Únorm2Úactivation2r1   Úconv2r†   s     €rI   r�   zXcodec2ResNetBlock.__init__C  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ˆ�
rJ   rŽ   rK   c                 óŒ  — |j                  dd«      }|}| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }t        j                  j                  || j                  | j                  ¬«      }| j                  |«      }||z   j                  dd«      S )Nr”   r   )Úpr¢   )rœ   rø   rú   rü   rý   rþ   r‚   Ú
functionalr—   r1   r¢   rÿ   ©rF   rŽ   Úresiduals      rI   r±   zXcodec2ResNetBlock.forwardM  s±   € Ø%×/Ñ/°°1Ó5ˆØ ˆØŸ
™
 =Ó1ˆØ×(Ñ(¨Ó7ˆØŸ
™
 =Ó1ˆØŸ
™
 =Ó1ˆØ×(Ñ(¨Ó7ˆÜŸ™×-Ñ-¨m¸t×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ
™
 =Ó1ˆØ Ñ(×3Ñ3°A°qÓ9Ð9rJ   ©	rU   rV   rW   r(   r�   rp   rs   r±   rh   ri   s   @rI   rí   rí   B  s,   ø„ ðk˜}õ kð
: U§\¡\ð 
:°e·l±l÷ 
:rJ   rí   c                   óü   ‡ — e Zd ZdZdefˆ fd„Zdd„Zdej                  dej                  fd„Z	ddej                  d	e
dej                  fd
„Zdej                  deej                  ej                  f   fd„Zˆ xZS )ÚXcodec2FiniteScalarQuantizationa!  
    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         ‰| �  «        t        |j                  «      | _        | j	                  «       \  }}}| j                  d|d¬«       | j                  d|d¬«       | j                  d|d¬«       y )NÚlevelsF©Ú
persistentÚbasisÚcodebook)rD   r�   r[   r3   Ú_compute_buffersÚregister_buffer)rF   r~   r	  r  r  rH   s        €rI   r�   z(Xcodec2FiniteScalarQuantization.__init__c  su   ø€ Ü‰ÑÔÜ#'¨×(BÑ(BÓ#CˆÔ Ø"&×"7Ñ"7Ó"9Ñˆ��xØ×Ñ˜X v¸%ÐÔ@Ø×Ñ˜W e¸ÐÔ>Ø×Ñ˜Z¨¸eÐÕDrJ   c                 óÆ  — t        j                  | j                  t         j                  |¬«      }t        j                  t        j                  dg| j                  dd z   |¬«      dt         j                  ¬«      }t        j
                  t        t        j                  | j                  «      «      |¬«      j                  d«      }||z  |z  }|dz  }||z
  |z  }|||fS )	zFCompute the levels, basis, and codebook buffers for the FSQ quantizer.)rÆ   Údevicer”   Nr“   ©r  r   )ÚdimrÆ   r   )
rp   Útensorr3   Úint32ÚcumprodÚarangerN   rO   rP   Ú	unsqueeze)rF   r  r	  r  ÚindicesÚlevel_indicesÚ
half_widthr  s           rI   r  z0Xcodec2FiniteScalarQuantization._compute_buffersk  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ˆØ  EÑ)¨VÑ3ˆØ˜q‘[ˆ
Ø! JÑ.°*Ñ<ˆØ�u˜hÐ&Ð&rJ   r  rK   c                 óŽ   — |j                  d«      }|| j                  z  | j                  z  }| j                  dz  }||z
  |z  }|S )z`
        Convert integer codebook indices to normalized per-dimension codes in [-1, 1].
        r“   r   )r  r  r	  )rF   r  r  r  Úcodess        rI   Ú_indices_to_codesz1Xcodec2FiniteScalarQuantization._indices_to_codesw  sM   € ð ×#Ñ# BÓ'ˆØ  D§J¡JÑ.°$·+±+Ñ=ˆØ—[‘[ AÑ%ˆ
Ø Ñ+¨zÑ9ˆØˆrJ   rŽ   ró   c                 óØ   — | j                   dz
  d|z   z  dz  }t        j                  | j                   dz  dk(  dd«      }||z  j                  «       }||z   j	                  «       |z  |z
  S )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	  rp   ÚwhereÚatanhÚtanh)rF   rŽ   ró   Ú
half_rangeÚoffsetÚshifts         rI   Úboundz%Xcodec2FiniteScalarQuantization.bound�  so   € ð" —k‘k A‘o¨!¨c©'Ñ2°QÑ6ˆ
Ü—‘˜TŸ[™[¨1™_°Ñ1°3¸Ó<ˆØ˜*Ñ$×+Ñ+Ó-ˆØ Ñ%×+Ñ+Ó-°
Ñ:¸VÑCÐCrJ   c                 ól  — |j                   }t        |j                  j                  t        «      r/|j                  j                  dk7  r|j                  j                  nd}t        |d¬«      5  |j                  «       }| j                  dz  }| j                  |«      }|j                  «       }|||z
  j                  «       z   }||z  }||z  |z   }|| j                  z  j                  d¬«      j                  t        j                  «      }d d d «       j                  |«      fS # 1 sw Y   ŒxY w)NÚmpsÚcpuF)Údevice_typeÚenabledr   r“   ©r  )rÆ   rA   r  ÚtypeÚstrr   r]   r	  r'  ÚroundÚdetachr  ÚsumrÅ   rp   r  )	rF   rŽ   Úoriginal_dtyper+  r  Úroundedr  Úcode_scaledr  s	            rI   r±   z'Xcodec2FiniteScalarQuantization.forward—  s!  € à&×,Ñ,ˆô ˜-×.Ñ.×3Ñ3´SÔ9¸m×>RÑ>R×>WÑ>WÐ[`Ò>`ð × Ñ ×%Ò%àð 	ô
 ¨¸UÔCñ 
	MØ)×/Ñ/Ó1ˆMØŸ™¨Ñ)ˆJà ŸJ™J }Ó5ˆMØ#×)Ñ)Ó+ˆGØ! W¨}Ñ%<×$DÑ$DÓ$FÑFˆEØ˜JÑ&ˆEà  :Ñ-°Ñ;ˆKØ" T§Z¡ZÑ/×4Ñ4¸Ð4Ó<×?Ñ?ÄÇÁÓLˆG÷
	Mð �x‰x˜Ó'¨Ð0Ð0÷
	Mð 
	Mús   Á/B D*Ä*D3rM   )gü©ñÒMbP?)rU   rV   rW   rX   r(   r�   r  rp   rs   r  r]   r'  r\   r±   rh   ri   s   @rI   r  r  Z  s…   ø„ ñðE˜}õ Eó
'ð¨¯©ð ¸%¿,¹,ó ñD 5§<¡<ð D°eð DÀuÇ|Á|ó Dð,1 U§\¡\ð 1°e¸E¿L¹LÈ%Ï,É,Ð<VÑ6W÷ 1rJ   r  c                   ó`   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚXcodec2ISTFTHeadzù
    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                 ór  •— t         ‰| �  «        t        j                  |j                  |j
                  dz   «      | _        |j
                  | _        |j                  | _        | j
                  | j                  z
  dz  | _        t        j                  |j
                  «      }| j                  d|d¬«       y )Nr   ÚwindowFr
  )rD   r�   r‚   rƒ   r4   rT   ÚlinearrR   rö   rp   Úhann_windowr  )rF   r~   r9  rH   s      €rI   r�   zXcodec2ISTFTHead.__init__µ  s‰   ø€ Ü‰ÑÔÜ—i‘i × 2Ñ 2°F·L±LÀ1Ñ4DÓEˆŒØ—\‘\ˆŒ
Ø ×+Ñ+ˆŒØŸ
™
 T§_¡_Ñ4¸Ñ:ˆŒÜ×"Ñ" 6§<¡<Ó0ˆØ×Ñ˜X v¸%ÐÕ@rJ   rŽ   rK   c                 ó.  — | j                  |«      j                  dd«      }|j                  dd¬«      \  }}|j                  «       }|j                  «       }t	        j
                  |«      j                  d¬«      }|t	        j
                  d|z  «      z  }t        j                  j                  || j                  dd¬«      }|| j                  d d d …d f   z  }|j                  d	   }|dz
  | j                  z  | j                  z   }t        j                  |d|fd| j                  fd| j                  f¬
«      d d …dd| j                  | j                   …f   }	t        j                  | j                  j!                  «       j#                  d|d	«      j                  dd«      d|fd| j                  fd| j                  f¬
«      j%                  «       | j                  | j                    }
|
j                  d¬«      }
|	|
z  }	|	j'                  d«      S )Nr”   r   r-  g      Y@)Úmaxy              ð?Úbackward)r  Únormr“   )Úoutput_sizerõ   r½   r   g•dyáý¥=)Úmin)r:  rœ   Úchunkr]   rp   ÚexpÚclampÚfftÚirfftrT   r9  r™   rR   r¿   Úfoldrö   ÚsquarerÇ   Úsqueezer  )rF   rŽ   Ú	stft_predÚ	magnitudeÚphaseÚspectrogram_complexÚtime_framesÚ
num_framesr@  ÚaudioÚwindow_envelopes              rI   r±   zXcodec2ISTFTHead.forward¾  sÜ  € Ø—K‘K Ó.×8Ñ8¸¸AÓ>ˆ	Ø$Ÿ?™?¨1°!˜?Ó4Ñˆ	�5à—O‘OÓ%ˆ	Ø—‘“ˆä—I‘I˜iÓ(×.Ñ.°3Ð.Ó7ˆ	Ø'¬%¯)©)°B¸±JÓ*?Ñ?Ðô —i‘i—o‘oÐ&9¸4¿:¹:È1ÐS]�oÓ^ˆØ! D§K¡K°²a¸°Ñ$>Ñ>ˆØ(×.Ñ.¨rÑ2ˆ
Ø! 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Ó!Ð!rJ   ©
rU   rV   rW   rX   r(   r�   rp   rs   r±   rh   ri   s   @rI   r7  r7  ­  s1   ø„ ñðA˜}õ Að!" U§\¡\ð !"°e·l±l÷ !"rJ   r7  c                   ó²   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zdej                  deej                  ej                  f   fd„Z	ˆ xZ
S )ÚXcodec2Quantizerr~   c                 ó"  •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  t        |j                  «      «      | _	        t	        j
                  t        |j                  «      |j                  «      | _
        y rM   )rD   r�   r  Ú	quantizerr‚   rƒ   r2   rê   r3   Ú
project_inÚproject_outr†   s     €rI   r�   zXcodec2Quantizer.__init__ã  sa   ø€ Ü‰ÑÔÜ8¸Ó@ˆŒÜŸ)™) F×$;Ñ$;¼SÀ×A[ÑA[Ó=\Ó]ˆŒÜŸ9™9¤S¨×)CÑ)CÓ%DÀf×F]ÑF]Ó^ˆÕrJ   r  rK   c                 óx   — |j                  d«      }| j                  j                  |   }| j                  |«      S ©Nr“   )rI  rV  r  rX  )rF   r  r  s      rI   Ú
from_codeszXcodec2Quantizer.from_codesé  s5   € Ø—/‘/ "Ó%ˆØ—‘×'Ñ'¨Ñ0ˆØ×Ñ Ó&Ð&rJ   rŽ   c                 ó  — | j                  |«      }|j                  }| j                  j                  |«      }| j                  |«      \  }}| j	                  |j                  |«      «      }|j                  d«      }||fS rZ  )rW  rÆ   rV  r'  rX  rÅ   r  )rF   rŽ   r3  Úquantized_outr  s        rI   r±   zXcodec2Quantizer.forwardî  sx   € ØŸ™¨Ó6ˆØ&×,Ñ,ˆØŸ™×,Ñ,¨]Ó;ˆØ!%§¡°Ó!>Ñˆ�wØ×(Ñ(¨×)9Ñ)9¸.Ó)IÓJˆØ×#Ñ# BÓ'ˆØ˜gÐ%Ð%rJ   )rU   rV   rW   r(   r�   rp   rs   r[  r\   r±   rh   ri   s   @rI   rT  rT  â  sU   ø„ ð_˜}õ _ð' %§,¡,ð '°5·<±<ó 'ð
& U§\¡\ð &°e¸E¿L¹LÈ%Ï,É,Ð<VÑ6W÷ &rJ   rT  c                   ó`   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚXcodec2DecoderzVVocos-based decoder with ResNet, Transformer, and ISTFT head for audio reconstruction.r~   c           	      ó  •— t         ‰| �  «        t        j                  |j                  |j
                  j                  z   |j                  «      | _        t        j                  |j                  |j                  dd¬«      | _        t        j                  t        |«      t        |«      g«      | _        |j                  | _        t        |¬«      | _        t        j                  t        |j                   «      D �cg c]  }t#        ||«      ‘Œ c}«      | _        t        j                  t        |«      t        |«      g«      | _        t        j(                  |j                  d¬«      | _        t-        |«      | _        y c c}w )Né   r   )rõ   rö   )r~   rð   )ró   )rD   r�   r‚   rƒ   r4   r*   Úfcrû   ÚembedÚ
ModuleListrí   Ú	prior_netr7   ry   Ú
rotary_embÚranger:   r³   ÚlayersÚpost_netÚ	LayerNormr?  r7  Úheadr�   s      €rI   r�   zXcodec2Decoder.__init__û  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¸	Ô  ¨Õ3Òeó
ˆŒô Ÿ™Ô'9¸&Ó'AÔCUÐV\ÓC]Ð&^Ó_ˆŒÜ—L‘L ×!3Ñ!3¸Ô>ˆŒ	Ü$ VÓ,ˆ�	ùò	 fs   Ã>FrŽ   rK   c                 ó  — | j                  |«      }|j                  dd«      }| j                  |«      }|j                  dd«      }| j                  D ]
  } ||«      }Œ t	        j
                  | j                  |j                  ¬«      j                  d«      }| j                  ||«      }| j                  D ]  } ||fd|i|¤Ž}Œ | j                  D ]
  } ||«      }Œ | j                  | j                  |«      «      S )Nr”   r   r  r   r�   )rb  rœ   rc  re  rp   r  r7   r  r  rf  rh  ri  rk  r?  )rF   rŽ   rG   ÚlayerÚposition_idsr�   s         rI   r±   zXcodec2Decoder.forward	  s   € ØŸ™ Ó.ˆØ%×/Ñ/°°1Ó5ˆØŸ
™
 =Ó1ˆØ%×/Ñ/°°1Ó5ˆð —^‘^ò 	1ˆEÙ! -Ó0‰Mð	1ô —|‘| D×$<Ñ$<À]×EYÑEYÔZ×dÑdÐefÓgˆØ"Ÿo™o¨m¸\ÓJÐØ—[‘[ò 	dˆEÙ! -ÑcÐEXÐcÐ\bÑc‰Mð	dð —]‘]ò 	1ˆEÙ! -Ó0‰Mð	1ð �y‰y˜Ÿ™ =Ó1Ó2Ð2rJ   rR  ri   s   @rI   r_  r_  ø  s-   ø„ Ù`ð-˜}õ -ð3 U§\¡\ð 3ÀÇÁ÷ 3rJ   r_  c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚXcodec2SemanticAdapterr~   c                 ó¾  •— t         ‰| �  «        t        j                  |j                  j
                  |j                  j
                  ddd¬«      | _        t        j                  «       | _        t        j                  |j                  j
                  |j                  j
                  ddd¬«      | _	        t        j                  «       | _
        t        j                  |j                  j
                  |j                  j
                  ddd¬«      | _        t        j                  |j                  j
                  |j                  j
                  ddd¬«      | _        y )Nr   r”   F)Úin_channelsÚout_channelsrõ   rö   r€   T)rõ   rö   r€   )rD   r�   r‚   rû   r*   r4   rü   ÚReLUÚact1rÿ   Úact2Úconv3Úconv4r†   s     €rI   r�   zXcodec2SemanticAdapter.__init__%  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ØØØô
ˆ�
rJ   rŽ   rK   c                 óà   — | j                  |«      }| j                  |«      }|}| j                  |«      }| j                  |«      }| j	                  |«      }||z   }| j                  |«      }|S rM   )rü   ru  rÿ   rv  rw  rx  r  s      rI   r±   zXcodec2SemanticAdapter.forwardF  sk   € ØŸ
™
 =Ó1ˆØŸ	™	 -Ó0ˆØ ˆØŸ
™
 =Ó1ˆØŸ	™	 -Ó0ˆØŸ
™
 =Ó1ˆØ%¨Ñ0ˆØŸ
™
 =Ó1ˆØÐrJ   r  ri   s   @rI   rp  rp  $  s+   ø„ ð
˜}õ 
ðB	 U§\¡\ð 	°e·l±l÷ 	rJ   rp  c                   ó(   — e Zd ZdZdZdZeedœZd„ Zy)ÚXcodec2PreTrainedModelr)   Úinput_values)rP  )rŽ   Ú
attentionsc                 ó  — t        j                  |«       t        |t        «      r?t	        j
                  |j                  «       t	        j
                  |j                  «       y t        |t        «      r@t        j                  |j                  «      }t	        j                  |j                  |«       y t        |t        «      r‹|j                  |j                   j"                  ¬«      \  }}}t	        j                  |j                   |«       t	        j                  |j$                  |«       t	        j                  |j&                  |«       y t        |t(        «      rRt+        d|j,                  z  d|j,                  z  |j.                  «      }t	        j                  |j0                  |«       y t        |t2        «      rLt+        |j4                  |j6                  |j.                  «      }t	        j                  |j0                  |«       y y )Nr  r   g333333ã?)r   Ú_init_weightsrA   rµ   ÚinitÚzeros_ÚalphaÚbetar7  rp   r;  rT   Úcopy_r9  r  r  r	  r  r  r  rÌ   r$   rÎ   rõ   rÄ   r·   Úcutoffr  )rF   Úmoduler9  r	  r  r  Úfilter_tensors          rI   r  z$Xcodec2PreTrainedModel._init_weights[  sV  € Ü×%Ñ% fÔ-Ü�fÔ.Ô/Ü�K‰K˜Ÿ™Ô%Ü�K‰K˜Ÿ™Õ$Ü˜Ô 0Ô1Ü×&Ñ& v§|¡|Ó4ˆFÜ�J‰J�v—}‘} fÕ-Ü˜Ô ?Ô@Ø&,×&=Ñ&=ÀVÇ]Á]×EYÑEYÐ&=Ó&ZÑ#ˆF�E˜8Ü�J‰J�v—}‘} fÔ-Ü�J‰J�v—|‘| UÔ+Ü�J‰J�v—‘¨Õ1Ü˜Ô 1Ô2Ü0°°v·|±|Ñ1CÀSÈ6Ï<É<ÑEWÐY_×YkÑYkÓlˆMÜ�J‰J�v—}‘} mÕ4Ü˜Ô 3Ô4Ü0°·±À×@QÑ@QÐSY×SeÑSeÓfˆMÜ�J‰J�v—}‘} mÕ4ð 5rJ   N)	rU   rV   rW   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesr³   Ú_can_record_outputsr  r@   rJ   rI   r{  r{  R  s&   „ Ø!ÐØ$€OØ!Ðà,Ø)ñÐó
5rJ   r{  z!Xcodec2 neural audio codec model.)Úcustom_introc                   óê  ‡ — e Zd ZeZdefˆ fd„Zee	 	 	 ddej                  dej                  dej                  dz  dej                  dz  de
d	ee   d
eez  fd„«       «       Zee	 	 ddej                  dz  dej                  dz  d	ee   d
eez  fd„«       «       Zee	 	 	 ddej                  dej                  dej                  dz  dej                  dz  de
d	ee   d
eez  fd„«       «       Zˆ xZS )ÚXcodec2Modelr~   c                 óè  •— t         ‰| �  |«       |j                  | _        t        j                  |j
                  «      | _        t        |«      | _        t        |«      | _
        t        j                  |j                  |j
                  j                  z   |j                  |j
                  j                  z   «      | _        t        |«      | _        t#        |«      | _        | j'                  «        y rM   )rD   r�   rR   r   Úfrom_configr*   Úsemantic_encoderrp  Úsemantic_adapterrè   Úacoustic_encoderr‚   rƒ   r4   Ú
fc_encoderrT  rV  r_  Úacoustic_decoderÚ	post_initr†   s     €rI   r�   zXcodec2Model.__init__t  s¹   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ )× 5Ñ 5°f×6RÑ6RÓ SˆÔÜ 6°vÓ >ˆÔÜ .¨vÓ 6ˆÔÜŸ)™)Ø×Ñ ×!=Ñ!=×!IÑ!IÑIØ×Ñ ×!=Ñ!=×!IÑ!IÑIó
ˆŒô *¨&Ó1ˆŒÜ .¨vÓ 6ˆÔà�‰ÕrJ   Nr|  Úinput_featuresÚpadding_maskÚinput_features_maskÚoutput_latentsrG   rK   c                 ó  — t        j                  «       5  | j                  ||¬«      }ddd«       j                  j	                  dd«      }| j                  |«      }| j                  |«      }	t        j                  ||	gd¬«      }
| j                  |
j	                  dd«      «      }
| j                  |
«      \  }}|j	                  dd«      }|j	                  dd«      }d}|�~|j                  dd¬«      }|| j                  z  }t        j                  |j                  d   |j                  ¬	«      j                  dd«      }||k  j!                  |j"                  «      }t%        ||r||¬
«      S d|¬
«      S # 1 sw Y   �ŒTxY w)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   r-  r“   T)r  Úkeepdimr  )rm   rn   ro   )rp   Úno_gradr‘  Úlast_hidden_staterœ   r’  r“  Úcatr”  rV  r2  rR   r  r™   r  r›   rÅ   rÆ   ru   )rF   r|  r—  r˜  r™  rš  rG   Úsemantic_outputÚsemantic_hidden_statesÚacoustic_hidden_statesrŽ   rn   rm   ro   Úaudio_lengthÚtoken_lengthÚidxs                    rI   ÚencodezXcodec2Model.encode„  sŒ  € ô2 �]‰]‹_ñ 	hØ"×3Ñ3°NÐSfÐ3ÓgˆO÷	hà!0×!BÑ!B×!LÑ!LÈQÐPQÓ!RÐØ!%×!6Ñ!6Ð7MÓ!NÐð "&×!6Ñ!6°|Ó!DÐÜŸ	™	Ð#9Ð;QÐ"RÐXYÔZˆØŸ™¨×(?Ñ(?ÀÀ1Ó(EÓFˆð  $Ÿ~™~¨mÓ<Ñˆ�Ø×#Ñ# A qÓ)ˆØ!×+Ñ+¨A¨qÓ1ˆð  ÐØÐ#Ø'×+Ñ+°¸DÐ+ÓAˆLØ'¨4¯?©?Ñ:ˆLÜ—,‘,˜{×0Ñ0°Ñ4¸\×=PÑ=PÔQ×VÑVÐWXÐZ\Ó]ˆCØ # lÑ 2×6Ñ6°|×7IÑ7IÓJÐä#Ø#Ù-�GØ-ô
ð 	
à37Ø-ô
ð 	
÷/	hñ 	hús   •E;Å;Frm   rn   c                 óÞ   — |€|€t        d«      ‚|�,| j                  j                  |j                  dd«      «      }n|j                  dd«      } | j                  |fi |¤Ž}t        |¬«      S )a3  
        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   )rl   )Ú
ValueErrorrV  r[  rœ   r•  rw   )rF   rm   rn   rG   Úrecon_audios        rI   ÚdecodezXcodec2Model.decodeº  su   € ð ˆ?˜{Ð2ÜÐRÓSÐSàÐ"Ø—n‘n×/Ñ/°×0EÑ0EÀaÈÓ0KÓL‰Gà×'Ñ'¨¨1Ó-ˆGà+�d×+Ñ+¨GÑ>°vÑ>ˆÜ#°Ô=Ð=rJ   c                 ó  — |j                   d   }| j                  ||||dd¬«      } | j                  d	|j                  ddœ|¤Žd   dd|…f   }	t	        |	|j
                  |r|j                  nd|j                  ¬«      S )
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.

        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
        ```r“   T)r—  r˜  r™  rš  Úreturn_dict)rn   r¬  r   .N)rl   rm   rn   ro   r@   )r™   r¦  rª  rn   rk   rm   ro   )
rF   r|  r—  r˜  r™  rš  rG   ÚlengthÚencoder_outputsrl   s
             rI   r±   zXcodec2Model.forwardÓ  s¥   € ðV ×#Ñ# BÑ'ˆàŸ+™+ØØ)Ø%Ø 3ØØð &ó 
ˆð #�t—{‘{Ð_¨?×+BÑ+BÐPTÑ_ÐX^Ñ_Ð`aÑbÐcfÐhoÐioÐhoÐcoÑpˆäØ%Ø'×3Ñ3Ù/=�O×+Ò+À4Ø,×=Ñ=ô	
ð 	
rJ   )NNF)NN)rU   rV   rW   r(   Úconfig_classr�   r   r   rp   rs   Úboolr   r   r\   ru   r¦  rw   rª  rk   r±   rh   ri   s   @rI   rŽ  rŽ  p  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ð:
ð ð:
ð Ð+Ñ,ð:
ð 
�Ñ	ò:
ó ó ô:
rJ   rŽ  )r(   rŽ  r{  )TÚcollections.abcr   Údataclassesr   ÚnumpyrO   rp   Útorch.nnr‚   Útorch.nn.functionalr  r¿   Úhuggingface_hub.dataclassesr   Ú r   r€  Úcache_utilsr   Úconfiguration_utilsr	   Úmodeling_utilsr
   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úautor   r   r   Úclip.modeling_clipr   Údac.modeling_dacr   r   r   Úllama.configuration_llamar   Úllama.modeling_llamar   r   r   r   r   Ú"qwen2_5_omni.modeling_qwen2_5_omnir    r!   r"   r#   r$   Úvoxtral.modeling_voxtralr%   r(   rk   ru   rw   ry   r}   r‰   r³   rµ   r·   rÌ   rÑ   rÛ   rã   rè   ÚModulerí   r  r7  rT  r_  rp  r{  rŽ  Ú__all__r@   rJ   rI   ú<module>rÇ     s5  ðõ %Ý !ã Û Ý ß Ð Ý .å &Ý  Ý 3ß FÝ &÷ó õ ,ß 8Ñ 8Ý (ß KÑ KÝ 3÷õ ÷õ õ >ñ Ð2Ô3ØôE#�Kó E#ó ó 4ðE#ðP Ø
ô1�Kó 1ó ó ð1ð( Ø
ô1˜;ó 1ó ó ð1ð" Ø
ô2˜;ó 2ó ó ð2ô	Ð1ô 	ôW�ô Wô.)�~ô .)ôb	Ð+ô 	ô	Ð+ô 	ôÐ1ô ôÐ-ô ôLÐ%Gô Lô(]˜/ô ]ôb˜/ô bô[�Zô [ô:˜Ÿ™ô :ô0P1 b§i¡iô P1ôf2"�r—y‘yô 2"ôj&�r—y‘yô &ô,)3�R—Y‘Yô )3ôX+˜RŸY™Yô +ô\5Ð3ô 5ñ< Ð@ÔAô^
Ð)ó ^
ó Bð^
òB F�rJ   