§
    ‚Štj·‡  ã                   ó  — d Z ddlZddlmZ ddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZ d	d
lmZ  ej        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ej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ d ej        ¦  «        Z G d!„ d"ej        ¦  «        Z e G d#„ d$e
¦  «        ¦   «         Z! ed%¬&¦  «         G d'„ d(e!¦  «        ¦   «         Z"d(d$gZ#dS ))zPyTorch EnCodec model.é    N)Ú	dataclass)Únné   )Úinitialization)ÚPreTrainedAudioTokenizerBase)ÚModelOutputÚauto_docstringÚloggingé   )ÚEncodecConfigc                   óP   — e Zd ZU dZdZej        dz  ed<   dZej	        dz  ed<   dS )ÚEncodecOutputa\  
    audio_codes (`torch.LongTensor`  of shape `(nb_frames, batch_size, nb_quantizers, frame_len)`, *optional*):
        Discrete code embeddings computed using `model.encode`.
    audio_values (`torch.FloatTensor`  of shape `(batch_size, segment_length)`, *optional*):
        Decoded audio values, obtained using the decoder part of Encodec.
    NÚaudio_codesÚaudio_values)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚ
LongTensorÚ__annotations__r   ÚFloatTensor© ó    új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/encodec/modeling_encodec.pyr   r   &   sN   € € € € € € ðð ð ,0€K�Ô! DÑ(Ð/Ð/Ñ/Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ð1Ð1r   r   c                   ód   — 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dz  ed<   dS )ÚEncodecEncoderOutputa¸  
    audio_codes (`torch.LongTensor`  of shape `(nb_frames, batch_size, nb_quantizers, frame_len)`, *optional*):
        Discrete code embeddings computed using `model.encode`.
    audio_scales (list of length `nb_frames` of `torch.Tensor` of shape `(batch_size, 1)`, *optional*):
        Scaling factor for each `audio_codes` input. This is used to unscale each chunk of audio when decoding.
    last_frame_pad_length (`int`, *optional*):
        The length of the padding in the last frame, if any. This is used to ensure that the encoded frames can be
        outputted as a tensor. This value should be passed during decoding to ensure padding is removed from the
        encoded frames.
    Nr   Úaudio_scalesÚlast_frame_pad_length)r   r   r   r   r   r   r   r   r   r   r   Úintr   r   r   r   r   4   sc   € € € € € € ð	ð 	ð ,0€K�Ô! DÑ(Ð/Ð/Ñ/Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø(,Ð˜3 ™:Ð,Ð,Ñ,Ð,Ð,r   r   c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚEncodecDecoderOutputz¬
    audio_values (`torch.FloatTensor`  of shape `(batch_size, segment_length)`, *optional*):
        Decoded audio values, obtained using the decoder part of Encodec.
    Nr   )r   r   r   r   r   r   r   r   r   r   r   r"   r"   G   s6   € € € € € € ðð ð
 .2€L�%Ô# dÑ*Ð1Ð1Ñ1Ð1Ð1r   r"   c                   óª   ‡ — e Zd ZdZ	 ddededededef
ˆ fd„Zd	ej        d
ej        fd„Ze	dd	ej        de
eef         dedefd„¦   «         Zd„ Zˆ xZS )ÚEncodecConv1dz;Conv1d with asymmetric or causal padding and normalization.r   Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚdilationc           	      ó  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        | j        dvrt          d| j        › �¦  «        ‚|dk    r*|dk    r$t                               d|› d|› d|› d�¦  «         t          j
        |||||¬¦  «        | _        t          j        j        }t          t          j        j        d	¦  «        rt          j        j        j        }| j        d	k    r || j        ¦  «        | _        n%| j        d
k    rt          j        d|¦  «        | _        | j        j        d         }t'          j        | j        j        d         t&          j        ¬¦  «        }| j        j        d         }t'          j        |dz
  |z  dz   t&          j        ¬¦  «        }|                      d|d¬¦  «         |                      d|d¬¦  «         |                      d||z
  d¬¦  «         d S )N©Úweight_normÚtime_group_normúIself.norm_type must be one of `"weight_norm"`, `"time_group_norm"`), got r   zQEncodecConv1d has been initialized with stride > 1 and dilation > 1 (kernel_size=z stride=z, dilation=z).©r)   r,   r-   r   ©Údtyper(   F)Ú
persistentr'   Úpadding_total)ÚsuperÚ__init__Úuse_causal_convÚcausalÚpad_modeÚ	norm_typeÚ
ValueErrorÚloggerÚwarningr   ÚConv1dÚconvÚutilsr,   ÚhasattrÚparametrizationsÚ	GroupNormÚnormr'   r   Útensorr(   Úint64r)   Úregister_buffer)	ÚselfÚconfigr%   r&   r'   r(   r)   r,   Ú	__class__s	           €r   r5   zEncodecConv1d.__init__U   s  ø€ õ 	‰Œ×ÒÑÔÐØÔ,ˆŒØœˆŒØÔ)ˆŒàŒ>Ð!CÐCÐCÝØlÐ\`Ô\jÐlÐlñô ð ð
 �AŠ:ˆ:˜( Qš,˜,Ý�NŠNðVØ!,ðVð VØ6<ðVð VØIQðVð Vð Vñô ð õ
 ”I˜k¨<¸ÀfÐW_Ð`Ñ`Ô`ˆŒ	Ý”hÔ*ˆÝ•2”8Ô,¨mÑ<Ô<ð 	@Ýœ(Ô3Ô?ˆKàŒ>˜]Ò*Ð*Ø#˜ D¤IÑ.Ô.ˆDŒIˆIØŒ^Ð0Ò0Ð0Ýœ Q¨Ñ5Ô5ˆDŒIà”iÔ+¨AÔ.ˆÝ”˜dœiÔ.¨qÔ1½¼ÐEÑEÔEˆØ”9Ô% aÔ(ˆõ ”l K°!¡O°xÑ#?À!Ñ#CÍ5Ì;ÐWÑWÔWˆà×Ò˜X v¸%ÐÑ@Ô@Ð@Ø×Ò˜]¨KÀEÐÑJÔJÐJØ×Ò˜_¨k¸FÑ.BÈuÐÑUÔUÐUÐUÐUr   Úhidden_statesÚreturnc                 óü   — |j         d         }|| j        z
  | j        z   | j        z  dz   }t	          j        |¦  «                             t          j        ¦  «        dz
  }|| j        z  | j        z   | j        z
  }||z
  S )zSee `pad_for_conv1d`.éÿÿÿÿr   )Úshaper'   r3   r(   r   ÚceilÚtorE   )rG   rJ   ÚlengthÚn_framesÚideal_lengths        r   Ú_get_extra_padding_for_conv1dz+EncodecConv1d._get_extra_padding_for_conv1d~   s~   € ð
 Ô$ RÔ(ˆØ˜TÔ-Ñ-°Ô0BÑBÀdÄkÑQÐTUÑUˆÝ”:˜hÑ'Ô'×*Ò*­5¬;Ñ7Ô7¸!Ñ;ˆØ $¤+Ñ-°Ô0@Ñ@À4ÔCUÑUˆà˜fÑ$Ð$r   Úzeroç        ÚpaddingsÚmodeÚvaluec                 óv  — | j         d         }|\  }}|dk    r"t          j                             | |||¦  «        S t	          ||¦  «        }d}||k    r*||z
  dz   }t          j                             | d|f¦  «        } t          j                             | |||¦  «        }	|	j         d         |z
  }
|	dd|
…f         S )zÊTiny wrapper around torch.nn.functional.pad, just to allow for reflect padding on small input.
        If this is the case, we insert extra 0 padding to the right before the reflection happens.
        rM   Úreflectr   r   .N)rN   r   Ú
functionalÚpadÚmax)rJ   rW   rX   rY   rQ   Úpadding_leftÚpadding_rightÚmax_padÚ	extra_padÚpaddedÚends              r   Ú_pad1dzEncodecConv1d._pad1dŠ   sÊ   € ð
 Ô$ RÔ(ˆØ&.Ñ#ˆ�mØ�9ÒÐÝ”=×$Ò$ ]°H¸dÀEÑJÔJÐJå�l MÑ2Ô2ˆØˆ	Ø�WÒÐØ &Ñ(¨1Ñ,ˆIÝœM×-Ò-¨m¸aÀ¸^ÑLÔLˆMÝ”×"Ò" =°(¸DÀ%ÑHÔHˆØŒl˜2Ô Ñ*ˆØ�c˜4˜C˜4�iÔ Ð r   c                 ó^  — |                       |¦  «        }| j        r%|                      || j        |f| j        ¬¦  «        }n6| j        dz  }| j        |z
  }|                      ||||z   f| j        ¬¦  «        }|                      |¦  «        }| j        dk    r|                      |¦  «        }|S )N)rX   é   r-   )rT   r7   re   r3   r8   r>   r9   rC   )rG   rJ   Úextra_paddingr`   r_   s        r   ÚforwardzEncodecConv1d.forward�   sÅ   € Ø×:Ò:¸=ÑIÔIˆàŒ;ð 		à ŸKšK¨¸Ô8JÈMÐ7ZÐaeÔan˜KÑoÔoˆMˆMð !Ô.°!Ñ3ˆMØÔ-°Ñ=ˆLØ ŸKšKØ ¨m¸mÑ.KÐLÐSWÔS`ð (ñ ô ˆMð Ÿ	š	 -Ñ0Ô0ˆàŒ>Ð.Ò.Ð.Ø ŸIšI mÑ4Ô4ˆMàÐr   )r   r   )rU   rV   )r   r   r   r   r    r5   r   ÚTensorrT   ÚstaticmethodÚtupleÚstrÚfloatre   ri   Ú__classcell__©rI   s   @r   r$   r$   R   s	  ø€ € € € € ØEÐEð opð'Vð 'VØ#&ð'VØ69ð'VØHKð'VØUXð'VØhkð'Vð 'Vð 'Vð 'Vð 'Vð 'VðR
%à”|ð
%ð 
Œð
%ð 
%ð 
%ð 
%ð ð!ð !˜eœlð !°e¸CÀ¸H´oð !ÈSð !Ðbgð !ð !ð !ñ „\ð!ð$ð ð ð ð ð ð r   r$   c            	       ó<   ‡ — e Zd ZdZd	dedededefˆ fd„Zd„ Zˆ xZS )
ÚEncodecConvTranspose1dzDConvTranspose1d with asymmetric or causal padding and normalization.r   r%   r&   r'   r(   c                 óf  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        | j        dvrt          d| j        › �¦  «        ‚t          j        ||||¦  «        | _	        t          j
        j        }t          t          j
        j        d¦  «        rt          j
        j        j        }|j        dk    r || j	        ¦  «        | _	        n%|j        dk    rt          j        d|¦  «        | _        | j        s| j        dk    st          d¦  «        ‚d S d S )Nr+   r.   r,   r-   r   g      ð?zB`trim_right_ratio` != 1.0 only makes sense for causal convolutions)r4   r5   r6   r7   Útrim_right_ratior9   r:   r   ÚConvTranspose1dr>   r?   r,   r@   rA   rB   rC   )rG   rH   r%   r&   r'   r(   r,   rI   s          €r   r5   zEncodecConvTranspose1d.__init__¶   s.  ø€ Ý‰Œ×ÒÑÔÐØÔ,ˆŒØ &Ô 7ˆÔØÔ)ˆŒØŒ>Ð!CÐCÐCÝØlÐ\`Ô\jÐlÐlñô ð õ Ô& {°LÀ+ÈvÑVÔVˆŒ	å”hÔ*ˆÝ•2”8Ô,¨mÑ<Ô<ð 	@Ýœ(Ô3Ô?ˆKàÔ˜}Ò,Ð,Ø#˜ D¤IÑ.Ô.ˆDŒIˆIØÔÐ!2Ò2Ð2Ýœ Q¨Ñ5Ô5ˆDŒIà”ð 	c˜tÔ4¸Ò;Ð;ÝÐaÑbÔbÐbð	cð 	cÐ;Ð;r   c                 óV  — | j         j        d         }| j         j        d         }||z
  }|                       |¦  «        }| j        dk    r|                      |¦  «        }| j        rt          j        || j        z  ¦  «        }n|dz  }||z
  }|j	        d         |z
  }|d||…f         }|S )Nr   r-   rg   rM   .)
r>   r'   r(   r9   rC   r7   ÚmathrO   rt   rN   )rG   rJ   r'   r(   r3   r`   r_   rd   s           r   ri   zEncodecConvTranspose1d.forwardÎ   sÅ   € Ø”iÔ+¨AÔ.ˆØ”Ô! !Ô$ˆØ# fÑ,ˆàŸ	š	 -Ñ0Ô0ˆàŒ>Ð.Ò.Ð.Ø ŸIšI mÑ4Ô4ˆMð Œ;ð 	/õ !œI m°dÔ6KÑ&KÑLÔLˆMˆMð *¨QÑ.ˆMà$ }Ñ4ˆð Ô! "Ô%¨Ñ5ˆØ% c¨<¸Ð+;Ð&;Ô<ˆØÐr   )r   )r   r   r   r   r    r5   ri   ro   rp   s   @r   rr   rr   ³   s€   ø€ € € € € ØNÐNðcð c¨Cð c¸sð cÐQTð cÐ^að cð cð cð cð cð cð0ð ð ð ð ð ð r   rr   c                   ó2   ‡ — e Zd ZdZdedefˆ fd„Zd„ Zˆ xZS )ÚEncodecLSTMzz
    LSTM without worrying about the hidden state, nor the layout of the data. Expects input as convolutional layout.
    rH   Ú	dimensionc                 óˆ   •— t          ¦   «                              ¦   «          t          j        |||j        ¦  «        | _        d S ©N)r4   r5   r   ÚLSTMÚnum_lstm_layersÚlstm)rG   rH   rz   rI   s      €r   r5   zEncodecLSTM.__init__ñ   s5   ø€ Ý‰Œ×ÒÑÔÐÝ”G˜I y°&Ô2HÑIÔIˆŒ	ˆ	ˆ	r   c                 óž   — |                      ddd¦  «        }|                      |¦  «        d         |z   }|                      ddd¦  «        }|S )Nrg   r   r   )Úpermuter   )rG   rJ   s     r   ri   zEncodecLSTM.forwardõ   sQ   € Ø%×-Ò-¨a°°AÑ6Ô6ˆØŸ	š	 -Ñ0Ô0°Ô3°mÑCˆØ%×-Ò-¨a°°AÑ6Ô6ˆØÐr   )	r   r   r   r   r   r    r5   ri   ro   rp   s   @r   ry   ry   ì   sl   ø€ € € € € ðð ðJ˜}ð J¸ð Jð Jð Jð Jð Jð Jðð ð ð ð ð ð r   ry   c                   óB   ‡ — e Zd ZdZdededee         fˆ fd„Zd„ Zˆ xZ	S )ÚEncodecResnetBlockz>
    Residual block from SEANet model as used by EnCodec.
    rH   ÚdimÚ	dilationsc           	      óf  •— t          ¦   «                              ¦   «          |j        df}t          |¦  «        t          |¦  «        k    rt	          d¦  «        ‚||j        z  }g }t          t          ||¦  «        ¦  «        D ][\  }\  }}	|dk    r|n|}
|t          |¦  «        dz
  k    r|n|}|t          j	        ¦   «         gz  }|t          ||
|||	¬¦  «        gz  }Œ\t          j        |¦  «        | _        |j        rt          |||d¬¦  «        | _        d S t          j        ¦   «         | _        d S )Nr   z7Number of kernel sizes should match number of dilationsr   r/   )r'   )r4   r5   Úresidual_kernel_sizeÚlenr:   ÚcompressÚ	enumerateÚzipr   ÚELUr$   Ú
ModuleListÚblockÚuse_conv_shortcutÚshortcutÚIdentity)rG   rH   r„   r…   Úkernel_sizesÚhiddenrŽ   Úir'   r)   Úin_chsÚout_chsrI   s               €r   r5   zEncodecResnetBlock.__init__  s;  ø€ Ý‰Œ×ÒÑÔÐØÔ3°QÐ7ˆÝˆ|ÑÔ¥ I¡¤Ò.Ð.ÝÐVÑWÔWÐWà˜œÑ'ˆØˆÝ*3µC¸ÀiÑ4PÔ4PÑ*QÔ*Qð 	^ð 	^Ñ&ˆAÑ&�˜XØ šF˜F�S�S¨ˆFØ¥# lÑ"3Ô"3°aÑ"7Ò7Ð7�c�c¸VˆGØ•b”f‘h”h�ZÑˆEØ•m F¨F°G¸[ÐS[Ð\Ñ\Ô\Ð]Ñ]ˆEˆEÝ”] 5Ñ)Ô)ˆŒ
àÔ#ð 	*Ý)¨&°#°sÈÐJÑJÔJˆDŒMˆMˆMåœK™MœMˆDŒMˆMˆMr   c                 ó`   — |}| j         D ]} ||¦  «        }Œ|                      |¦  «        |z   S r|   )rŽ   r�   )rG   rJ   ÚresidualÚlayers       r   ri   zEncodecResnetBlock.forward  s@   € Ø ˆØ”Zð 	1ð 	1ˆEØ!˜E -Ñ0Ô0ˆMˆMà�}Š}˜XÑ&Ô&¨Ñ6Ð6r   )
r   r   r   r   r   r    Úlistr5   ri   ro   rp   s   @r   rƒ   rƒ   ü   so   ø€ € € € € ðð ð*˜}ð *°3ð *À4ÈÄ9ð *ð *ð *ð *ð *ð *ð(7ð 7ð 7ð 7ð 7ð 7ð 7r   rƒ   c                   ó.   ‡ — e Zd ZdZdefˆ fd„Zd„ Zˆ xZS )ÚEncodecEncoderz"SEANet encoder as used by EnCodec.rH   c           	      óš  •— t          ¦   «                              ¦   «          t          ||j        |j        |j        ¦  «        g}d}t          |j        ¦  «        D ]|}||j        z  }t          |j	        ¦  «        D ]!}|t          |||j        |z  dg¦  «        gz  }Œ"|t          j        ¦   «         gz  }|t          |||dz  |dz  |¬¦  «        gz  }|dz  }Œ}|t          |||j        z  ¦  «        gz  }|t          j        ¦   «         gz  }|t          |||j        z  |j        |j        ¦  «        gz  }t          j        |¦  «        | _        d S )Nr   rg   ©r'   r(   )r4   r5   r$   Úaudio_channelsÚnum_filtersr'   ÚreversedÚupsampling_ratiosÚrangeÚnum_residual_layersrƒ   Údilation_growth_rater   rŒ   ry   Úhidden_sizeÚlast_kernel_sizer�   Úlayers)rG   rH   ÚmodelÚscalingÚratioÚcurrent_scaleÚjrI   s          €r   r5   zEncodecEncoder.__init__   sh  ø€ Ý‰Œ×ÒÑÔÐÝ˜v vÔ'<¸fÔ>PÐRXÔRdÑeÔeÐfˆØˆõ ˜fÔ6Ñ7Ô7ð 	ð 	ˆEØ# fÔ&8Ñ8ˆMå˜6Ô5Ñ6Ô6ð jð j�ØÕ,¨V°]ÀVÔE`ÐbcÑEcÐefÐDgÑhÔhÐiÑi��à•b”f‘h”h�ZÑˆEØ•m F¨M¸=È1Ñ;LÐZ_ÐbcÑZcÐlqÐrÑrÔrÐsÑsˆEØ�q‰LˆGˆGà•+˜f g°Ô0BÑ&BÑCÔCÐDÑDˆØ•"”&‘(”(�ÑˆØ•- ¨°&Ô2DÑ(DÀfÔFXÐZ`ÔZqÑrÔrÐsÑsˆå”m EÑ*Ô*ˆŒˆˆr   c                 ó0   — | j         D ]} ||¦  «        }Œ|S r|   ©r¨   ©rG   rJ   r™   s      r   ri   zEncodecEncoder.forward6  ó*   € Ø”[ð 	1ð 	1ˆEØ!˜E -Ñ0Ô0ˆMˆMØÐr   ©r   r   r   r   r   r5   ri   ro   rp   s   @r   rœ   rœ     sY   ø€ € € € € Ø,Ð,ð+˜}ð +ð +ð +ð +ð +ð +ð,ð ð ð ð ð ð r   rœ   c                   ó.   ‡ — e Zd ZdZdefˆ fd„Zd„ Zˆ xZS )ÚEncodecDecoderz"SEANet decoder as used by EnCodec.rH   c           	      óÊ  •— t          ¦   «                              ¦   «          t          dt          |j        ¦  «        z  ¦  «        }t          ||j        ||j        z  |j        ¦  «        g}|t          |||j        z  ¦  «        gz  }|j        D ]}||j        z  }|t          j        ¦   «         gz  }|t          |||dz  |dz  |¬¦  «        gz  }t          |j        ¦  «        D ]$}|t          ||dz  |j        |z  df¦  «        gz  }Œ%|dz  }Œ€|t          j        ¦   «         gz  }|t          ||j        |j        |j        ¦  «        gz  }t          j        |¦  «        | _        d S )Nrg   rž   r   )r4   r5   r    rˆ   r¢   r$   r¦   r    r'   ry   r   rŒ   rr   r£   r¤   rƒ   r¥   rŸ   r§   r�   r¨   )rG   rH   rª   r©   r«   r¬   r­   rI   s          €r   r5   zEncodecDecoder.__init__?  s†  ø€ Ý‰Œ×ÒÑÔÐÝ�a�3˜vÔ7Ñ8Ô8Ñ8Ñ9Ô9ˆÝ˜v vÔ'9¸7ÀVÔEWÑ;WÐY_ÔYkÑlÔlÐmˆà•+˜f g°Ô0BÑ&BÑCÔCÐDÑDˆð Ô-ð 
	ð 
	ˆEØ# fÔ&8Ñ8ˆMà•b”f‘h”h�ZÑˆEØÝ& v¨}¸mÈqÑ>PÐ^cÐfgÑ^gÐpuÐvÑvÔvðñ ˆEõ ˜6Ô5Ñ6Ô6ð oð o�ØÕ,¨V°]ÀaÑ5GÈ&ÔJeÐghÑJhÐjkÐIlÑmÔmÐnÑn��Ø˜‰MˆGˆGð 	•"”&‘(”(�ÑˆØ•- ¨Ô(:¸FÔ<QÐSYÔSjÑkÔkÐlÑlˆÝ”m EÑ*Ô*ˆŒˆˆr   c                 ó0   — | j         D ]} ||¦  «        }Œ|S r|   r¯   r°   s      r   ri   zEncodecDecoder.forwardX  r±   r   r²   rp   s   @r   r´   r´   <  sY   ø€ € € € € Ø,Ð,ð+˜}ð +ð +ð +ð +ð +ð +ð2ð ð ð ð ð ð r   r´   c                   ó:   ‡ — e Zd ZdZdefˆ fd„Zd„ Zd„ Zd„ Zˆ xZ	S )ÚEncodecEuclideanCodebookz!Codebook with Euclidean distance.rH   c                 óÆ  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        }|j        | _        |                      dt          j        dg¦  «        ¦  «         |                      dt          j        |j        ¦  «        ¦  «         |                      d|¦  «         |                      d|                     ¦   «         ¦  «         d S )NÚinitedTÚcluster_sizeÚembedÚ	embed_avg)	r4   r5   r   ÚzerosÚcodebook_sizeÚcodebook_dimrF   rj   Úclone)rG   rH   r¼   rI   s      €r   r5   z!EncodecEuclideanCodebook.__init__a  sº   ø€ Ý‰Œ×ÒÑÔÐÝ”˜FÔ0°&Ô2EÑFÔFˆà#Ô1ˆÔà×Ò˜X¥u¤|°T°FÑ';Ô';Ñ<Ô<Ð<Ø×Ò˜^­U¬[¸Ô9MÑ-NÔ-NÑOÔOÐOØ×Ò˜W eÑ,Ô,Ð,Ø×Ò˜[¨%¯+ª+©-¬-Ñ8Ô8Ð8Ð8Ð8r   c                 ó0  — | j                              ¦   «         }|                     d¦  «                             dd¬¦  «        }|d|z  |z  z
  |                     d¦  «                             dd¬¦  «        z    }|                     d¬¦  «        j        }|S )Nrg   r   T©Úkeepdimr   rM   )r„   )r¼   ÚtÚpowÚsumr^   Úindices)rG   rJ   r¼   Úscaled_statesÚdistÚ	embed_inds         r   Úquantizez!EncodecEuclideanCodebook.quantizel  s�   € Ø”
—’‘”ˆØ%×)Ò)¨!Ñ,Ô,×0Ò0°¸DÐ0ÑAÔAˆØ  ]Ñ!2°UÑ!:Ñ:¸U¿YºYÀq¹\¼\×=MÒ=MÈaÐY]Ð=MÑ=^Ô=^Ñ^Ð_ˆØ—H’H �HÑ$Ô$Ô,ˆ	ØÐr   c                 óœ   — |j         }|                     d|d         f¦  «        }|                      |¦  «        } |j        |d d…         Ž }|S )NrM   )rN   ÚreshaperÌ   Úview)rG   rJ   rN   rË   s       r   ÚencodezEncodecEuclideanCodebook.encodes  sR   € ØÔ#ˆà%×-Ò-¨r°5¸´9¨oÑ>Ô>ˆà—M’M -Ñ0Ô0ˆ	à"�I”N E¨#¨2¨#¤JÐ/ˆ	ØÐr   c                 óP   — t           j                             || j        ¦  «        }|S r|   )r   r\   Ú	embeddingr¼   ©rG   rË   rÌ   s      r   ÚdecodezEncodecEuclideanCodebook.decode}  s    € Ý”=×*Ò*¨9°d´jÑAÔAˆØˆr   )
r   r   r   r   r   r5   rÌ   rÐ   rÔ   ro   rp   s   @r   r¸   r¸   ^  sw   ø€ € € € € Ø+Ð+ð	9˜}ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ðð ð ðð ð ðð ð ð ð ð ð r   r¸   c                   ó4   ‡ — e Zd ZdZdefˆ fd„Zd„ Zd„ Zˆ xZS )ÚEncodecVectorQuantizationzY
    Vector quantization implementation. Currently supports only euclidean distance.
    rH   c                 óp   •— t          ¦   «                              ¦   «          t          |¦  «        | _        d S r|   )r4   r5   r¸   Úcodebook©rG   rH   rI   s     €r   r5   z"EncodecVectorQuantization.__init__‡  s,   ø€ Ý‰Œ×ÒÑÔÐÝ0°Ñ8Ô8ˆŒˆˆr   c                 óh   — |                      ddd¦  «        }| j                             |¦  «        }|S ©Nr   rg   r   )r�   rØ   rÐ   )rG   rJ   Úembed_ins      r   rÐ   z EncodecVectorQuantization.encode‹  s3   € Ø%×-Ò-¨a°°AÑ6Ô6ˆØ”=×'Ò'¨Ñ6Ô6ˆØˆr   c                 óh   — | j                              |¦  «        }|                     ddd¦  «        }|S rÛ   )rØ   rÔ   r�   rÓ   s      r   rÔ   z EncodecVectorQuantization.decode�  s3   € Ø”=×'Ò'¨	Ñ2Ô2ˆØ×#Ò# A q¨!Ñ,Ô,ˆØˆr   )	r   r   r   r   r   r5   rÐ   rÔ   ro   rp   s   @r   rÖ   rÖ   ‚  sl   ø€ € € € € ðð ð9˜}ð 9ð 9ð 9ð 9ð 9ð 9ðð ð ð
ð ð ð ð ð ð r   rÖ   c                   ó”   ‡ — e Zd ZdZdefˆ fd„Zddedz  defd„Zdde	j
        dedz  de	j
        fd	„Zd
e	j
        de	j
        fd„Zˆ xZS )ÚEncodecResidualVectorQuantizerzResidual Vector Quantizer.rH   c                 ó   •‡— t          ¦   «                              ¦   «          ‰j        | _        ‰j        | _        ‰j        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r   )rÖ   )Ú.0Ú_rH   s     €r   ú
<listcomp>z;EncodecResidualVectorQuantizer.__init__.<locals>.<listcomp>ž  s"   ø€ Ð$mÐ$mÐ$mÈ1Õ%>¸vÑ%FÔ%FÐ$mÐ$mÐ$mr   )	r4   r5   r¿   Ú
frame_rateÚnum_quantizersr   r�   r£   r¨   rÙ   s    `€r   r5   z'EncodecResidualVectorQuantizer.__init__™  sq   øø€ Ý‰Œ×ÒÑÔÐØ#Ô1ˆÔØ Ô+ˆŒØ$Ô3ˆÔÝ”mÐ$mÐ$mÐ$mÐ$mÕPUÐV\ÔVkÑPlÔPlÐ$mÑ$mÔ$mÑnÔnˆŒˆˆr   NÚ	bandwidthrK   c           	      óÐ   — t          j        | j        ¦  «        | j        z  }| j        }|�;|dk    r5t          t          dt          j        |dz  |z  ¦  «        ¦  «        ¦  «        }|S )z:Return num_quantizers based on specified target bandwidth.NrV   r   iè  )rw   Úlog2r¿   rå   ræ   r    r^   Úfloor)rG   rç   Úbw_per_qræ   s       r   Ú get_num_quantizers_for_bandwidthz?EncodecResidualVectorQuantizer.get_num_quantizers_for_bandwidth   sb   € å”9˜TÔ/Ñ0Ô0°4´?ÑBˆØÔ,ˆØÐ  Y°¢_ _Ý ¥ Q­¬
°9¸tÑ3CÀhÑ3NÑ(OÔ(OÑ!PÔ!PÑQÔQˆNØÐr   Ú
embeddingsc                 ó  — |                       |¦  «        }|}g }| j        d|…         D ]F}|                     |¦  «        }|                     |¦  «        }||z
  }|                     |¦  «         ŒGt          j        |¦  «        }	|	S )zÚ
        Encode a given input tensor with the specified frame rate at the given bandwidth. The RVQ encode method sets
        the appropriate number of quantizers to use and returns indices for each quantizer.
        N)rì   r¨   rÐ   rÔ   Úappendr   Ústack)
rG   rí   rç   ræ   r˜   Úall_indicesr™   rÈ   Ú	quantizedÚout_indicess
             r   rÐ   z%EncodecResidualVectorQuantizer.encode¨  s“   € ð
 ×>Ò>¸yÑIÔIˆØˆØˆØ”[  . Ô1ð 	(ð 	(ˆEØ—l’l 8Ñ,Ô,ˆGØŸš WÑ-Ô-ˆIØ )Ñ+ˆHØ×Ò˜wÑ'Ô'Ð'Ð'Ý”k +Ñ.Ô.ˆØÐr   Úcodesc                 ó´   — t          j        d|j        ¬¦  «        }t          |¦  «        D ],\  }}| j        |         }|                     |¦  «        }||z   }Œ-|S )z7Decode the given codes to the quantized representation.rV   )Údevice)r   rD   rö   rŠ   r¨   rÔ   )rG   rô   Úquantized_outr”   rÈ   r™   rò   s          r   rÔ   z%EncodecResidualVectorQuantizer.decode¸  sa   € åœ S°´Ð>Ñ>Ô>ˆÝ# EÑ*Ô*ð 	6ð 	6‰JˆAˆwØ”K ”NˆEØŸš WÑ-Ô-ˆIØ)¨IÑ5ˆMˆMØÐr   r|   )r   r   r   r   r   r5   rn   r    rì   r   rj   rÐ   rÔ   ro   rp   s   @r   rß   rß   –  sÛ   ø€ € € € € Ø$Ð$ðo˜}ð oð oð oð oð oð oðð ¸%À$¹,ð ÐRUð ð ð ð ðð  ¤ð ¸%À$¹,ð ÐRWÔR^ð ð ð ð ð ˜EœLð ¨U¬\ð ð ð ð ð ð ð ð r   rß   c                   ó\   ‡ — e Zd ZU eed<   dZdZ ej        ¦   «         ˆ fd„¦   «         Z	ˆ xZ
S )ÚEncodecPreTrainedModelrH   ÚencodecÚinput_valuesc                 óF  •— t          ¦   «                              |¦  «         t          |t          j        ¦  «        rpt          j        |j        ¦  «         |j        �Nt          j
        |j        |j        |j        d         z  z  ¦  «        }t          j        |j        | |¬¦  «         d S d S t          |t          ¦  «        rÐ|j        j        d         }t#          j        |j        j        d         t"          j        ¬¦  «        }|j        j        d         }t#          j        |dz
  |z  dz   t"          j        ¬¦  «        }t          j        |j        |¦  «         t          j        |j        |¦  «         t          j        |j        ||z
  ¦  «         d S t          |t0          ¦  «        rzt          j        |j        t#          j        dg¦  «        ¦  «         t          j        |j        ¦  «         t          j        |j        ¦  «         t          j        |j        ¦  «         d S d S )Nr   )ÚaÚbr0   r   T)r4   Ú_init_weightsÚ
isinstancer   r=   ÚinitÚkaiming_normal_ÚweightÚbiasrw   ÚsqrtÚgroupsr%   r'   Úuniform_r$   r>   r   rD   r(   rE   r)   Úcopy_r3   r¸   rº   rj   Úzeros_r»   r¼   r½   )rG   ÚmoduleÚkr'   r(   r)   rI   s         €r   rÿ   z$EncodecPreTrainedModel._init_weightsÈ  sÔ  ø€ å‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�bœiÑ(Ô(ð 	*ÝÔ  ¤Ñ/Ô/Ð/ØŒ{Ð&Ý”I˜fœm¨vÔ/AÀFÔDVÐWXÔDYÑ/YÑZÑ[Ô[�Ý”˜fœk¨a¨R°1Ð5Ñ5Ô5Ð5Ð5Ð5ð 'Ð&õ ˜¥Ñ.Ô.ð 	*Ø œ+Ô1°!Ô4ˆKÝ”\ &¤+Ô"4°QÔ"7½u¼{ÐKÑKÔKˆFØ”{Ô+¨AÔ.ˆHåœ,¨°a©¸8Ñ'CÀaÑ'GÍuÌ{Ð[Ñ[Ô[ˆKÝŒJ�v”} fÑ-Ô-Ð-ÝŒJ�vÔ)¨;Ñ7Ô7Ð7ÝŒJ�vÔ+¨[¸6Ñ-AÑBÔBÐBÐBÐBÝ˜Õ 8Ñ9Ô9ð 	*ÝŒJ�v”}¥e¤l°D°6Ñ&:Ô&:Ñ;Ô;Ð;ÝŒK˜Ô+Ñ,Ô,Ð,ÝŒK˜œÑ%Ô%Ð%ÝŒK˜Ô(Ñ)Ô)Ð)Ð)Ð)ð		*ð 	*r   )r   r   r   r   r   Úbase_model_prefixÚmain_input_namer   Úno_gradrÿ   ro   rp   s   @r   rù   rù   Â  sc   ø€ € € € € € àÐÐÑØ!ÐØ$€Oà€U„]�_„_ð*ð *ð *ð *ñ „_ð*ð *ð *ð *ð *r   rù   z/
    The EnCodec neural audio codec model.
    )Úcustom_introc                   ó–  ‡ — e Zd Zdefˆ fd„Zdej        dedeej        ej        dz  f         fd„Z		 	 	 ddej        dej        dz  dedz  d	e
dz  deej        ej        dz  ef         ez  f
d
„Zedeej                 defd„¦   «         Zddej        dej        dz  dej        fd„Z	 	 	 ddej        dej        dej        dz  d	e
dz  dedz  deej        ej        f         ez  fd„Ze	 	 	 	 	 	 ddej        dej        dz  dedz  dej        dz  dej        dz  d	e
dz  dedz  deej        ej        f         ez  fd„¦   «         Zˆ xZS )ÚEncodecModelrH   c                 ó¦  •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        t          t          j        | j        j        ¦  «        ¦  «        | _        d| j        z  | j        j        k    rt          d¦  «        ‚|                      ¦   «          d S )Nrg   z'The codebook_size must be a power of 2.)r4   r5   rH   rœ   Úencoderr´   Údecoderrß   Ú	quantizerr    rw   ré   r¿   Úbits_per_codebookr:   Ú	post_initrÙ   s     €r   r5   zEncodecModel.__init__æ  s­   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒå% fÑ-Ô-ˆŒÝ% fÑ-Ô-ˆŒå7¸Ñ?Ô?ˆŒå!$¥T¤Y¨t¬{Ô/HÑ%IÔ%IÑ!JÔ!JˆÔØˆdÔ$Ñ$¨¬Ô(AÒAÐAÝÐFÑGÔGÐGð 	�ŠÑÔÐÐÐr   rû   rç   rK   Nc                 ód  — |j         d         }|| j        j        z  }| j        j        �2|d| j        j        z   k    rt	          d|› d| j        j        › �¦  «        ‚d}| j        j        rt          j        |dd¬¦  «        |j         d         z  }|                     d	¦  «         	                    dd¬
¦  «         
                    ¦   «         dz   }||z  }|                     dd¦  «        }|                      |¦  «        }| j                             ||¦  «        }|                     dd¦  «        }||fS )zÎ
        Encodes the given input using the underlying VQVAE. If `config.normalize` is set to `True` the input is first
        normalized. The padding mask is required to compute the correct scale.
        rM   Ngñhãˆµøä>zDuration of frame (z) is longer than chunk r   TrÃ   rg   )r„   rÄ   g:Œ0âŽyE>r   )rN   rH   Úsampling_rateÚchunk_length_sÚRuntimeErrorÚ	normalizer   rÇ   rÆ   Úmeanr  rÏ   r  r  rÐ   Ú	transpose)	rG   rû   rç   rQ   ÚdurationÚscaleÚmonorí   rô   s	            r   Ú_encode_framezEncodecModel._encode_frameö  s0  € ð
 Ô# BÔ'ˆØ˜DœKÔ5Ñ5ˆàŒ;Ô%Ð1°hÀÈÌÔHbÑAbÒ6bÐ6bÝÐr°XÐrÐrÐVZÔVaÔVpÐrÐrÑsÔsÐsàˆØŒ;Ô ð 	&Ý”9˜\¨1°dÐ;Ñ;Ô;¸lÔ>PÐQRÔ>SÑSˆDØ—H’H˜Q‘K”K×$Ò$¨°TÐ$Ñ:Ô:×?Ò?ÑAÔAÀDÑHˆEØ'¨%Ñ/ˆLØ—J’J˜r 1Ñ%Ô%ˆEà—\’\ ,Ñ/Ô/ˆ
Ø”×%Ò% j°)Ñ<Ô<ˆØ—’  1Ñ%Ô%ˆØ�eˆ|Ðr   Úpadding_maskÚreturn_dictc                 ó  — |�|n| j         j        }|€| j         j        d         }|| j         j        vr t          d|› d| j         j        › d�¦  «        ‚|j        \  }}}|dk     s|dk    rt          d|› �¦  «        ‚| j         j        }|€|}|}	n| j         j        }	|€'t          j        |¦  «         	                    ¦   «         }n-| 
                    |j        d         d	|j        d	         ¦  «        }g }
g }t          d||	¦  «        D ]x}|d
|||z   …f          	                    ¦   «         }||d
|||z   …f         z  }|                      ||¦  «        \  }}|
                     |¦  «         |                     |¦  «         Œy|
d         j        d	         |
d	         j        d	         z
  }|dk    r/t          j                             |
d	         d|fd¬¦  «        }||
d	<   t          j        |
¦  «        }
|s|
||fS t%          |
||¦  «        S )a  
        Encodes the input audio waveform into discrete codes of shape
        `(nb_frames, batch_size, nb_quantizers, frame_len)`.

        - `nb_frames=1` if `self.config.chunk_length=None` (as the encoder is applied on the full audio), which is the
        case for the 24kHz model. Otherwise, `nb_frames=ceil(input_length/self.config.chunk_stride)`, which is the case
        for the 48kHz model.
        - `frame_len` is the length of each frame, which is equal to `ceil(input_length/self.config.hop_length)` if
        `self.config.chunk_length=None` (e.g., for the 24kHz model). Otherwise, if `self.config.chunk_length` is
        defined, `frame_len=self.config.chunk_length/self.config.hop_length`, e.g., the case for the 48kHz model with
        `frame_len=150`.

        Args:
            input_values (`torch.Tensor` of shape `(batch_size, channels, sequence_length)`):
                Float values of the input audio waveform.
            padding_mask (`torch.Tensor` of shape `(batch_size, channels, sequence_length)`):
                Padding mask used to pad the `input_values`.
            bandwidth (`float`, *optional*):
                The target bandwidth. Must be one of `config.target_bandwidths`. If `None`, uses the smallest possible
                bandwidth. bandwidth is represented as a thousandth of what it is, e.g. 6kbps bandwidth is represented
                as bandwidth == 6.0

        Returns:
            EncodecEncoderOutput dict or a tuple containing:
            - audio_codes (`torch.LongTensor`  of shape `(nb_frames, batch_size, nb_quantizers, frame_len)`, *optional*),
            - audio_scales (list of length `nb_frames` of `torch.Tensor` of shape `(batch_size, 1)`, *optional*),
            - last_frame_pad_length (`int`, *optional*).
        Nr   z)This model doesn't support the bandwidth z. Select one of ú.r   rg   z1Number of audio channels must be 1 or 2, but got rM   .)rY   )rH   r$  Útarget_bandwidthsr:   rN   Úchunk_lengthÚchunk_strider   Ú	ones_likeÚboolrÏ   r£   r"  rï   r   r\   r]   rð   r   )rG   rû   r#  rç   r$  rã   ÚchannelsÚinput_lengthr(  r(   Úencoded_framesÚscalesÚoffsetÚmaskÚframeÚencoded_framer   r   Ú
last_frames                      r   rÐ   zEncodecModel.encode  s`  € ðF &1Ð%<�k�kÀ$Ä+ÔBYˆàÐØœÔ5°aÔ8ˆIØ˜DœKÔ9Ð9Ð9ÝØw¸IÐwÐwÐW[ÔWbÔWtÐwÐwÐwñô ð ð %1Ô$6Ñ!ˆˆ8�\à�aŠ<ˆ<˜8 aš<˜<ÝÐ[ÐQYÐ[Ð[Ñ\Ô\Ð\à”{Ô/ˆØÐØ'ˆLØ!ˆFˆFà”[Ô-ˆFàÐÝ œ?¨<Ñ8Ô8×=Ò=Ñ?Ô?ˆLˆLà'×,Ò,¨\Ô-?ÀÔ-BÀBÈÔHZÐ[]ÔH^Ñ_Ô_ˆLàˆØˆÝ˜A˜|¨VÑ4Ô4ð 	!ð 	!ˆFØ  V¨f°|Ñ.CÐ%CÐ CÔD×IÒIÑKÔKˆDØ˜<¨¨V°f¸|Ñ6KÐ-KÐ(KÔLÑLˆEØ#'×#5Ò#5°e¸YÑ#GÔ#GÑ ˆM˜5Ø×!Ò! -Ñ0Ô0Ð0Ø�MŠM˜%Ñ Ô Ð Ð ð !/¨qÔ 1Ô 7¸Ô ;¸nÈRÔ>PÔ>VÐWYÔ>ZÑ ZÐØ  1Ò$Ð$Ýœ×*Ò*¨>¸"Ô+=ÀÐCXÐ?YÐabÐ*ÑcÔcˆJØ!+ˆN˜2ÑÝœ ^Ñ4Ô4ˆàð 	CØ" FÐ,AÐBÐBÝ# N°FÐ<QÑRÔRÐRr   Úframesr(   c                 ó  — t          | ¦  «        dk    rt          d¦  «        ‚| d         j        }| d         j        }| d         j        d d…         }|t          | ¦  «        dz
  z  | d         j        d         z   }| d         j        d         }t          j        dd|dz   ||¬¦  «        dd…         }d|dz
                       ¦   «         z
  }t          j        |||¬¦  «        }	t          j        g |¢|‘R ||dœŽ}
d}| D ]S}|j        d         }|
d|||z   …fxx         |d |…         |z  z  cc<   |	|||z   …xx         |d |…         z  cc<   ||z  }ŒT|	 	                    ¦   «         dk    rt          d	|	› d
�¦  «        ‚|
|	z  S )Nr   z!`frames` cannot be an empty list.rM   r   rg   )rö   r1   g      à?.z7`sum_weight` minimum element must be bigger than zero: ú`)
rˆ   r:   rö   r1   rN   r   ÚlinspaceÚabsr¾   Úmin)r5  r(   rö   r1   rN   Ú
total_sizeÚframe_lengthÚtime_vecr  Ú
sum_weightÚoutr0  r2  s                r   Ú_linear_overlap_addz EncodecModel._linear_overlap_add^  sÒ  € õ( ˆv‰;Œ;˜!ÒÐÝÐ@ÑAÔAÐAà˜”Ô!ˆØ�q”	”ˆØ�q”	”   Ô$ˆØ�s 6™{œ{¨Q™Ñ/°&¸´*Ô2BÀ2Ô2FÑFˆ
à˜a”y” rÔ*ˆÝ”> ! Q¨°qÑ(8ÀÈuÐUÑUÔUÐVWÐXZÐVZÔ[ˆØ˜ 3™×+Ò+Ñ-Ô-Ñ-ˆå”[ °FÀ%ÐHÑHÔHˆ
ÝŒkÐI˜5ÐI *ÐIÐI°VÀ5ÐIÐIÐIˆØˆàð 	ð 	ˆEØ œ; rœ?ˆLØ��V˜f |Ñ3Ð3Ð3Ð4Ð4Ô4¸¸}À¸}Ô8MÐPUÑ8UÑUÐ4Ð4Ñ4Ø�v ¨Ñ 5Ð5Ð6Ð6Ô6¸&ÀÀ,ÀÔ:OÑOÐ6Ð6Ñ6Ø�fÑˆFˆFà�>Š>ÑÔ˜qÒ Ð ÝÐdÐWaÐdÐdÐdÑeÔeÐeà�ZÑÐr   rô   r   c                 óÈ   — |                      dd¦  «        }| j                             |¦  «        }|                      |¦  «        }|�||                     ddd¦  «        z  }|S )Nr   r   rM   )r  r  rÔ   r  rÏ   )rG   rô   r   rí   Úoutputss        r   Ú_decode_framezEncodecModel._decode_frame�  s`   € Ø—’  1Ñ%Ô%ˆØ”^×*Ò*¨5Ñ1Ô1ˆ
Ø—,’,˜zÑ*Ô*ˆØÐØ §
¢
¨2¨q°!Ñ 4Ô 4Ñ4ˆGØˆr   r   r   r   r   c                 óà  — |�|n| j         j        }| j         j        }|€jt          |¦  «        dk    rt	          dt          |¦  «        › �¦  «        ‚|d         }|dk    r|dd| …f         }|                      ||d         ¦  «        }nžg }	t          t          ||¦  «        ¦  «        D ]\\  }
\  }}|
t          |¦  «        dz
  k    r|dk    r|dd| …f         }|                      ||¦  «        }|	                     |¦  «         Œ]|  	                    |	| j         j
        pd¦  «        }|�3|j        d         |j        d         k     r|dd|j        d         …f         }|s|fS t          |¦  «        S )a  
        Decodes the given frames into an output audio waveform.

        Note that the output might be a bit bigger than the input. In that case, any extra steps at the end can be
        trimmed.

        Args:
            audio_codes (`torch.LongTensor`  of shape `(nb_frames, batch_size, nb_quantizers, frame_len)`, *optional*):
                Discrete code embeddings computed using `model.encode`.
            audio_scales (list of length `nb_frames` of `torch.Tensor` of shape `(batch_size, 1)`, *optional*):
                Scaling factor for each `audio_codes` input.
            padding_mask (`torch.Tensor` of shape `(channels, sequence_length)`):
                Padding mask used to pad the `input_values`.
            return_dict (`bool`, *optional*):
                Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
            last_frame_pad_length (`int`, *optional*):
                Integer representing the length of the padding in the last frame, which is removed during decoding.

        Nr   zExpected one frame, got r   .rM   )rH   r$  r(  rˆ   r:   rC  rŠ   r‹   rï   r@  r)  rN   r"   )rG   r   r   r#  r$  r   r(  r2  r   Údecoded_framesr”   r   r5  s                r   rÔ   zEncodecModel.decode•  s¶  € ð6 &1Ð%<�k�kÀ$Ä+ÔBYˆà”{Ô/ˆØÐÝ�;ÑÔ 1Ò$Ð$Ý Ð!N½CÀÑ<LÔ<LÐ!NÐ!NÑOÔOÐOØ ”NˆEØ$ qÒ(Ð(Ø˜cÐ#:Ð%:Ð$:Ð#:Ð:Ô;�Ø×-Ò-¨e°\À!´_ÑEÔEˆLˆLàˆNÝ%.­s°;ÀÑ/MÔ/MÑ%NÔ%Nð .ð .Ñ!�‘>�E˜5Ø�˜KÑ(Ô(¨1Ñ,Ò,Ð,Ð1FÈÒ1JÐ1JØ! #Ð'>Ð)>Ð(>Ð'>Ð">Ô?�EØ×+Ò+¨E°5Ñ9Ô9�Ø×%Ò% fÑ-Ô-Ð-Ð-à×3Ò3°NÀDÄKÔD\ÐDaÐ`aÑbÔbˆLð Ð#¨Ô(:¸2Ô(>ÀÔASÐTVÔAWÒ(WÐ(WØ'¨Ð-E¨|Ô/AÀ"Ô/EÐ-EÐ(EÔFˆLàð 	#Ø �?Ð"Ý# LÑ1Ô1Ð1r   c                 óÈ  — |�|n| j         j        }|€'t          j        |¦  «                             ¦   «         }n-|                     |j        d         d|j        d         ¦  «        }|�|€t          d¦  «        ‚|�|€t          d¦  «        ‚|€|€|                      |||d¦  «        \  }}}|  	                    |||||¬¦  «        d         }|s||fS t          ||¬¦  «        S )	a  
        input_values (`torch.FloatTensor` of shape `(batch_size, channels, sequence_length)`, *optional*):
            Raw audio input converted to Float and padded to the appropriate length in order to be encoded using chunks
            of length self.chunk_length and a stride of `config.chunk_stride`.
        padding_mask (`torch.BoolTensor` of shape `(batch_size, channels, sequence_length)`, *optional*):
            Mask to avoid computing scaling factors on padding token indices (can we avoid computing conv on these+).
            Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            <Tip warning={true}>

            `padding_mask` should always be passed, unless the input was truncated or not padded. This is because in
            order to process tensors effectively, the input audio should be padded so that `input_length % stride =
            step` with `step = chunk_length-stride`. This ensures that all chunks are of the same shape

            </Tip>
        bandwidth (`float`, *optional*):
            The target bandwidth. Must be one of `config.target_bandwidths`. If `None`, uses the smallest possible
            bandwidth. bandwidth is represented as a thousandth of what it is, e.g. 6kbps bandwidth is represented as
            `bandwidth == 6.0`
        audio_codes (`torch.LongTensor`  of shape `(nb_frames, batch_size, nb_quantizers, frame_len)`, *optional*):
            Discrete code embeddings computed using `model.encode`.
        audio_scales (list of length `nb_frames` of `torch.Tensor` of shape `(batch_size, 1)`, *optional*):
            Scaling factor for each `audio_codes` input.
        return_dict (`bool`, *optional*):
            Whether to return outputs as a dict.
        last_frame_pad_length (`int`, *optional*):
            The length of the padding in the last frame, if any. This is used to ensure that the encoded frames can be
            outputted as a tensor. This value should be passed during decoding to ensure padding is removed from the
            encoded frames.

        Examples:

        ```python
        >>> from datasets import load_dataset
        >>> from transformers import AutoProcessor, EncodecModel

        >>> dataset = load_dataset("hf-internal-testing/ashraq-esc50-1-dog-example")
        >>> audio_sample = dataset["train"]["audio"][0]["array"]

        >>> model_id = "facebook/encodec_24khz"
        >>> model = EncodecModel.from_pretrained(model_id)
        >>> processor = AutoProcessor.from_pretrained(model_id)

        >>> inputs = processor(raw_audio=audio_sample, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> audio_codes = outputs.audio_codes
        >>> audio_values = outputs.audio_values
        ```Nr   rM   zBYou specified `audio_codes` but did not specify the `audio_scales`zBYou specified `audio_scales` but did not specify the `audio_codes`F)r$  r   )r   r   )rH   r$  r   r*  r+  rÏ   rN   r:   rÐ   rÔ   r   )	rG   rû   r#  rç   r   r   r$  r   r   s	            r   ri   zEncodecModel.forwardÌ  s%  € ð~ &1Ð%<�k�kÀ$Ä+ÔBYˆàÐÝ œ?¨<Ñ8Ô8×=Ò=Ñ?Ô?ˆLˆLð (×,Ò,¨\Ô-?ÀÔ-BÀBÈÔHZÐ[]ÔH^Ñ_Ô_ˆLàÐ" |Ð';ÝÐaÑbÔbÐbàÐ#¨Ð(;ÝÐaÑbÔbÐbàÐ KÐ$7Ø?C¿{º{Ø˜l¨I°uñ@ô @Ñ<ˆK˜Ð'<ð —{’{ØØØØ#Ø"7ð #ñ 
ô 
ð ôˆð ð 	/Ø Ð.Ð.å¨À<ÐPÑPÔPÐPr   )NNNr|   )NNr   )NNNNNr   )r   r   r   r   r5   r   rj   rn   rl   r"  r+  r    r   rÐ   rk   rš   r@  rC  r   r"   rÔ   r	   r   Ú
BoolTensorr   ri   ro   rp   s   @r   r  r  à  sö  ø€ € € € € ð˜}ð ð ð ð ð ð ð ¨%¬,ð À5ð ÈUÐSXÔS_ÐafÔamÐptÑatÐStÔMuð ð ð ð ð4 -1Ø"&Ø#'ðOSð OSà”lðOSð ”l TÑ)ðOSð ˜4‘<ð	OSð
 ˜D‘[ðOSð 
ˆuŒ|˜Uœ\¨DÑ0°#Ð5Ô	6Ð9MÑ	MðOSð OSð OSð OSðb ð,  D¨¬Ô$6ð , Àð , ð , ð , ñ „\ð, ð\ð  5¤<ð ¸¼ÀtÑ8Kð ÐW\ÔWcð ð ð ð ð -1Ø#'Ø,-ð52ð 52àÔ%ð52ð ”lð52ð ”l TÑ)ð	52ð
 ˜D‘[ð52ð  # T™zð52ð 
ˆuŒ|˜Uœ\Ð)Ô	*Ð-AÑ	Að52ð 52ð 52ð 52ðn ð 15Ø"&Ø/3Ø,0Ø#'Ø,-ð[Qð [QàÔ'ð[Qð Ô&¨Ñ-ð[Qð ˜4‘<ð	[Qð
 Ô%¨Ñ,ð[Qð ”l TÑ)ð[Qð ˜D‘[ð[Qð  # T™zð[Qð 
ˆuŒ|˜Uœ\Ð)Ô	*¨]Ñ	:ð[Qð [Qð [Qñ „^ð[Qð [Qð [Qð [Qð [Qr   r  )$r   rw   Údataclassesr   r   r   Ú r   r  Úmodeling_utilsr   r?   r   r	   r
   Úconfiguration_encodecr   Ú
get_loggerr   r;   r   r   r"   ÚModuler$   rr   ry   rƒ   rœ   r´   r¸   rÖ   rß   rù   r  Ú__all__r   r   r   ú<module>rO     sÄ  ðð Ð à €€€Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð
 1Ð 0Ð 0Ð 0Ð 0Ð 0ð 
ˆÔ	˜HÑ	%Ô	%€ð Ø
ð	2ð 	2ð 	2ð 	2ð 	2�Kñ 	2ô 	2ñ „ñ „ð	2ð Ø
ð-ð -ð -ð -ð -˜;ñ -ô -ñ „ñ „ð-ð" Ø
ð2ð 2ð 2ð 2ð 2˜;ñ 2ô 2ñ „ñ „ð2ð^ð ^ð ^ð ^ð ^�B”Iñ ^ô ^ð ^ðB6ð 6ð 6ð 6ð 6˜RœYñ 6ô 6ð 6ðrð ð ð ð �"”)ñ ô ð ð 7ð 7ð 7ð 7ð 7˜œñ 7ô 7ð 7ðBð ð ð ð �R”Yñ ô ð ð>ð ð ð ð �R”Yñ ô ð ðD!ð !ð !ð !ð !˜rœyñ !ô !ð !ðHð ð ð ð  ¤	ñ ô ð ð()ð )ð )ð )ð ) R¤Yñ )ô )ð )ðX ð*ð *ð *ð *ð *Ð9ñ *ô *ñ „ð*ð: €ððñ ô ð
CQð CQð CQð CQð CQÐ)ñ CQô CQñô ð
CQðL
 Ð3Ð
4€€€r   