ó
    oM‡jšn  ã                   ó  • S r SSKrSSKJr  SSKJr  SSKrSSKJr  SSK	Js  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Jr  S
SKJr  SSKJr   " S S\R8                  5      r " S S\R8                  5      r " S S\R8                  5      r " S S\R8                  5      r   " S S\R8                  5      r!  " S S\R8                  5      r"\ " S S\5      5       r#\ " S S\5      5       r$ " S S \\5      r%g)!aŸ  Cosmos3 AVAE Audio Tokenizer.

The decoder reuses the Oobleck architecture (Snake1d activations + weight-norm convs + residual units), inlined here
instead of imported so the audio module is self-contained. The encoder is the Cosmos3 SpecConvNeXt audio encoder used
by AVAE checkpoints; it is intentionally separate from Oobleck's waveform encoder because the tensor layouts and
bottleneck semantics are different.
é    N)ÚOrderedDict)Ú	dataclass)Úweight_normé   )ÚConfigMixinÚregister_to_config)Ú
BaseOutput)Úapply_forward_hooké   )Ú
ModelMixinÚget_parameter_dtype)ÚFP32LayerNormé   )Ú#OobleckDiagonalGaussianDistributionc                   ó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_cosmos3_audio.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.forward8   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                   óˆ   ^ • \ rS rSrSr   SS\S\S\S\S\4
U 4S jjjrS	\R                  S
\R                  4S jr
SrU =r$ )ÚCosmos3AudioConvNeXtBlockéD   z;1D ConvNeXt block used by the Cosmos3 SpecConvNeXt encoder.r    Úintermediate_dimÚidentity_initÚ	use_snakeÚcausalc           
      ó>  >• [         TU ]  5         XPl        U(       aF  [        R                  " [        R
                  " SS5      [        R                  " XSUS95      U l        OE[        R                  " [        R
                  " SS5      [        R                  " XSUS95      U l        [        USSS9U l	        [        R                  " XS	S
9U l
        U(       a  [        U5      O[        R                  " 5       U l        [        R                  " X!S	S
9U l        U(       a  [        R                  R!                  U R                  R"                  5        U R                  R$                  b4  [        R                  R!                  U R                  R$                  5        g g g )N)é   r   r   é   )Úkernel_sizeÚgroups)r   r   çñhãˆµøä>F)ÚepsÚbiasr   ©rC   )r   r   r?   r   Ú
SequentialÚConstantPad1dÚConv1dÚdwconvr   ÚnormÚpwconv1r   ÚGELUÚactÚpwconv2ÚinitÚzeros_ÚweightrG   )r   r    r<   r=   r>   r?   r!   s         €r"   r   Ú"Cosmos3AudioConvNeXtBlock.__init__G   s  ø€ ô 	‰ÑÔØŒæÜŸ-š-Ü× Ò  ¨Ó+Ü—	’	˜*¸aÈ
ÑSóˆD�Kô
 Ÿ-š-Ü× Ò  ¨Ó+Ü—	’	˜*¸aÈ
ÑSóˆDŒKô
 " *°$¸UÑCˆŒ	Ü—y’y È1ÑMˆŒÞ09”7Ð+Ô,¼r¿wºw»yˆŒÜ—y’yÐ!1È1ÑMˆŒÞÜ�G‰G�N‰N˜4Ÿ<™<×.Ñ.Ô/Ø�|‰|× Ñ Ñ,Ü—‘—‘˜tŸ|™|×0Ñ0Õ1ð -ð r$   r-   Úreturnc                 óü   • UnU R                  U5      nU R                  UR                  SSS5      5      R                  SSS5      nU R                  U5      nU R	                  U5      nU R                  U5      nX!-   $ )Nr   r   r   )rL   rM   ÚpermuterN   rP   rQ   )r   r-   Úresiduals      r"   r.   Ú!Cosmos3AudioConvNeXtBlock.forwardf   su   € Ø ˆØŸ™ MÓ2ˆØŸ	™	 -×"7Ñ"7¸¸1¸aÓ"@ÓA×IÑIÈ!ÈQÐPQÓRˆØŸ™ ]Ó3ˆØŸ™ Ó/ˆØŸ™ ]Ó3ˆØÑ'Ð'r$   )rP   r?   rL   rM   rN   rQ   )FTF)r1   r2   r3   r4   r5   ÚintÚboolr   r   ÚTensorr.   r6   r7   r8   s   @r"   r:   r:   D   sk   ø† ÙEð $ØØñ2àð2ð ð2ð ð	2ð
 ð2ð ÷2ð 2ð>( U§\¡\ð (°e·l±l÷ (ò (r$   r:   c                   óì   ^ • \ rS rSrSrS\S\S\S\S\\S4   S	\\S4   S
\S\S\S\S\S\S\4U 4S jjr	S\
R                  S\
R                  4S jrS\
R                  S\
R                  4S jrSrU =r$ )Ú&Cosmos3AudioSpectrogramConvNeXtEncoderép   zKCosmos3 waveform-to-latent encoder using STFT features and ConvNeXt blocks.Úinput_channelsÚstereoÚchannelsÚ
latent_dimÚchannel_multiples.ÚstridesÚ
num_blocksÚn_fftÚ
hop_lengthr=   r>   r?   Úpadding_modec                 óz  >• [         TU ]  5         U(       a  [        S5      e[        U5      [        U5      :w  a$  [	        S[        U5       S[        U5       S35      eX(       a  SOS-  U l        X0l        X@l        [        U5      U l	        [        U5      U l
        Xpl        X€l        X�l        XÀl        [        [         R"                  " US-   U R
                  -  U R                  S   U-  SSS	95      /n[%        U R                  5       H×  u  nnU R                  U   U-  nU[        U R                  5      S-
  :  a  U R                  US-      U-  OU R                  S
   U-  n['        U5       H"  nUR)                  [+        UUS-  U
UUS95        M$     UR)                  [        [         R"                  " UUSU-  U[,        R.                  " US-  5      US95      5        MÙ     UR)                  [        [         R"                  " U R                  S
   U-  USSS	95      5        [         R0                  " U6 U l        g )Nz7Cosmos3 AVAE causal audio encoder is not supported yet.z?`enc_c_mults` and `enc_strides` must have the same length, got z and Ú.r   r   r   F)rC   rG   r&   é   )r    r<   r=   r>   r?   )rC   ÚstrideÚpaddingrj   )r   r   ÚNotImplementedErrorÚlenÚ
ValueErrorra   rc   rd   Útuplere   rf   rg   rh   ri   r?   r   r   rK   Ú	enumerateÚrangeÚappendr:   ÚmathÚceilrI   Úlayers)r   ra   rb   rc   rd   re   rf   rg   rh   ri   r=   r>   r?   rj   ry   Úindexrn   Ú	input_dimÚ
output_dimÚ_r!   s                       €r"   r   Ú/Cosmos3AudioSpectrogramConvNeXtEncoder.__init__s   s1  ø€ ô  	‰ÑÔæÜ%Ð&_Ó`Ð`ÜÐ Ó!¤S¨£\Ó1ÜØQÜÐ(Ó)Ð*¨%´°G³¨~¸Qð@óð ð
 -µV±ÀÑCˆÔØ ŒØ$ŒÜ!&Ð'8Ó!9ˆÔÜ˜W“~ˆŒØ$ŒØŒ
Ø$ŒØŒô Ü—	’	Ø˜Q‘Y $×"5Ñ"5Ñ5Ø×*Ñ*¨1Ñ-°Ñ8Ø !Øñ	óð	#
ˆô ' t§|¡|Ö4‰MˆE�6Ø×.Ñ.¨uÑ5¸Ñ@ˆIð œ3˜t×5Ñ5Ó6¸Ñ:Ó:ð ×&Ñ& u¨q¡yÑ1°HÒ<à×+Ñ+¨BÑ/°(Ñ:ð ô ˜:Ö&�Ø—‘Ü-Ø#,Ø)2°Q©Ø&3Ø"+Ø%ñöñ 'ð �M‰MÜÜ—I’IØ!Ø"Ø$%¨¡JØ%Ü $§	¢	¨&°1©*Ó 5Ø%1ñó	öñ' 5ð@ 	�‰ÜœŸ	š	 $×"8Ñ"8¸Ñ"<¸xÑ"GÈÐabÐinÑoÓpô	
ô —m’m VÐ,ˆ�r$   ÚwaveformrV   c                 óš  • U R                   U R                  -
  S-  nU R                   U R                  -
  U-
  n[        R                  " XU45      R	                  5       n[
        R                  " U R                   UR                  UR                  S9n[
        R                  " UU R                   U R                  U R                   USSSSS9	$ )Nr   )ÚdeviceÚdtypeFT)rh   ri   Ú
win_lengthÚwindowÚcenterÚ
normalizedÚonesidedÚreturn_complex)
rh   ri   ÚFÚpadÚfloatr   Úhann_windowr�   r‚   Ústft)r   r   Úpad_leftÚ	pad_rightr„   s        r"   Ú_spectrogramÚ3Cosmos3AudioSpectrogramConvNeXtEncoder._spectrogramÇ   s¤   € Ø—J‘J §¡Ñ0°QÑ6ˆØ—Z‘Z $§/¡/Ñ1°XÑ=ˆ	Ü—5’5˜¨iÐ#8Ó9×?Ñ?ÓAˆÜ×"Ò" 4§:¡:°h·o±oÈXÏ^É^Ñ\ˆÜ�zŠzØØ—*‘*Ø—‘Ø—z‘zØØØØØñ

ð 
	
r$   Úaudioc                 óh  • UR                   u  p#nX0R                  :w  a  [        SU R                   SU S35      eUS:”  a  UR                  X#-  SU5      nU R	                  UR                  S5      5      n[        R                  " U5      R                  SSS9u  pg[        R                  " Xg/SS9R                  S5      nUR                  UR                  5      nUS:”  a/  UR                  X#UR                   S   -  UR                   S   5      nU R                  U5      nUR                  SS5      $ )NzCosmos3 AVAE encoder expected z audio channels, got rl   r   r   r&   )Údim)r'   ra   rr   r)   r�   Úsqueezer   Úview_as_realÚchunkÚcatÚtor‚   ry   Ú	transpose)	r   r’   Ú
batch_sizeÚnum_channelsÚnum_samplesÚspectrogramÚrealÚ	imaginaryr-   s	            r"   r.   Ú.Cosmos3AudioSpectrogramConvNeXtEncoder.forwardØ   s)  € Ø05·±Ñ-ˆ
 +Ø×.Ñ.Ó.ÜØ0°×1DÑ1DÐ0EÐEZÐ[gÐZhÐhiÐjóð ð ˜!ÓØ—M‘M *Ñ";¸QÀÓLˆEà×'Ñ'¨¯©°aÓ(8Ó9ˆÜ×,Ò,¨[Ó9×?Ñ?ÀÀrÐ?ÐJ‰ˆÜ—i’i Ð 1°qÑ9×AÑAÀ"ÓEˆà!—n‘n U§[¡[Ó1ˆØ˜!ÓØ%×-Ñ-¨jÈ×IZÑIZÐ[\ÑI]Ñ:]Ð_j×_pÑ_pÐqrÑ_sÓtˆKàŸ™ KÓ0ˆØ×&Ñ& q¨!Ó,Ð,r$   )
r?   re   rc   ri   ra   rd   ry   rh   rg   rf   )r1   r2   r3   r4   r5   r[   r\   rs   Ústrr   r   r]   r�   r.   r6   r7   r8   s   @r"   r_   r_   p   så   ø† ÙUðR-àðR-ð ðR-ð ð	R-ð
 ðR-ð !  c ™?ðR-ð �s˜C�x‘ðR-ð ðR-ð ðR-ð ðR-ð ðR-ð ðR-ð ðR-ð ÷R-ðh
 U§\¡\ð 
°e·l±lô 
ð"-˜UŸ\™\ð -¨e¯l©l÷ -ò -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	$ )	ÚCosmos3AudioResidualUnitéï   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 )NrA   r   rB   )rC   r§   ro   r   rH   )
r   r   r   Úsnake1r   r   rK   Úconv1Úsnake2Úconv2)r   r¦   r§   rŠ   r!   s       €r"   r   Ú!Cosmos3AudioResidualUnit.__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   .)rª   r©   r¬   r«   r'   )r   Úhidden_stateÚoutput_tensorro   s       r"   r.   Ú Cosmos3AudioResidualUnit.forwardý   s…   € ð %ˆØŸ
™
 4§;¡;¨}Ó#=Ó>ˆØŸ
™
 4§;¡;¨}Ó#=Ó>ˆà×%Ñ% bÑ)¨M×,?Ñ,?ÀÑ,CÑCÈÑIˆØ�Q‹;Ø'¨¨W°XÐ-=Ð(=Ñ>ˆLØ$Ñ4ˆØÐr$   )rª   r¬   r©   r«   )é   r   ©
r1   r2   r3   r4   r5   r[   r   r.   r6   r7   r8   s   @r"   r¤   r¤   ï   s.   ø† ññQ #ð Q°c÷ Qð Q÷ð 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	$ )	ÚCosmos3AudioDecoderBlocki  z+Decoder block used in Cosmos3Audio decoder.rn   Úoutput_paddingc                 ó  >• [         TU ]  5         [        U5      U l        [	        [
        R                  " UUSU-  U[        R                  " US-  5      U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   )rC   rn   ro   r¶   r   )r§   r   é	   )r   r   r   r©   r   r   ÚConvTranspose1drw   rx   Úconv_t1r¤   Ú	res_unit1Ú	res_unit2Ú	res_unit3)r   r{   r|   rn   r¶   r!   s        €r"   r   Ú!Cosmos3AudioDecoderBlock.__init__  sƒ   ø€ Ü‰ÑÔä˜iÓ(ˆŒÜ"Ü×ÒØØØ ™JØÜŸ	š	 &¨1¡*Ó-Ø-ñó	
ˆŒô 2°*ÀqÑIˆŒÜ1°*ÀqÑIˆŒÜ1°*ÀqÑIˆ�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$ ©N)r©   rº   r»   r¼   r½   )r   r¯   s     r"   r.   Ú Cosmos3AudioDecoderBlock.forward/  sN   € Ø—{‘{ <Ó0ˆØ—|‘| LÓ1ˆØ—~‘~ lÓ3ˆØ—~‘~ lÓ3ˆØ—~‘~ lÓ3ˆàÐr$   )rº   r»   r¼   r½   r©   )r   r   r³   r8   s   @r"   rµ   rµ     s,   ø† Ù5ñJ°cð JÈs÷ Jð J÷$ð r$   rµ   c                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚCosmos3AudioDecoderi?  zCosmos3Audio Decoderc           
      óÆ  >• [         TU ]  5         UnS/U-   n[        [        R                  " X!US   -  SSS95      U l        / n[        U5       H=  u  p‰U[        X[        U5      U-
     -  X[        U5      U-
  S-
     -  U	U	S-  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&   rB   r   )rC   ro   r   )r{   r|   rn   r¶   F)rC   ro   rG   )r   r   r   r   rK   rª   rt   rµ   rq   Ú
ModuleListÚblockr   r©   r¬   )r   rc   ra   Úaudio_channelsÚupsampling_ratiosre   rf   rÆ   Ústride_indexrn   r|   r!   s              €r"   r   ÚCosmos3AudioDecoder.__init__B  só   ø€ Ü‰ÑÔà#ˆØ˜CÐ"3Ñ3Ðô !¤§¢¨>ÐFWÐXZÑF[Ñ;[ÐijÐtuÑ!vÓwˆŒ
ð ˆÜ$-¨gÖ$6Ñ ˆLØÜ(Ø&¼3¸w»<È,Ñ;VÑ)WÑWØ'¼CÀ»LÈ<Ñ<WÐZ[Ñ<[Ñ*\Ñ\Ø!Ø#)¨A¡:ñ	ðñ Š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$ rÀ   )rª   rÆ   r©   r¬   )r   r¯   Úlayers      r"   r.   ÚCosmos3AudioDecoder.forward\  sL   € Ø—z‘z ,Ó/ˆà—Z”ZˆEÙ  Ó.ŠLñ  ð —{‘{ <Ó0ˆØ—z‘z ,Ó/ˆàÐr$   )rÆ   rª   r¬   r©   r0   r8   s   @r"   rÃ   rÃ   ?  s   ø† Ùõl÷4	ð 	r$   rÃ   c                   ó$   • \ rS rSr% Sr\\S'   Srg)ÚCosmos3AudioEncoderOutputih  z-Output of `Cosmos3AVAEAudioTokenizer.encode`.Úlatent_dist© N)r1   r2   r3   r4   r5   r   Ú__annotations__r6   rÑ   r$   r"   rÏ   rÏ   h  s   ‡ á7à4Ö4r$   rÏ   c                   ó8   • \ rS rSr% Sr\R                  \S'   Srg)ÚCosmos3AudioDecoderOutputio  z.Output of `Cosmos3AVAEAudioTokenizer.forward`.ÚsamplerÑ   N)	r1   r2   r3   r4   r5   r   r]   rÒ   r6   rÑ   r$   r"   rÔ   rÔ   o  s   ‡ á8à�L‰LÖr$   rÔ   c            T       óÐ  ^ • \ rS rSrSrSrSr\                                         S>S\S\	S\	S\	S	\
S
\
S\	S\S\S\S\	S-  S\	S\S\	S\	S\	S\	S\	S\	S\	S\
S\
S\S\S\S\S\S \S!\S"\S#\S$\S-  S%\S&\S'\S(\S)\S*\S+\\\   -  S-  S,\\\   -  S-  S-\4RU 4S. jjj5       rS/ rS0\S1S4U 4S2 jjrS3\R(                  S1\R(                  4S4 jr\  S?S3\R(                  S5\S6\S1\\
\   -  4S7 jj5       r\S8\R(                  S1\R(                  4S9 j5       r    S@S3\R(                  S:\S5\S;\R6                  S-  S6\S1\\
\R(                     -  4S< jjrS=rU =r$ )AÚCosmos3AVAEAudioTokenizeriv  uD  Audio tokenizer for Cosmos3 sound generation.

Wraps the Cosmos3 AVAE SpecConvNeXt encoder and Oobleck-style decoder used by the Cosmos3 omni model. The decoder
API stays tensor-returning because ``Cosmos3OmniPipeline`` calls it directly when ``enable_sound=True``.

Only the shipped AVAE configuration (``model_type="autoencoder_v2"``, waveform input, ``spec_convnext`` encoder,
``vae`` bottleneck, ``oobleck`` decoder, log-scale SnakeBeta, no latent normalization) is supported; any other
value raises ``NotImplementedError``.

Parameters:
    model_type (`str`, defaults to `"autoencoder_v2"`): AVAE model variant; only `"autoencoder_v2"` is supported.
    sampling_rate (`int`, defaults to `48000`): Audio sample rate in Hz.
    vocoder_input_dim (`int`, defaults to `64`): Latent channel count fed into the decoder
        (``== transformer sound_dim``).
    dec_dim (`int`, defaults to `320`): Base decoder channel count.
    dec_c_mults (`tuple[int, ...]`, defaults to `(1, 2, 4, 8, 16)`): Decoder channel multipliers.
    dec_strides (`tuple[int, ...]`, defaults to `(2, 4, 5, 6, 8)`): Decoder upsampling strides.
    dec_out_channels (`int`, defaults to `2`): Output audio channels (2 = stereo).
    stereo (`bool`, defaults to `True`):
        Whether the audio is stereo; doubles the encoder's effective channel count.
    use_wav_as_input (`bool`, defaults to `True`): Whether the encoder consumes raw waveforms; only `True` is
        supported.
    normalize_volume (`bool`, defaults to `True`): Whether `encode` peak-normalizes the waveform before encoding.
    hop_size (`int`, *optional*): Waveformâ†’latent temporal compression factor used for `encode` padding. Defaults
        to `prod(dec_strides)` when `None`.
    input_channels (`int`, defaults to `1`): Per-channel encoder input count before the `stereo` doubling.
    enc_type (`str`, defaults to `"spec_convnext"`): Encoder type; only `"spec_convnext"` is supported.
    enc_dim (`int`, defaults to `192`): Base encoder channel count.
    enc_intermediate_dim (`int`, defaults to `768`): Unused; kept for config fidelity (ConvNeXt blocks use
        ``input_dim * 4``).
    enc_num_layers (`int`, defaults to `12`):
        Unused; kept for config fidelity (depth derives from `enc_num_blocks`).
    enc_num_blocks (`int`, defaults to `2`): ConvNeXt blocks per encoder downsampling stage.
    enc_n_fft (`int`, defaults to `64`): STFT FFT size for the encoder spectrogram front-end.
    enc_hop_length (`int`, defaults to `16`): STFT hop length for the encoder spectrogram front-end.
    enc_latent_dim (`int`, defaults to `128`):
        Encoder output channels; split into mean/scale by the VAE bottleneck (so ``enc_latent_dim == 2 *
        vocoder_input_dim``).
    enc_c_mults (`tuple[int, ...]`, defaults to `(1, 2, 4)`): Encoder channel multipliers per stage.
    enc_strides (`tuple[int, ...]`, defaults to `(4, 5, 6)`): Encoder downsampling strides per stage.
    enc_identity_init (`bool`, defaults to `False`): Whether to zero-init the ConvNeXt residual 1x1 convs.
    enc_use_snake (`bool`, defaults to `True`): Whether ConvNeXt blocks use SnakeBeta (else GELU).
    dec_type (`str`, defaults to `"oobleck"`): Decoder type; only `"oobleck"` is supported.
    dec_use_snake (`bool`, defaults to `True`): Whether the decoder uses SnakeBeta; only `True` is supported.
    dec_final_tanh (`bool`, defaults to `False`): Vestigial decoder tanh flag; only `False` is supported.
    dec_anti_aliasing (`bool`, defaults to `False`): Decoder anti-aliasing flag; only `False` is supported.
    dec_use_nearest_upsample (`bool`, defaults to `False`): Decoder upsample mode flag; only `False` is supported.
    dec_use_tanh_at_final (`bool`, defaults to `False`): Decoder final-tanh flag; only `False` is supported.
    bottleneck_type (`str`, defaults to `"vae"`): Bottleneck type; only `"vae"` is supported.
    bottleneck (`dict`, *optional*): Bottleneck config; if given, its `"type"` must be `"vae"`.
    activation (`str`, defaults to `"snakebeta"`): Activation family; only `"snakebeta"` is supported.
    snake_logscale (`bool`, defaults to `True`): Whether SnakeBeta parameters are log-scaled; only `True` is
        supported.
    anti_aliasing (`bool`, defaults to `False`): Global anti-aliasing flag; only `False` is supported.
    use_cuda_kernel (`bool`, defaults to `False`): Whether to use fused CUDA kernels; only `False` is supported.
    causal (`bool`, defaults to `False`):
        Whether convolutions are causal; only `False` is supported by the encoder.
    padding_mode (`str`, defaults to `"zeros"`): Convolution padding mode.
    latent_mean (`float` or `list[float]`, *optional*): Latent normalization mean; latent normalization is not
        implemented, so a non-`None` value raises ``NotImplementedError``.
    latent_std (`float` or `list[float]`, *optional*): Latent normalization std; latent normalization is not
        implemented, so a non-`None` value raises ``NotImplementedError``.
    encoder_enabled (`bool`, defaults to `True`): Whether to instantiate the encoder. Set to `False` (or
        auto-disabled on load) for decoder-only checkpoints, which cannot `encode`.
FNÚ
model_typeÚsampling_rateÚvocoder_input_dimÚdec_dimÚdec_c_multsÚdec_stridesÚdec_out_channelsrb   Úuse_wav_as_inputÚnormalize_volumeÚhop_sizera   Úenc_typeÚenc_dimÚenc_intermediate_dimÚenc_num_layersÚenc_num_blocksÚ	enc_n_fftÚenc_hop_lengthÚenc_latent_dimÚenc_c_multsÚenc_stridesÚenc_identity_initÚenc_use_snakeÚdec_typeÚdec_use_snakeÚdec_final_tanhÚdec_anti_aliasingÚdec_use_nearest_upsampleÚdec_use_tanh_at_finalÚbottleneck_typeÚ
bottleneckÚ
activationÚsnake_logscaleÚanti_aliasingÚuse_cuda_kernelr?   rj   Úlatent_meanÚ
latent_stdÚencoder_enabledc*                 óF  >• [         T*U ]  5         US:w  a  [        SU< S35      eU	(       d  [        S5      eUS:w  a  [        SU< S35      eU b!  U R                  SU5      S:w  a  [        S	5      eUS:w  a  [        S	5      eUS
:w  a  [        SU< S35      eU(       a  U(       d  U(       d  U(       d  U(       a  [        S5      eU!S:w  d  U"(       a  U#(       d  U$(       a  [        S5      eU'c  U(b  [        S5      eS U l        SU l        U)(       a3  [        UUUU[        U5      [        U5      UUUUUU%U&S9U l        SU l        [        UUU[        [        U5      5      [        U5      S9U l        Ub  [        U5      U l        g [        R                  " U5      U l        g )NÚautoencoder_v2zCosmos3 AVAE model type z is not supported.z4Cosmos3 AVAE tokenizer only supports waveform input.Úspec_convnextzCosmos3 AVAE encoder type ÚtypeÚvaez8Cosmos3 AVAE tokenizer only supports the VAE bottleneck.ÚoobleckzCosmos3 AVAE decoder type zMCosmos3 AVAE decoder only supports the shipped Oobleck decoder configuration.Ú	snakebetazICosmos3 AVAE tokenizer only supports the shipped SnakeBeta configuration.zdCosmos3 AVAE tokenizer does not apply latent normalization; `latent_mean`/`latent_std` must be None.F)ra   rb   rc   rd   re   rf   rg   rh   ri   r=   r>   r?   rj   T)rc   ra   rÇ   rÈ   re   )r   r   rp   ÚgetÚencoderÚ_encoder_availabler_   rs   rÃ   ÚlistÚreversedÚdecoderr[   rw   ÚprodÚ	_hop_size)+r   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rb   rß   rà   rá   ra   râ   rã   rä   rå   ræ   rç   rè   ré   rê   rë   rì   rí   rî   rï   rð   rñ   rò   ró   rô   rõ   rö   r÷   rø   rù   r?   rj   rú   rû   rü   r!   s+                                             €r"   r   Ú"Cosmos3AVAEAudioTokenizer.__init__¼  s«  ø€ ôZ 	‰ÑÔàÐ)Ó)Ü%Ð(@ÀÁÐN`Ð&aÓbÐbÞÜ%Ð&\Ó]Ð]Ø�Ó&Ü%Ð(BÀ8Á,ÐN`Ð&aÓbÐbØÑ! j§n¡n°V¸_Ó&MÐQVÓ&VÜ%Ð&`ÓaÐaØ˜eÓ#Ü%Ð&`ÓaÐaØ�yÓ Ü%Ð(BÀ8Á,ÐN`Ð&aÓbÐbæÞÞ Þ'Þ$ä%Ð&uÓvÐvØ˜Ó$®N¾mÎÜ%Ð&qÓrÐrØÑ" jÑ&<Ü%Øvóð ð ˆŒØ"'ˆÔÞÜAØ-ØØ Ø)Ü"'¨Ó"4Ü˜kÓ*Ø)ØØ)Ø/Ø'ØØ)ñˆDŒLð '+ˆDÔ#ä*ØØ,Ø+Ü"¤8¨KÓ#8Ó9Ü" ;Ó/ñ
ˆŒð 08Ñ/Cœc (›mˆ�ÌÏÊÐS^ÓI_ˆ�r$   c                 ó>   • S U l         SU l        U R                  SS9  g )NF)rü   )r  r  r   )r   s    r"   Ú_disable_encoderÚ*Cosmos3AVAEAudioTokenizer._disable_encoder$  s"   € ØˆŒØ"'ˆÔØ×Ñ°ÐÒ6r$   Ú
state_dictrV   c                 ó�   >• [         TU ]  U5        U R                  b)  [        S U 5       5      (       d  U R	                  5         g g g )Nc              3   óB   #   • U  H  oR                  S 5      v •  M     g7f)zencoder.N)Ú
startswith)Ú.0Úkeys     r"   Ú	<genexpr>ÚICosmos3AVAEAudioTokenizer._fix_state_dict_keys_on_load.<locals>.<genexpr>+  s   é € Ð/aÒV`Ès·±¸z×0JÐ0JÒV`ùs   ‚)r   Ú_fix_state_dict_keys_on_loadr  Úanyr  )r   r  r!   s     €r"   r  Ú6Cosmos3AVAEAudioTokenizer._fix_state_dict_keys_on_load)  s@   ø€ Ü‰Ñ,¨ZÔ8Ø�<‰<Ñ#¬CÑ/aÑV`Ó/a×,aÑ,aØ×!Ñ!Õ#ð -bÐ#r$   rÕ   c                 óD   • U R                  U5      R                  SS5      $ )Nr   r   )r  rš   )r   rÕ   s     r"   Ú_encodeÚ!Cosmos3AVAEAudioTokenizer._encode.  s   € Ø�|‰|˜FÓ#×-Ñ-¨a°Ó3Ð3r$   Úreturn_dictÚ	force_padc                 ó¼  • UR                   S:w  a"  [        S[        UR                  5       S35      eU R                  b  U R
                  (       d  [        S5      eUnU R                  R                  (       a&  XDR                  5       R                  5       S-   -  S-  nU(       d  U R                  (       dV  UR                  S   nU R                  XPR                  -  -
  U R                  -  nUS:”  a  [        R                  " USU4S	SS
9n[        U R                  5      nU R                  UR!                  US95      n[#        U5      n	U(       d  U	4$ [%        U	S9$ )a  Encode a waveform into a VAE latent distribution.

Args:
    sample: Audio waveform tensor with shape ``[B, C, T]``.
    return_dict: Whether to return a ``Cosmos3AudioEncoderOutput``.
    force_pad: Whether to right-pad to ``hop_size`` even when the model is in training mode.
r   z(`sample` must have shape [B, C, T], got rl   z¦This Cosmos3 AVAE sound tokenizer was loaded from decoder-only weights and cannot encode audio. Re-convert the AVAE checkpoint with encoder weights to use `encode()`.rE   gffffffî?r&   r   Úconstant)ÚmodeÚvalue)r‚   )rÐ   )Úndimrr   rs   r'   r  r  Úconfigrà   ÚabsÚmaxÚtrainingr  r‰   rŠ   r   r  r™   r   rÏ   )
r   rÕ   r  r  r-   Úsample_lengthro   Úencoder_dtypeÚmomentsÚ	posteriors
             r"   ÚencodeÚ Cosmos3AVAEAudioTokenizer.encode1  s/  € ð �;‰;˜!ÓÜÐGÌÈfÏlÉlÓH[ÐG\Ð\]Ð^Ó_Ð_à�<‰<Ñ t×'>×'>ÜðYóð ð
 ˆØ�;‰;×'×'Ø)×->Ñ->Ó-@×-DÑ-DÓ-FÈÑ-MÑNÐQUÑUˆMæ˜DŸMŸMØ)×/Ñ/°Ñ3ˆMØ—~‘~¨¿¹Ñ)GÑHÈDÏNÉNÑZˆGØ˜‹{Ü !§¢ m°a¸°\È
ÐZ[Ñ \�ä+¨D¯L©LÓ9ˆØ—,‘,˜}×/Ñ/°mÐ/ÐDÓEˆÜ7¸Ó@ˆ	æØ�<Ðä(°YÑ?Ð?r$   Úlatentsc                 óÆ   • UR                   S:H  nU(       a  UR                  S5      nU R                  U5      R                  SS5      nU(       a  UR	                  S5      $ U$ )zÕDecode sound latents into an audio waveform.

Args:
    latents: ``[B, C, T]`` or ``[C, T]`` tensor of diffusion-model latents.

Returns:
    Waveform tensor ``[B, audio_channels, N]`` or ``[audio_channels, N]``.
r   r   g      ð¿g      ð?)r$  Ú	unsqueezer	  Úclampr•   )r   r/  r•   r’   s       r"   ÚdecodeÚ Cosmos3AVAEAudioTokenizer.decode[  sV   € ð —,‘, !Ñ#ˆÞØ×'Ñ'¨Ó*ˆGØ—‘˜WÓ%×+Ñ+¨D°#Ó6ˆÞ#*ˆu�}‰}˜QÓÐ5°Ð5r$   Úsample_posteriorÚ	generatorc                 óÈ   • U R                  XS9R                  nU(       a  UR                  US9OUR                  5       nU R	                  U5      nU(       d  U4$ [        US9$ )aŸ  
Encode then decode a waveform. `sample_posterior=False` (default) decodes the distribution mode (mean), whereas
the upstream Cosmos3 AVAE always samples; pass `sample_posterior=True` for reference-equivalent behavior.

Args:
    sample (`torch.Tensor`):
        Input waveform sample with shape `(batch_size, audio_channels, num_samples)`.
    sample_posterior (`bool`, *optional*, defaults to `False`):
        Whether to sample from the posterior instead of decoding the distribution mode.
    return_dict (`bool`, *optional*, defaults to `True`):
        Whether or not to return a [`Cosmos3AudioDecoderOutput`] 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.
    force_pad (`bool`, *optional*, defaults to `False`):
        Whether to right-pad the waveform to `hop_size` before encoding even when the model is in training
        mode.

Returns:
    [`Cosmos3AudioDecoderOutput`] or `tuple`:
        If `return_dict` is True, a [`Cosmos3AudioDecoderOutput`] is returned, otherwise a plain `tuple` is
        returned.
)r  )r6  )rÕ   )r-  rÐ   rÕ   r"  r3  rÔ   )	r   rÕ   r5  r  r6  r  r,  r/  Údecodeds	            r"   r.   Ú!Cosmos3AVAEAudioTokenizer.forwardk  s_   € ð> —K‘K �KÐ<×HÑHˆ	Þ;K�)×"Ñ"¨YÐ"Ñ7ÐQZ×Q_ÑQ_ÓQaˆØ—+‘+˜gÓ&ˆæØ�:Ðä(°Ñ8Ð8r$   )r  r  r	  r  ))rþ   i€»  é@   i@  )r   r   rm   é   r²   )r   rm   é   rA   r;  r   TTTNr   rÿ   éÀ   i   é   r   r:  r²   é€   )r   r   rm   )rm   r<  rA   FTr  TFFFFr  Nr  TFFFr   NNT)TF)FTNF) r1   r2   r3   r4   r5   Ú _supports_gradient_checkpointingÚ_supports_group_offloadingr   r¢   r[   rs   r\   Údictr‹   r  r   r  r   r  r   r]   r  r
   rÏ   r   r-  r3  Ú	GeneratorrÔ   r.   r6   r7   r8   s   @r"   r×   r×   v  só  ø† ñ@ðD (-Ð$Ø!&Ðàð +Ø"Ø!#ØØ-Ø,Ø !ØØ!%Ø!%Ø#ØØ'ØØ$'Ø ØØØ Ø!Ø&Ø&Ø"'Ø"Ø!Ø"Ø$Ø"'Ø).Ø&+Ø$Ø"&Ø%Ø#Ø#Ø %ØØ#Ø26Ø15Ø $ñUe`àðe`ð ðe`ð ð	e`ð
 ðe`ð ðe`ð ðe`ð ðe`ð ðe`ð ðe`ð ðe`ð ˜‘*ðe`ð ðe`ð ðe`ð ðe`ð  "ð!e`ð" ð#e`ð$ ð%e`ð& ð'e`ð( ð)e`ð* ð+e`ð, ð-e`ð. ð/e`ð0  ð1e`ð2 ð3e`ð4 ð5e`ð6 ð7e`ð8 ð9e`ð:  ð;e`ð< #'ð=e`ð>  $ð?e`ð@ ðAe`ðB ˜4‘KðCe`ðD ðEe`ðF ðGe`ðH ðIe`ðJ ðKe`ðL ðMe`ðN ðOe`ðP ˜T %™[Ñ(¨4Ñ/ðQe`ðR ˜D ™KÑ'¨$Ñ.ðSe`ðT ÷Ue`ó ðe`òN7ð
$°{ð $Àt÷ $ð
4˜eŸl™lð 4¨u¯|©|ô 4ð ð !Øñ	'@à—‘ð'@ð ð'@ð ð	'@ð
 
# UÐ+NÑ%OÑ	Oô'@ó ð'@ðR ð6˜eŸl™lð 6¨u¯|©|ó 6ó ð6ð$ "'Ø Ø,0Øñ&9à—‘ð&9ð ð&9ð ð	&9ð
 —?‘? TÑ)ð&9ð ð&9ð 
# U¨5¯<©<Ñ%8Ñ	8÷&9ó &9r$   r×   )&r5   rw   Úcollectionsr   Údataclassesr   r   Útorch.nnr   Útorch.nn.functionalÚ
functionalr‰   Útorch.nn.utilsr   Úconfiguration_utilsr   r   Úutilsr	   Úutils.accelerate_utilsr
   Úmodeling_utilsr   r   Únormalizationr   Úautoencoder_oobleckr   ÚModuler   r:   r_   r¤   rµ   rÃ   rÏ   rÔ   r×   rÑ   r$   r"   Ú<module>rQ     sì   ðñ ó Ý #Ý !ã Ý ß Ð Ý &ç BÝ Ý 8ß <Ý )Ý Dôˆb�i‰iô ô4)( §	¡	ô )(ôX{-¨R¯Y©Yô {-ô~"˜rŸy™yô "ðJô˜rŸy™yô ð>ô&˜"Ÿ)™)ô &ðR ô5 
ó 5ó ð5ð ô 
ó ó ðô[9 
¨Kõ [9r$   