ó
    oM‡j	R  ã                   óø  • S SK r S SKJr  S SKrS SKrS SKJr  S SKJ	r	  SSK
JrJr  SSKJr  SSKJr  SSKJr  S	S
KJr  SSKJr   " S S\R.                  5      r " S S\R.                  5      r " S S\R.                  5      r " S S\R.                  5      r " S S\5      r\ " S S\5      5       r\ " S S\5      5       r " S S\R.                  5      r  " S S\R.                  5      r! " S S \\\5      r"g)!é    N)Ú	dataclass)Úweight_normé   )ÚConfigMixinÚregister_to_config)Ú
BaseOutput)Úapply_forward_hook)Úrandn_tensoré   )Ú
ModelMixiné   )ÚAutoencoderMixinc                   ó6   ^ • \ rS rSrSrSU 4S jjrS rSrU =r$ )ÚSnake1dé   z3
A 1-dimensional Snake activation function module.
c                 ó6  >• [         TU ]  5         [        R                  " [        R
                  " SUS5      5      U l        [        R                  " [        R
                  " SUS5      5      U l        SU R                  l        SU R                  l        X l	        g )Nr   T)
ÚsuperÚ__init__ÚnnÚ	ParameterÚtorchÚzerosÚalphaÚbetaÚrequires_gradÚlogscale)ÚselfÚ
hidden_dimr   Ú	__class__s      €Ú¿C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\diffusers/models/autoencoders/autoencoder_oobleck.pyr   ÚSnake1d.__init__#   se   ø€ Ü‰ÑÔÜ—\’\¤%§+¢+¨a°¸QÓ"?Ó@ˆŒ
Ü—L’L¤§¢¨Q°
¸AÓ!>Ó?ˆŒ	à#'ˆ�
‰
Ô Ø"&ˆ�	‰	ÔØ �ó    c                 óà  • UR                   nU R                  (       d  U R                  O[        R                  " U R                  5      nU R                  (       d  U R
                  O[        R                  " U R
                  5      nUR                  US   US   S5      nXS-   R                  5       [        R                  " X1-  5      R                  S5      -  -   nUR                  U5      nU$ )Nr   r   éÿÿÿÿg•Ö&è.>r   )
Úshaper   r   r   Úexpr   ÚreshapeÚ
reciprocalÚsinÚpow)r   Úhidden_statesr%   r   r   s        r    ÚforwardÚSnake1d.forward,   s­   € Ø×#Ñ#ˆà"&§-§-�—
’
´U·Y²Y¸t¿z¹zÓ5JˆØ $§§ˆt�yŠy´5·9²9¸T¿Y¹YÓ3Gˆà%×-Ñ-¨e°A©h¸¸a¹À"ÓEˆØ%°©×(@Ñ(@Ó(BÄUÇYÂYÈuÑOdÓEe×EiÑEiÐjkÓElÑ(lÑlˆØ%×-Ñ-¨eÓ4ˆØÐr"   )r   r   r   ©T©	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r,   Ú__static_attributes__Ú__classcell__©r   s   @r    r   r      s   ø† ñ÷!÷	ð 	r"   r   c                   óB   ^ • \ rS rSrSrSS\S\4U 4S jjjrS rSrU =r	$ )	ÚOobleckResidualUnité8   zY
A residual unit composed of Snake1d and weight-normalized Conv1d layers with dilations.
Ú	dimensionÚdilationc           
      ó   >• [         TU ]  5         SU-  S-  n[        U5      U l        [	        [
        R                  " XSX#S95      U l        [        U5      U l        [	        [
        R                  " XSS95      U l	        g )Né   r   é   )Úkernel_sizer<   Úpaddingr   )r@   )
r   r   r   Úsnake1r   r   ÚConv1dÚconv1Úsnake2Úconv2)r   r;   r<   Úpadr   s       €r    r   ÚOobleckResidualUnit.__init__=   sf   ø€ Ü‰ÑÔØ˜Ñ! aÑ'ˆä˜iÓ(ˆŒÜ ¤§¢¨9ÈQÐYaÑ!oÓpˆŒ
Ü˜iÓ(ˆŒÜ ¤§¢¨9ÈQÑ!OÓPˆ�
r"   c                 óô   • UnU R                  U R                  U5      5      nU R                  U R                  U5      5      nUR                  S   UR                  S   -
  S-  nUS:”  a	  USX3* 24   nX-   nU$ )a1  
Forward pass through the residual unit.

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

Returns:
    output_tensor (`torch.Tensor` of shape `(batch_size, channels, time_steps)`)
        Input tensor after passing through the residual unit.
r$   r   r   .)rD   rB   rF   rE   r%   )r   Úhidden_stateÚoutput_tensorrA   s       r    r,   ÚOobleckResidualUnit.forwardF   s…   € ð %ˆØŸ
™
 4§;¡;¨}Ó#=Ó>ˆØŸ
™
 4§;¡;¨}Ó#=Ó>ˆà×%Ñ% bÑ)¨M×,?Ñ,?ÀÑ,CÑCÈÑIˆØ�Q‹;Ø'¨¨W°XÐ-=Ð(=Ñ>ˆLØ$Ñ4ˆØÐr"   )rD   rF   rB   rE   )é   r   ©
r0   r1   r2   r3   r4   Úintr   r,   r5   r6   r7   s   @r    r9   r9   8   s.   ø† ññQ #ð Q°c÷ Qð Q÷ð r"   r9   c                   ó>   ^ • \ rS rSrSrSS\4U 4S jjjrS rSrU =r	$ )ÚOobleckEncoderBlocké]   z&Encoder block used in Oobleck encoder.Ústridec                 ó  >• [         TU ]  5         [        USS9U l        [        USS9U l        [        USS9U l        [        U5      U l        [        [        R                  " XSU-  U[        R                  " US-  5      S95      U l        g )Nr   ©r<   r   é	   r   ©r@   rS   rA   )r   r   r9   Ú	res_unit1Ú	res_unit2Ú	res_unit3r   rB   r   r   rC   ÚmathÚceilrD   ©r   Ú	input_dimÚ
output_dimrS   r   s       €r    r   ÚOobleckEncoderBlock.__init__`   sy   ø€ Ü‰ÑÔä,¨YÀÑCˆŒÜ,¨YÀÑCˆŒÜ,¨YÀÑCˆŒÜ˜iÓ(ˆŒÜ Ü�IŠI�i¸¸V¹ÈFÔ\`×\eÒ\eÐflÐopÑfpÓ\qÑró
ˆ�
r"   c                 ó¬   • U R                  U5      nU R                  U5      nU R                  U R                  U5      5      nU R	                  U5      nU$ ©N)rX   rY   rB   rZ   rD   ©r   rJ   s     r    r,   ÚOobleckEncoderBlock.forwardk   sI   € Ø—~‘~ lÓ3ˆØ—~‘~ lÓ3ˆØ—{‘{ 4§>¡>°,Ó#?Ó@ˆØ—z‘z ,Ó/ˆàÐr"   )rD   rX   rY   rZ   rB   ©r   rN   r7   s   @r    rQ   rQ   ]   s!   ø† Ù0ñ	
°c÷ 	
ð 	
÷ð r"   rQ   c                   ó>   ^ • \ rS rSrSrSS\4U 4S jjjrS rSrU =r	$ )ÚOobleckDecoderBlockét   z&Decoder block used in Oobleck decoder.rS   c                 ó  >• [         TU ]  5         [        U5      U l        [	        [
        R                  " UUSU-  U[        R                  " US-  5      S95      U l	        [        USS9U l        [        USS9U l        [        USS9U l        g )Nr   rW   r   rU   r   rV   )r   r   r   rB   r   r   ÚConvTranspose1dr[   r\   Úconv_t1r9   rX   rY   rZ   r]   s       €r    r   ÚOobleckDecoderBlock.__init__w   s€   ø€ Ü‰ÑÔä˜iÓ(ˆŒÜ"Ü×ÒØØØ ™JØÜŸ	š	 &¨1¡*Ó-ñó
ˆŒô -¨ZÀ!ÑDˆŒÜ,¨ZÀ!ÑDˆŒÜ,¨ZÀ!ÑDˆ�r"   c                 ó°   • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU$ rb   )rB   rk   rX   rY   rZ   rc   s     r    r,   ÚOobleckDecoderBlock.forwardˆ   sN   € Ø—{‘{ <Ó0ˆØ—|‘| LÓ1ˆØ—~‘~ lÓ3ˆØ—~‘~ lÓ3ˆØ—~‘~ lÓ3ˆàÐr"   )rk   rX   rY   rZ   rB   re   rN   r7   s   @r    rg   rg   t   s$   ø† Ù0ñE°c÷ Eð E÷"ð r"   rg   c                   óÎ   • \ rS rSrSS\R
                  S\4S jjrSS\R                  S-  S\R
                  4S jjr	SS	S S\R
                  4S
 jjr
S\R
                  4S jrSrg)Ú#OobleckDiagonalGaussianDistributioné’   Ú
parametersÚdeterministicc                 ó>  • Xl         UR                  SSS9u  U l        U l        [        R
                  R                  U R                  5      S-   U l        U R                  U R                  -  U l        [        R                  " U R                  5      U l        X l        g )Nr   r   ©Údimg-Cëâ6?)rr   ÚchunkÚmeanÚscaler   Ú
functionalÚsoftplusÚstdÚvarr   ÚlogÚlogvarrs   )r   rr   rs   s      r    r   Ú,OobleckDiagonalGaussianDistribution.__init__“   sr   € Ø$ŒØ *× 0Ñ 0°¸Ð 0Ð :ÑˆŒ	�4”:Ü—=‘=×)Ñ)¨$¯*©*Ó5¸Ñ<ˆŒØ—8‘8˜dŸh™hÑ&ˆŒÜ—i’i §¡Ó)ˆŒØ*Õr"   NÚ	generatorÚreturnc                 óÎ   • [        U R                  R                  UU R                  R                  U R                  R
                  S9nU R                  U R                  U-  -   nU$ )N)r�   ÚdeviceÚdtype)r
   rx   r%   rr   r„   r…   r|   )r   r�   ÚsampleÚxs       r    r†   Ú*OobleckDiagonalGaussianDistribution.sample›   sR   € äØ�I‰I�O‰OØØ—?‘?×)Ñ)Ø—/‘/×'Ñ'ñ	
ˆð �I‰I˜Ÿ™ 6Ñ)Ñ)ˆØˆr"   Úotherc                 ó.  • U R                   (       a  [        R                  " S/5      $ UcS  U R                  U R                  -  U R                  -   U R
                  -
  S-
  R                  S5      R                  5       $ [        R                  " U R                  UR                  -
  S5      UR                  -  nU R                  UR                  -  nU R
                  UR
                  -
  nX#-   U-   S-
  nUR                  S5      R                  5       nU$ )Ng        g      ð?r   r   )rs   r   ÚTensorrx   r}   r   Úsumr*   )r   r‰   Únormalized_diffÚ	var_ratioÚlogvar_diffÚkls         r    r�   Ú&OobleckDiagonalGaussianDistribution.kl¦   sÕ   € Ø××Ü—<’<  Ó&Ð&à‰}ØŸ	™	 D§I¡IÑ-°·±Ñ8¸4¿;¹;ÑFÈÑL×QÑQÐRSÓT×YÑYÓ[Ð[ä"'§)¢)¨D¯I©I¸¿
¹
Ñ,BÀAÓ"FÈÏÉÑ"R�Ø ŸH™H u§y¡yÑ0�	Ø"Ÿk™k¨E¯L©LÑ8�à$Ñ0°;Ñ>ÀÑB�à—V‘V˜A“Y—^‘^Ó%�Ø�	r"   c                 ó   • U R                   $ rb   )rx   )r   s    r    ÚmodeÚ(OobleckDiagonalGaussianDistribution.mode¶   s   € Ø�y‰yÐr"   )rs   r   rx   rr   ry   r|   r}   )Frb   )r0   r1   r2   r3   r   r‹   Úboolr   Ú	Generatorr†   r�   r“   r5   © r"   r    rp   rp   ’   sa   † ñ+ 5§<¡<ð +Àõ +ñ	 §¡°$Ñ 6ð 	À%Ç,Á,õ 	ñÐ=ð ÈÏÉõ ð �e—l‘l÷ r"   rp   c                   ó$   • \ rS rSr% SrS\S'   Srg)ÚAutoencoderOobleckOutputéº   aV  
Output of AutoencoderOobleck encoding method.

Args:
    latent_dist (`OobleckDiagonalGaussianDistribution`):
        Encoded outputs of `Encoder` represented as the mean and standard deviation of
        `OobleckDiagonalGaussianDistribution`. `OobleckDiagonalGaussianDistribution` allows for sampling latents
        from the distribution.
rp   Úlatent_distr—   N)r0   r1   r2   r3   r4   Ú__annotations__r5   r—   r"   r    r™   r™   º   s   ‡ ñð 7Ö6r"   r™   c                   ó8   • \ rS rSr% Sr\R                  \S'   Srg)ÚOobleckDecoderOutputéÉ   z½
Output of decoding method.

Args:
    sample (`torch.Tensor` of shape `(batch_size, audio_channels, sequence_length)`):
        The decoded output sample from the last layer of the model.
r†   r—   N)	r0   r1   r2   r3   r4   r   r‹   rœ   r5   r—   r"   r    rž   rž   É   s   ‡ ñð �L‰LÖr"   rž   c                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚOobleckEncoderéÖ   zOobleck Encoderc           
      óÈ  >• [         T	U ]  5         UnS/U-   n[        [        R                  " X!SSS95      U l        / U l        [        U5       H1  u  pgU =R                  [        XU   -  XUS-      -  US9/-  sl        M3     [        R                  " U R                  5      U l        XS   -  n[        U5      U l        [        [        R                  " X�SSS95      U l        g )Nr   r?   r   ©r@   rA   ©r^   r_   rS   r$   )r   r   r   r   rC   rD   ÚblockÚ	enumeraterQ   Ú
ModuleListr   rB   rF   )
r   Úencoder_hidden_sizeÚaudio_channelsÚdownsampling_ratiosÚchannel_multiplesÚstridesÚstride_indexrS   Úd_modelr   s
            €r    r   ÚOobleckEncoder.__init__Ù   sÛ   ø€ Ü‰ÑÔà%ˆØ˜CÐ"3Ñ3Ðô !¤§¢¨>Ð\]ÐghÑ!iÓjˆŒ
àˆŒ
ä$-¨gÖ$6Ñ ˆLØ�JŠJÜ#Ø1ÀlÑ4SÑSØ2À|ÐVWÑGWÑ5XÑXØ!ñðñ �Jñ %7ô —]’] 4§:¡:Ó.ˆŒ
Ø%¸"Ñ(=Ñ=ˆÜ˜gÓ&ˆŒÜ ¤§¢¨7ÐUVÐ`aÑ!bÓcˆ�
r"   c                 ó¢   • U R                  U5      nU R                   H  nU" U5      nM     U R                  U5      nU R                  U5      nU$ rb   ©rD   r¦   rB   rF   )r   rJ   Úmodules      r    r,   ÚOobleckEncoder.forwardò   sL   € Ø—z‘z ,Ó/ˆà—j”jˆFÙ! ,Ó/ŠLñ !ð —{‘{ <Ó0ˆØ—z‘z ,Ó/ˆàÐr"   ©r¦   rD   rF   rB   r/   r7   s   @r    r¡   r¡   Ö   s   ø† Ùõd÷2	ð 	r"   r¡   c                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚOobleckDecoderéþ   zOobleck Decoderc           
      ó¾  >• [         TU ]  5         UnS/U-   n[        [        R                  " X!US   -  SSS95      U l        / n[        U5       H9  u  p‰U[        X[        U5      U-
     -  X[        U5      U-
  S-
     -  U	S9/-  nM;     [        R                  " U5      U l
        Un
[        U
5      U l        [        [        R                  " XSSSS95      U l        g )	Nr   r$   r?   r   r¤   r¥   F)r@   rA   Úbias)r   r   r   r   rC   rD   r§   rg   Úlenr¨   r¦   r   rB   rF   )r   ÚchannelsÚinput_channelsrª   Úupsampling_ratiosr¬   r­   r¦   r®   rS   r_   r   s              €r    r   ÚOobleckDecoder.__init__  sì   ø€ Ü‰ÑÔà#ˆØ˜CÐ"3Ñ3Ðô !¤§¢¨>ÐFWÐXZÑF[Ñ;[ÐijÐtuÑ!vÓwˆŒ
ð ˆÜ$-¨gÖ$6Ñ ˆLØÜ#Ø&¼3¸w»<È,Ñ;VÑ)WÑWØ'¼CÀ»LÈ<Ñ<WÐZ[Ñ<[Ñ*\Ñ\Ø!ñðñ ŠEñ %7ô —]’] 5Ó)ˆŒ
Øˆ
Ü˜jÓ)ˆŒÜ ¤§¢¨8ÐQRÐ\]ÐdiÑ!jÓkˆ�
r"   c                 ó¢   • U R                  U5      nU R                   H  nU" U5      nM     U R                  U5      nU R                  U5      nU$ rb   r²   )r   rJ   Úlayers      r    r,   ÚOobleckDecoder.forward  sL   € Ø—z‘z ,Ó/ˆà—Z”ZˆEÙ  Ó.ŠLñ  ð —{‘{ <Ó0ˆØ—z‘z ,Ó/ˆàÐr"   rµ   r/   r7   s   @r    r·   r·   þ   s   ø† Ùõl÷2	ð 	r"   r·   c                   óX  ^ • \ rS rSrSrSrSr\S/ SQ/ SQSSSS	4U 4S
 jj5       rS\	R                  S\	R                  4S jr\ SS\	R                  S\S\\\   -  4S jj5       rS\	R                  S\	R                  4S jrSS\	R                  S\S\\	R                  -  4S jjrS\	R                  S\	R                  4S jr\ SS\	R,                  S\S\\	R,                  -  4S jj5       r   SS\	R                  S\S\S\	R0                  S-  S\\	R                  -  4
S jjrSrU =r$ )ÚAutoencoderOoblecki&  aB  
An autoencoder for encoding waveforms into latents and decoding latent representations into waveforms. First
introduced in Stable Audio.

This model inherits from [`ModelMixin`]. Check the superclass documentation for it's generic methods implemented
for all models (such as downloading or saving).

Parameters:
    encoder_hidden_size (`int`, *optional*, defaults to 128):
        Intermediate representation dimension for the encoder.
    downsampling_ratios (`list[int]`, *optional*, defaults to `[2, 4, 4, 8, 8]`):
        Ratios for downsampling in the encoder. These are used in reverse order for upsampling in the decoder.
    channel_multiples (`list[int]`, *optional*, defaults to `[1, 2, 4, 8, 16]`):
        Multiples used to determine the hidden sizes of the hidden layers.
    decoder_channels (`int`, *optional*, defaults to 128):
        Intermediate representation dimension for the decoder.
    decoder_input_channels (`int`, *optional*, defaults to 64):
        Input dimension for the decoder. Corresponds to the latent dimension.
    audio_channels (`int`, *optional*, defaults to 2):
        Number of channels in the audio data. Either 1 for mono or 2 for stereo.
    sampling_rate (`int`, *optional*, defaults to 44100):
        The sampling rate at which the audio waveform should be digitalized expressed in hertz (Hz).
Fé€   )r   é   rÆ   é   rÇ   )r   r   rÆ   rÇ   rM   é@   r   iD¬  c                 ón  >• [         TU ]  5         Xl        X l        X@l        US S S2   U l        [        [        R                  " U5      5      U l	        Xpl
        [        UUUUS9U l        [        UUUU R
                  US9U l        SU l        SU l        US-  U l        US-  U l        SU l        SU l        g )	Nr$   )r©   rª   r«   r¬   )r¼   r½   rª   r¾   r¬   Fr   r   i   rÈ   )r   r   r©   r«   Údecoder_channelsr¾   rO   ÚnpÚprodÚ
hop_lengthÚsampling_rater¡   Úencoderr·   ÚdecoderÚuse_slicingÚ
use_tilingÚtile_sample_min_lengthÚtile_sample_overlapÚtile_latent_min_lengthÚtile_latent_overlap)	r   r©   r«   r¬   rÊ   Údecoder_input_channelsrª   rÎ   r   s	           €r    r   ÚAutoencoderOobleck.__init__B  sÉ   ø€ ô 	‰ÑÔà#6Ô Ø#6Ô Ø 0ÔØ!4±T°r°TÑ!:ˆÔÜœbŸgšgÐ&9Ó:Ó;ˆŒØ*Ôä%Ø 3Ø)Ø 3Ø/ñ	
ˆŒô &Ø%Ø1Ø)Ø"×4Ñ4Ø/ñ
ˆŒð !ˆÔØˆŒð '4°bÑ&8ˆÔ#Ø#0°1Ñ#4ˆÔ ð '*ˆÔ#Ø#%ˆÕ r"   r‡   r‚   c                 ó¢   • U R                   (       a.  UR                  S   U R                  :”  a  U R                  U5      $ U R	                  U5      $ )Nr$   )rÒ   r%   rÓ   Ú_tiled_encoderÏ   )r   r‡   s     r    Ú_encodeÚAutoencoderOobleck._encodet  s=   € Ø�?�?˜qŸw™w r™{¨T×-HÑ-HÓHØ×%Ñ% aÓ(Ð(Ø�|‰|˜A‹Ðr"   Úreturn_dictc                 ó>  • U R                   (       aY  UR                  S   S:”  aF  UR                  S5       Vs/ s H  o0R                  U5      PM     nn[        R
                  " U5      nOU R                  U5      n[        U5      nU(       d  U4$ [        US9$ s  snf )aÈ  
Encode a batch of images into latents.

Args:
    x (`torch.Tensor`): Input batch of images.
    return_dict (`bool`, *optional*, defaults to `True`):
        Whether to return a [`~models.autoencoder_kl.AutoencoderKLOutput`] instead of a plain tuple.

Returns:
        The latent representations of the encoded images. If `return_dict` is True, a
        [`~models.autoencoder_kl.AutoencoderKLOutput`] is returned, otherwise a plain `tuple` is returned.
r   r   )r›   )rÑ   r%   ÚsplitrÛ   r   Úcatrp   r™   )r   r‡   rÝ   Úx_sliceÚencoded_slicesÚhÚ	posteriors          r    ÚencodeÚAutoencoderOobleck.encodey  s   € ð  ×× §¡¨¡
¨Q£ØCDÇ7Á7È1Ä:ÓNÂ:¸Ÿl™l¨7Ö3Á:ˆNÐNÜ—	’	˜.Ó)‰Aà—‘˜Q“ˆAä7¸Ó:ˆ	æØ�<Ðä'°IÑ>Ð>ùò Os   ¸Bc                 óÄ  • UR                   u  p#nU R                  nU R                  nUSU-  -
  nUS::  a  [        SU SU S35      e[        R
                  " XG-  5      n/ n	Sn
[        U5       HÚ  nX·-  n[        XÇ-   U5      n[        SXÆ-
  5      n[        XMU-   5      nU R                  USS2SS2Xï24   5      nU
c  Xþ-
  UR                   S   -  n
[        [        XÎ-
  U
-  5      5      n[        [        Xý-
  U
-  5      5      nUS:”  a  UR                   S   U-
  OUR                   S   nU	R                  USS2SS2UU24   5        MÜ     [        R                  " U	SS9$ )	uf  Encode a long audio waveform by splitting it into overlapping tiles along
the time axis and concatenating the resulting encoder features. Used to keep memory bounded regardless of clip
length. Not bit-identical to a single unsplit encode â€” each tile has its own receptive-field boundary â€” but the
overlap/trim scheme keeps the joined feature map smooth.
r   r   ztile_sample_min_length (z0) must be greater than 2 * tile_sample_overlap (Ú)Nr$   ru   )r%   rÓ   rÔ   Ú
ValueErrorr[   r\   ÚrangeÚminÚmaxrÏ   rO   ÚroundÚappendr   rà   )r   r‡   Ú_BÚ_CÚSrw   ÚoverlaprS   Ú	num_stepsÚtilesÚhopÚiÚ
core_startÚcore_endÚ	win_startÚwin_endÚtileÚtrim_lÚtrim_rÚend_idxs                       r    rÚ   Ú AutoencoderOobleck._tiled_encode–  st  € ð —G‘G‰	ˆ�Ø×+Ñ+ˆØ×*Ñ*ˆØ˜˜W™Ñ$ˆØ�Q‹;ÜØ*¨5¨'Ð1aÐbiÐajÐjkÐlóð ô —I’I˜a™jÓ)ˆ	ØˆØˆä�yÖ!ˆAØ™ˆJÜ˜:Ñ.°Ó2ˆHÜ˜A˜zÑ3Ó4ˆIÜ˜!¨Ñ/Ó0ˆGà—<‘< ¢!¢Q¨	Ð(9Ð"9Ñ :Ó;ˆDà‰{ØÑ*¨d¯j©j¸©nÑ<�äœ 
Ñ 6¸#Ñ=Ó>Ó?ˆFÜœ Ñ 2°cÑ9Ó:Ó;ˆFØ17¸!³�d—j‘j ‘n vÒ-ÀÇÁÈBÁˆGØ�L‰L˜ša¢ F¨7 NÐ2Ñ3Ö4ñ "ô  �yŠy˜ BÑ'Ð'r"   Úzc                 óÊ   • U R                   (       a/  UR                  S   U R                  :”  a  U R                  U5      nOU R	                  U5      nU(       d  U4$ [        US9$ )Nr$   ©r†   )rÒ   r%   rÕ   Ú_tiled_decoderÐ   rž   )r   r   rÝ   Údecs       r    Ú_decodeÚAutoencoderOobleck._decode»  sP   € Ø�?�?˜qŸw™w r™{¨T×-HÑ-HÓHØ×$Ñ$ QÓ'‰Cà—,‘,˜q“/ˆCæØ�6ˆMä#¨3Ñ/Ð/r"   c                 óÄ  • UR                   u  p#nU R                  nU R                  nUSU-  -
  nUS::  a  [        SU SU S35      e[        R
                  " XG-  5      n/ n	Sn
[        U5       HÚ  nX·-  n[        XÇ-   U5      n[        SXÆ-
  5      n[        XMU-   5      nU R                  USS2SS2Xï24   5      nU
c  UR                   S   Xþ-
  -  n
[        [        XÎ-
  U
-  5      5      n[        [        Xý-
  U
-  5      5      nUS:”  a  UR                   S   U-
  OUR                   S   nU	R                  USS2SS2UU24   5        MÜ     [        R                  " U	SS9$ )	z�Decode a long latent by splitting it into overlapping tiles along the
time axis, decoding each, and concatenating the audio tiles back together.r   r   ztile_latent_min_length (z0) must be greater than 2 * tile_latent_overlap (rè   Nr$   ru   )r%   rÕ   rÖ   ré   r[   r\   rê   rë   rì   rÐ   rO   rí   rî   r   rà   )r   r   rï   rð   ÚTrw   rò   rS   ró   rô   Úupsamplerö   r÷   rø   rù   rú   rû   rü   rý   rþ   s                       r    r  Ú AutoencoderOobleck._tiled_decodeÆ  su  € ð —G‘G‰	ˆ�Ø×+Ñ+ˆØ×*Ñ*ˆØ˜˜W™Ñ$ˆØ�Q‹;ÜØ*¨5¨'Ð1aÐbiÐajÐjkÐlóð ô —I’I˜a™jÓ)ˆ	ØˆØˆä�yÖ!ˆAØ™ˆJÜ˜:Ñ.°Ó2ˆHÜ˜A˜zÑ3Ó4ˆIÜ˜!¨Ñ/Ó0ˆGà—<‘< ¢!¢Q¨	Ð(9Ð"9Ñ :Ó;ˆDàÑØŸ:™: b™>¨WÑ-@ÑA�äœ 
Ñ 6¸(ÑBÓCÓDˆFÜœ Ñ 2°hÑ>Ó?Ó@ˆFØ17¸!³�d—j‘j ‘n vÒ-ÀÇÁÈBÁˆGØ�L‰L˜ša¢ F¨7 NÐ2Ñ3Ö4ñ "ô  �yŠy˜ BÑ'Ð'r"   Nc                 óP  • U R                   (       ac  UR                  S   S:”  aP  UR                  S5       Vs/ s H  o@R                  U5      R                  PM     nn[
        R                  " U5      nOU R                  U5      R                  nU(       d  U4$ [        US9$ s  snf )a±  
Decode a batch of images.

Args:
    z (`torch.Tensor`): Input batch of latent vectors.
    return_dict (`bool`, *optional*, defaults to `True`):
        Whether to return a [`~models.vae.OobleckDecoderOutput`] instead of a plain tuple.

Returns:
    [`~models.vae.OobleckDecoderOutput`] or `tuple`:
        If return_dict is True, a [`~models.vae.OobleckDecoderOutput`] is returned, otherwise a plain `tuple`
        is returned.

r   r   r  )rÑ   r%   rß   r  r†   r   rà   rž   )r   r   rÝ   r�   Úz_sliceÚdecoded_slicesÚdecodeds          r    ÚdecodeÚAutoencoderOobleck.decodeè  s‚   € ð$ ×× §¡¨¡
¨Q£ØJKÏ'É'ÐRSÌ*ÓUÊ*¸wŸl™l¨7Ó3×:Ô:É*ˆNÐUÜ—i’i Ó/‰Gà—l‘l 1“o×,Ñ,ˆGæØ�:Ðä#¨7Ñ3Ð3ùò Vs   ¸$B#r†   Úsample_posteriorr�   c                 óæ   • UnU R                  U5      R                  nU(       a  UR                  US9nOUR                  5       nU R	                  U5      R                  nU(       d  U4$ [        US9$ )a©  
Args:
    sample (`torch.Tensor`): Input sample.
    sample_posterior (`bool`, *optional*, defaults to `False`):
        Whether to sample from the posterior.
    return_dict (`bool`, *optional*, defaults to `True`):
        Whether or not to return a [`OobleckDecoderOutput`] instead of a plain tuple.
    generator (`torch.Generator`, *optional*):
        A [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) to make sampling
        deterministic.

Returns:
    [`~models.vae.OobleckDecoderOutput`] or `tuple`:
        If `return_dict` is True, a [`~models.vae.OobleckDecoderOutput`] is returned, otherwise a plain `tuple`
        is returned.
)r�   r  )rå   r›   r†   r“   r  rž   )	r   r†   r  rÝ   r�   r‡   rä   r   r  s	            r    r,   ÚAutoencoderOobleck.forward  sf   € ð. ˆØ—K‘K “N×.Ñ.ˆ	ÞØ× Ñ ¨9Ð Ð5‰Aà—‘Ó ˆAØ�k‰k˜!‹n×#Ñ#ˆæØ�6ˆMä#¨3Ñ/Ð/r"   )rÐ   rÊ   r«   rÏ   r©   rÍ   rÎ   rÕ   rÖ   rÓ   rÔ   r¾   rÑ   rÒ   r.   )TN)FTN)r0   r1   r2   r3   r4   Ú _supports_gradient_checkpointingÚ_supports_group_offloadingr   r   r   r‹   rÛ   r	   r•   r™   Útuplerp   rå   rÚ   rž   r  r  ÚFloatTensorr  r–   r,   r5   r6   r7   s   @r    rÄ   rÄ   &  s—  ø† ñð0 (-Ð$Ø!&Ðàð  Ú+Ú*ØØ!ØØö/&ó ð/&ðb˜Ÿ™ð ¨%¯,©,ô ð
 à37ñ?Ø—‘ð?Ø,0ð?à	! EÐ*MÑ$NÑ	Nô?ó ð?ð8#(˜uŸ|™|ð #(°·±ô #(ñJ	0˜Ÿ™ð 	0°Dð 	0ÐDXÐ[`×[gÑ[gÑDgõ 	0ð (˜uŸ|™|ð  (°·±ô  (ðD àHLñ4Ø×"Ñ"ð4Ø15ð4à	 × 1Ñ 1Ñ	1ô4ó ð4ð> "'Ø Ø,0ñ"0à—‘ð"0ð ð"0ð ð	"0ð
 —?‘? TÑ)ð"0ð 
 §¡Ñ	,÷"0ó "0r"   rÄ   )#r[   Údataclassesr   ÚnumpyrË   r   Útorch.nnr   Útorch.nn.utilsr   Úconfiguration_utilsr   r   Úutilsr   Úutils.accelerate_utilsr	   Úutils.torch_utilsr
   Úmodeling_utilsr   Úvaer   ÚModuler   r9   rQ   rg   Úobjectrp   r™   rž   r¡   r·   rÄ   r—   r"   r    Ú<module>r$     sä   ðó Ý !ã Û Ý Ý &ç BÝ Ý 8Ý -Ý 'Ý !ôˆb�i‰iô ô4"˜"Ÿ)™)ô "ôJ˜"Ÿ)™)ô ô.˜"Ÿ)™)ô ô<%¨&ô %ðP ô7˜zó 7ó ð7ð ô	˜:ó 	ó ð	ô%�R—Y‘Yô %ôP%�R—Y‘Yô %ôPA0˜Ð%5°{õ A0r"   