ó
    oM‡j
�  ã                   óÐ  • S SK r S SKJrJrJrJr  S SK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  SSKJrJrJr  \R>                  " \ 5      r!S\RD                  S\RD                  4S jr# " S S\
RH                  5      r% " S S\
RL                  5      r' " S S\
RL                  5      r( " S S\
RL                  5      r) " S S\
RL                  5      r* " S S\
RL                  5      r+ " S S\
RL                  5      r, " S S\
RL                  5      r- " S  S!\
RL                  5      r. " S" S#\
RL                  5      r/ " S$ S%\\\\5      r0g)&é    N)ÚDictÚOptionalÚTupleÚUnioné   )ÚConfigMixinÚregister_to_config)ÚFromOriginalModelMixin)Úlogging)Úapply_forward_hooké   )ÚAutoencoderKLOutput)Ú
ModelMixiné   )ÚAutoencoderMixinÚDecoderOutputÚDiagonalGaussianDistributionÚxÚreturnc                 ó.   • [         R                  " U 5      $ ©N)ÚFÚsilu)r   s    ÚÅC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\diffusers/models/autoencoders/autoencoder_kl_kvae_video.pyÚnonlinearityr   "   s   € Ü�6Š6�!‹9Ðó    c                   ó|   ^ • \ rS rSrSrSS\R                  S\R                  S\R                  4U 4S jjjrSrU =r	$ )	ÚKVAESafeConv3dé+   zV
A 3D convolution layer that splits the input tensor into smaller parts to avoid OOM.
ÚinputÚwrite_tor   c                 ó€  >• UR                  5       UR                  5       -  S-  nUS:”  Gam  U R                  S   n[        R                  " US-  5      n[
        R                  " XSS9nUc“  / n[        U5       Hm  u  p‰US:X  d  US:X  a  [
        R                  " U	5      n
O'[
        R                  " W
S S 2S S 2U* S-   S 24   U	/SS9n
UR                  [        TU ]1  U
5      5        Mo     [
        R                  " USS9$ Sn[        U5       H‡  u  p‰US:X  d  US:X  a  [
        R                  " U	5      n
O'[
        R                  " W
S S 2S S 2U* S-   S 24   U	/SS9n
U
R                  S5      US-
  -
  n[        TU ]1  U
5      US S 2S S 2X»U-   24'   X¼-  nM‰     U$ Uc  [        TU ]1  U5      $ [        TU ]1  U5      US'   U$ )Ni Êš;r   r   r   ©Údimr   .)ÚnumelÚelement_sizeÚkernel_sizeÚmathÚceilÚtorchÚchunkÚ	enumerateÚcloneÚcatÚappendÚsuperÚforwardÚsize)Úselfr    r!   Úmemory_countr'   Úpart_numÚinput_chunksÚoutputÚir+   ÚzÚtime_offsetÚz_timeÚ	__class__s                €r   r1   ÚKVAESafeConv3d.forward0   sº  ø€ Ø—{‘{“} u×'9Ñ'9Ó';Ñ;¸uÑEˆà˜!ÔØ×*Ñ*¨1Ñ-ˆKÜ—y’y °Ñ!1Ó2ˆHÜ Ÿ;š; u¸AÑ>ˆLàÑØ�Ü )¨,Ö 7‘H�AØ˜A“v °Ó!1Ü!ŸKšK¨Ó.™ä!ŸIšI qªªA°¨|¸aÑ/?Ñ/AÐ)AÑ'BÀEÐ&JÐPQÑR˜Ø—M‘M¤%¡'¡/°!Ó"4Ö5ñ !8ô —y’y ¨QÑ/Ð/à�Ü )¨,Ö 7‘H�AØ˜A“v °Ó!1Ü!ŸKšK¨Ó.™ä!ŸIšI qªªA°¨|¸aÑ/?Ñ/AÐ)AÑ'BÀEÐ&JÐPQÑR˜ØŸV™V A›Y¨+¸©/Ñ:�FÜINÉÉÐYZÓI[�HšQ¢ ;¸vÑ1EÐ#EÐEÑFØÑ)’Kñ !8ð  �àÑÜ‘w‘ uÓ-Ð-ä %¡¡°Ó 6�˜‘Ø�r   © r   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r*   ÚTensorr1   Ú__static_attributes__Ú__classcell__©r<   s   @r   r   r   +   s3   ø† ññ! ˜UŸ\™\ð ! °U·\±\ð ! ÈUÏ\É\÷ ! ö ! r   r   c                   ó´   ^ • \ rS rSrSr  SS\S\S\\\\\\4   4   S\\\\4   S\\\\4   4
U 4S jjjrS	\	R                  S
\	R                  4S jrSrU =r$ )ÚKVAECausalConv3déT   z 
A 3D causal convolution layer.
Úchan_inÚchan_outr'   ÚstrideÚdilationc                 óÚ   >• [         T
U ]  5         [        U[        5      (       a  X3U4nUu  pxn	US-  U l        U	S-  U l        US-
  U l        Xpl        X@l        [        XU4XES.UD6U l
        g ©Nr   r   )rM   rN   ©r0   Ú__init__Ú
isinstanceÚintÚ
height_padÚ	width_padÚtime_padÚtime_kernel_sizerM   r   Úconv©r3   rK   rL   r'   rM   rN   ÚkwargsrX   Úheight_kernel_sizeÚwidth_kernel_sizer<   s             €r   rR   ÚKVAECausalConv3d.__init__Y   ó{   ø€ ô 	‰ÑÔÜ�k¤3×'Ñ'Ø&°[ÐAˆKàBMÑ?ÐÐ.?à,°Ñ1ˆŒØ*¨aÑ/ˆŒØ(¨1Ñ,ˆŒØ 0ÔØŒä" 7°kÐnÈ&ÑnÐgmÑnˆ�	r   r    r   c                 óÂ   • U R                   U R                   U R                  U R                  U R                  S4n[        R                  " XSS9nU R                  U5      $ )Nr   Ú	replicate©Úmode)rV   rU   rW   r   ÚpadrY   )r3   r    Ú
padding_3dÚinput_paddeds       r   r1   ÚKVAECausalConv3d.forwardp   sK   € Ø—n‘n d§n¡n°d·o±oÀtÇÁÐX\×XeÑXeÐghÐiˆ
Ü—u’u˜U°[ÑAˆØ�y‰y˜Ó&Ð&r   ©rY   rU   rM   rX   rW   rV   ©©r   r   r   rj   )r?   r@   rA   rB   rC   rT   r   r   rR   r*   rD   r1   rE   rF   rG   s   @r   rI   rI   T   sœ   ø† ñð (1Ø)2ñoàðoð ðoð ˜3  c¨3° mÑ 4Ð4Ñ5ð	oð
 �c˜3 �mÑ$ðoð ˜˜S #˜Ñ&÷oð oð.'˜UŸ\™\ð '¨e¯l©l÷ 'ò 'r   rI   c                   ó¸   ^ • \ rS rSrSr  SS\S\S\\\\\\4   4   S\\\\4   S\\\\4   4
U 4S jjjrS	\	R                  S
\S\	R                  4S jrSrU =r$ )ÚKVAECachedCausalConv3dév   zE
A 3D causal convolution layer with caching for temporal processing.
rK   rL   r'   rM   rN   c                 óÚ   >• [         T
U ]  5         [        U[        5      (       a  X3U4nUu  pxn	US-  U l        U	S-  U l        US-
  U l        Xpl        X@l        [        XU4XES.UD6U l
        g rP   rQ   rZ   s             €r   rR   ÚKVAECachedCausalConv3d.__init__{   r_   r   r    Úcacher   c           	      ó¸  • U R                   S   nU R                  U R                  U R                  U R                  SS4n[        R                  " XSS9nUS   cD  US S 2S S 2S S24   n[        UR                  5      nU R                  US'   UR                  U5      nOUS   n[        UR                  5      n	U R                  R                  U	S'   US:X  a  UR                  S5      S-   S-  U	S'   [        R                  " [        U	5      UR                  UR                   S9n
["        R$                  " UR                  S5      U-  5      nX³-  UR                  S5      -
  nUS:”  aN  [        R&                  " X…S S 2S S 2S XÀR(                  -   U-
  24   /SS9nU R                  U5      U
S S 2S S 2S U24'   XºR                  S5      :  a)  U R                  US S 2S S 2US 24   5      U
S S 2S S 2US 24'   UU["        R*                  " UR                  S5      U-
  U R(                  -
  U-  5      -  -   U-   n[        R,                  " US S 2S S 2US 24   5      US'   U
$ )	Nr   ra   rb   Úpaddingr   r   )ÚdtypeÚdevicer#   )rM   rU   rV   r   rd   ÚlistÚshaperW   ÚexpandrY   Úout_channelsr2   r*   ÚemptyÚtuplers   rt   r(   r)   r.   rX   Útruncr-   )r3   r    rp   Út_stridere   Úinput_parallelÚfirst_frameÚtime_pad_shaperr   Úout_sizer7   Ú
offset_outÚ	offset_inÚpadding_poisonedÚ
pad_offsets                  r   r1   ÚKVAECachedCausalConv3d.forward’   s6  € Ø—;‘;˜q‘>ˆØ—o‘o t§¡¸¿¹ÈÏÉÐXYÐ[\Ð]ˆ
ÜŸš˜u°{ÑCˆà�ÑÑ#Ø(ªªA¨r°¨r¨Ñ2ˆKÜ! +×"3Ñ"3Ó4ˆNØ $§¡ˆN˜1ÑØ!×(Ñ(¨Ó8‰Gà˜IÑ&ˆGä˜Ÿ™Ó$ˆØ—i‘i×,Ñ,ˆ�‰Ø�q‹=Ø Ÿ:™: a›=¨1Ñ,°Ñ2ˆH�Q‰KÜ—’œU 8›_°E·K±KÈÏÉÑUˆä—Y’Y˜wŸ|™|¨A›°Ñ9Ó:ˆ
ØÑ)¨G¯L©L¸«OÑ;ˆ	à˜‹>Ü$ŸyšyØªªAÐ/]°×=RÑ=RÑ1RÐU]Ñ1]Ð/]Ð)]Ñ^Ð_Ðefñ Ðð )-¯	©	Ð2BÓ(CˆF’1’a˜˜*˜Ð$Ñ%àŸ™ A›Ó&Ø(,¯	©	°.ÂÂAÀyÁzÐAQÑ2RÓ(SˆF’1’a˜™Ð$Ñ%ð ØœŸš ^×%8Ñ%8¸Ó%;¸iÑ%GÈ$×J_ÑJ_Ñ%_ÐckÑ$kÓlÑlñmàñð 	ô
 !Ÿ;š; ~²aº¸J¹KÐ6GÑ'HÓIˆˆiÑàˆr   rh   ri   )r?   r@   rA   rB   rC   rT   r   r   rR   r*   rD   r   r1   rE   rF   rG   s   @r   rl   rl   v   s£   ø† ñð (1Ø)2ñoàðoð ðoð ˜3  c¨3° mÑ 4Ð4Ñ5ð	oð
 �c˜3 �mÑ$ðoð ˜˜S #˜Ñ&÷oð oð.&˜UŸ\™\ð &°$ð &¸5¿<¹<÷ &ò &r   rl   c                   óv   ^ • \ rS rSrSrS\4U 4S jjrS
S\R                  S\	S\R                  4S jjr
S	rU =r$ )ÚKVAECachedGroupNormé»   z9
GroupNorm with caching support for temporal processing.
Úin_channelsc                 óZ   >• [         TU ]  5         [        R                  " SUSSS9U l        g )Né    g�íµ ÷Æ°>T)Ú
num_groupsÚnum_channelsÚepsÚaffine)r0   rR   ÚnnÚ	GroupNormÚ
norm_layer)r3   r‰   r<   s     €r   rR   ÚKVAECachedGroupNorm.__init__À   s&   ø€ Ü‰ÑÔÜŸ,š,°"À;ÐTXÐaeÑfˆ�r   r   rp   r   c                 óŠ   • U R                  U5      nUb.  UR                  S5      c  UR                  S5      c
  SUS'   SUS'   U$ )NÚmeanÚvarr   )r’   Úget©r3   r   rp   Úouts       r   r1   ÚKVAECachedGroupNorm.forwardÄ   sI   € Ø�o‰o˜aÓ ˆØÑ §¡¨6Ó!2Ñ!:¸u¿y¹yÈÓ?OÑ?WØˆE�&‰MØˆE�%‰LØˆ
r   )r’   r   )r?   r@   rA   rB   rC   rT   rR   r*   rD   r   r1   rE   rF   rG   s   @r   r‡   r‡   »   s=   ø† ñðg C÷ gñ˜Ÿ™ð ¨dð ¸e¿l¹l÷ ó r   r‡   c                   ó˜   ^ • \ rS rSrSr SS\S\S\4U 4S jjjrS\R                  S\R                  S	\
S
\R                  4S jrSrU =r$ )ÚKVAECachedSpatialNorm3DéÑ   z?
Spatially conditioned normalization for decoder with caching.
Ú
f_channelsÚzq_channelsÚadd_convc                 ó¶   >• [         TU ]  5         [        U5      U l        X0l        U(       a  [        X"SS9U l        [        X!SS9U l        [        X!SS9U l	        g )Nr   ©rK   rL   r'   r   )r'   )
r0   rR   r‡   r’   r    rl   rY   r   Úconv_yÚconv_b)r3   rž   rŸ   r    r<   s       €r   rR   Ú KVAECachedSpatialNorm3D.__init__Ö   sO   ø€ ô 	‰ÑÔÜ-¨jÓ9ˆŒØ ŒæÜ.°{ÐfgÑhˆDŒIä$ [È!ÑLˆŒÜ$ [È!ÑLˆ�r   ÚfÚzqrp   r   c           	      ó¸  • US   R                  S5      cü  US   R                  S5      cç  US S 2S S 2S S24   US S 2S S 2SS 24   pTUR                  SS  UR                  SS  pvUS S 2S S 2S S24   US S 2S S 2SS 24   p˜[        R                  " X†SS9nUR	                  S5      S:”  ag  [
        R                  " U	S	SS
9n
U
 Vs/ s H  n[        R                  " X·SS9PM     nn[
        R                  " USS
9n	[
        R                  " X‰/SS
9nObUnO_UR                  SS  n[
        R                  " US	SS
9nU Vs/ s H  n[        R                  " X½SS9PM     nn[
        R                  " USS
9nU R                  (       a  U R                  X#S   5      nU R                  XS   5      nXðR                  U5      -  nXðR                  U5      -   nU$ s  snf s  snf )NÚnormr•   r–   r   éýÿÿÿÚnearest)r2   rc   r   r‹   r#   r    )r—   rv   r   Úinterpolater2   r*   Úsplitr.   r    rY   r’   r£   r¤   )r3   r¦   r§   rp   Úf_firstÚf_restÚf_first_sizeÚf_rest_sizeÚzq_firstÚzq_restÚzq_rest_splitsr­   Úinterpolated_splitsÚf_sizeÚ	zq_splitsÚnorm_fs                   r   r1   ÚKVAECachedSpatialNorm3D.forwardæ   s¿  € Ø�‰=×Ñ˜VÓ$Ñ,°°v±×1BÑ1BÀ5Ó1IÑ1QØ¢¢1 b q b ™k¨1ªQ²°1±2¨X©;�VØ(/¯©°b°cÐ(:¸F¿L¹LÈÈÐ<M˜+Ø "¢1¢a¨¨!¨ 8¡¨b²²A°q±r°©l�gä—}’} XÀyÑQˆHà�w‰w�q‹z˜A‹~Ü!&§¢¨W°b¸aÑ!@�áXfó'ÚXfÈu”A—M’M %À	ÔJÑXfð $ð 'ô  Ÿ)š)Ð$7¸QÑ?�Ü—Y’Y Ð2¸Ñ:‘à‘à—W‘W˜R˜S�\ˆFÜŸš B¨°Ñ2ˆIÙbkÓ"lÒbkÐY^¤1§=¢=°È)Ô#TÑbkÐÐ"lÜ—’Ð.°AÑ6ˆBà�=�=Ø—‘˜2 ZÑ0Ó1ˆBà—‘ ¨&¡MÓ2ˆØŸ+™+ b›/Ñ)ˆØŸ+™+ b›/Ñ)ˆàˆùò)'ùò #ms   ÃGÄ;G)r    rY   r¤   r£   r’   )F)r?   r@   rA   rB   rC   rT   ÚboolrR   r*   rD   r   r1   rE   rF   rG   s   @r   rœ   rœ   Ñ   sj   ø† ñð ñ	MàðMð ðMð ÷	Mð Mð ˜Ÿ™ð ¨5¯<©<ð Àð ÈÏÉ÷ ò r   rœ   c                   óà   ^ • \ rS 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\S\
R                  S\
R                  4
S jjrSrU =r$ )ÚKVAECachedResnetBlock3Di  z!
A 3D ResNet block with caching.
r‰   rx   Úconv_shortcutÚdropoutÚtemb_channelsÚzq_chr    Úgather_normc	                 óø  >• [         T	U ]  5         Xl        Uc  UOUnX l        X0l        Uc  [        U5      U l        O[        XUS9U l        [        XSS9U l	        US:”  a  [        R                  " XR5      U l        Uc  [        U5      U l        O[        X&US9U l        [        X"SS9U l        U R                  U R                  :w  a3  U R                  (       a  [        XSS9U l        g [!        XSSSS9U l        g g )N©r    r   r¢   r   r   )r'   rM   rr   )r0   rR   r‰   rx   Úuse_conv_shortcutr‡   Únorm1rœ   rl   Úconv1r�   ÚLinearÚ	temb_projÚnorm2Úconv2r½   r   Únin_shortcut)
r3   r‰   rx   r½   r¾   r¿   rÀ   r    rÁ   r<   s
            €r   rR   Ú KVAECachedResnetBlock3D.__init__  sê   ø€ ô 	‰ÑÔØ&ÔØ&2Ñ&:‘{ÀˆØ(ÔØ!.Ôà‰=Ü,¨[Ó9ˆD�Jä0°ÈhÑWˆDŒJä+°KÐdeÑfˆŒ
à˜1ÓÜŸYšY }ÓCˆDŒNà‰=Ü,¨\Ó:ˆD�Jä0°ÈxÑXˆDŒJä+°LÐefÑgˆŒ
à×Ñ˜t×0Ñ0Ó0Ø×%×%Ü%;ÀKÐtuÑ%v�Õ"ä$2°;ÐZ[ÐdeÐopÑ$q�Õ!ð	 1r   r   ÚtembÚlayer_cacher§   r   c                 óL  • UnUc  U R                  XSS   S9nOU R                  XTUS   S9n[        R                  " U5      nU R                  XSS   S9nUb(  XPR	                  [        U5      5      S S 2S S 2S S S 4   -   nUc  U R                  XSS   S9nOU R                  XTUS   S9n[        R                  " U5      nU R                  XSS   S9nU R                  U R                  :w  a8  U R                  (       a  U R                  XS   S9nX-   $ U R                  U5      nX-   $ )NrÅ   ©rp   rÆ   rÉ   rÊ   r½   )rÅ   r   r   rÆ   rÈ   r   rÉ   rÊ   r‰   rx   rÄ   r½   rË   )r3   r   rÍ   rÎ   r§   Úhs         r   r1   ÚKVAECachedResnetBlock3D.forward4  s2  € Øˆà‰:à—
‘
˜1°Ñ$8�
Ð9‰Að —
‘
˜1¨°GÑ(<�
Ð=ˆAä�FŠF�1‹IˆØ�J‰J�q¨GÑ 4ˆJÐ5ˆàÑØ—N‘N¤<°Ó#5Ó6²qº!¸TÀ4ÈÐ7MÑNÑNˆAà‰:Ø—
‘
˜1°Ñ$8�
Ð9‰Aà—
‘
˜1¨°GÑ(<�
Ð=ˆAä�FŠF�1‹IˆØ�J‰J�q¨GÑ 4ˆJÐ5ˆà×Ñ˜t×0Ñ0Ó0Ø×%×%Ø×&Ñ& q¸OÑ0LÐ&ÐM�ð ‰uˆð ×%Ñ% aÓ(�à‰uˆr   )
rÆ   rÊ   r½   r‰   rË   rÅ   rÉ   rx   rÈ   rÄ   )NFç        r   NFFr   )r?   r@   rA   rB   rC   rT   r   rº   ÚfloatrR   r*   rD   r   r1   rE   rF   rG   s   @r   r¼   r¼     sÍ   ø† ñð '+Ø#ØØØ#ØØ!ñ&ràð&rð ˜s‘mð&rð ð	&rð
 ð&rð ð&rð ˜‰}ð&rð ð&rð ÷&rð &rñP˜Ÿ™ð ¨U¯\©\ð Èð ÐRW×R^ÑR^ð Ðjo×jvÑjv÷ ó r   r¼   c                   óö   ^ • \ rS rSrSrSS\S\S\4U 4S jjjrS\R                  S\R                  4S	 jr
S\R                  S
\S\R                  4S jrS\R                  S
\S\R                  4S jrSrU =r$ )ÚKVAECachedPXSDownsampleiU  z<
A 3D downsampling layer using PixelUnshuffle with caching.
r‰   Úcompress_timeÚfactorc           	      ó\  >• [         TU ]  5         X l        X0l        [        R
                  " U R                  5      U l        [        R                  " SS5      U l        [        UUSSSSS9U l
        U R                  (       a  [        XSSSS	9U l        [        R                  " XS
S
S9U l        g )N)r   r   r   ©r   r   r   ©r   r   r   Úreflect©r'   rM   rr   Úpadding_mode©r   r   r   )r   r   r   rj   ©r'   rM   rN   r   ©r'   rM   )r0   rR   Útemporal_compressrØ   r�   ÚPixelUnshuffleÚ	unshuffleÚ	AvgPool3dÚs_poolr   Úspatial_convrl   Útemporal_convÚConv3dÚlinear©r3   r‰   r×   rØ   r<   s       €r   rR   Ú KVAECachedPXSDownsample.__init__Z  s™   ø€ Ü‰ÑÔØ!.ÔØŒÜ×*Ò*¨4¯;©;Ó7ˆŒÜ—l’l 9¨iÓ8ˆŒä*ØØØ!ØØØ"ñ
ˆÔð ×!×!Ü!7Ø°iÈ	Ð\eñ"ˆDÔô —i’i ÀaÐPQÑRˆ�r   r    r   c                 ó²  • UR                   u  p#pEnUR                  SSSSS5      R                  X$-  X5U5      nU R                  U5      nUR                   u  pšp¼UR	                  XšU R
                  S-  -  U R
                  S-  X¼5      n[        R                  " USS9nUR	                  X$SX¼5      R                  SSSSS5      nU R                  U5      nXþ-   $ )Nr   r   r   r   é   r#   éÿÿÿÿ)	rv   ÚpermuteÚreshaperä   ÚviewrØ   r*   r•   rç   )r3   r    ÚbÚcÚtrÑ   ÚwÚ	pxs_inputÚ
pxs_intermÚb_itÚc_itÚh_itÚw_itÚpxs_interm_viewÚpxs_outÚconv_outs                   r   Úspatial_downsampleÚ*KVAECachedPXSDownsample.spatial_downsampleq  sÍ   € ØŸ™‰ˆˆa�AØ—M‘M ! Q¨¨1¨aÓ0×8Ñ8¸¹ÀÀaÓHˆ	à—^‘^ IÓ.ˆ
Ø!+×!1Ñ!1Ñˆ�DØ$Ÿ/™/¨$¸¿¹ÀQ¹Ñ0FÈÏÉÐUVÉÐX\ÓcˆÜ—*’*˜_°!Ñ4ˆØ—,‘,˜q R¨Ó4×<Ñ<¸QÀÀ1ÀaÈÓKˆà×$Ñ$ UÓ+ˆØÑ!Ð!r   rp   c                 ó,  • UR                   u  p4pVnUR                  SSSSS5      R                  X6-  U-  XE5      nUS   S   cV  USS S24   USSS 24   p©U
R                  S5      S:”  a-  [        R
                  " U
SSS	9n[        R                  " X›/SS
9nO0U	nO-Un
U
R                  S5      S:”  a  [        R
                  " U
SSS	9nWR                  S5      nUR                  X6XtU5      R                  SSSSS5      nU R                  XS   5      nXì-   $ )Nr   r   rî   r   r   rr   .rï   rá   r#   )
rv   rð   rñ   r2   r   Ú
avg_pool1dr*   r.   rò   rè   )r3   r    rp   ró   rô   rõ   rÑ   rö   ÚpermutedÚfirstÚrestÚrest_interpÚfull_interpÚt_newrÿ   s                  r   Útemporal_downsampleÚ+KVAECachedPXSDownsample.temporal_downsample~  s  € ØŸ™‰ˆˆa�Aà—=‘=  A q¨!¨QÓ/×7Ñ7¸¹À¹	À1ÓHˆà�‰8�IÑÑ&Ø" 3¨¨¨ 7Ñ+¨X°c¸1¹2°gÑ->�4Ø�y‰y˜‹}˜qÓ ÜŸlšl¨4¸QÀqÑI�Ü#Ÿiši¨Ð(<À"ÑE‘à#‘àˆDØ�y‰y˜‹}˜qÓ ÜŸlšl¨4¸QÀqÑI�à× Ñ  Ó$ˆØ!×&Ñ& q¨Q°5Ó9×AÑAÀ!ÀQÈÈ1ÈaÓPˆØ×%Ñ% e°1©XÓ6ˆØÑ%Ð%r   r   c                 ó†   • U R                  U5      nU R                  (       a  U R                  X2S9nU R                  U5      $ )NrÐ   )r   râ   r
  rê   r˜   s       r   r1   ÚKVAECachedPXSDownsample.forward”  s=   € Ø×%Ñ% aÓ(ˆà×!×!Ø×*Ñ*¨3Ð*Ð<ˆCà�{‰{˜3ÓÐr   )rØ   rê   ræ   rç   râ   rè   rä   ©r   )r?   r@   rA   rB   rC   rT   rº   rR   r*   rD   r   ru   r
  r1   rE   rF   rG   s   @r   rÖ   rÖ   U  s�   ø† ññS Cð S¸ð SÀc÷ Sð Sð."¨¯©ð "¸¿¹ô "ð&¨¯©ð &¸dð &ÀuÇ|Á|ô &ð, ˜Ÿ™ð  ¨dð  °u·|±|÷  ò  r   rÖ   c                   óö   ^ • \ rS rSrSrSS\S\S\4U 4S jjjrS\R                  S\R                  4S	 jr
S\R                  S
\S\R                  4S jrS\R                  S
\S\R                  4S jrSrU =r$ )ÚKVAECachedPXSUpsamplei�  z8
A 3D upsampling layer using PixelShuffle with caching.
r‰   r×   rØ   c           	      ó  >• [         TU ]  5         X l        X0l        [        R
                  " U R                  5      U l        [        UUSSSSS9U l        U R                  (       a  [        XSSSS9U l
        [        XSSS	9U l        g )
NrÚ   rj   rÛ   rÜ   rÝ   rß   rà   r   rá   )r0   rR   râ   rØ   r�   ÚPixelShuffleÚshuffler   rç   rl   rè   rê   rë   s       €r   rR   ÚKVAECachedPXSUpsample.__init__¢  s�   ø€ Ü‰ÑÔØ!.ÔØŒÜ—’ t§{¡{Ó3ˆŒä*ØØØ!ØØØ"ñ
ˆÔð ×!×!Ü!7Ø°iÈ	Ð\eñ"ˆDÔô % [È1ÐUVÑWˆ�r   r    r   c                 ó"  • UR                   u  p#pEnUR                  SSSSS5      R                  X$U-  XV5      n[        R                  " USSS9nUR                  X$USU-  SU-  5      R                  SSSSS5      nU R                  U5      n	X‰-   $ )Nr   r   r   r   rî   r«   )Úscale_factorrc   )rv   rð   rñ   r   r¬   rò   rç   )
r3   r    ró   rô   rõ   rÑ   rö   Ú
input_viewÚinput_interpr™   s
             r   Úspatial_upsampleÚ&KVAECachedPXSUpsample.spatial_upsample¸  s–   € ØŸ™‰ˆˆa�AØ—]‘] 1 a¨¨A¨qÓ1×9Ñ9¸!À¹UÀAÓIˆ
Ü—}’} Z¸aÀiÑPˆØ#×(Ñ(¨¨q°!°a±%¸¸Q¹Ó?×GÑGÈÈ1ÈaÐQRÐTUÓVˆà×Ñ Ó-ˆØÑ!Ð!r   rp   c                 ó8  • SSUR                  S5      S:„  -  -   n[        U[        R                  5      (       a  UR	                  5       nUR                  [        U5      SS9nUS   c  US[        US-
  5      S 2S S 2S S 24   nOUnU R                  XR5      nXe-   $ )Ng      ð?r   r   r#   rr   .)r2   rS   r*   rD   ÚitemÚrepeat_interleaverT   rè   )r3   r    rp   Útime_factorÚrepeatedÚtailrÿ   s          r   Útemporal_upsampleÚ'KVAECachedPXSUpsample.temporal_upsampleÁ  sž   € Ø˜C 5§:¡:¨a£=°1Ñ#4Ñ5Ñ5ˆÜ�k¤5§<¡<×0Ñ0Ø%×*Ñ*Ó,ˆKà×*Ñ*¬3¨{Ó+;ÀÐ*ÐCˆà�ÑÑ#Ø˜C¤ [°1¡_Ó!5Ñ!7ººAÐ=Ñ>‰DàˆDà×%Ñ% dÓ2ˆØ‰Ðr   r   c                 ó¶   • U R                   (       a  U R                  X5      nU R                  U5      n[        R                  " U5      nU R                  X4S9nU$ )N)r!   )râ   r!  r  r*   Ú
empty_likerê   )r3   r   rp   Ús_outÚtoÚlin_outs         r   r1   ÚKVAECachedPXSUpsample.forwardÐ  sP   € Ø×!×!Ø×&Ñ& qÓ0ˆAà×%Ñ% aÓ(ˆÜ×Ò˜eÓ$ˆØ—+‘+˜e�+Ð1ˆØˆr   )rØ   rê   r  rç   râ   rè   r  )r?   r@   rA   rB   rC   rT   rº   rR   r*   rD   r  r   r!  r1   rE   rF   rG   s   @r   r  r  �  s�   ø† ññX Cð X¸ð XÀc÷ Xð Xð," e§l¡lð "°u·|±|ô "ð u§|¡|ð ¸Dð ÀUÇ\Á\ô ð˜Ÿ™ð ¨dð °u·|±|÷ ò r   r  c                   ó¬   ^ • \ rS rSrSr        SS\S\\S4   S\S\S\S	\S
\S\4U 4S jjjr	S\
R                  S\S\
R                  4S jrSrU =r$ )ÚKVAECachedEncoder3Diß  z
Cached 3D Encoder for KVAE.
ÚchÚch_mult.Únum_res_blocksr¾   r‰   Ú
z_channelsÚdouble_zÚtemporal_compress_timesc	                 ó”  >• [         TU ]  5         Xl        SU l        [	        U5      U l        X0l        XPl        [        [        R                  " U5      5      U l        [        XPR                  SS9U l        S[        U5      -   n	[        R                   " 5       U l        Un
[%        U R
                  5       Hü  n[        R                   " 5       n[        R                   " 5       nXU   -  n
XU   -  n[%        U R                  5       H*  nUR'                  [)        U
UUU R                  S95        Un
M,     [        R*                  " 5       nUUl        UUl        X°R
                  S-
  :w  a.  X°R                  :  a  [1        U
SS9Ul        O[1        U
S	S9Ul        U R"                  R'                  U5        Mþ     [        R*                  " 5       U l        [)        XªU R                  US
9U R4                  l        [)        XªU R                  US
9U R4                  l        [;        U
5      U l        [        X§(       a  SU-  OUSS9U l        S	U l         g )Nr   r   r¢   )r   )r‰   rx   r¾   r¿   r   T©r×   F)r‰   rx   r¿   r¾   r   )!r0   rR   r+  Útemb_chÚlenÚnum_resolutionsr-  r‰   rT   ÚnpÚlog2Útemporal_compress_levelrl   Úconv_inrz   r�   Ú
ModuleListÚdownÚranger/   r¼   ÚModuleÚblockÚattnrÖ   Ú
downsampleÚmidÚblock_1Úblock_2r‡   Únorm_outrÿ   Úgradient_checkpointing)r3   r+  r,  r-  r¾   r‰   r.  r/  r0  Ú
in_ch_multÚblock_inÚi_levelr>  r?  Ú	block_outÚi_blockr;  r<   s                    €r   rR   ÚKVAECachedEncoder3D.__init__ä  sê  ø€ ô 	‰ÑÔØŒØˆŒÜ" 7›|ˆÔØ,ÔØ&ÔÜ'*¬2¯7ª7Ð3JÓ+KÓ'LˆÔ$ä-°kÏGÉGÐabÑcˆŒàœE '›NÑ*ˆ
Ü—M’M“OˆŒ	Øˆä˜T×1Ñ1Ö2ˆGÜ—M’M“OˆEÜ—=’=“?ˆDà wÑ/Ñ/ˆHØ WÑ-Ñ-ˆIä  ×!4Ñ!4Ö5�Ø—‘Ü+Ø$,Ø%.Ø 'Ø&*§l¡lñ	ôð %’ñ 6ô —9’9“;ˆDØˆDŒJØˆDŒIà×.Ñ.°Ñ2Ó2Ø×9Ñ9Ó9Ü&=¸hÐVZÑ&[�D•Oä&=¸hÐV[Ñ&\�D”OØ�I‰I×Ñ˜TÖ"ñ7 3ô: —9’9“;ˆŒÜ2Ø ÀtÇ|Á|Ð]dñ
ˆ�‰Ôô 3Ø ÀtÇ|Á|Ð]dñ
ˆ�‰Ôô ,¨HÓ5ˆŒÜ.Ø½ q¨:¢~ÀzÐ_`ñ
ˆŒð ',ˆÕ#r   r   Ú
cache_dictr   c           	      ó~  • S nU R                  XS   S9n[        U R                  5       GH%  n[        U R                  5       HÑ  n[        R
                  " 5       (       aD  U R                  (       a3  U R                  U R                  U   R                  U   XCX%   U   5      nO&U R                  U   R                  U   " XCX%   U   S9n[        U R                  U   R                  5      S:”  d  M¯  U R                  U   R                  U   " U5      nMÓ     XPR                  S-
  :w  d  GM  U R                  U   R                  XBU   S   S9nGM(     [        R
                  " 5       (       af  U R                  (       aU  U R                  U R                  R                  XCUS   5      nU R                  U R                  R                  XCUS   5      nO:U R                  R                  XCUS   S9nU R                  R                  XCUS   S9nU R!                  XBS	   S9n[#        U5      nU R%                  XBS
   S9nU$ )Nr9  rÐ   )rÎ   r   r   r;  Úmid_1Úmid_2rD  rÿ   )r9  r<  r5  r-  r*   Úis_grad_enabledrE  Ú_gradient_checkpointing_funcr;  r>  r4  r?  r@  rA  rB  rC  rD  r   rÿ   )r3   r   rL  rÍ   rÑ   rH  rJ  s          r   r1   ÚKVAECachedEncoder3D.forward)  s  € Øˆà�L‰L˜¨YÑ"7ˆLÐ8ˆä˜T×1Ñ1×2ˆGÜ  ×!4Ñ!4Ö5�Ü×(Ò(×*Ñ*¨t×/J×/JØ×9Ñ9ØŸ	™	 'Ñ*×0Ñ0°Ñ9¸1ÀJÑDWÐX_ÑD`ó‘Að Ÿ	™	 'Ñ*×0Ñ0°Ò9¸!ÈzÑObÐcjÑOkÑl�AÜ�t—y‘y Ñ)×.Ñ.Ó/°!Õ3ØŸ	™	 'Ñ*×/Ñ/°Ò8¸Ó;’Añ 6ð ×.Ñ.°Ñ2Ö2Ø—I‘I˜gÑ&×1Ñ1°!ÀgÑ;NÈvÑ;VÐ1ÐW“ñ 3ô × Ò ×"Ñ" t×'B×'BØ×1Ñ1°$·(±(×2BÑ2BÀAÈZÐX_ÑM`ÓaˆAØ×1Ñ1°$·(±(×2BÑ2BÀAÈZÐX_ÑM`Óa‰Aà—‘× Ñ  °jÀÑ6IÐ ÐJˆAØ—‘× Ñ  °jÀÑ6IÐ ÐJˆAà�M‰M˜!¨jÑ#9ˆMÐ:ˆÜ˜‹OˆØ�M‰M˜!¨jÑ#9ˆMÐ:ˆàˆr   )r+  r9  rÿ   r;  rE  r‰   rA  rD  r-  r5  r3  r8  )é€   ©r   r   rî   é   r   rÓ   r   é   Trî   )r?   r@   rA   rB   rC   rT   r   rÔ   rº   rR   r*   rD   r   r1   rE   rF   rG   s   @r   r*  r*  ß  s´   ø† ñð Ø#/ØØØØØØ'(ñC,àðC,ð �s˜C�x‘ðC,ð ð	C,ð
 ðC,ð ðC,ð ðC,ð ðC,ð "%÷C,ð C,ðJ˜Ÿ™ð °4ð ¸E¿L¹L÷ ò r   r*  c                   ó¸   ^ • \ rS rSrSr         SS\S\S\\S4   S\S\S	\S
\\   S\	S\4U 4S jjjr
S\R                  S\S\R                  4S jrSrU =r$ )ÚKVAECachedDecoder3DiI  z
Cached 3D Decoder for KVAE.
r+  Úout_chr,  .r-  r¾   r.  rÀ   r    r0  c
                 óŠ  >• [         TU ]  5         Xl        SU l        [	        U5      U l        X@l        [        [        R                  " U	5      5      U l
        Uc  UnXU R
                  S-
     -  n
[        XjSS9U l        [        R                  " 5       U l        [!        U
U
U R                  UUUS9U R                  l        [!        U
U
U R                  UUUS9U R                  l        [        R&                  " 5       U l        [+        [-        U R
                  5      5       Hü  n[        R&                  " 5       n[        R&                  " 5       nXU   -  n[-        U R                  S-   5       H,  nUR/                  [!        U
UU R                  UUUS95        Un
M.     [        R                  " 5       nUUl        UUl        US:w  a;  X°R
                  U R                  -
  :  a  [5        U
SS9Ul        O[5        U
SS9Ul        U R(                  R9                  SU5        Mþ     [;        X§US	9U l        [        X¢SS9U l        SU l         g )
Nr   r   r   r¢   )r‰   rx   r¿   r¾   rÀ   r    Fr2  TrÃ   )!r0   rR   r+  r3  r4  r5  r-  rT   r6  r7  r8  rl   r9  r�   r=  rA  r¼   rB  rC  r:  ÚupÚreversedr<  r/   r>  r?  r  ÚupsampleÚinsertrœ   rD  rÿ   rE  )r3   r+  rY  r,  r-  r¾   r.  rÀ   r    r0  rG  rH  r>  r?  rI  rJ  r[  r<   s                    €r   rR   ÚKVAECachedDecoder3D.__init__N  sú  ø€ ô 	‰ÑÔØŒØˆŒÜ" 7›|ˆÔØ,ÔÜ'*¬2¯7ª7Ð3JÓ+KÓ'LˆÔ$à‰=ØˆEà × 4Ñ 4°qÑ 8Ñ9Ñ9ˆä-°jÐabÑcˆŒä—9’9“;ˆŒÜ2Ø Ø!ØŸ,™,ØØØñ
ˆ�‰Ôô 3Ø Ø!ØŸ,™,ØØØñ
ˆ�‰Ôô —-’-“/ˆŒÜ¤ d×&:Ñ&:Ó ;Ö<ˆGÜ—M’M“OˆEÜ—=’=“?ˆDØ WÑ-Ñ-ˆIä  ×!4Ñ!4°qÑ!8Ö9�Ø—‘Ü+Ø$,Ø%.Ø&*§l¡lØ 'Ø#Ø!)ñô	ð %’ñ :ô —’“ˆBØˆBŒHØˆBŒGà˜!‹|Ø×1Ñ1°D×4PÑ4PÑPÓPÜ"7¸ÐPUÑ"V�B•Kä"7¸ÐPTÑ"U�B”KØ�G‰G�N‰N˜1˜bÖ!ñ7 =ô: 0°È(ÑSˆŒÜ.°xÐ^_Ñ`ˆŒà&+ˆÕ#r   r9   rL  r   c           	      óž  • S nUnU R                  XS   5      n[        R                  " 5       (       ah  U R                  (       aW  U R	                  U R
                  R                  XSUS   U5      nU R	                  U R
                  R                  XSUS   U5      nO<U R
                  R                  XSUS   US9nU R
                  R                  XSUS   US9n[        [        U R                  5      5       GH  n[        U R                  S-   5       HÓ  n[        R                  " 5       (       aE  U R                  (       a4  U R	                  U R                  U   R                  U   XSX&   U   U5      nO'U R                  U   R                  U   " XSX&   U   US9n[        U R                  U   R                  5      S:”  d  M±  U R                  U   R                  U   " XT5      nMÕ     US:w  d  Mû  U R                  U   R!                  XRU   S   5      nGM"     U R#                  XTUS   5      n[%        U5      nU R'                  XRS	   5      nU$ )
Nr9  rN  rO  )rÎ   r§   r   r   r[  rD  rÿ   )r9  r*   rP  rE  rQ  rA  rB  rC  r\  r<  r5  r-  r[  r>  r4  r?  r]  rD  r   rÿ   )r3   r9   rL  rÍ   r§   rÑ   rH  rJ  s           r   r1   ÚKVAECachedDecoder3D.forward�  s  € ØˆØˆà�L‰L˜ yÑ1Ó2ˆä× Ò ×"Ñ" t×'B×'BØ×1Ñ1°$·(±(×2BÑ2BÀAÈZÐX_ÑM`ÐbdÓeˆAØ×1Ñ1°$·(±(×2BÑ2BÀAÈZÐX_ÑM`ÐbdÓe‰Aà—‘× Ñ  °jÀÑ6IÈbÐ ÐQˆAØ—‘× Ñ  °jÀÑ6IÈbÐ ÐQˆAä¤ d×&:Ñ&:Ó ;×<ˆGÜ  ×!4Ñ!4°qÑ!8Ö9�Ü×(Ò(×*Ñ*¨t×/J×/JØ×9Ñ9ØŸ™ Ñ(×.Ñ.¨wÑ7¸À*ÑBUÐV]ÑB^Ð`bó‘Að Ÿ™ Ñ(×.Ñ.¨wÒ7¸ÈZÑM`ÐahÑMiÐnpÑq�AÜ�t—w‘w˜wÑ'×,Ñ,Ó-°Õ1ØŸ™ Ñ(×-Ñ-¨gÒ6°qÓ=’Añ :ð ˜!�|Ø—G‘G˜GÑ$×-Ñ-¨a¸GÑ1DÀTÑ1JÓK“ñ =ð �M‰M˜! ¨JÑ!7Ó8ˆÜ˜‹OˆØ�M‰M˜!¨
Ñ3Ó4ˆàˆr   )r+  r9  rÿ   rE  rA  rD  r-  r5  r3  r8  r[  )	rS  r   rT  r   rÓ   rV  NFrî   )r?   r@   rA   rB   rC   rT   r   rÔ   r   rº   rR   r*   rD   r   r1   rE   rF   rG   s   @r   rX  rX  I  sÆ   ø† ñð ØØ#/ØØØØ#ØØ'(ñM,àðM,ð ðM,ð �s˜C�x‘ð	M,ð
 ðM,ð ðM,ð ðM,ð ˜‰}ðM,ð ðM,ð "%÷M,ð M,ð^˜Ÿ™ð °4ð ¸E¿L¹L÷ ò r   rX  c                   óD  ^ • \ rS rSrSrSrS/r\       S S\S\	\S4   S\S	\S
\S\S\4U 4S jjj5       r
S\4S jrS\4S jrS!S jrS!S jrS"S\R"                  S\S\R"                  4S jjr\ S#S\R"                  S\S\\\	\   4   4S jj5       rS"S\R"                  S\S\R"                  4S jjr\S#S\R"                  S\S\\\R"                  4   4S jj5       r   S$S\R"                  S\S\S\\R:                     S\\\R"                  4   4
S jjrSrU =r $ )%ÚAutoencoderKLKVAEVideoiÃ  a–  
A VAE model with KL loss for encoding videos into latents and decoding latent representations into videos. Used in
[KVAE](https://github.com/kandinskylab/kvae-1).

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

Parameters:
    ch (`int`, *optional*, defaults to 128): Base channel count.
    ch_mult (`Tuple[int]`, *optional*, defaults to `(1, 2, 4, 8)`): Channel multipliers per level.
    num_res_blocks (`int`, *optional*, defaults to 2): Number of residual blocks per level.
    in_channels (`int`, *optional*, defaults to 3): Number of input channels.
    out_ch (`int`, *optional*, defaults to 3): Number of output channels.
    z_channels (`int`, *optional*, defaults to 16): Number of latent channels.
    temporal_compress_times (`int`, *optional*, defaults to 4): Temporal compression factor.
Tr¼   r+  r,  .r-  r‰   rY  r.  r0  c           
      óŒ   >• [         TU ]  5         [        UUUUUSUS9U l        [	        UUUUUUS9U l        SU l        SU l        g )NT)r+  r,  r-  r‰   r.  r/  r0  )r+  r,  r-  rY  r.  r0  F)r0   rR   r*  ÚencoderrX  ÚdecoderÚuse_slicingÚ
use_tiling)	r3   r+  r,  r-  r‰   rY  r.  r0  r<   s	           €r   rR   ÚAutoencoderKLKVAEVideo.__init__Ø  sb   ø€ ô 	‰ÑÔä*ØØØ)Ø#Ø!ØØ$;ñ
ˆŒô +ØØØ)ØØ!Ø$;ñ
ˆŒð !ˆÔØˆ�r   r   c                 ó  ^• SU4S jjmT" S5      T" S5      T" S5      T" S5      T" S5      S.n[        [        U R                  R                  5      5       H#  nT" U S3U R                  R                  S9X'   M%     U$ )	z&Create empty cache for cached encoder.c                 ó†  >• U S:X  a  SS 0$ U R                  S5      u  p#US:X  a  US:X  a  S S S.$ T" S5      T" S5      S.$ US	:X  a,  T" S
U 35      T" S
U 35      T" S5      T" S5      T" S5      S.$ UR                  5       (       a:  T" S5      T" S5      /T" S5      S.n[        U5       H  nT" SU 35      XE'   M     U$ g ©NrY   rr   Ú_r©   Úenc)r•   r–   Únorm_enc)r©   r    ÚresblockÚnorm_)rÅ   rÉ   rÆ   rÊ   r½   )r;  r[  Ú	resblock_©r­   Úisdigitr<  ©ÚnameÚpÚlayerÚmoduleÚout_dictr8   Ú	make_dicts         €r   r{  Ú=AutoencoderKLKVAEVideo._make_encoder_cache.<locals>.make_dictþ  óó   ø€ Ø�v‹~Ø! 4Ð(Ð(à ŸJ™J s›O‰MˆEØ˜‹Ø˜U“?Ø$(°Ñ6Ð6á$-¨jÓ$9ÁyÐQWÓGXÑYÐYØ˜*Ó$á&¨¨v¨hÐ'7Ó8Ù&¨¨v¨hÐ'7Ó8Ù& vÓ.Ù& vÓ.Ù%.¨vÓ%6ñð ð —‘—‘Ù%.¨vÓ%6¹	À&Ó8IÐ$JÑR[Ð\bÓRcÑd�Ü˜qž�AÙ"+¨i¸°xÐ,@Ó"A�H“Kñ "à�ð	 !r   rY   Úresblock_encro  ©r9  rN  rO  rD  rÿ   Ú_enc©rw  r   ©r<  r4  Úconfigr,  r-  ©r3   rp   r8   r{  s      @r   Ú_make_encoder_cacheÚ*AutoencoderKLKVAEVideo._make_encoder_cacheû  s|   ø€ ÷	 ñ2 ! Ó(Ù˜~Ó.Ù˜~Ó.Ù! *Ó-Ù! &Ó)ñ
ˆô ”s˜4Ÿ;™;×.Ñ.Ó/Ö0ˆAÙ  A 3 d ¨t¯{©{×/IÑ/IÑJˆE‹Hñ 1àˆr   c                 ó  ^• S	U4S jjmT" S5      T" S5      T" S5      T" S5      T" S5      S.n[        [        U R                  R                  5      5       H&  nT" U S3U R                  R                  S-   S9X'   M(     U$ )
zCreate empty cache for decoder.c                 ó†  >• U S:X  a  SS 0$ U R                  S5      u  p#US:X  a  US:X  a  S S S.$ T" S5      T" S5      S.$ US	:X  a,  T" S
U 35      T" S
U 35      T" S5      T" S5      T" S5      S.$ UR                  5       (       a:  T" S5      T" S5      /T" S5      S.n[        U5       H  nT" SU 35      XE'   M     U$ g rl  rs  ru  s         €r   r{  Ú=AutoencoderKLKVAEVideo._make_decoder_cache.<locals>.make_dict%  r}  r   rY   Úresblock_decÚnorm_decr  Ú_decr   r�  r   r‚  r„  s      @r   Ú_make_decoder_cacheÚ*AutoencoderKLKVAEVideo._make_decoder_cache"  s�   ø€ ÷	 ñ2 ! Ó(Ù˜~Ó.Ù˜~Ó.Ù! *Ó-Ù! &Ó)ñ
ˆô ”s˜4Ÿ;™;×.Ñ.Ó/Ö0ˆAÙ  A 3 d ¨t¯{©{×/IÑ/IÈAÑ/MÑNˆE‹Hñ 1àˆr   c                 ó   • SU l         g)zEnable sliced VAE decoding.TN©rg  ©r3   s    r   Úenable_slicingÚ%AutoencoderKLKVAEVideo.enable_slicingH  s
   € àˆÕr   c                 ó   • SU l         g)zDisable sliced VAE decoding.FNr�  r‘  s    r   Údisable_slicingÚ&AutoencoderKLKVAEVideo.disable_slicingL  s
   € à ˆÕr   r   Úseg_lenc                 ó–  • U R                  5       nUS-   /nUR                  S5      US-   -
  nUS:”  a  UR                  U5        XR-  nUS:”  a  M  US==   U-  ss'   / n[        R                  " XSS9 H=  nU R                  Xs5      n[        R                  " USSS9u  pšUR                  U	5        M?     [        R                  " USS9$ ©Nr   r   r   rï   r#   )r…  r2   r/   r*   r­   re  r+   r.   )r3   r   r—  rp   Ú
split_listÚn_framesÚlatentr+   ÚlÚsamplerm  s              r   Ú_encodeÚAutoencoderKLKVAEVideo._encodeP  sÂ   € à×(Ñ(Ó*ˆà ‘k�]ˆ
Ø—6‘6˜!“9 ¨!¡Ñ,ˆØ˜‹lØ×Ñ˜gÔ&ØÑˆHð ˜�lð 	�2‹˜(Ñ"‹àˆÜ—[’[ °AÔ6ˆEØ—‘˜UÓ*ˆAÜŸš A q¨aÑ0‰IˆFØ�M‰M˜&Ö!ñ 7ô
 �yŠy˜ QÑ'Ð'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[        R
                  " U[        R                  " U5      /SS9n[        U5      nU(       d  U4$ [        US9$ s  snf )aX  
Encode a batch of videos into latents.

Args:
    x (`torch.Tensor`): Input batch of videos with shape (B, C, T, H, W).
    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 videos.
r   r   r#   )Úlatent_dist)	rg  rv   r­   rŸ  r*   r.   Ú
zeros_liker   r   )r3   r   r¡  Úx_sliceÚencoded_slicesrÑ   Úh_doubleÚ	posteriors           r   ÚencodeÚAutoencoderKLKVAEVideo.encodec  s¡   € ð ×× §¡¨¡
¨Q£ØCDÇ7Á7È1Ä:ÓNÂ:¸Ÿl™l¨7Ö3Á:ˆNÐNÜ—	’	˜.Ó)‰Aà—‘˜Q“ˆAô —9’9˜a¤×!1Ò!1°!Ó!4Ð5¸1Ñ=ˆÜ0°Ó:ˆ	æØ�<ÐÜ"¨yÑ9Ð9ùò Os   ¸Cr9   c                 óð  • U R                  5       nU R                  R                  nUS-   /nXAR                  S5      S-
  -  U-
  nUS:”  a  UR	                  U5        Xb-  nUS:”  a  M  US==   U-  ss'   U Vs/ s H  n[
        R                  " Xt-  5      PM     nn/ n[        R                  " XSS9 H%  n	U R                  X“5      n
UR	                  U
5        M'     [        R                  " USS9$ s  snf r™  )r�  rƒ  r0  r2   r/   r(   r)   r*   r­   rf  r.   )r3   r9   r—  rp   râ   rš  r›  r2   Úrecsr+   r™   s              r   Ú_decodeÚAutoencoderKLKVAEVideo._decode€  sç   € Ø×(Ñ(Ó*ˆØ ŸK™K×?Ñ?Ðà ‘k�]ˆ
Ø$¯©¨q«	°A©Ñ6¸Ñ@ˆØ˜‹lØ×Ñ˜gÔ&ØÑˆHð ˜�lð 	�2‹˜(Ñ"‹ÙFPÓQÂj¸d”d—i’i Ñ 8Ö9Ájˆ
ÐQàˆÜ—[’[ °AÔ6ˆEØ—,‘,˜uÓ,ˆCØ�K‰K˜Öñ 7ô �yŠy˜ 1Ñ%Ð%ùò Rs   Á:"C3c                 ó(  • 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(       d  U4$ [        US9$ s  snf )aI  
Decode a batch of videos.

Args:
    z (`torch.Tensor`): Input batch of latent vectors with shape (B, C, T, H, W).
    return_dict (`bool`, *optional*, defaults to `True`):
        Whether to return a [`~models.vae.DecoderOutput`] instead of a plain tuple.

Returns:
    [`~models.vae.DecoderOutput`] or `tuple`: Decoded video.
r   r   ©rž  )rg  rv   r­   r­  r*   r.   r   )r3   r9   r¡  Úz_sliceÚdecoded_slicesÚdecodeds         r   ÚdecodeÚAutoencoderKLKVAEVideo.decode“  su   € ð ×× §¡¨¡
¨Q£ØCDÇ7Á7È1Ä:ÓNÂ:¸Ÿl™l¨7Ö3Á:ˆNÐNÜ—i’i Ó/‰Gà—l‘l 1“oˆGæØ�:ÐÜ GÑ,Ð,ùò O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$ )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 [`DecoderOutput`] 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.DecoderOutput`] or `tuple`:
        If `return_dict` is True, a [`~models.vae.DecoderOutput`] is returned, otherwise a plain `tuple` is
        returned.
)r·  r°  )r©  r£  rž  rc   r´  r   )	r3   rž  r¶  r¡  r·  r   r¨  r9   Údecs	            r   r1   ÚAutoencoderKLKVAEVideo.forwardª  sf   € ð. ˆØ—K‘K “N×.Ñ.ˆ	ÞØ× Ñ ¨9Ð Ð5‰Aà—‘Ó ˆAØ�k‰k˜!‹n×#Ñ#ˆÞØ�6ˆMÜ CÑ(Ð(r   )rf  re  rg  rh  )rS  rT  r   r   r   rV  rî   )r   N)rV  )T)FTN)!r?   r@   rA   rB   rC   Ú _supports_gradient_checkpointingÚ_no_split_modulesr	   rT   r   rR   r   r…  r�  r’  r•  r*   rD   rŸ  r   rº   r   r   r   r©  r­  r   r´  r   Ú	Generatorr1   rE   rF   rG   s   @r   rc  rc  Ã  sÙ  ø† ñð" (,Ð$Ø2Ð3Ðàð Ø#/ØØØØØ'(ñ  àð  ð �s˜C�x‘ð  ð ð	  ð
 ð  ð ð  ð ð  ð "%÷  ó ð  ðD% Tô %ðN$ Tô $ôL ô!ñ(˜Ÿ™ð (°ð (¸U¿\¹\õ (ð& à37ñ:Ø—‘ð:Ø,0ð:à	Ð" EÐ*FÑ$GÐGÑ	Hô:ó ð:ñ8&˜Ÿ™ð &°ð &¸U¿\¹\õ &ð& ñ-˜Ÿ™ð -°4ð -À5ÈÐX]×XdÑXdÐIdÑCeô -ó ð-ð2 "'Ø Ø/3ñ )à—‘ð )ð ð )ð ð	 )ð
 ˜EŸO™OÑ,ð )ð 
ˆ}˜eŸl™lÐ*Ñ	+÷ )ó  )r   rc  )1r(   Útypingr   r   r   r   Únumpyr6  r*   Útorch.nnr�   Útorch.nn.functionalÚ
functionalr   Úconfiguration_utilsr   r	   Úloaders.single_file_modelr
   Úutilsr   Úutils.accelerate_utilsr   Úmodeling_outputsr   Úmodeling_utilsr   Úvaer   r   r   Ú
get_loggerr?   ÚloggerrD   r   ré   r   r=  rI   rl   r‡   rœ   r¼   rÖ   r  r*  rX  rc  r>   r   r   Ú<module>rÌ     s-  ðó ß /Ó /ã Û Ý ß Ð ç BÝ ?Ý Ý 8Ý 2Ý 'ß NÑ Nð 
×	Ò	˜HÓ	%€ð�E—L‘Lð  U§\¡\ô ô& �R—Y‘Yô & ôR'�r—y‘yô 'ôDB˜RŸY™Yô BôJ˜"Ÿ)™)ô ô,3˜bŸi™iô 3ôlK˜bŸi™iô Kô\E ˜bŸi™iô E ôP:˜BŸI™Iô :ôDg˜"Ÿ)™)ô gôTr˜"Ÿ)™)ô rôtG)˜ZÐ)9¸;ÐH^õ G)r   