Ë
    S^(h9„  ã                   óÚ  — d Z ddlZddlmZ ddlmZmZmZmZ ddl	Z	ddl
Z	ddl	mZ ddlmZ ddlmZmZmZmZmZ d	d
lmZ  ej,                  e«      ZdZe G d„ de«      «       Ze G d„ de«      «       Ze G d„ de«      «       Z G d„ dej:                  «      Z G d„ dej:                  «      Z G d„ dej:                  «      Z  G d„ dej:                  «      Z! G d„ dej:                  «      Z" 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«      Z'd&Z(d'Z) ed(e(«       G d)„ d*e'«      «       Z*d*d%gZ+y)+zPyTorch EnCodec model.é    N)Ú	dataclass)ÚListÚOptionalÚTupleÚUnion)Únné   )ÚPreTrainedModel)ÚModelOutputÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstringsé   )ÚEncodecConfigr   c                   ób   — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   y)ÚEncodecOutputah  
    Args:
        audio_codes (`torch.LongTensor`  of shape `(batch_size, nb_chunks, chunk_length)`, *optional*):
            Discret code embeddings computed using `model.encode`.
        audio_values (`torch.FlaotTensor` of shape `(batch_size, sequence_length)`, *optional*)
            Decoded audio values, obtained using the decoder part of Encodec.
    NÚaudio_codesÚaudio_values)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚtorchÚ
LongTensorÚ__annotations__r   ÚFloatTensor© ó    új/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/encodec/modeling_encodec.pyr   r   +   ó3   … ñð /3€K�˜%×*Ñ*Ñ+Ó2Ø04€L�(˜5×,Ñ,Ñ-Ô4r   r   c                   ób   — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   y)ÚEncodecEncoderOutputa„  
    Args:
        audio_codes (`torch.LongTensor`  of shape `(batch_size, nb_chunks, chunk_length)`, *optional*):
            Discret code embeddings computed using `model.encode`.
        audio_scales (`torch.Tensor` of shape `(batch_size, nb_chunks)`, *optional*):
            Scaling factor for each `audio_codes` input. This is used to unscale each chunk of audio when decoding.
    Nr   Úaudio_scales)r   r   r   r   r   r   r   r   r   r$   r   r   r   r    r#   r#   9   r!   r   r#   c                   ó:   — e Zd ZU dZdZeej                     ed<   y)ÚEncodecDecoderOutputz¾
    Args:
        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&   r&   G   s   … ñð 15€L�(˜5×,Ñ,Ñ-Ô4r   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.Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚdilationc           	      ó€  •— t         ‰| �  «        |j                  | _        |j                  | _        |j
                  | _        | j
                  dvrt        d| j
                  › �«      ‚|dkD  r$|dkD  rt        j                  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,                  ¬«      }| j1                  d|d¬«       | j1                  d|d¬«       | j1                  d||z
  d¬«       y )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-   r0   r1   r   )Údtyper,   F)Ú
persistentr+   Úpadding_total)ÚsuperÚ__init__Úuse_causal_convÚcausalÚpad_modeÚ	norm_typeÚ
ValueErrorÚloggerÚwarningr   ÚConv1dÚconvÚutilsr0   ÚhasattrÚparametrizationsÚ	GroupNormÚnormr+   r   Útensorr,   Úint64r-   Úregister_buffer)	ÚselfÚconfigr)   r*   r+   r,   r-   r0   Ú	__class__s	           €r    r8   zEncodecConv1d.__init__U   sÜ  ø€ ô 	‰ÑÔØ×,Ñ,ˆŒØŸ™ˆŒØ×)Ñ)ˆŒà�>‰>Ð!CÑCÜØ[Ð\`×\jÑ\jÐ[kÐlóð ð
 �AŠ:˜( Qš,Ü�N‰Nð!Ø!, ¨X°f°X¸[ÈÈ
ÐRTðVôô
 —I‘I˜k¨<¸ÀfÐW_Ô`ˆŒ	Ü—h‘h×*Ñ*ˆÜ”2—8‘8×,Ñ,¨mÔ<ÜŸ(™(×3Ñ3×?Ñ?ˆKà�>‰>˜]Ò*Ù# D§I¡IÓ.ˆD�IØ�^‰^Ð0Ò0ÜŸ™ Q¨Ó5ˆDŒIà—i‘i×+Ñ+¨AÑ.ˆÜ—‘˜dŸi™i×.Ñ.¨qÑ1¼¿¹ÔEˆØ—9‘9×%Ñ% aÑ(ˆô —l‘l K°!¡O°xÑ#?À!Ñ#CÌ5Ï;É;ÔWˆà×Ñ˜X v¸%ÐÔ@Ø×Ñ˜]¨KÀEÐÔJØ×Ñ˜_¨k¸FÑ.BÈuÐÕUr   Úhidden_statesÚreturnc                 ó>  — |j                   d   }|| j                  z
  | j                  z   | j                  z  dz   }t	        j
                  |«      j                  t        j                  «      dz
  }|| j                  z  | j                  z   | j                  z
  }||z
  S )zSee `pad_for_conv1d`.éÿÿÿÿr   )Úshaper+   r6   r,   r   ÚceilÚtorH   )rJ   rM   ÚlengthÚn_framesÚideal_lengths        r    Ú_get_extra_padding_for_conv1dz+EncodecConv1d._get_extra_padding_for_conv1d~   s�   € ð
 ×$Ñ$ RÑ(ˆØ˜T×-Ñ-Ñ-°×0BÑ0BÑBÀdÇkÁkÑQÐTUÑUˆÜ—:‘:˜hÓ'×*Ñ*¬5¯;©;Ó7¸!Ñ;ˆØ $§+¡+Ñ-°×0@Ñ0@Ñ@À4×CUÑCUÑUˆà˜fÑ$Ð$r   ÚpaddingsÚmodeÚvaluec                 ól  — | j                   d   }|\  }}|dk(  s"t        j                  j                  | |||«      S t	        ||«      }d}||k  r*||z
  dz   }t        j                  j                  | d|f«      } t        j                  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.
        rP   Úreflectr   r   .N)rQ   r   Ú
functionalÚpadÚmax)rM   rX   rY   rZ   rT   Úpadding_leftÚpadding_rightÚmax_padÚ	extra_padÚpaddedÚends              r    Ú_pad1dzEncodecConv1d._pad1dŠ   sÃ   € ð
 ×$Ñ$ RÑ(ˆØ&.Ñ#ˆ�mØ�yÒ Ü—=‘=×$Ñ$ ]°H¸dÀEÓJÐJä�l MÓ2ˆØˆ	Ø�WÒØ &Ñ(¨1Ñ,ˆIÜŸM™M×-Ñ-¨m¸aÀ¸^ÓLˆMÜ—‘×"Ñ" =°(¸DÀ%ÓHˆØ�l‰l˜2Ñ Ñ*ˆØ�c˜4˜C˜4�iÑ Ð r   c                 óz  — | j                  |«      }| j                  r+| j                  || j                  |f| j                  ¬«      }nA| j                  dz  }| j                  |z
  }| j                  ||||z   f| j                  ¬«      }| j                  |«      }| j                  dk(  r| j                  |«      }|S )N)rY   é   r1   )rW   r:   rf   r6   r;   rA   r<   rF   )rJ   rM   Úextra_paddingra   r`   s        r    ÚforwardzEncodecConv1d.forward�   s½   € Ø×:Ñ:¸=ÓIˆà�;Š;à ŸK™K¨¸×8JÑ8JÈMÐ7ZÐae×anÑan˜KÓo‰Mð !×.Ñ.°!Ñ3ˆMØ×-Ñ-°Ñ=ˆLØ ŸK™KØ ¨m¸mÑ.KÐLÐSW×S`ÑS`ð (ó ˆMð Ÿ	™	 -Ó0ˆà�>‰>Ð.Ò.Ø ŸI™I mÓ4ˆMàÐr   )r   r   )Úzeroç        )r   r   r   r   Úintr8   r   ÚTensorrW   Ústaticmethodr   ÚstrÚfloatrf   rj   Ú__classcell__©rL   s   @r    r(   r(   R   s¢   ø„ ÙEð opñ'VØ#&ð'VØ69ð'VØHKð'VØUXð'VØhkõ'VðR
%à—|‘|ð
%ð 
�‰ó
%ð ñ!˜eŸl™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,   c                 óÂ  •— 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«      ‚y y )Nr/   r2   r0   r1   r   ç      ð?zB`trim_right_ratio` != 1.0 only makes sense for causal convolutions)r7   r8   r9   r:   Útrim_right_ratior<   r=   r   ÚConvTranspose1drA   rB   r0   rC   rD   rE   rF   )rJ   rK   r)   r*   r+   r,   r0   rL   s          €r    r8   zEncodecConvTranspose1d.__init__¶   s  ø€ Ü‰ÑÔØ×,Ñ,ˆŒØ &× 7Ñ 7ˆÔØ×)Ñ)ˆŒØ�>‰>Ð!CÑCÜØ[Ð\`×\jÑ\jÐ[kÐlóð ô ×&Ñ& {°LÀ+ÈvÓVˆŒ	ä—h‘h×*Ñ*ˆÜ”2—8‘8×,Ñ,¨mÔ<ÜŸ(™(×3Ñ3×?Ñ?ˆKà×Ñ˜}Ò,Ù# D§I¡IÓ.ˆD�IØ×ÑÐ!2Ò2ÜŸ™ Q¨Ó5ˆDŒIà—’˜t×4Ñ4¸Ò;ÜÐaÓbÐbð  <�r   c                 ó~  — | j                   j                  d   }| j                   j                  d   }||z
  }| j                  |«      }| j                  dk(  r| j	                  |«      }| j
                  r#t        j                  || j                  z  «      }n|dz  }||z
  }|j                  d   |z
  }|d||…f   }|S )Nr   r1   rh   rP   .)
rA   r+   r,   r<   rF   r:   ÚmathrR   rx   rQ   )rJ   rM   r+   r,   r6   ra   r`   re   s           r    rj   zEncodecConvTranspose1d.forwardÎ   sÈ   € Ø—i‘i×+Ñ+¨AÑ.ˆØ—‘×!Ñ! !Ñ$ˆØ# fÑ,ˆàŸ	™	 -Ó0ˆà�>‰>Ð.Ò.Ø ŸI™I mÓ4ˆMð �;Š;ô !ŸI™I m°d×6KÑ6KÑ&KÓL‰Mð *¨QÑ.ˆMà$ }Ñ4ˆð ×!Ñ! "Ñ%¨Ñ5ˆØ% c¨<¸Ð+;Ð&;Ñ<ˆØÐr   )r   )r   r   r   r   rm   r8   rj   rr   rs   s   @r    ru   ru   ³   s3   ø„ ÙNñc¨Cð c¸sð cÐQTð cÐ^aõ cö0r   ru   c                   ó(   ‡ — e Zd ZdZˆ 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.
    c                 ón   •— t         ‰| �  «        t        j                  |||j                  «      | _        y ©N)r7   r8   r   ÚLSTMÚnum_lstm_layersÚlstm)rJ   rK   Ú	dimensionrL   s      €r    r8   zEncodecLSTM.__init__ñ   s(   ø€ Ü‰ÑÔÜ—G‘G˜I y°&×2HÑ2HÓIˆ�	r   c                 ó€   — |j                  ddd«      }| j                  |«      d   |z   }|j                  ddd«      }|S )Nrh   r   r   )Úpermuter‚   )rJ   rM   s     r    rj   zEncodecLSTM.forwardõ   sH   € Ø%×-Ñ-¨a°°AÓ6ˆØŸ	™	 -Ó0°Ñ3°mÑCˆØ%×-Ñ-¨a°°AÓ6ˆØÐr   )r   r   r   r   r8   rj   rr   rs   s   @r    r}   r}   ì   s   ø„ ñôJör   r}   c                   ó<   ‡ — 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.
    rK   ÚdimÚ	dilationsc           	      ó   •— t         ‰| �  «        |j                  df}t        |«      t        |«      k7  rt	        d«      ‚||j
                  z  }g }t        t        ||«      «      D ]R  \  }\  }}	|dk(  r|n|}
|t        |«      dz
  k(  r|n|}|t        j                  «       gz  }|t        ||
|||	¬«      gz  }ŒT t        j                  |«      | _        |j                  rt        |||d¬«      | _        y t        j                  «       | _        y )Nr   z7Number of kernel sizes should match number of dilationsr   r3   )r+   )r7   r8   Úresidual_kernel_sizeÚlenr=   ÚcompressÚ	enumerateÚzipr   ÚELUr(   Ú
ModuleListÚblockÚuse_conv_shortcutÚshortcutÚIdentity)rJ   rK   rˆ   r‰   Úkernel_sizesÚhiddenr’   Úir+   r-   Úin_chsÚout_chsrL   s               €r    r8   zEncodecResnetBlock.__init__  s  ø€ Ü‰ÑÔØ×3Ñ3°QÐ7ˆÜˆ|Ó¤ I£Ò.ÜÐVÓWÐWà˜Ÿ™Ñ'ˆØˆÜ*3´C¸ÀiÓ4PÓ*Qò 	^Ñ&ˆAÑ&�˜XØ šF‘S¨ˆFØ¤# lÓ"3°aÑ"7Ò7‘c¸VˆGØ”b—f‘f“h�ZÑˆEØ”m F¨F°G¸[ÐS[Ô\Ð]Ñ]‰Eð		^ô
 —]‘] 5Ó)ˆŒ
à×#Ò#Ü)¨&°#°sÈÔJˆD�MäŸK™K›MˆD�Mr   c                 ó`   — |}| j                   D ]
  } ||«      }Œ | j                  |«      |z   S r   )r’   r”   )rJ   rM   ÚresidualÚlayers       r    rj   zEncodecResnetBlock.forward  s:   € Ø ˆØ—Z‘Zò 	1ˆEÙ! -Ó0‰Mð	1ð �}‰}˜XÓ&¨Ñ6Ð6r   )
r   r   r   r   r   rm   r   r8   rj   rr   rs   s   @r    r‡   r‡   ü   s+   ø„ ñð*˜}ð *°3ð *À4ÈÁ9õ *ö(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.rK   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"                  |«      | _        y )Nr   rh   ©r+   r,   )r7   r8   r(   Úaudio_channelsÚnum_filtersr+   ÚreversedÚupsampling_ratiosÚrangeÚnum_residual_layersr‡   Údilation_growth_rater   r�   r}   Úhidden_sizeÚlast_kernel_sizer‘   Úlayers)rJ   rK   ÚmodelÚscalingÚratioÚcurrent_scaleÚjrL   s          €r    r8   zEncodecEncoder.__init__   sa  ø€ Ü‰ÑÔÜ˜v v×'<Ñ'<¸f×>PÑ>PÐRX×RdÑRdÓeÐfˆØˆô ˜f×6Ñ6Ó7ò 	ˆEØ# f×&8Ñ&8Ñ8ˆMä˜6×5Ñ5Ó6ò j�ØÔ,¨V°]ÀV×E`ÑE`ÐbcÑEcÐefÐDgÓhÐiÑi‘ðjð ”b—f‘f“h�ZÑˆEØ”m F¨M¸=È1Ñ;LÐZ_ÐbcÑZcÐlqÔrÐsÑsˆEØ�q‰L‰Gð	ð 	”+˜f g°×0BÑ0BÑ&BÓCÐDÑDˆØ”"—&‘&“(�ÑˆØ”- ¨°&×2DÑ2DÑ(DÀf×FXÑFXÐZ`×ZqÑZqÓrÐsÑsˆä—m‘m EÓ*ˆ�r   c                 ó8   — | j                   D ]
  } ||«      }Œ |S r   ©r«   ©rJ   rM   r�   s      r    rj   zEncodecEncoder.forward6  ó%   € Ø—[‘[ò 	1ˆEÙ! -Ó0‰Mð	1àÐr   ©r   r   r   r   r   r8   rj   rr   rs   s   @r    rŸ   rŸ     s   ø„ Ù,ð+˜}õ +ö,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.rK   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&                  |«      | _        y )Nrh   r¡   r   )r7   r8   rm   rŒ   r¥   r(   r©   r£   r+   r}   r   r�   ru   r¦   r§   r‡   r¨   r¢   rª   r‘   r«   )rJ   rK   r­   r¬   r®   r¯   r°   rL   s          €r    r8   zEncodecDecoder.__init__?  s{  ø€ Ü‰ÑÔÜ�aœ3˜v×7Ñ7Ó8Ñ8Ó9ˆÜ˜v v×'9Ñ'9¸7ÀV×EWÑEWÑ;WÐY_×YkÑYkÓlÐmˆà”+˜f g°×0BÑ0BÑ&BÓCÐDÑDˆð ×-Ñ-ò 
	ˆEØ# f×&8Ñ&8Ñ8ˆMà”b—f‘f“h�ZÑˆEØÜ& v¨}¸mÈqÑ>PÐ^cÐfgÑ^gÐpuÔvðñ ˆEô ˜6×5Ñ5Ó6ò o�ØÔ,¨V°]ÀaÑ5GÈ&×JeÑJeÐghÑJhÐjkÐIlÓmÐnÑn‘ðoà˜‰M‰Gð
	ð 	”"—&‘&“(�ÑˆØ”- ¨×(:Ñ(:¸F×<QÑ<QÐSY×SjÑSjÓkÐlÑlˆÜ—m‘m EÓ*ˆ�r   c                 ó8   — | j                   D ]
  } ||«      }Œ |S r   r²   r³   s      r    rj   zEncodecDecoder.forwardX  r´   r   rµ   rs   s   @r    r·   r·   <  s   ø„ Ù,ð+˜}õ +ö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.rK   c                 ó¦  •— t         ‰| �  «        t        j                  |j                  |j
                  «      }|j                  | _        | j                  dt        j                  dg«      «       | j                  dt        j                  |j                  «      «       | j                  d|«       | j                  d|j                  «       «       y )NÚinitedTÚcluster_sizeÚembedÚ	embed_avg)	r7   r8   r   ÚzerosÚcodebook_sizeÚcodebook_dimrI   rn   Úclone)rJ   rK   r¿   rL   s      €r    r8   z!EncodecEuclideanCodebook.__init__a  s˜   ø€ Ü‰ÑÔÜ—‘˜F×0Ñ0°&×2EÑ2EÓFˆà#×1Ñ1ˆÔà×Ñ˜X¤u§|¡|°T°FÓ';Ô<Ø×Ñ˜^¬U¯[©[¸×9MÑ9MÓ-NÔOØ×Ñ˜W eÔ,Ø×Ñ˜[¨%¯+©+«-Õ8r   c                 ó  — | j                   j                  «       }|j                  d«      j                  dd¬«      }|d|z  |z  z
  |j                  d«      j                  dd¬«      z    }|j	                  d¬«      j
                  }|S )Nrh   r   T©Úkeepdimr   rP   )rˆ   )r¿   ÚtÚpowÚsumr_   Úindices)rJ   rM   r¿   Úscaled_statesÚdistÚ	embed_inds         r    Úquantizez!EncodecEuclideanCodebook.quantizel  s‚   € Ø—
‘
—‘“ˆØ%×)Ñ)¨!Ó,×0Ñ0°¸DÐ0ÓAˆØ  ]Ñ!2°UÑ!:Ñ:¸U¿Y¹YÀq»\×=MÑ=MÈaÐY]Ð=MÓ=^Ñ^Ð_ˆØ—H‘H �HÓ$×,Ñ,ˆ	ØÐr   c                 ó�   — |j                   }|j                  d|d   f«      }| j                  |«      } |j                  |d d Ž }|S )NrP   )rQ   ÚreshaperÏ   Úview)rJ   rM   rQ   rÎ   s       r    ÚencodezEncodecEuclideanCodebook.encodes  sO   € Ø×#Ñ#ˆà%×-Ñ-¨r°5¸±9¨oÓ>ˆà—M‘M -Ó0ˆ	à"�I—N‘N E¨#¨2 JÐ/ˆ	ØÐr   c                 óZ   — t         j                  j                  || j                  «      }|S r   )r   r]   Ú	embeddingr¿   ©rJ   rÎ   rÏ   s      r    ÚdecodezEncodecEuclideanCodebook.decode}  s!   € Ü—=‘=×*Ñ*¨9°d·j±jÓAˆØˆr   )
r   r   r   r   r   r8   rÏ   rÓ   r×   rr   rs   s   @r    r»   r»   ^  s!   ø„ Ù+ð	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.
    rK   c                 óB   •— t         ‰| �  «        t        |«      | _        y r   )r7   r8   r»   Úcodebook©rJ   rK   rL   s     €r    r8   z"EncodecVectorQuantization.__init__‡  s   ø€ Ü‰ÑÔÜ0°Ó8ˆ�r   c                 ób   — |j                  ddd«      }| j                  j                  |«      }|S ©Nr   rh   r   )r…   rÛ   rÓ   )rJ   rM   Úembed_ins      r    rÓ   z EncodecVectorQuantization.encode‹  s/   € Ø%×-Ñ-¨a°°AÓ6ˆØ—=‘=×'Ñ'¨Ó6ˆØˆr   c                 ób   — | j                   j                  |«      }|j                  ddd«      }|S rÞ   )rÛ   r×   r…   rÖ   s      r    r×   z EncodecVectorQuantization.decode�  s/   € Ø—=‘=×'Ñ'¨	Ó2ˆØ×#Ñ# A q¨!Ó,ˆØˆr   )	r   r   r   r   r   r8   rÓ   r×   rr   rs   s   @r    rÙ   rÙ   ‚  s   ø„ ñð9˜}õ 9òö
r   rÙ   c                   ó¼   ‡ — e Zd ZdZdefˆ fd„Zddee   defd„Z	dde
j                  dee   de
j                  fd„Zd	e
j                  de
j                  fd
„Zˆ xZS )ÚEncodecResidualVectorQuantizerzResidual Vector Quantizer.rK   c                 ó  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _	        y c c}w r   )
r7   r8   rÂ   Ú
frame_rateÚnum_quantizersr   r‘   r¦   rÙ   r«   )rJ   rK   Ú_rL   s      €r    r8   z'EncodecResidualVectorQuantizer.__init__™  sh   ø€ Ü‰ÑÔØ#×1Ñ1ˆÔØ ×+Ñ+ˆŒØ$×3Ñ3ˆÔÜ—m‘mÔPUÐV\×VkÑVkÓPlÖ$mÈ1Ô%>¸vÕ%FÒ$mÓnˆ�ùÒ$ms   Á)BÚ	bandwidthrN   c           	      óà   — t        j                  | j                  «      | j                  z  }| j                  }|�3|dkD  r.t        t        dt        j                  |dz  |z  «      «      «      }|S )z:Return num_quantizers based on specified target bandwidth.rl   r   iè  )r{   Úlog2rÂ   rä   rå   rm   r_   Úfloor)rJ   rç   Úbw_per_qrå   s       r    Ú get_num_quantizers_for_bandwidthz?EncodecResidualVectorQuantizer.get_num_quantizers_for_bandwidth   s`   € ä—9‘9˜T×/Ñ/Ó0°4·?±?ÑBˆØ×,Ñ,ˆØÐ  Y°¢_Ü ¤ Q¬¯
©
°9¸tÑ3CÀhÑ3NÓ(OÓ!PÓQˆNØÐr   Ú
embeddingsc                 óò   — | j                  |«      }|}g }| j                  d| D ]:  }|j                  |«      }|j                  |«      }||z
  }|j	                  |«       Œ< t        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)
rJ   rí   rç   rå   rœ   Úall_indicesr�   rË   Ú	quantizedÚout_indicess
             r    rÓ   z%EncodecResidualVectorQuantizer.encode¨  s‚   € ð
 ×>Ñ>¸yÓIˆØˆØˆØ—[‘[  .Ð1ò 	(ˆEØ—l‘l 8Ó,ˆGØŸ™ WÓ-ˆIØ )Ñ+ˆHØ×Ñ˜wÕ'ð		(ô
 —k‘k +Ó.ˆØÐr   Úcodesc                 ó¸   — t        j                  d|j                  ¬«      }t        |«      D ]*  \  }}| j                  |   }|j                  |«      }||z   }Œ, |S )z7Decode the given codes to the quantized representation.rl   )Údevice)r   rG   rö   rŽ   r«   r×   )rJ   rô   Úquantized_outr˜   rË   r�   rò   s          r    r×   z%EncodecResidualVectorQuantizer.decode¸  s[   € äŸ™ S°·±Ô>ˆÜ# EÓ*ò 	6‰JˆAˆwØ—K‘K ‘NˆEØŸ™ WÓ-ˆIØ)¨IÑ5‰Mð	6ð Ðr   r   )r   r   r   r   r   r8   r   rq   rm   rì   r   rn   rÓ   r×   rr   rs   s   @r    râ   râ   –  sp   ø„ Ù$ðo˜}õ oñ¸(À5¹/ð ÐUXó ñ §¡ð ¸(À5¹/ð ÐUZ×UaÑUaó ð ˜EŸL™Lð ¨U¯\©\÷ r   râ   c                   ó"   — e Zd ZdZeZdZdZd„ Zy)ÚEncodecPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ÚencodecÚinput_valuesc                 óŽ  — t        |t        j                  «      rm|j                  j                  j                  d| j                  j                  ¬«       |j                  �%|j                  j                  j                  «        yyt        |t        j                  t        j                  f«      rJ|j                  j                  j                  «        |j                  j                  j                  d«       yt        |t        j                  «      r t        j                  j                  |j                  «       |j                  �jt!        j"                  |j$                  |j&                  |j(                  d   z  z  «      }t        j                  j+                  |j                  | |¬«       yyt        |t        j,                  «      rz|j                  j                  j                  d| j                  j                  ¬«       |j.                  �2|j                  j                  |j.                     j                  «        yyt        |t        j0                  «      rb|j3                  «       D ]N  \  }}d|v r t        j                  j5                  |«       Œ*d|v sŒ/t        j                  j7                  |d«       ŒP yy)	zInitialize the weightsrl   )ÚmeanÚstdNrw   r   )ÚaÚbÚweightÚbias)Ú
isinstancer   ÚLinearr  ÚdataÚnormal_rK   Úinitializer_ranger  Úzero_Ú	LayerNormrE   Úfill_r@   ÚinitÚkaiming_normal_r{   ÚsqrtÚgroupsr)   r+   Úuniform_Ú	EmbeddingÚpadding_idxr€   Únamed_parametersÚxavier_uniform_Ú	constant_)rJ   ÚmoduleÚkÚnameÚparams        r    Ú_init_weightsz$EncodecPreTrainedModel._init_weightsÌ  sî  € ä�fœbŸi™iÔ(Ø�M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡¬r¯|©|Ð <Ô=Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)Ü˜¤§	¡	Ô*Ü�G‰G×#Ñ# F§M¡MÔ2Ø�{‰{Ð&Ü—I‘I˜fŸm™m¨v×/AÑ/AÀF×DVÑDVÐWXÑDYÑ/YÑZÓ[�Ü—‘× Ñ  §¡°°°aÐ Õ8ð 'ô ˜¤§¡Ô-Ø�M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ×!Ñ!Ð-Ø—‘×"Ñ" 6×#5Ñ#5Ñ6×<Ñ<Õ>ð .ä˜¤§¡Ô(Ø%×6Ñ6Ó8ò 2‘��eØ˜tÑ#Ü—G‘G×+Ñ+¨EÕ2Ø˜t’^Ü—G‘G×%Ñ% e¨SÕ1ñ	2ð )r   N)	r   r   r   r   r   Úconfig_classÚbase_model_prefixÚmain_input_namer  r   r   r    rù   rù   Â  s   „ ñð
 !€LØ!ÐØ$€Oó2r   rù   aL  
    This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the
    library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads
    etc.)

    This model is also a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass.
    Use it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage
    and behavior.

    Parameters:
        config ([`EncodecConfig`]):
            Model configuration class with all the parameters of the model. Initializing with a config file does not
            load the weights associated with the model, only the configuration. Check out the
            [`~PreTrainedModel.from_pretrained`] method to load the model weights.
a(  
    Args:
        input_values (`torch.FloatTensor` of shape `(batch_size, channels, sequence_length)`, *optional*):
            Raw audio input converted to Float and padded to the approriate 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 `(batch_size, nb_chunks, chunk_length)`, *optional*):
            Discret code embeddings computed using `model.encode`.
        audio_scales (`torch.Tensor` of shape `(batch_size, nb_chunks)`, *optional*):
            Scaling factor for each `audio_codes` input.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
z%The EnCodec neural audio codec model.c                   óp  ‡ — e Zd Zdefˆ fd„Zd„ Zd„ Zdej                  de	de
deej                  eej                     f   fd	„Z	 	 	 ddej                  deej                     dee	   d
ee   deeej                  eej                     f   ef   f
d„Zedeej                     de
fd„«       Zddej                  deej                     dej                  fd„Z	 	 ddej                  dej                  deej                     d
ee   deeej                  ej                  f   ef   f
d„Z ee«       eee¬«      	 	 	 	 	 ddej                  deej                     dee	   deej                     deej                     d
ee   deeej                  ej                  f   ef   fd„«       «       Zˆ xZS )ÚEncodecModelrK   c                 ó‚  •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        |«      | _        t        t        j                  | j                  j                  «      «      | _        d| j                  z  | j                  j                  k7  rt        d«      ‚| j                  «        y )Nrh   z'The codebook_size must be a power of 2.)r7   r8   rK   rŸ   Úencoderr·   Údecoderrâ   Ú	quantizerrm   r{   ré   rÂ   Úbits_per_codebookr=   Ú	post_initrÜ   s     €r    r8   zEncodecModel.__init__  s�   ø€ Ü‰Ñ˜Ô ØˆŒä% fÓ-ˆŒÜ% fÓ-ˆŒä7¸Ó?ˆŒä!$¤T§Y¡Y¨t¯{©{×/HÑ/HÓ%IÓ!JˆÔØˆd×$Ñ$Ñ$¨¯©×(AÑ(AÒAÜÐFÓGÐGð 	�‰Õr   c                 ó   — | j                   S r   )r   ©rJ   s    r    Úget_encoderzEncodecModel.get_encoder-  ó   € Ø�|‰|Ðr   c                 ó   — | j                   S r   )r!  r&  s    r    Úget_decoderzEncodecModel.get_decoder0  r(  r   rû   rç   Úpadding_maskrN   c                 óž  — |j                   d   }|| j                  j                  z  }| j                  j                  �A|d| j                  j                  z   kD  r%t	        d|› d| j                  j                  › �«      ‚d}| j                  j
                  rt||j                  d«      z  }t        j                  |dd¬«      |j                   d   z  }|j                  d	«      j                  dd¬
«      j                  «       dz   }||z  }| j                  |«      }| j                  j                  ||«      }	|	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.
        rP   Ngñhãˆµøä>zDuration of frame (z) is longer than chunk r   TrÆ   rh   )rˆ   rÇ   g:Œ0âŽyE>r   )rQ   rK   Úsampling_rateÚchunk_length_sÚRuntimeErrorÚ	normalizeÚ	unsqueezer   rÊ   rÉ   rý   r  r   r"  rÓ   Ú	transpose)
rJ   rû   rç   r+  rT   ÚdurationÚscaleÚmonorí   rô   s
             r    Ú_encode_framezEncodecModel._encode_frame3  s3  € ð ×#Ñ# BÑ'ˆØ˜DŸK™K×5Ñ5Ñ5ˆà�;‰;×%Ñ%Ð1°hÀÈÏÉ×HbÑHbÑAbÒ6bÜÐ!4°X°JÐ>UÐVZ×VaÑVa×VpÑVpÐUqÐrÓsÐsàˆØ�;‰;× Ò à'¨,×*@Ñ*@ÀÓ*CÑCˆLÜ—9‘9˜\¨1°dÔ;¸l×>PÑ>PÐQRÑ>SÑSˆDØ—H‘H˜Q“K×$Ñ$¨°TÐ$Ó:×?Ñ?ÓAÀDÑHˆEØ'¨%Ñ/ˆLà—\‘\ ,Ó/ˆ
Ø—‘×%Ñ% j°)Ó<ˆØ—‘  1Ó%ˆØ�eˆ|Ðr   Úreturn_dictc                 ód  — |�|n| j                   j                  }|€| j                   j                  d   }|| j                   j                  vr&t        d|› d| j                   j                  › d�«      ‚|j                  \  }}}|dk  s|dkD  rt        d|› �«      ‚| j                   j
                  }|€|}|}	n| j                   j                  }	|€#t        j                  |«      j                  «       }g }
g }||	z
  }||	z  |z
  dk7  rt        d	«      ‚t        d||z
  |	«      D ]e  }|d
|||z   …f   j                  «       }|dd…dd…|||z   …f   }| j                  |||«      \  }}|
j                  |«       |j                  |«       Œg t        j                  |
«      }
|s|
|fS t        |
|«      S )a  
        Encodes the input audio waveform into discrete codes.

        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:
            A list of frames containing the discrete encoded codes for the input audio waveform, along with rescaling
            factors for each chunk when `normalize` is True. Each frames is a tuple `(codebook, scale)`, with
            `codebook` of shape `[batch_size, num_codebooks, frames]`.
        Nr   z)This model doesn't support the bandwidth z. Select one of ú.r   rh   z1Number of audio channels must be 1 or 2, but got zkThe input length is not properly padded for batched chunked decoding. Make sure to pad the input correctly..)rK   r7  Útarget_bandwidthsr=   rQ   Úchunk_lengthÚchunk_strider   Ú	ones_likeÚboolr¦   r6  rï   rð   r#   )rJ   rû   r+  rç   r7  ræ   ÚchannelsÚinput_lengthr;  r,   Úencoded_framesÚscalesÚstepÚoffsetÚmaskÚframeÚencoded_framer4  s                     r    rÓ   zEncodecModel.encodeM  sæ  € ð2 &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐØŸ™×5Ñ5°aÑ8ˆIØ˜DŸK™K×9Ñ9Ñ9ÜØ;¸I¸;ÐFVÐW[×WbÑWb×WtÑWtÐVuÐuvÐwóð ð %1×$6Ñ$6Ñ!ˆˆ8�\à�aŠ<˜8 aš<ÜÐPÐQYÐPZÐ[Ó\Ð\à—{‘{×/Ñ/ˆØÐØ'ˆLØ!‰Fà—[‘[×-Ñ-ˆFàÐÜ Ÿ?™?¨<Ó8×=Ñ=Ó?ˆLàˆØˆà˜fÑ$ˆØ˜6Ñ! TÑ)¨QÒ.ÜØ}óð ô ˜A˜|¨dÑ2°FÓ;ò 	!ˆFØ  V¨f°|Ñ.CÐ%CÐ CÑD×IÑIÓKˆDØ ¢¢A v°¸Ñ0EÐ'EÐ!EÑFˆEØ#'×#5Ñ#5°e¸YÈÓ#MÑ ˆM˜5Ø×!Ñ! -Ô0Ø�M‰M˜%Õ ð	!ô Ÿ™ ^Ó4ˆáØ" FÐ+Ð+ä# N°FÓ;Ð;r   Ú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
  j                  «       z
  }t        j                  |||¬«      }	t        j                  g |¢|‘­||dœŽ}
d}| D ]D  }|j                  d   }|
d|||z   …fxx   |d | |z  z  cc<   |	|||z   xxx |d | z  ccc ||z  }ŒF |	j                  «       dk(  rt        d	|	› d
�«      ‚|
|	z  S )Nr   z!`frames` cannot be an empty list.rP   r   rh   )rö   r4   g      à?.z7`sum_weight` minimum element must be bigger than zero: ú`)
rŒ   r=   rö   r4   rQ   r   ÚlinspaceÚabsrÁ   Úmin)rH  r,   rö   r4   rQ   Ú
total_sizeÚframe_lengthÚtime_vecr  Ú
sum_weightÚoutrD  rF  s                r    Ú_linear_overlap_addz EncodecModel._linear_overlap_add•  s—  € ô( ˆv‹;˜!ÒÜÐ@ÓAÐAà˜‘×!Ñ!ˆØ�q‘	—‘ˆØ�q‘	—‘  Ð$ˆØœs 6›{¨Q™Ñ/°&¸±*×2BÑ2BÀ2Ñ2FÑFˆ
à˜a‘y—‘ rÑ*ˆÜ—>‘> ! Q¨°qÑ(8ÀÈuÔUÐVWÐXZÐ[ˆØ˜ 3™×+Ñ+Ó-Ñ-ˆä—[‘[ °FÀ%ÔHˆ
Ü�k‰kÐI˜5ÐI *ÑI°VÀ5ÒIˆØˆàò 	ˆEØ Ÿ;™; r™?ˆLØ��V˜f |Ñ3Ð3Ð3Ó4¸¸}ÀÐ8MÐPUÑ8UÑUÓ4Ø�v ¨Ñ 5Ó6¸&ÀÀ,Ð:OÑOÓ6Ø�fÑ‰Fð		ð �>‰>Ó˜qÒ ÜÐVÐWaÐVbÐbcÐdÓeÐeà�ZÑÐr   rô   r4  c                 ó²   — |j                  dd«      }| j                  j                  |«      }| j                  |«      }|�||j	                  ddd«      z  }|S )Nr   r   rP   )r2  r"  r×   r!  rÒ   )rJ   rô   r4  rí   Úoutputss        r    Ú_decode_framezEncodecModel._decode_frameÄ  sV   € Ø—‘  1Ó%ˆØ—^‘^×*Ñ*¨5Ó1ˆ
Ø—,‘,˜zÓ*ˆØÐØ §
¡
¨2¨q°!Ó 4Ñ4ˆGØˆr   r   r$   c                 ó6  — |�|n| j                   j                  }| j                   j                  }|€>t        |«      dk7  rt	        dt        |«      › �«      ‚| j                  |d   |d   «      }ncg }t        ||«      D ](  \  }}	| j                  ||	«      }
|j                  |
«       Œ* | j                  || j                   j                  xs d«      }|�5|j                  d   |j                  d   k  r|dd|j                  d   …f   }|s|fS t        |«      S )aM  
        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 `(batch_size, nb_chunks, chunk_length)`, *optional*):
                Discret code embeddings computed using `model.encode`.
            audio_scales (`torch.Tensor` of shape `(batch_size, nb_chunks)`, *optional*):
                Scaling factor for each `audio_codes` input.
            padding_mask (`torch.Tensor` of shape `(batch_size, 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.

        Nr   zExpected one frame, got r   rP   .)rK   r7  r;  rŒ   r=   rV  r�   rï   rS  r<  rQ   r&   )rJ   r   r$   r+  r7  r;  r   Údecoded_framesrF  r4  rH  s              r    r×   zEncodecModel.decodeÌ  s.  € ð0 &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—{‘{×/Ñ/ˆØÐÜ�;Ó 1Ò$Ü Ð#;¼CÀÓ<LÐ;MÐ!NÓOÐOØ×-Ñ-¨k¸!©n¸lÈ1¹oÓN‰LàˆNä # K°Ó >ò .‘��uØ×+Ñ+¨E°5Ó9�Ø×%Ñ% fÕ-ð.ð  ×3Ñ3°NÀDÇKÁK×D\ÑD\ÒDaÐ`aÓbˆLð Ð#¨×(:Ñ(:¸2Ñ(>À×ASÑASÐTVÑAWÒ(WØ'¨Ð-E¨|×/AÑ/AÀ"Ñ/EÐ-EÐ(EÑFˆLáØ �?Ð"Ü# LÓ1Ð1r   )Úoutput_typer  c                 óH  — |�|n| j                   j                  }|€#t        j                  |«      j	                  «       }|�|€t        d«      ‚|�|€t        d«      ‚|€|€| j                  |||d«      \  }}| j                  ||||¬«      d   }|s||fS t        ||¬«      S )aÇ  
        Returns:

        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
        ```zBYou specified `audio_codes` but did not specify the `audio_scales`zBYou specified `audio_scales` but did not specify the `audio_codes`F)r7  r   )r   r   )	rK   r7  r   r=  r>  r=   rÓ   r×   r   )rJ   rû   r+  rç   r   r$   r7  r   s           r    rj   zEncodecModel.forwardü  sÄ   € ðB &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐÜ Ÿ?™?¨<Ó8×=Ñ=Ó?ˆLàÐ" |Ð';ÜÐaÓbÐbàÐ#¨Ð(;ÜÐaÓbÐbàÐ KÐ$7Ø(,¯©°LÀ,ÐPYÐ[`Ó(aÑ%ˆK˜à—{‘{ ;°¸lÐXc�{ÓdÐefÑgˆÙØ Ð.Ð.ä¨À<ÔPÐPr   )NNNr   )NN)NNNNN)r   r   r   r   r8   r'  r*  r   rn   rq   rm   r   r   r6  r>  r   r#   rÓ   ro   r   rS  rV  r&   r×   r   ÚENCODEC_INPUTS_DOCSTRINGr   r   Ú_CONFIG_FOR_DOCrj   rr   rs   s   @r    r  r    sm  ø„ ð
˜}õ ò òðØ!ŸL™LðØ5:ðØJMðà	ˆu�|‰|˜X e§l¡lÑ3Ð3Ñ	4óð: 04Ø%)Ø&*ñF<à—l‘lðF<ð ˜uŸ|™|Ñ,ðF<ð ˜E‘?ð	F<ð
 ˜d‘^ðF<ð 
ˆu�U—\‘\ 8¨E¯L©LÑ#9Ð9Ñ:Ð<PÐPÑ	QóF<ðP ð,  D¨¯©Ñ$6ð , Àò , ó ð, ñ\ 5§<¡<ð ¸ÀÇÁÑ8Nð ÐZ_×ZfÑZfó ð 04Ø&*ñ.2à—\‘\ð.2ð —l‘lð.2ð ˜uŸ|™|Ñ,ð	.2ð
 ˜d‘^ð.2ð 
ˆu�U—\‘\ 5§<¡<Ð/Ñ0Ð2FÐFÑ	Gó.2ñ` +Ð+CÓDÙ¨=ÀÔWð 04Ø%)Ø.2Ø/3Ø&*ñ1Qà—l‘lð1Qð ˜uŸ|™|Ñ,ð1Qð ˜E‘?ð	1Qð
 ˜eŸl™lÑ+ð1Qð ˜uŸ|™|Ñ,ð1Qð ˜d‘^ð1Qð 
ˆu�U—\‘\ 5§<¡<Ð/Ñ0°-Ð?Ñ	@ò1Qó Xó Eô1Qr   r  ),r   r{   Údataclassesr   Útypingr   r   r   r   r   Útorch.utils.checkpointr   Úmodeling_utilsr
   rB   r   r   r   r   r   Úconfiguration_encodecr   Ú
get_loggerr   r>   r\  r   r#   r&   ÚModuler(   ru   r}   r‡   rŸ   r·   r»   rÙ   râ   rù   ÚENCODEC_START_DOCSTRINGr[  r  Ú__all__r   r   r    ú<module>rf     sŽ  ðñ ã Ý !ß /Ó /ã Û Ý å -÷õ õ 1ð 
ˆ×	Ñ	˜HÓ	%€ð "€ð ô
5�Kó 
5ó ð
5ð ô
5˜;ó 
5ó ð
5ð ô5˜;ó 5ó ð5ô^�B—I‘Iô ^ôB6˜RŸY™Yô 6ôr�"—)‘)ô ô 7˜Ÿ™ô 7ôB�R—Y‘Yô ô>�R—Y‘Yô ôD!˜rŸy™yô !ôH §	¡	ô ô() R§Y¡Yô )ôX!2˜_ô !2ðHÐ ð"Ð ñB Ø+ØóôSQÐ)ó SQó	ðSQðl Ð3Ð
4�r   