§
    �M§jÛ;  ã                  ó   — d Z ddlmZ ddlZddlmZmZ ddlZddlmZ ddl	m
Z
mZ d„ Zd„ Zd	„ Z G d
„ dej        ¦  «        Z	 dd d„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 G d„ de¦  «        Ze                     d¦  «         e                     d¦  «         dS )!a3  YuE2 Oobleck audio decoder with exact-boundary tiled decoding.

Oobleck and SnakeBeta derived from stable-audio-tools a6ae0cdf8b2eb1567a4b42ceadddec3712d99d45.
Copyright (c) 2023 Stability AI; Copyright (c) 2022 NVIDIA CORPORATION.
MIT: see THIRD_PARTY_NOTICES.md shipped with this module/model repository.
é    )ÚannotationsN)ÚCallableÚLiteral)Únn)ÚPretrainedConfigÚPreTrainedModelc                 ó$   — t          j        | i |¤ŽS ©N)r   ÚConv1d©ÚargsÚkwargss     ú;C:\Users\johnn\OneDrive\Documents\AI\models\TTS\yue2\vae.pyÚWNConv1dr      s   € ÝŒ9�dÐ%˜fÐ%Ð%Ð%ó    c                 ó$   — t          j        | i |¤ŽS r
   )r   ÚConvTranspose1dr   s     r   ÚWNConvTranspose1dr      s   € ÝÔ˜tÐ. vÐ.Ð.Ð.r   c                ón   — | d|dz   z  t          j        t          j        | |z  ¦  «        d¦  «        z  z   S )Nç      ð?ç•Ö&è.>é   )ÚtorchÚpowÚsin)ÚxÚalphaÚbetas      r   Ú
snake_betar      sA   € Ø��t˜kÑ)Ñ*­e¬iÝŒ	�!�e‘)ÑÔ˜añ/ô /ñ ñ ð r   c                  ó,   ‡ — e Zd Z	 	 	 dˆ fd„	Zd„ Zˆ xZS )Ú	SnakeBetar   Tc                ó"  •— t          ¦   «                              ¦   «          || _        || _        | j        r]t	          j        t          j        |¦  «        |z  ¦  «        | _        t	          j        t          j        |¦  «        |z  ¦  «        | _	        n\t	          j        t          j
        |¦  «        |z  ¦  «        | _        t	          j        t          j
        |¦  «        |z  ¦  «        | _	        || j        _        || j	        _        d| _        d S )Nr   )ÚsuperÚ__init__Úin_featuresÚalpha_logscaler   Ú	Parameterr   Úzerosr   r   ÚonesÚrequires_gradÚno_div_by_zero)Úselfr%   r   Úalpha_trainabler&   Ú	__class__s        €r   r$   zSnakeBeta.__init__    sÛ   ø€ õ 	‰Œ×ÒÑÔÐØ&ˆÔØ,ˆÔØÔð 	FÝœ¥e¤k°+Ñ&>Ô&>ÀÑ&FÑGÔGˆDŒJÝœ¥U¤[°Ñ%=Ô%=ÀÑ%EÑFÔFˆDŒIˆIåœ¥e¤j°Ñ&=Ô&=ÀÑ&EÑFÔFˆDŒJÝœ¥U¤Z°Ñ%<Ô%<¸uÑ%DÑEÔEˆDŒIØ#2ˆŒ
Ô Ø"1ˆŒ	ÔØ)ˆÔÐÐr   c                ó6  — | j                              d¦  «                             d¦  «        }| j                             d¦  «                             d¦  «        }| j        r(t	          j        |¦  «        }t	          j        |¦  «        }t          |||¦  «        S )Nr   éÿÿÿÿ)r   Ú	unsqueezer   r&   r   Úexpr   )r,   r   r   r   s       r   ÚforwardzSnakeBeta.forward4   s�   € Ø”
×$Ò$ QÑ'Ô'×1Ò1°"Ñ5Ô5ˆØŒy×"Ò" 1Ñ%Ô%×/Ò/°Ñ3Ô3ˆØÔð 	#Ý”I˜eÑ$Ô$ˆEÝ”9˜T‘?”?ˆDÝ˜!˜U DÑ)Ô)Ð)r   )r   TT©Ú__name__Ú
__module__Ú__qualname__r$   r3   Ú__classcell__©r.   s   @r   r!   r!      sW   ø€ € € € € ð ØØð*ð *ð *ð *ð *ð *ð(*ð *ð *ð *ð *ð *ð *r   r!   Ú
activationúLiteral['elu', 'snake', 'none']Úreturnú	nn.Modulec                ó´   — | dk    rt          j        ¦   «         S | dk    rt          |¦  «        S | dk    rt          j        ¦   «         S t	          d| › �¦  «        ‚)NÚeluÚsnakeÚnonezUnknown activation )r   ÚELUr!   ÚIdentityÚ
ValueError)r:   Úchannelss     r   Úget_activationrF   =   sa   € ð �UÒÐÝŒv‰xŒxˆØ�WÒÐÝ˜Ñ"Ô"Ð"Ø�VÒÐÝŒ{‰}Œ}ÐÝ
Ð7¨:Ð7Ð7Ñ
8Ô
8Ð8r   c                  ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚResidualUnitc           
     ó  •— t          ¦   «                              ¦   «          || _        |dz  dz  }t          j        t          ||¬¦  «        t          ||d||¬¦  «        t          ||¬¦  «        t          ||d¬¦  «        ¦  «        | _        d S )Né   r   ©rE   é   )Úin_channelsÚout_channelsÚkernel_sizeÚdilationÚpaddingé   )rM   rN   rO   )r#   r$   rP   r   Ú
SequentialrF   r   Úlayers)r,   rM   rN   rP   Úact_typerQ   r.   s         €r   r$   zResidualUnit.__init__J   s¤   ø€ Ý‰Œ×ÒÑÔÐØ ˆŒØ˜uÑ%¨!Ñ+ˆÝ”mÝ˜8¨lÐ;Ñ;Ô;ÝØ'Ø)ØØ!Øðñ ô õ ˜8¨lÐ;Ñ;Ô;ÝØ(Ø)Øðñ ô ñ
ô 
ˆŒˆˆr   c                ó:   — |}|                       |¦  «        }||z   S r
   ©rT   )r,   r   Úresiduals      r   r3   zResidualUnit.forward_   s    € ØˆØ�KŠK˜‰NŒNˆØ�8‰|Ðr   r4   r9   s   @r   rH   rH   I   sG   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð*ð ð ð ð ð ð r   rH   c                  ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚDecoderBlockc                óX  •— t          ¦   «                              ¦   «          t          ||d|z  |t          j        |dz  ¦  «        ¬¦  «        }t          j        t          ||¬¦  «        |t          ||d|¦  «        t          ||d|¦  «        t          ||d|¦  «        ¦  «        | _	        d S )Nr   )rM   rN   rO   ÚstriderQ   rK   rR   é   é	   )
r#   r$   r   ÚmathÚceilr   rS   rF   rH   rT   )r,   rM   rN   r\   rU   Úupsample_layerr.   s         €r   r$   zDecoderBlock.__init__f   s­   ø€ Ý‰Œ×ÒÑÔÐÝ*Ø#Ø%Ø˜F™
ØÝ”I˜f q™jÑ)Ô)ð
ñ 
ô 
ˆõ ”mÝ˜8¨kÐ:Ñ:Ô:ØÝ˜ |°Q¸ÑAÔAÝ˜ |°Q¸ÑAÔAÝ˜ |°Q¸ÑAÔAñ
ô 
ˆŒˆˆr   c                ó,   — |                       |¦  «        S r
   rW   ©r,   r   s     r   r3   zDecoderBlock.forwardw   ó   € Ø�{Š{˜1‰~Œ~Ðr   r4   r9   s   @r   rZ   rZ   e   sG   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð"ð ð ð ð ð ð r   rZ   c                  ó<   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 	 	 dˆ fd	„	Zd
„ Zˆ xZS )ÚOobleckDecoderr   é€   é    ©rR   r   é   é   ©r   rj   rk   rk   FÚvanillaTc           
     ó
  •— t          ¦   «                              ¦   «          |s|	s|
rt          d¦  «        ‚|r|dk    rt          d¦  «        ‚|| _        dgt	          |¦  «        z   }t          |¦  «        | _        t          ||d         |z  dd¬¦  «        g}|rd	nd
}t          | j        dz
  dd¦  «        D ]F}| 	                    t          ||         |z  ||dz
           |z  ||dz
           |¬¦  «        ¦  «         ŒG|                     t          ||d         |z  ¬¦  «        t          |d         |z  |ddd¬¦  «        |rt          j        ¦   «         nt          j        ¦   «         g¦  «         t          j        |Ž | _        d S )Nz+Unsupported option for the released decoderrm   z+The released decoder uses vanilla SnakeBetarR   r0   rL   r]   )rM   rN   rO   rQ   r@   r?   r   )rM   rN   r\   rU   rK   F)rM   rN   rO   rQ   Úbias)r#   r$   rD   rN   ÚlistÚlenÚdepthr   ÚrangeÚappendrZ   ÚextendrF   r   ÚTanhrC   rS   rT   )r,   rN   rE   Ú
latent_dimÚc_multsÚstridesÚ	use_snakeÚ
snake_typeÚantialias_activationÚuse_nearest_upsampleÚ
use_filterÚ
final_tanhrT   rU   Úir.   s                  €r   r$   zOobleckDecoder.__init__|   sÑ  ø€ õ 	‰Œ×ÒÑÔÐØð 	LÐ#7ð 	L¸:ð 	LÝÐJÑKÔKÐKØð 	L˜ yÒ0Ð0ÝÐJÑKÔKÐKØ(ˆÔØ�#�˜W™œÑ%ˆÝ˜‘\”\ˆŒ
åØ&Ø$ Rœ[¨8Ñ3ØØð	ñ ô ð
ˆð (Ð2�7�7¨UˆÝ�t”z A‘~ q¨"Ñ-Ô-ð 	ð 	ˆAØ�MŠMÝØ '¨¤
¨XÑ 5Ø!(¨¨Q©¤°(Ñ!:Ø" 1 q¡5œ>Ø%ð	ñ ô ñô ð ð ð 	�Šå˜x°'¸!´*¸xÑ2GÐHÑHÔHÝØ '¨¤
¨XÑ 5Ø!-Ø !ØØðñ ô ð (Ð:•”‘	”	�	­R¬[©]¬]ð
ñ	
ô 	
ð 	
õ ”m VÐ,ˆŒˆˆr   c                ó,   — |                       |¦  «        S r
   rW   rc   s     r   r3   zOobleckDecoder.forward³   rd   r   )r   rg   rh   ri   rl   Frm   FFFTr4   r9   s   @r   rf   rf   {   sp   ø€ € € € € ð ØØØØØØØ"Ø"ØØð5-ð 5-ð 5-ð 5-ð 5-ð 5-ðnð ð ð ð ð ð r   rf   c                  ón   ‡ — e Zd ZdZdZ eh d£¦  «        Zˆ fd„Z eg d¢¦  «        Z	 	 	 	 dˆ fd„	Z	ˆ xZ
S )ÚYuE2VAEConfigzŒConfiguration shared by YuE2-Vae and YuE2-Vae-legacy.

    Use ``standard`` for listening and ``legacy`` for the paper metric baseline.
    Úyue2_vae>   ÚdtypeÚauto_mapÚ	use_cacheÚ
is_decoderÚ
model_typeÚreturn_dictÚtorch_dtypeÚtorchscriptÚbos_token_idÚeos_token_idÚpad_token_idÚarchitecturesÚoutput_attentionsÚis_encoder_decoderÚadd_cross_attentionÚattn_implementationÚtie_word_embeddingsÚoutput_hidden_statesÚtransformers_versionÚdecoder_start_token_idc                ó‚   •‡ — ˆ fd„t          ¦   «                              ¦   «                              ¦   «         D ¦   «         S )Nc                ó@   •— i | ]\  }}|‰j         v s	|‰j        v ¯||“ŒS © )Ú
_hf_fieldsÚ_inference_fields©Ú.0ÚkeyÚvaluer,   s      €r   ú
<dictcomp>z)YuE2VAEConfig.to_dict.<locals>.<dictcomp>É   sE   ø€ ð Lð Lð L™z˜s EØ˜$œ/Ð)Ð)¨S°DÔ4JÐ-JÐ-Jð �UØ-JÐ-JÐ-Jr   )r#   Úto_dictÚitems)r,   r.   s   `€r   r£   zYuE2VAEConfig.to_dictÈ   sP   øø€ ðLð Lð Lð L­U©W¬W¯_ª_Ñ->Ô->×-DÒ-DÑ-FÔ-Fð Lñ Lô Lð 	Lr   )Údecoder_configÚsample_raterw   Údownsampling_ratioÚaudio_channelsÚrelease_variantÚdecode_core_framesÚdecode_halo_framesNé€»  é@   é€  r   Ústandardé   é   c	                ó€  •‡ ‡
— ˆ fd„|	                      ¦   «         D ¦   «         }	|	                     ddg¦  «         |	                     ddddœ¦  «          t          ¦   «         j        di |	¤Ž |pt	          dd	g d
¢g d¢d	dddd¬¦	  «	        ‰ _        h d£Š
ˆ
fd„‰ j                              ¦   «         D ¦   «         ‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _	        t          |¦  «        ‰ _
        |‰ _        t          |¦  «        ‰ _        t          |¦  «        ‰ _        ‰ j        dk     s‰ j        dk     rt          d¦  «        ‚t          j        ‰ j        d         ¦  «        ‰ j	        k    rt          d¦  «        ‚‰ j        d         ‰ j        k    rt          d¦  «        ‚d S )Nc                ó.   •— i | ]\  }}|‰j         v ¯||“ŒS r›   )rœ   rž   s      €r   r¢   z*YuE2VAEConfig.__init__.<locals>.<dictcomp>Ó   s+   ø€ ÐXÐXÐX¡  eÀÈÌÐAWÐAW�#�uÐAWÐAWÐAWr   r�   ÚYuE2VAEr†   zmodeling_vae.YuE2VAEConfigzmodeling_vae.YuE2VAE)Ú
AutoConfigÚ	AutoModelr   r­   )rR   r   rj   rk   r±   rh   )r   r   rj   rj   é   rJ   Trm   F)	rN   rE   rx   ry   rw   rz   r{   r~   r   >   rx   ry   rE   rz   r   rw   r{   r~   rN   r|   r}   c                ó$   •— i | ]\  }}|‰v ¯	||“ŒS r›   r›   )rŸ   r    r¡   Údecoder_fieldss      €r   r¢   z*YuE2VAEConfig.__init__.<locals>.<dictcomp>á   s+   ø€ ÐqÐqÐq©j¨c°5Ð[^ÐbpÐ[pÐ[p˜s EÐ[pÐ[pÐ[pr   rR   r   z#Invalid VAE core/halo configurationry   z/Decoder strides do not match downsampling_ratiorw   z.Decoder input channels do not match latent_dimr›   )r¤   Ú
setdefaultr#   r$   Údictr¥   Úintr¦   rw   r§   r¨   r©   rª   r«   rD   r_   Úprod)r,   r¥   r¦   rw   r§   r¨   r©   rª   r«   r   r¹   r.   s   `         @€r   r$   zYuE2VAEConfig.__init__Î   sþ  øøø€ ð
 YÐXÐXÐX¨v¯|ª|©~¬~ÐXÑXÔXˆØ×Ò˜/¨I¨;Ñ7Ô7Ð7Ø×Ò˜*Ø6Ø/ð'
ð '
ñ 	ô 	ð 	ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø,ð FµØ RÐ1EÐ1EÐ1EØ&Ð&Ð&°2ÀØ ¨U¸uð1Fñ 1Fô 1FˆÔðNð Nð Nˆð rÐqÐqÐq¸DÔ<O×<UÒ<UÑ<WÔ<WÐqÑqÔqˆÔÝ˜{Ñ+Ô+ˆÔÝ˜j™/œ/ˆŒÝ"%Ð&8Ñ"9Ô"9ˆÔÝ! .Ñ1Ô1ˆÔØ.ˆÔÝ"%Ð&8Ñ"9Ô"9ˆÔÝ"%Ð&8Ñ"9Ô"9ˆÔØÔ" QÒ&Ð&¨$Ô*AÀAÒ*EÐ*EÝÐBÑCÔCÐCÝŒ9�TÔ(¨Ô3Ñ4Ô4¸Ô8OÒOÐOÝÐNÑOÔOÐOØÔ˜|Ô,°´Ò?Ð?ÝÐMÑNÔNÐNð @Ð?r   )Nr¬   r­   r®   r   r¯   r°   r±   )r5   r6   r7   Ú__doc__r‰   Ú	frozensetrœ   r£   r�   r$   r8   r9   s   @r   rƒ   rƒ   ·   sÊ   ø€ € € € € ðð ð
 €Jà�ð ð ð ñ ô €JðLð Lð Lð Lð Lð "˜	ð  #yð  #yð  #yñ  zô  zÐà&*ØFJØ3=Ø=?ð Oð  Oð  Oð  Oð  Oð  Oð  Oð  Oð  Oð  Or   rƒ   c                ó
  — t          | t          j        t          t          f¦  «        rZt          | t          j        ¦  «        r| n| j        }t          t          |¦  «        ¦  «        D ]}t          |||¦  «        \  }}Œ||fS t          | t          ¦  «        r9t          | j        ||¦  «        \  }}t          ||¦  «        t          ||¦  «        fS t          | t          j        ¦  «        rR| j        d         | j        d         | j        d         | j        d         f\  }}}	}
||z   |	|
dz
  z  z
   |z   ||z   |z  fS t          | t          j        ¦  «        rP| j        d         | j        d         | j        d         | j        d         f\  }}}	}
||z  |z
  ||z  |z
  |	|
dz
  z  z   fS t          | t$          t          j        t          j        t          j        f¦  «        r||fS t-          dt/          | ¦  «        j        › �¦  «        ‚)zDInclusive input support of an output interval; no waveform blending.r   rR   zNo audited support rule for )Ú
isinstancer   rS   rf   rZ   rT   Úreversedrp   Ú_dependency_intervalrH   ÚminÚmaxr   r\   rQ   rP   rO   r   r!   rB   rC   rv   Ú	TypeErrorÚtyper5   )ÚmoduleÚlowÚhighrT   ÚchildÚaÚbÚsÚpÚdÚks              r   rÃ   rÃ   ñ   sõ  € å�&�2œ=­.½,ÐGÑHÔHð Ý% f­b¬mÑ<Ô<ÐO��À&Ä-ˆÝ�d 6™lœlÑ+Ô+ð 	?ð 	?ˆEÝ,¨U°C¸Ñ>Ô>‰IˆC��Ø�DˆyÐÝ�&�,Ñ'Ô'ð )Ý# F¤M°3¸Ñ=Ô=‰ˆˆ1Ý�1�c‰{Œ{�C  4™LœLÐ(Ð(Ý�&�"Ô,Ñ-Ô-ð AØ”m AÔ&¨¬°qÔ(9Ø”o aÔ(¨&Ô*<¸QÔ*?ðA‰
ˆˆ1ˆa�à˜‘7˜Q ! a¡%™[Ñ(Ð)¨QÑ.Ð/°$¸±(¸q±Ð@Ð@Ý�&�"œ)Ñ$Ô$ð 7Ø”m AÔ&¨¬°qÔ(9Ø”o aÔ(¨&Ô*<¸QÔ*?ðA‰
ˆˆ1ˆa�à�Q‰w˜‰{˜D 1™H q™L¨1°°A±©;Ñ6Ð6Ð6Ý�&�9¥b¤f­b¬k½2¼7ÐCÑDÔDð Ø�DˆyÐÝ
ÐJµ4¸±<´<Ô3HÐJÐJÑ
KÔ
KÐKr   c                ó&  — t          | t          j        t          t          f¦  «        r:t          | t          j        ¦  «        r| n| j        }|D ]}t          ||¦  «        }Œ|S t          | t          j        ¦  «        rT|dz
  | j        d         z  d| j	        d         z  z
  | j
        d         | j        d         dz
  z  z   | j        d         z   dz   S t          | t          j        ¦  «        rF|d| j	        d         z  z   | j
        d         | j        d         dz
  z  z
  dz
  | j        d         z  dz   S t          | t          t          t          j        t          j        t          j        f¦  «        r|S t'          dt)          | ¦  «        j        › �¦  «        ‚)NrR   r   r   zNo audited length rule for )rÁ   r   rS   rf   rZ   rT   Ú_output_lengthr   r\   rQ   rP   rO   Úoutput_paddingr   rH   r!   rB   rC   rv   rÆ   rÇ   r5   )rÈ   ÚlengthrT   rË   s       r   rÓ   rÓ     s‘  € Ý�&�2œ=­.½,ÐGÑHÔHð Ý% f­b¬mÑ<Ô<ÐO��À&Ä-ˆØð 	3ð 	3ˆEÝ# E¨6Ñ2Ô2ˆFˆFØˆÝ�&�"Ô,Ñ-Ô-ð 0Ø˜!‘˜vœ}¨QÔ/Ñ/°!°f´nÀQÔ6GÑ2GÑGØ”/ !Ô$¨Ô(:¸1Ô(=ÀÑ(AÑBñCàÔ'¨Ô*ñ+à-.ñ/ð 	0õ �&�"œ)Ñ$Ô$ð )Ø˜!˜fœn¨QÔ/Ñ/Ñ/Ø”? 1Ô%¨Ô);¸AÔ)>ÀÑ)BÑCñDØFGñHà”= Ô#ñ$à&'ñ(ð 	)õ �&�<­µB´F½B¼KÍÌÐQÑRÔRð ØˆÝ
ÐIµ$°v±,´,Ô2GÐIÐIÑ
JÔ
JÐJr   c                  ó¼   ‡ — e Zd ZdZeZdZdZˆ fd„Ze	d„ ¦   «         Z
 ej        ¦   «         d„ ¦   «         Zd„ Zdd	„Z ej        ¦   «         	 	 	 ddd„¦   «         Zˆ xZS )r´   a2  Strict EMA model; only the decoder needs to reside on an accelerator.

    ``decode_tiled`` preserves finite receptive-field context and writes cropped
    cores to CPU. The mathematical waveform is the full decoder's waveform;
    convolution kernel choices may cause small FP32 rounding differences.
    Ú Úaudioc                óÄ   •— t          ¦   «                              |¦  «         t          di |j        ¤Ž| _        |                      ¦   «                              d¦  «         d S )NFr›   )r#   r$   rf   r¥   ÚdecoderÚevalÚrequires_grad_)r,   Úconfigr.   s     €r   r$   zYuE2VAE.__init__'  sU   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý%Ð>Ð>¨Ô(=Ð>Ð>ˆŒØ�	Š	‰Œ×"Ò" 5Ñ)Ô)Ð)Ð)Ð)r   c                óX   — t          | j                             ¦   «         ¦  «        j        S r
   )ÚnextrÚ   Ú
parametersÚdevice)r,   s    r   Údecoder_devicezYuE2VAE.decoder_device.  s!   € å�D”L×+Ò+Ñ-Ô-Ñ.Ô.Ô5Ð5r   c           
     ó&  — t          j        | j        j        d¬¦  «        5  |                      |                     | j        t          | j                             ¦   «         ¦  «        j        ¬¦  «        ¦  «        cddd¦  «         S # 1 swxY w Y   dS )z0Full waveform [B,2,1920*T-64], without clipping.F)Údevice_typeÚenabled)rá   r…   N)	r   Úautocastrâ   rÇ   rÚ   Útorß   rà   r…   )r,   Úlatents     r   ÚdecodezYuE2VAE.decode2  sÔ   € õ Œ^¨Ô(;Ô(@È%ÐPÑPÔPð 	tð 	tØ—<’< §	¢	°Ô1DÍDÐQUÔQ]×QhÒQhÑQjÔQjÑLkÔLkÔLq 	Ñ rÔ rÑsÔsð	tð 	tð 	tð 	tñ 	tô 	tð 	tð 	tð 	tð 	tð 	tð 	tøøøð 	tð 	tð 	tð 	tð 	tð 	ts   ¡ABÂB
ÂB
c                óŠ   — t          |¦  «        dk     rt          d¦  «        ‚t          | j        t          |¦  «        ¦  «        S )NrR   zframes must be positive)r¼   rD   rÓ   rÚ   )r,   Úframess     r   Únatural_output_lengthzYuE2VAE.natural_output_length8  s8   € Ýˆv‰;Œ;˜Š?ˆ?ÝÐ6Ñ7Ô7Ð7Ý˜dœl­C°©K¬KÑ8Ô8Ð8r   Nc                ó¨   — |€| j         j        n|}| j         j        }t          | j        d||z  dz
  ¦  «        \  }}t          d| ||z
  dz   ¦  «        S )Nr   rR   )rÝ   rª   r§   rÃ   rÚ   rÅ   )r,   Úcore_framesÚratiorÉ   rÊ   s        r   Úrequired_halozYuE2VAE.required_halo=  sa   € Ø8CÐ8K�d”kÔ4Ð4ÐQ\ˆØ”Ô.ˆÝ(¨¬°q¸+ÈÑ:MÐPQÑ:QÑRÔR‰	ˆˆTÝ�1�s�d˜D ;Ñ.°Ñ2Ñ3Ô3Ð3r   ÚcpuÚon_progressú!Callable[[int, int], None] | Nonec                ó0  — |€| j         j        n|}|€| j         j        n|}t          |t          ¦  «        r|dk     rt          d¦  «        ‚|                      |¦  «        }t          |t          ¦  «        r||k     rt          d|› d�¦  «        ‚|j        d         }| j         j        }|  	                    |¦  «        }	t          j        |j        d         | j         j        |	ft          j        |¬¦  «        }
||z   dz
  |z  }t          t          d||¦  «        ¦  «        D ]÷\  }}t!          |||z   ¦  «        }t#          d||z
  ¦  «        }t!          |||z   ¦  «        }|                      |d	||…f         ¦  «        }||z  t!          ||z  |	¦  «        }}||z
  |z  }|d	|||z   |z
  …f         }|j        d         ||z
  k    rt'          d
¦  «        ‚|
d	||…f                              |                     |¦  «        ¦  «         ~~|� ||dz   |¦  «         Œø|
S )a  Decode bounded tiles, retaining exact cores with natural end length.

        Each crop has enough left/right context for every dependency. There is
        no crossfade or boundary smoothing, and no zero padding of final audio.
        CPU output prevents an entire song from accumulating on the GPU.
        ``on_progress(completed, total)`` runs after each existing crop copy;
        no extra synchronization is added. With a CUDA output device, queued
        work may still be executing. Callback exceptions propagate.
        NrR   z&core_frames must be a positive integerzhalo_frames must be at least z for this decoderr0   r   )r…   rá   .z0VAE tile did not cover its requested output core)rÝ   rª   r«   rÁ   r¼   rD   rð   Úshaper§   rì   r   Úemptyr¨   Úfloat32Ú	enumeraters   rÄ   rÅ   ré   ÚRuntimeErrorÚcopy_rç   )r,   rè   rî   Úhalo_framesÚoutput_devicerò   Úrequiredrë   rï   ÚtotalrØ   ÚtilesÚ
tile_indexÚstartÚendÚleftÚrightÚtileÚ	out_startÚout_endÚ
crop_startÚcrops                         r   Údecode_tiledzYuE2VAE.decode_tiledC  sX  € ð 9DÐ8K�d”kÔ4Ð4ÐQ\ˆØ8CÐ8K�d”kÔ4Ð4ÐQ\ˆÝ˜+¥sÑ+Ô+ð 	G¨{¸Qª¨ÝÐEÑFÔFÐFØ×%Ò% kÑ2Ô2ˆÝ˜+¥sÑ+Ô+ð 	Z¨{¸XÒ/EÐ/EÝÐX¸XÐXÐXÐXÑYÔYÐYØ”˜bÔ!ˆØ”Ô.ˆØ×*Ò*¨6Ñ2Ô2ˆÝ”˜Vœ\¨!œ_¨d¬kÔ.HÈ%ÐPÝ"'¤-¸ðGñ Gô Gˆà˜+Ñ%¨Ñ)¨kÑ9ˆÝ!*­5°°F¸KÑ+HÔ+HÑ!IÔ!Ið 	3ð 	3ÑˆJ˜Ý�f˜e kÑ1Ñ2Ô2ˆCÝ�q˜% +Ñ-Ñ.Ô.ˆDÝ˜  kÑ 1Ñ2Ô2ˆEØ—;’;˜v c¨4°¨: oÔ6Ñ7Ô7ˆDØ!&¨¡µ°C¸%±KÀÑ0GÔ0G�wˆIØ $™,¨%Ñ/ˆJØ˜˜Z¨
°WÑ(<¸yÑ(HÐHÐHÔIˆDØŒz˜"Œ~ ¨9Ñ!4Ò4Ð4Ý"Ð#UÑVÔVÐVØ�#�y Ð(Ð(Ô)×/Ò/°·²¸Ñ0FÔ0FÑGÔGÐGØ�dØÐ&Ø�˜J¨™N¨EÑ2Ô2Ð2øØˆr   r
   )NNrñ   N)rò   ró   )r5   r6   r7   r¾   rƒ   Úconfig_classÚbase_model_prefixÚmain_input_namer$   Úpropertyrâ   r   Úinference_moderé   rì   rð   r
  r8   r9   s   @r   r´   r´     sö   ø€ € € € € ðð ð !€LØÐØ€Oð*ð *ð *ð *ð *ð ð6ð 6ñ „Xð6ð €UÔÑÔðtð tñ Ôðtð
9ð 9ð 9ð
4ð 4ð 4ð 4ð €UÔÑÔØAEØ#(ØFJð'ð 'ð 'ð 'ñ Ôð'ð 'ð 'ð 'ð 'r   r´   rµ   r¶   r
   )r:   r;   r<   r=   )r¾   Ú
__future__r   r_   Útypingr   r   r   r   Útransformersr   r   r   r   r   ÚModuler!   rF   rH   rZ   rf   rƒ   rÃ   rÓ   r´   Úregister_for_auto_classr›   r   r   ú<module>r     s.  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ð&ð &ð &ð/ð /ð /ðð ð ð*ð *ð *ð *ð *�”	ñ *ô *ð *ð> ;?ð	9ð 	9ð 	9ð 	9ð 	9ðð ð ð ð �2”9ñ ô ð ð8ð ð ð ð �2”9ñ ô ð ð,9ð 9ð 9ð 9ð 9�R”Yñ 9ô 9ð 9ðx7Oð 7Oð 7Oð 7Oð 7OÐ$ñ 7Oô 7Oð 7OðtLð Lð Lð.Kð Kð Kð&Pð Pð Pð Pð Pˆoñ Pô Pð Pðf × %Ò % lÑ 3Ô 3Ð 3Ø × Ò  Ñ ,Ô ,Ð ,Ð ,Ð ,r   