
    +h                        S SK r S SKJrJrJrJr  S SKrS SKJr  S SK	Js  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Jr  \" \5      r/ SQr/ SQr\R<                  " SS/5      \R<                  " SS/5      S.r " S S\R@                  5      r! " S S\R                  RD                  5      r# " S S\RD                  5      r$ " S S\RD                  5      r% " S S\RD                  5      r& " S S\RD                  5      r' " S S\RD                  5      r( " S S \RD                  5      r) " S! S"\RD                  5      r* " S# S$5      r+ " S% S&5      r, " S' S(\RD                  5      r- " S) S*\RD                  5      r. " S+ S,\RD                  5      r/ " S- S.\RD                  5      r0 " S/ S0\RD                  5      r1 " S1 S2\\5      r2g)3    N)ListOptionalTupleUnion   )ConfigMixinregister_to_config)
get_logger)apply_forward_hook   )AutoencoderKLOutput)
ModelMixin   )DecoderOutputIdentityDistribution(   g4t?g}Gug#әr?gչ?gF%.2Ǔ?g ?gu	$'y?g
ˆj?g&.*?gij'-?g	ف4?g癖?g1X?gj!?g	3,?g.$-Ĕ?g5	{?g;,T?g 
~?g=-7?gTjݣ$?g,l?gM53ݨ?gJF?g!!%?gnK?ggI?gg=c?g9m?g԰?gJHZ?go @?g7?goS?gJK?ge:Ɯ?gѴ@?gfTF?g #?g~[?gJn^慅?gCo?g<
~?gڪ?g?gϾ,̠?guס?g'#J9?g2`gJ?gJvSgAj?gsQ?gO?gQgQL?g
$
?g^_>?g=Y{7]?g%5?gdH_RƧ?g+>?gU?gC?g"~͋?gCfx	?g2gkgg[Yͅg窳9gޑ녆g8&g-!g
Tgc#듿gZgprg2ϙg9Qygeѡۘgq!mFzg{nHgY[N?g)WgS
h.`g=J$g[<箿gTgQgÙgzR gDԷ骿gW5_g˺V﫿gW'g(xg<gg$Tg}bs?gϹJIf?gʱicogaHl?gI.A?gi6xx2?g\?g؂9գ?gy@vjp?gBVP?gDEk?gƵ?gbEO3?g'".H?g$Pq[?gzة?g%dsY?g'#|?g]XP?gO(r?g~l?g9ݪҳ?gm,´?g%@?gMIcQd?ga\?gm`?g`?g	^K%?gcCbӳ?gWƳ?gw=$?g^A0t?g<Mg`}T?gஅgOgFۆg,Yg[ݐg4UAVgѢF:g	g$竁gXWgXbjgcbgc9gg`wg8@?g=C?g<q?g6*	?g!6X?gMܹQ?gt7?g@?g?ge؋?gZSv%?g˸-?gEi?gkn[?giUH?g ?g]ӶHg̸gE}q-ggzdgf{xgCg>gRLge,gnXzgޱg33'g{_g66gklFfg~I+g)݆t8g[mNg-RQg`g;P]g~U7,pg+2gkog(Jg
v'gR~Fg\T(rgKH`gV3(gX]g>(ſg_rH?gVW̤?gIG?gw?g2O?gK?gTA
}?g#l4?gaVL?g|__Ş?g+!b?g1?gc=2)?g8pN?g?g[H|gd*"TggAGg9[av&ggR|s.g
1.g㪿g-J?DgOYggno g'@Pg҂@gJZ᧧gC¨g##?g~"G!f?gGƝgᄕLFg:&GgA?#g0æg6,>"ئg)U g.3Ͼgՙg]p멿gt5l)Zg	bfէg3樿gAKi ʨg ?g,wn)tg;VEg;!	5g3CgIɛ{gƹguMؤgm2g{gҚ̀g,DEgUslڵggeY]g/`䣿(   g0$?g6D~?gxG ?gs"I?g+!~Q?g4uhU?g&|ⵁ?g$m?gB=j?g)n?y?gZT8@8x?gE>3?gl1?gz[#ac?g&߮?g{W?gWGG?g(p?g8!?gMN?gd?g |?g%r?gl??gEeT?g`?gǢ?gm??gAvA?g]@?J?gu!?gn|)?gw3/?g y?gv?gg~N?gHA]?g@=?gڶ%?g7?g/w?gyޕ?g%Uf?g ?g4x"&2?gp_8?g%ϳafB?g^.^M?gnˀf?g6??gr_!s?gЎ?gda?g9B66?g]o!U5?g}a!g?gWRա&|?gZua?g#?gȟ?gd\=?gYfQ?gNl ?g9B6?g@ _?g1	8 ?g776?gqI?g4?gL?g>`#?g=1_?g?g"?g9w`G?g<?g]f@b@?g^cf?g j?g[U}g?g<^?gݎ}?g)>i?gi^a:?g	j[AV?guU^p?g9{>?g퀈`^?gR4A?g;!	?g??g|)=?g&!a{?gT
O"?g	?gՇ?gk82?g6fR?gx*o?goW՜?g,g~5?g7b?g ?gn)?gC~
6?gHUC?ggB}D?g@!R?g5T?g)0W?gx?gs0 R?gHDz?gmc?g1!$?g&G*!`?g/Qv?g?gh0x^K?gʑA?g%6a?g_T?g?gEr"?gr",?g%Z?g2Rs@?g2?ge]//?g_?g,n?gٍ_?ge)w?ga:?g/@0?g8a?g{ ?gG?gܿ}.?g +?gfޢ?gX?gsG?g>?gbL?gV?gox'?ggS~?gڊ?g@#)?gao?g/?g(bS?g̲'?g6>?g8^)/?gjxb?gπ8W?gO4r?g`?g[?g%L/?g?g贗?g?gܽy?g?g~?gnm]?g
?gc: ?g(?g򸠥(?g%?g:T^"?gy3E?g?gD?gLՇ??g:B?g.S?g?g?gj5ȑ?g[F̌?gz,!?gǸ?gJ"?g+~?g}R7a?gO_?gO;>R?gP]?gߑ?gdֽ?g=I?g#ܞb?g3t8?g^b?g,?g̥)^?gԲ!|?g)j/n?gB_?gף.!8?gʇↆ?gR?g3!!b?g_ ?gLsD!vd?gd|?gmA?g>[?gA~8?gNE	~Da?gٰo?gK?g[B?gA`a?gc>A?gBӯ ?gM?g?gF]0$?g*ڠ;?g8m?g$k?g=mB?g]]>'w?gg>N?g1?gb?gIK"?gi?gW
?@?gY8Q#?gn?l-?gzX^2?gpp?gQ*v?g̀u?gc-?gA.?gZ2?g_JUEZ?g]$rw?gi}m?gbͽn?g_?gg7
?g>(޷?g F?g ?g(_?g8+&?gSa?g?g;f?      ?)haar	rearrangec                      ^  \ rS rSr       SS\S\S\\\\\\4   4   S\\\\\\4   4   S\\\\\\4   4   S\S\S	S
4U 4S jjjrS\	R                  S	\	R                  4U 4S jjrSrU =r$ )CosmosCausalConv3d-   in_channelsout_channelskernel_sizedilationstridepaddingpad_modereturnNc                 R  > [        U[        5      (       a  X3U4OUn[        U[        5      (       a  XDU4OUn[        U[        5      (       a  XUU4OUnUu  pn
U	S-  S:X  a	  U
S-  S:X  d   e[        TU ]  UUUUUS9  Xpl        US   US   S-
  -  SUS   -
  -   U l        XfXf4U l        g )Nr   r   )r   r   r   )
isinstanceintsuper__init__r   temporal_padspatial_pad)selfr   r   r   r   r   r   r   _height_kernel_sizewidth_kernel_size	__class__s              m/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/models/autoencoders/autoencoder_kl_cosmos.pyr$   CosmosCausalConv3d.__init__.   s     BLKY\A]A]{=cn5?#5N5NH1T\-7-D-D&&)&3>00!A%*/@1/D/III 	 	
 !$QK;q>A+=>!fQi-P#g?    hidden_statesc                 
  > US S 2S S 2S S2S4   R                  SSU R                  SS5      n[        R                  " X!/SS9n[        R
                  " U/ U R                  QSPSP7U R                  SS9n[        TU ]%  U5      $ )Nr   .r   dimr           modevalue)
repeatr%   torchcatFpadr&   r   r#   forward)r'   r/   hidden_states_prevr+   s      r,   r<   CosmosCausalConv3d.forwardK   s    *1a!S=9@@AtGXGXZ[]^_		#5"E1Mm-Ft/?/?-F-FA-FT]]befw}--r.   )r   r&   r%   )r   r   )r   r   r   r   r   r   r?   r   constant)__name__
__module____qualname____firstlineno__r"   r   r   strr$   r8   Tensorr<   __static_attributes____classcell__r+   s   @r,   r   r   -   s     8A5>3<"@@ @ 3c3m 445	@
 U3S=112@ c5c3//0@ @ @ 
@ @:.U\\ .ell . .r.   r   c                   r   ^  \ rS rSrS	S\S\4U 4S jjjrS\R                  S\R                  4S jrSr	U =r
$ )
CosmosCausalGroupNormR   r   
num_groupsc                 f   > [         TU ]  5         [        R                  " UUSSS9U l        X l        g )Ngư>T)rM   num_channelsepsaffine)r#   r$   nn	GroupNormnormrM   )r'   r   rM   r+   s      r,   r$   CosmosCausalGroupNorm.__init__S   s1    LL!$	
	 %r.   r/   r   c                 (   U R                   S:X  ap  UR                  S5      nUR                  SSSSS5      R                  SS5      nU R	                  U5      nUR                  SUS45      R                  SSSSS5      nU$ U R	                  U5      nU$ )Nr   r   r   r      )rM   sizepermuteflattenrT   	unflatten)r'   r/   
batch_sizes      r,   r<   CosmosCausalGroupNorm.forward]   s    ??a&++A.J)11!Q1a@HHANM IIm4M)33A
B7GHPP1aAM
  !IIm4Mr.   )rT   rM   r   rA   rB   rC   rD   r"   r$   r8   rF   r<   rG   rH   rI   s   @r,   rK   rK   R   s;    %C %S % %
U\\ 
ell 
 
r.   rK   c                   ,  ^  \ rS rSrSS\S\SS4U 4S jjjrSS\R                  S\S\R                  4S	 jjr	S\R                  S\R                  4S
 jr
S\R                  S\R                  4S jrS\R                  S\R                  4S jrSrU =r$ )CosmosPatchEmbed3dj   
patch_sizepatch_methodr   Nc                 
  > [         TU ]  5         Xl        X l        [        R                  U5      R                  5       n[        R                  " UR                  S   5      nU R                  SUSS9  U R                  SUSS9  g Nr   waveletsF)
persistent_aranger#   r$   rd   re   	_WAVELETSgetcloner8   arangeshaperegister_bufferr'   rd   re   rh   ro   r+   s        r,   r$   CosmosPatchEmbed3d.__init__k   q    $(==.446hnnQ/0ZeDY5Ar.   r/   r5   c           
         UR                   nU R                  nUR                  S   nUR                  S   nUR                  S5      R	                  SSS5      R                  USS5      nUSU R                  -  -  R	                  SSS5      R                  USS5      n	U	R                  US9n	UR                  US9n[        R                  " U[        SUS-
  5      US-
  US-
  US-
  US-
  US-
  4US9R                  U5      n[        R                  " XR                  S5      R                  S5      US	S
9n
[        R                  " XR                  S5      R                  S5      US	S
9n[        R                  " XR                  S5      R                  S5      USS
9n[        R                  " XR                  S5      R                  S5      USS
9n[        R                  " XR                  S5      R                  S5      USS
9n[        R                  " XR                  S5      R                  S5      USS
9n[        R                  " XR                  S5      R                  S5      USS
9n[        R                  " XR                  S5      R                  S5      USS
9n[        R                  " XR                  S5      R                  S5      USS
9n[        R                  " XR                  S5      R                  S5      USS
9n[        R                  " XR                  S5      R                  S5      USS
9n[        R                  " XR                  S5      R                  S5      USS
9n[        R                  " XR                  S5      R                  S5      USS
9n[        R                  " XR                  S5      R                  S5      USS
9n[        R                  " UUUUUUUU/SS9nU(       a  US-  nU$ )Nr   r   rX   dtyper   )r;   r5   r   rW   r   r   r   groupsr   r   r   r   r   r   r   r1   ;f@)rw   rh   rp   flipreshaper7   rj   tor:   r;   maxconv3d	unsqueezer8   r9   )r'   r/   r5   rescalerw   rh   nghlhhxlxhxllxlhxhlxhhxlllxllhxlhlxlhhxhllxhlhxhhlxhhhs                           r,   _dwtCosmosPatchEmbed3d._dwtw   sH   ##==NN1"]]1%%aB/66q!Q?2$,,./88ArBII!QPQRUUUUUU m#aQ-QAqSTuVWZ[V[]^ab]b1cjnorr
 XXm\\!_%>%>q%A!T]^XXm\\!_%>%>q%A!T]^ hhr<<?44Q7)Thhr<<?44Q7)Thhr<<?44Q7)Thhr<<?44Q7)Txx\\!_66q9!IVxx\\!_66q9!IVxx\\!_66q9!IVxx\\!_66q9!IVxx\\!_66q9!IVxx\\!_66q9!IVxx\\!_66q9!IVxx\\!_66q9!IV		4tT4tT"RXYZ)F2Mr.   c                 J   [         R                  " USUR                  S   S-
  /SS9u  p#[         R                  " UR	                  U R
                  SS9U/SS9n[        [        [        R                  " U R
                  5      5      5       H  nU R                  USS9nM     U$ )Nr   r   r1   Tr   )r8   splitrp   r9   repeat_interleaverd   ranger"   mathlog2r   )r'   r/   xixvr(   s        r,   _haarCosmosPatchEmbed3d._haar   s    ]Q0C0CA0F0J,KQRS		2#7#7Q#7#OQS"TZ[\s499T__567A IImTIBM 8r.   c           
         [         R                  " USUR                  S   S-
  /SS9u  p#[         R                  " UR	                  U R
                  SS9U/SS9nUR                  u  pEpgnU R
                  n	UR                  XEXi-  XU	-  XU	-  U	5      nUR                  SSSSSSSS	5      R                  SS5      R                  5       nU$ )
Nr   r   r1   r   r         rW      )
r8   r   rp   r9   r   rd   r   rZ   r[   
contiguous)
r'   r/   r   r   r]   rO   
num_framesheightwidthps
             r,   _arrangeCosmosPatchEmbed3d._arrange   s    ]Q0C0CA0F0J,KQRS		2#7#7Q#7#OQS"TZ[\>K>Q>Q;
*eOO%--joqA+qST*VW
 &--aAq!Q1EMMaQRS^^`r.   c                     U R                   S:X  a  U R                  U5      $ U R                   S:X  a  U R                  U5      $ [        SU R                    35      e)Nr   r   zUnsupported patch method: )re   r   r   
ValueErrorr'   r/   s     r,   r<   CosmosPatchEmbed3d.forward   sV    &::m,,+-==//9$:K:K9LMNNr.   re   rd   r   r   )reflectF)rA   rB   rC   rD   r"   rE   r$   r8   rF   r   r   r   r<   rG   rH   rI   s   @r,   rb   rb   j   s    
B3 
B# 
B4 
B 
B$%,, $c $Y^YeYe $L5<< ELL ell u|| OU\\ Oell O Or.   rb   c                   (  ^  \ rS rSrSS\S\4U 4S jjjrSS\R                  S\	S\R                  4S jjr
S\R                  S\R                  4S	 jrS\R                  S\R                  4S
 jrS\R                  S\R                  4S jrSrU =r$ )CosmosUnpatcher3d   rd   re   c                 
  > [         TU ]  5         Xl        X l        [        R                  U5      R                  5       n[        R                  " UR                  S   5      nU R                  SUSS9  U R                  SUSS9  g rg   rk   rr   s        r,   r$   CosmosUnpatcher3d.__init__   rt   r.   r/   r   r   c                    UR                   nUR                  nU R                  R                  U5      nUR                  S   S-  nUR                  S/5      R                  SSS5      R                  USS/5      nUSU R                  R                  U5      -  -  R                  SSS5      R                  USS5      nUR                  US9nUR                  US9n[        R                  " USSS9u  pppnn[        R                  " XR                  S5      R                  S5      US	S
9n[        R                  " XR                  S5      R                  S5      US	S
9U-   n[        R                  " XR                  S5      R                  S5      US	S
9n[        R                  " XR                  S5      R                  S5      US	S
9U-   n[        R                  " XR                  S5      R                  S5      US	S
9n[        R                  " XR                  S5      R                  S5      US	S
9U-   n[        R                  " XR                  S5      R                  S5      US	S
9n[        R                  " UUR                  S5      R                  S5      US	S
9U-   n[        R                  " UUR                  S5      R                  S5      USS
9n[        R                  " UUR                  S5      R                  S5      USS
9U-   n[        R                  " UUR                  S5      R                  S5      USS
9n[        R                  " UUR                  S5      R                  S5      USS
9U-   n[        R                  " UUR                  S5      R                  S5      USS
9n[        R                  " UUR                  S5      R                  S5      USS
9U-   nU(       a  US-  nU$ )Nr      r   rX   rv   r1   r   r   r|   ry   rW   r{   rx   r}   )devicerw   rh   r   rp   r~   r   r7   rj   r8   chunkr:   conv_transpose3dr   )r'   r/   r   r   rw   hr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                          r,   _idwtCosmosUnpatcher3d._idwt   sr   %%##MMV$"a'VVQC[  Ar*111a)<B4<<??6223<<Q2FMMaQRTUVUUUUUU9>]TU[\9]6DD$   ||A'@'@'CAV_`  ||A'@'@'CAV_`cff  ||A'@'@'CAV_`  ||A'@'@'CAV_`cff  ||A'@'@'CAV_`  ||A'@'@'CAV_`cff  ||A'@'@'CAV_`  r||A'@'@'CAV_`cff R\\!_%>%>q%A!T]^R\\!_%>%>q%A!T]^accR\\!_%>%>q%A!T]^R\\!_%>%>q%A!T]^acc **2r||A/H/H/KTU^ghr2<<?#<#<Q#?R[\_ll 	 )F2Mr.   c                     [        [        [        R                  " U R                  5      5      5       H  nU R                  USS9nM     US S 2S S 2U R                  S-
  S 2S4   nU$ )NTr   r   .)r   r"   r   r   rd   r   )r'   r/   r(   s      r,   _ihaarCosmosUnpatcher3d._ihaar   sZ    s499T__567A JJ}dJCM 8%aDOOa,?,A3&FGr.   c           
          U R                   nUR                  SSX"U45      nUR                  SSSSSSSS	5      nUR                  SS5      R                  S	S5      R                  SS5      nUS S 2S S 2US-
  S 2S
4   nU$ )Nr   rX   r   r   r   r   r   r   rW   .)rd   r\   rZ   r[   )r'   r/   r   s      r,   _irearrangeCosmosUnpatcher3d._irearrange   s    OO%//Ba=A%--aAq!Q1E%--a3;;AqAII!QO%aAEGS&89r.   c                     U R                   S:X  a  U R                  U5      $ U R                   S:X  a  U R                  U5      $ [        SU R                   -   5      e)Nr   r   zUnknown patch method: )re   r   r   r   r   s     r,   r<   CosmosUnpatcher3d.forward   sU    &;;}--+-##M2258I8IIJJr.   r   r   )F)rA   rB   rC   rD   r"   rE   r$   r8   rF   boolr   r   r   r<   rG   rH   rI   s   @r,   r   r      s    
B3 
B# 
B 
B)5<< )$ )5<< )VELL U\\  %,, KU\\ Kell K Kr.   r   c                   r   ^  \ rS rSrS\S\SS4U 4S jjrS\R                  S\R                  4S jrS	r	U =r
$ )
CosmosConvProjection3di	  r   r   r   Nc                 f   > [         TU ]  5         [        XSSSS9U l        [        X"SSSS9U l        g )Nr   r   r   r   r   r   r   r   r   r   r   )r#   r$   r   conv_sconv_t)r'   r   r   r+   s      r,   r$   CosmosConvProjection3d.__init__
  s8    (PYbcmno(QZcdnopr.   r/   c                 J    U R                  U5      nU R                  U5      nU$ Nr   r   r   s     r,   r<   CosmosConvProjection3d.forward  s$    M2M2r.   r   r`   rI   s   @r,   r   r   	  sA    qC qs qt qU\\ ell  r.   r   c                      ^  \ rS rSr  S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$ )CosmosResnetBlock3di  r   r   dropoutrM   r   Nc                 P  > [         TU ]  5         U=(       d    Un[        X5      U l        [	        X5      U l        [        X$5      U l        [        R                  " U5      U l	        [	        X"5      U l
        X:w  a  [        XSSSS9U l        g [        R                  " 5       U l        g )Nr   r   r   )r#   r$   rK   norm1r   conv1norm2rR   Dropoutr   conv2r   conv_shortcutIdentity)r'   r   r   r   rM   r+   s        r,   r$   CosmosResnetBlock3d.__init__  s     	#2{*;C
+KF
*<D
zz'*+LG
&!3K[\efpq!rD!#Dr.   r/   c                 2   UnU R                  U5      nU R                  U5      n[        R                  " U5      nU R	                  U5      nU R                  U5      n[        R                  " U5      nU R                  U5      nU R                  U5      nX-   $ r   )r   r   r:   silur   r   r   r   )r'   r/   residuals      r,   r<   CosmosResnetBlock3d.forward-  s     %%h/

=1}-

=1

=1}-]3

=1''r.   )r   r   r   r   r   r   )r3   r   rA   rB   rC   rD   r"   floatr$   r8   rF   r<   rG   rH   rI   s   @r,   r   r     se    
 // / 	/
 / 
/ /,(U\\ (ell ( (r.   r   c            	       ~   ^  \ 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$ )CosmosDownsample3di=  r   spatial_downsampletemporal_downsampler   Nc                 v  > [         TU ]  5         X l        X0l        [        R
                  " 5       U l        [        R
                  " 5       U l        [        R
                  " 5       U l        U(       a  [        XSSSS9U l        U(       a  [        XSSSS9U l        U(       d  U(       a  [        XSSSS9U l        g g )Nr   r   r   r   r   r   r   rx   r?   )
r#   r$   r   r   rR   r   r   r   conv3r   )r'   r   r   r   r+   s       r,   r$   CosmosDownsample3d.__init__>  s     	"4#6 [[]
[[]
[[]
+i	[\DJ +i	[\DJ !4+i	[\DJ "5r.   r/   c                    U R                   (       d  U R                  (       d  U$ U R                   (       aC  Sn[        R                  " XSSS9nU R	                  U5      n[        R
                  " USSS9nX4-   nU R                  (       aO  [        R                  " US S 2S S 2S S2S4   U/S	S
9nU R                  U5      n[        R
                  " USSS9nX4-   nU R                  U5      nU$ )N)r   r   r   r   r   r   r@   r   r4   r   )r   r   r   .r   r1   rx   )
r   r   r:   r;   r   
avg_pool3dr8   r9   r   r   )r'   r/   r;   conv_outpool_outs        r,   r<   CosmosDownsample3d.forwardZ  s    &&t/G/G  ""$CEE-:QOMzz-0H||MyQZ[H$/M##!II}Q2A2s]'C]&SYZ[Mzz-0H||MyQZ[H$/M

=1r.   )r   r   r   r   r   TTrA   rB   rC   rD   r"   r   r$   r8   rF   r<   rG   rH   rI   s   @r,   r   r   =  s[     $($(	 ! "	
 
 8U\\ ell  r.   r   c            	       ~   ^  \ 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$ )CosmosUpsample3dio  r   spatial_upsampletemporal_upsampler   Nc                 v  > [         TU ]  5         X l        X0l        [        R
                  " 5       U l        [        R
                  " 5       U l        [        R
                  " 5       U l        U(       a  [        XSSSS9U l        U(       a  [        XSSSS9U l        U(       d  U(       a  [        XSSSS9U l        g g )Nr   r?   r   r   r   r   )
r#   r$   r   r   rR   r   r   r   r   r   )r'   r   r   r   r+   s       r,   r$   CosmosUpsample3d.__init__p  s     	 0!2[[]
[[]
[[]
+i	[\DJ +i	[\DJ 0+i	[\DJ  1r.   r/   c                    U R                   (       d  U R                  (       d  U$ U R                  (       ad  UR                  S5      n[        SSUS:  -  -   5      nUR	                  [        U5      SS9nUSUS-
  S 2S S 2S S 24   nU R                  U5      U-   nU R                   (       a2  UR	                  SSS9R	                  SSS9nU R                  U5      U-   nU R                  U5      nU$ )Nr   r   r   r1   .r   rW   )r   r   rY   r"   r   r   r   r   )r'   r/   r   time_factors       r,   r<   CosmosUpsample3d.forward  s    $$T-C-C  !!&++A.JcC:>$::;K);;C<LRS;TM)#{Q/@!Q*FGM JJ}5EM  );;A1;EWWXY_`WaM JJ}5EM

=1r.   )r   r   r   r   r   r   r   rI   s   @r,   r   r   o  s[     "&"&	   	
 
 8U\\ ell  r.   r   c                      ^  \ rS rSr   SS\S\S\S\S\S   S	S4U 4S
 jjjrSS\R                  S\
\R                     S	\R                  4S jjrSrU =r$ )CosmosCausalAttentioni  Nnum_attention_headsattention_head_dimrM   r   	processor)"CosmosSpatialAttentionProcessor2_0#CosmosTemporalAttentionProcessor2_0r   c           
        > [         TU ]  5         Xl        [        X#S9U l        [        X"SSSS9U l        [        X"SSSS9U l        [        X"SSSS9U l        [        R                  " / 5      U l        U R                  R                  [        X"SSSS95        U R                  R                  [        R                  " U5      5        XPl        U R                  c  [        S5      eg )NrM   r   r   r   z+CosmosCausalAttention requires a processor.)r#   r$   r  rK   rT   r   to_qto_kto_vrR   
ModuleListto_outappendr   r  r   )r'   r  r  rM   r   r  r+   s         r,   r$   CosmosCausalAttention.__init__  s     	#6 )*<T	&'9[\efpqr	&'9[\efpqr	&'9[\efpqr	mmB'1ST]^hij	
 	2::g./">>!JKK "r.   r/   attention_maskc                 "    U R                  XUS9$ )N)r/   r  )r  )r'   r/   r  s      r,   r<   CosmosCausalAttention.forward  s    ~~dP^~__r.   )rT   r  r  r  r  r  r  )r   r3   Nr   )rA   rB   rC   rD   r"   r   r   r$   r8   rF   r   r<   rG   rH   rI   s   @r,   r  r    s    
 hlL L  L 	L
 L deL 
L L2`U\\ `8ELLCY `ejeqeq ` `r.   r  c            	       |    \ rS rSrS r S
S\S\R                  S\\R                     S\R                  4S jjr	S	r
g)r  i  c                 D    [        [        S5      (       d  [        S5      eg Nscaled_dot_product_attentionzeCosmosSpatialAttentionProcessor2_0 requires PyTorch 2.0 or higher. To use it, please upgrade PyTorch.hasattrr:   ImportErrorr'   s    r,   r$   +CosmosSpatialAttentionProcessor2_0.__init__  %    q899w  :r.   Nattnr/   r  r   c                 Z   UR                   u  pEpgnUn	UR                  U5      nUR                  U5      n
UR                  U5      nUR	                  U5      nU
R                  SSSSS5      R                  SS5      R                  SS5      n
UR                  SSSSS5      R                  SS5      R                  SS5      nUR                  SSSSS5      R                  SS5      R                  SS5      nU
R                  SUR                  S45      R                  SS5      n
UR                  SUR                  S45      R                  SS5      nUR                  SUR                  S45      R                  SS5      n[        R                  " XXS9nUR                  SS5      R                  SS5      R                  U
5      nUR                  SXx45      R                  SXF45      nUR                  SSSSS5      nUR                  S   " U5      nUR                  S   " U5      nX)-   $ )Nr   r   r   rW   r   rX   	attn_maskrp   rT   r  r  r  rZ   r[   r\   r  	transposer:   r  type_asr  r'   r   r/   r  r]   rO   r   r   r   r   querykeyr6   s                r,   __call__+CosmosSpatialAttentionProcessor2_0.__call__  s    ?L>Q>Q;
*e 		-0		-(ii&		-( aAq!,44Q:BB1aHkk!Q1a(00A6>>q!DaAq!,44Q:BB1aH D$<$<b#ABLLQPQRmmA 8 8"=>HHAND$<$<b#ABLLQPQR66u5c%//15==aCKKER%//F?CMMaR\Qij%--aAq!<A}5A}5''r.    r   rA   rB   rC   rD   r$   r  r8   rF   r   r*  rG   r,  r.   r,   r  r    L     rv()(:?,,(X`afamamXn(	( (r.   r  c            	       |    \ rS rSrS r S
S\S\R                  S\\R                     S\R                  4S jjr	S	r
g)r	  i  c                 D    [        [        S5      (       d  [        S5      eg r  r  r  s    r,   r$   ,CosmosTemporalAttentionProcessor2_0.__init__  r  r.   Nr   r/   r  r   c                    UR                   u  pEpgnUn	UR                  U5      nUR                  U5      n
UR                  U5      nUR	                  U5      nU
R                  SSSSS5      R                  SS5      n
UR                  SSSSS5      R                  SS5      nUR                  SSSSS5      R                  SS5      nU
R                  SUR                  S45      R                  SS5      n
UR                  SUR                  S45      R                  SS5      nUR                  SUR                  S45      R                  SS5      n[        R                  " XXS9nUR                  SS5      R                  SS5      R                  U
5      nUR                  SXGU45      nUR                  SSSSS5      nUR                  S   " U5      nUR                  S   " U5      nX)-   $ )Nr   r   rW   r   r   rX   r"  r$  r'  s                r,   r*  ,CosmosTemporalAttentionProcessor2_0.__call__  s    ?L>Q>Q;
*e 		-0		-(ii&		-( aAq!,44Q:kk!Q1a(00A6aAq!,44Q: D$<$<b#ABLLQPQRmmA 8 8"=>HHAND$<$<b#ABLLQPQR66u5c%//15==aCKKER%//J3NO%--aAq!<A}5A}5''r.   r,  r   r-  r,  r.   r,   r	  r	    r.  r.   r	  c                      ^  \ rS rSrS\S\S\S\S\S\S\S	\S
S4U 4S jjrS\R                  S
\R                  4S jr
SrU =r$ )CosmosDownBlock3di  r   r   
num_layersr   use_attentionuse_downsampler   r   r   Nc	                   > [         TU ]  5         / / / pn	Xp[        U5       H  nU	R                  [	        XUSS95        UnU(       aJ  U
R                  [        SUSU[        5       S95        UR                  [        SUSU[        5       S95        Mp  U
R                  S 5        UR                  S 5        M     [        R                  " U	5      U l
        [        R                  " U
5      U l        [        R                  " U5      U l        S U l        U(       aA  [        R                  " / 5      U l        U R                  R                  [        XU5      5        g g Nr   r  r  r  rM   r   r  )r#   r$   r   r  r   r  r  r	  rR   r  resnets
attentionstemp_attentionsdownsamplersr   )r'   r   r   r6  r   r7  r8  r   r   r<  r=  r>  
in_channelout_channelr(   r+   s                  r,   r$   CosmosDownBlock3d.__init__  s/    	/12r_"-Kz"ANN.z\]^_$J!!),-+6#$ '"D"F  &&),-+6#$ '"E"G !!$'&&t,3 #6 }}W---
3!}}_=  "b 1D$$%7Yl%mn r.   r/   c                    [        U R                  U R                  U R                  5       Hj  u  p#nU" U5      nUb  U" U5      nUc  M  UR	                  S5      n[
        R                  " UR                  XU5      5      R                  5       nU" X5      nMl     U R                  b  U R                   H  nU" U5      nM     U$ Nr   )
zipr<  r=  r>  rY   r8   trilnew_onesr   r?  )r'   r/   resnet	attentiontemp_attentionr   r  downsamplers           r,   r<   CosmosDownBlock3d.forward@  s    14T\\4??TXThTh1i-F~"=1M$ )- 8)*//2
!&M,B,B:,Z![!`!`!b .} M 2j (#00 +M :  1 r.   )r=  r?  r<  r>  rA   rB   rC   rD   r"   r   r   r$   r8   rF   r<   rG   rH   rI   s   @r,   r5  r5    s    2o2o 2o 	2o
 2o 2o 2o !2o "2o 
2ohU\\ ell  r.   r5  c                   ~   ^  \ rS rSrS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$ )CosmosMidBlock3diQ  r   r6  r   rM   r   Nc                   > [         T	U ]  5         / / / pvnUR                  [        XX45      5        [	        U5       Hf  nUR                  [        SUUU[        5       S95        UR                  [        SUUU[        5       S95        UR                  [        XX45      5        Mh     [        R                  " U5      U l
        [        R                  " U5      U l        [        R                  " U5      U l        g )Nr   r;  )r#   r$   r  r   r   r  r  r	  rR   r  r<  r=  r>  )
r'   r   r6  r   rM   r<  r=  r>  r(   r+   s
            r,   r$   CosmosMidBlock3d.__init__R  s    /12r_*;WYZz"A%()'2)#@B ""%()'2)#AC NN.{]^' #* }}W---
3!}}_=r.   r/   c                 X   U R                   S   " U5      n[        U R                  U R                  U R                   SS  5       Hb  u  p#nUR	                  S5      n[
        R                  " UR                  XU5      5      R                  5       nU" U5      nU" X5      nU" U5      nMd     U$ )Nr   r   r   )	r<  rE  r=  r>  rY   r8   rF  rG  r   )r'   r/   rI  rJ  rH  r   r  s          r,   r<   CosmosMidBlock3d.forwardq  s    Q614T__dFZFZ\`\h\hijik\l1m-Iv&++A.J"ZZ(>(>z(VW\\^N%m4M*=IM"=1M 2n r.   )r=  r<  r>  r_   r   rI   s   @r,   rO  rO  Q  sR    >C >S >5 >VY >bf > >>U\\ ell  r.   rO  c                      ^  \ rS rSrS\S\S\S\S\S\S\S	\S
S4U 4S jjrS\R                  S
\R                  4S jr
SrU =r$ )CosmosUpBlock3di  r   r   r6  r   r7  use_upsampler   r   r   Nc	                   > [         TU ]  5         / / / pn	Xp[        U5       H  nU	R                  [	        XUSS95        UnU(       aJ  U
R                  [        SUSU[        5       S95        UR                  [        SUSU[        5       S95        Mp  U
R                  S 5        UR                  S 5        M     [        R                  " U	5      U l
        [        R                  " U
5      U l        [        R                  " U5      U l        S U l        U(       aA  [        R                  " / 5      U l        U R                  R                  [        XU5      5        g g r:  )r#   r$   r   r  r   r  r  r	  rR   r  r<  r=  r>  
upsamplersr   )r'   r   r   r6  r   r7  rV  r   r   r<  rI  r>  r@  rA  r(   r+   s                  r,   r$   CosmosUpBlock3d.__init__  s+    	.0"bO"-Kz"ANN.z\]^_$J  ),-+6#$ '"D"F  &&),-+6#$ '"E"G   &&&t,3 #6 }}W---	2!}}_= mmB/DOOO""#3KSd#ef r.   r/   c                    [        U R                  U R                  U R                  5       Hj  u  p#nU" U5      nUb  U" U5      nUc  M  UR	                  S5      n[
        R                  " UR                  XU5      5      R                  5       nU" X5      nMl     U R                  b  U R                   H  nU" U5      nM     U$ rD  )
rE  r<  r=  r>  rY   r8   rF  rG  r   rX  )r'   r/   rH  rI  rJ  r   r  	upsamplers           r,   r<   CosmosUpBlock3d.forward  s    14T\\4??TXThTh1i-F~"=1M$ )- 8)*//2
!&M,B,B:,Z![!`!`!b .} M 2j ??&!__	 )- 8 - r.   )r=  r<  r>  rX  rM  rI   s   @r,   rU  rU    s    2g2g 2g 	2g
 2g 2g 2g 2g  2g 
2ghU\\ ell  r.   rU  c                      ^  \ rS rSr           SS\S\S\\S4   S\S\\S4   S\S	\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$ )CosmosEncoder3di  r   r   block_out_channels.num_resnet_blocksattention_resolutions
resolutionrd   
patch_typer   spatial_compression_ratiotemporal_compression_ratior   Nc                 *  > [         TU ]  5         XS-  -  n[        [        R                  " U
5      5      [        [        R                  " U5      5      -
  n[        [        R                  " U5      5      [        [        R                  " U5      5      -
  n[        Xx5      U l        [        XS   5      U l        Xg-  n/ n[        [        U5      S-
  5       H_  nUU   nUUS-      nX;   nS=nnU[        U5      S-
  :  a  SnUU:  nUU:  nUS-  nOSnUR                  [        UUUU	UUUU5      5        Ma     [        R                  " U5      U l        [!        US   SU	SS9U l        [%        US   SS	9U l        [        US   U5      U l        SU l        g )
Nr   r   r   Fr   TrX   r6  r   rM   r  )r#   r$   r"   r   r   rb   patch_embedr   conv_inr   lenr  r5  rR   r  down_blocksrO  	mid_blockrK   norm_outr   gradient_checkpointing)r'   r   r   r_  r`  ra  rb  rd   rc  r   rd  re  	inner_dimnum_spatial_layersnum_temporal_layerscurrent_resolutionrk  ir@  rA  r7  r   r   r8  r+   s                           r,   r$   CosmosEncoder3d.__init__  s    	a-/	 +D!EFTYYWaMbIcc!$)),F"GH3tyyYcOdKee .jE-iA9NO (5s-.23A+A.J,QU3K.GM7<<!43)*Q..!%%&);%;"&'*=&=#%71%<"!&!%!"&'	 44 ==5 **<R*@QX_lmn ..@.DQRS./A"/E|T&+#r.   r/   c                    U R                  U5      nU R                  U5      n[        R                  " 5       (       aR  U R                  (       aA  U R
                   H  nU R                  X!5      nM     U R                  U R                  U5      nO,U R
                   H  nU" U5      nM     U R                  U5      nU R                  U5      n[        R                  " U5      nU R                  U5      nU$ r   )rh  ri  r8   is_grad_enabledrn  rk  _gradient_checkpointing_funcrl  rm  r:   r   r   r'   r/   blocks      r,   r<   CosmosEncoder3d.forward  s    ((7]3  ""t'B'B)) $ A A% W * ==dnnm\M)) %m 4 * NN=9Mm4}-m4r.   )ri  r   rk  rn  rl  rm  rh  )r               r  r          rW   r   r3   r   r   rA   rB   rC   rD   r"   r   rE   r   r$   r8   rF   r<   rG   rH   rI   s   @r,   r^  r^    s     .B!"16 )**+>,>, >, "#s(O	>,
 >,  %S#X>, >, >, >, >, $'>, %(>, 
>, >,@U\\ ell  r.   r^  c                      ^  \ rS rSr           SS\S\S\\S4   S\S\\S4   S\S	\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$ )CosmosDecoder3di  r   r   r_  .r`  ra  rb  rd   rc  r   rd  re  r   Nc                   > [         TU ]  5         X'S-  -  n[        [        R                  " U
5      5      [        [        R                  " U5      5      -
  n[        [        R                  " U5      5      [        [        R                  " U5      5      -
  n[        [        U5      5      n[        XS   5      U l        [        US   SU	SS9U l
        Xg-  S[        U5      S-
  -  -  n/ n[        [        U5      S-
  5       H  nUU   nUUS-      nUU;   nS=nnU[        U5      S-
  :  a9  SnSUs=:  =(       a    US-   :  Os  nU=(       d    UU:  =(       a    X:  nUS-  nOSnUR                  [        UUUS-   U	UUUU5      5        M     [        R                   " U5      U l        [%        US   SS	9U l        [        US   U5      U l        [+        Xx5      U l        SU l        g )
Nr   r   r   rg  r   FTrX   r  )r#   r$   r"   r   r   listreversedr   ri  rO  rl  rj  r   r  rU  rR   r  	up_blocksrK   rm  r   r   unpatch_embedrn  )r'   r   r   r_  r`  ra  rb  rd   rc  r   rd  re  ro  rp  rq  reversed_block_out_channelsrr  r  rs  r@  rA  r7  r   r   rV  r+   s                            r,   r$   CosmosDecoder3d.__init__  s    	 q=0	 +D!EFTYYWaMbIcc!$)),F"GH3tyyYcOdKee&*84F+G&H# .kWX;YZ **Ea*HUV`gtuv )61EWAX[\A\;]]	s-.23A4Q7J5a!e<K.2GGM38803)*Q..#$%$C$C,?!,C$C!#4 $**W/A/W ! &8!%;"$%)! $%	! 48 y1 ..I".MZ[\./J2/NPYZ.zF&+#r.   r/   c                    U R                  U5      nU R                  U5      nU R                   HI  n[        R                  " 5       (       a$  U R
                  (       a  U R                  X!5      nMA  U" U5      nMK     U R                  U5      n[        R                  " U5      nU R                  U5      nU R                  U5      nU$ r   )ri  rl  r  r8   rv  rn  rw  rm  r:   r   r   r  rx  s      r,   r<   CosmosDecoder3d.forward]  s    ]3}5^^E$$&&4+F+F $ A A% W %m 4	 $ m4}-m4**=9r.   )ri  r   rn  rl  rm  r  r  )r{  r   r|  r   r  r  rW   r   r3   r   r   r  rI   s   @r,   r  r    s     .B!"16 )**+A,A, A, "#s(O	A,
 A,  %S#XA, A, A, A, A, $'A, %(A, 
A, A,FU\\ ell  r.   r  c            "         ^  \ rS rSrSrSr\SSSSSSS	S
SSSSS\\4S\	S\	S\	S\
\	S4   S\
\	S4   S\
\	S4   S\	S\	S\	S\S\S\	S\	S\\\      S\\\      SS 4 U 4S! jjj5       r      S8S"\\	   S#\\	   S$\\	   S%\\   S&\\   S'\\   SS 4S( jjrS9S) jrS9S* jrS9S+ jrS,\R*                  S\R*                  4S- jr\S:S,\R*                  S.\S\R*                  4S/ jj5       rS:S0\R*                  S.\S\\\
\R*                     4   4S1 jjr\S:S0\R*                  S.\S\\\
\R*                     4   4S2 jj5       r   S;S3\R*                  S4\S.\S5\\R<                     S\\
\R*                     \4   4
S6 jjrS7r U =r!$ )<AutoencoderKLCosmosin  aN	  
Autoencoder used in [Cosmos](https://huggingface.co/papers/2501.03575).

Args:
    in_channels (`int`, defaults to `3`):
        Number of input channels.
    out_channels (`int`, defaults to `3`):
        Number of output channels.
    latent_channels (`int`, defaults to `16`):
        Number of latent channels.
    encoder_block_out_channels (`Tuple[int, ...]`, defaults to `(128, 256, 512, 512)`):
        Number of output channels for each encoder down block.
    decode_block_out_channels (`Tuple[int, ...]`, defaults to `(256, 512, 512, 512)`):
        Number of output channels for each decoder up block.
    attention_resolutions (`Tuple[int, ...]`, defaults to `(32,)`):
        List of image/video resolutions at which to apply attention.
    resolution (`int`, defaults to `1024`):
        Base image/video resolution used for computing whether a block should have attention layers.
    num_layers (`int`, defaults to `2`):
        Number of resnet blocks in each encoder/decoder block.
    patch_size (`int`, defaults to `4`):
        Patch size used for patching the input image/video.
    patch_type (`str`, defaults to `haar`):
        Patch type used for patching the input image/video. Can be either `haar` or `rearrange`.
    scaling_factor (`float`, defaults to `1.0`):
        The component-wise standard deviation of the trained latent space computed using the first batch of the
        training set. This is used to scale the latent space to have unit variance when training the diffusion
        model. The latents are scaled with the formula `z = z * scaling_factor` before being passed to the
        diffusion model. When decoding, the latents are scaled back to the original scale with the formula: `z = 1
        / scaling_factor * z`. For more details, refer to sections 4.3.2 and D.1 of the [High-Resolution Image
        Synthesis with Latent Diffusion Models](https://huggingface.co/papers/2112.10752) paper. Not applicable in
        Cosmos, but we default to 1.0 for consistency.
    spatial_compression_ratio (`int`, defaults to `8`):
        The spatial compression ratio to apply in the VAE. The number of downsample blocks is determined using
        this.
    temporal_compression_ratio (`int`, defaults to `8`):
        The temporal compression ratio to apply in the VAE. The number of downsample blocks is determined using
        this.
Tr   r{  r|  )r~  r  r  r  r  r  r   rW   r   r   r   r   r   latent_channelsencoder_block_out_channels.decode_block_out_channelsra  rb  r6  rd   rc  scaling_factorrd  re  latents_meanlatents_stdr   Nc                 f  > [         TU ]  5         [        UUUUUUU	U
UUS9
U l        [	        UUUUUUU	U
UUS9
U l        [        X3SSS9U l        [        X3SSS9U l        SU l	        SU l
        SU l        SU l        SU l        SU l        SU l        SU l        SU l        S	U l        S	U l        S
U l        g )N)
r   r   r_  r`  ra  rb  rd   rc  rd  re  r   r   )r   r   Fr{  r   r  i  r   )r#   r$   r^  encoderr  decoderr   
quant_convpost_quant_convuse_slicing
use_tilinguse_framewise_encodinguse_framewise_decodingnum_sample_frames_batch_sizenum_latent_frames_batch_sizetile_sample_min_heighttile_sample_min_widthtile_sample_min_num_framestile_sample_stride_heighttile_sample_stride_widthtile_sample_stride_num_frames)r'   r   r   r  r  r  ra  rb  r6  rd   rc  r  rd  re  r  r  r+   s                   r,   r$   AutoencoderKLCosmos.__init__  s    & 	&#(9("7!!!&?'A
 ''%8("7!!!&?'A
 -_[\fgh1/`aklm !
   ',#&+#
 -/),-) '*#%("*,' *-&(+%-.*r.   r  r  r  r  r  r  c                 J   SU l         U=(       d    U R                  U l        U=(       d    U R                  U l        U=(       d    U R                  U l        U=(       d    U R                  U l        U=(       d    U R
                  U l        U=(       d    U R                  U l        g)a  
Enable tiled VAE decoding. When this option is enabled, the VAE will split the input tensor into tiles to
compute decoding and encoding in several steps. This is useful for saving a large amount of memory and to allow
processing larger images.

Args:
    tile_sample_min_height (`int`, *optional*):
        The minimum height required for a sample to be separated into tiles across the height dimension.
    tile_sample_min_width (`int`, *optional*):
        The minimum width required for a sample to be separated into tiles across the width dimension.
    tile_sample_stride_height (`int`, *optional*):
        The minimum amount of overlap between two consecutive vertical tiles. This is to ensure that there are
        no tiling artifacts produced across the height dimension.
    tile_sample_stride_width (`int`, *optional*):
        The stride between two consecutive horizontal tiles. This is to ensure that there are no tiling
        artifacts produced across the width dimension.
TN)r  r  r  r  r  r  r  )r'   r  r  r  r  r  r  s          r,   enable_tiling!AutoencoderKLCosmos.enable_tiling  s}    4 &<&[@[@[#%:%Xd>X>X"*D*gHgHg')B)ddFdFd&(@(aDDaDa%-J-pdNpNp*r.   c                     SU l         g)z
Disable tiled VAE decoding. If `enable_tiling` was previously enabled, this method will go back to computing
decoding in one step.
FN)r  r  s    r,   disable_tiling"AutoencoderKLCosmos.disable_tiling
  s    
  r.   c                     SU l         g)z
Enable sliced VAE decoding. When this option is enabled, the VAE will split the input tensor in slices to
compute decoding in several steps. This is useful to save some memory and allow larger batch sizes.
TNr  r  s    r,   enable_slicing"AutoencoderKLCosmos.enable_slicing  s    
  r.   c                     SU l         g)z
Disable sliced VAE decoding. If `enable_slicing` was previously enabled, this method will go back to computing
decoding in one step.
FNr  r  s    r,   disable_slicing#AutoencoderKLCosmos.disable_slicing  s    
 !r.   xc                 J    U R                  U5      nU R                  U5      nU$ r   )r  r  )r'   r  encs      r,   _encodeAutoencoderKLCosmos._encode  s"    LLOooa 
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 )Nr   r   )latent_dist)r  rp   r   r  r8   r9   r   r   )r'   r  r  x_sliceencoded_slicesr   	posteriors          r,   encodeAutoencoderKLCosmos.encode$  s}    
QCD771:N:ll73:NN		.)AQA(+	<"y99 Os   Bzc                 l    U R                  U5      nU R                  U5      nU(       d  U4$ [        US9$ )Nsample)r  r  r   )r'   r  r  decs       r,   _decodeAutoencoderKLCosmos._decode2  s4      #ll1o6MC((r.   c                 P   U R                   (       ac  UR                  S   S:  aP  UR                  S5       Vs/ s H  o0R                  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 )Nr   r   r  )r  rp   r   r  r  r8   r9   r   )r'   r  r  z_slicedecoded_slicesdecodeds         r,   decodeAutoencoderKLCosmos.decode:  s    
QJK''RS*U*wll73::*NUii/Gll1o,,G:G,, Vs   $B#r  sample_posterior	generatorc                     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$ )N)r  r  )r  r  r  r5   r  r   )	r'   r  r  r  r  r  r  r  r  s	            r,   r<   AutoencoderKLCosmos.forwardF  sf     KKN..	  9 5A Akk!n##6MC((r.   )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )NNNNNN)r   N)T)FTN)"rA   rB   rC   rD   __doc__ _supports_gradient_checkpointingr	   LATENTS_MEANLATENTS_STDr"   r   rE   r   r   r   r$   r  r  r  r  r8   rF   r  r   r   r  r   r   r  r  	Generatorr<   rG   rH   rI   s   @r,   r  r  n  s   &P (,$ !6J5I16  #)**+.:-8!L/L/ L/ 	L/
 %*#s(OL/ $)c?L/  %S#XL/ L/ L/ L/ L/ L/ $'L/ %(L/ tE{+L/  d5k*!L/" 
#L/ L/` 15/34859489= q ( q  (} q %-SM	 q
 $,E? q #+5/ q (0 q 
 qD  ! %,, 
 : :4 :5<< : :) )D )E-Y^_d_k_kYlJlDm ) 	- 	-4 	-5X]^c^j^jXkIkCl 	- 	- "' /3)) ) 	)
 EOO,) 
uU\\"M1	2) )r.   r  )3r   typingr   r   r   r   r8   torch.nnrR   torch.nn.functional
functionalr:   configuration_utilsr   r	   utilsr
   utils.accelerate_utilsr   modeling_outputsr   modeling_utilsr   vaer   r   rA   loggerr  r  tensorrl   Conv3dr   ModulerK   rb   r   r   r   r   r   r  r  r	  r5  rO  rU  r^  r  r  r,  r.   r,   <module>r     s    / /     B  8 2 ' 4 
H	 w1 y/LL,.@ABsCj)	". ".JEHHOO 0MO MO`LK		 LK^
RYY 
$(")) $(N/ /d-ryy -``BII `<$( $(N$( $(NC		 CL+ryy +\Cbii CLQbii QhRbii Rjh)*k h)r.   