ó
    oM‡jA‘  ã                   ó¦  • S SK rS SKrS SKJr  S SKJs  Jr  S SK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  \R4                  " \5      r " S S\R:                  5      r " S S\R:                  5      r " S S\R:                  5      r  " S S\R:                  5      r! " S S\R:                  5      r" " S S\R:                  5      r# " S S\R:                  5      r$ " S S\R:                  5      r% " S S\R:                  5      r& " S S\R:                  5      r' " S  S!\R:                  5      r( " S" S#\\\
5      r)g)$é    Né   )ÚConfigMixinÚregister_to_config)Úlogging)Úapply_forward_hooké   )Úget_activation)ÚAutoencoderKLOutput)Ú
ModelMixiné   )ÚAutoencoderMixinÚDecoderOutputÚDiagonalGaussianDistributionc                   óâ   ^ • \ rS rSr      SS\S\S\\\\\4   -  S\\\\\4   -  S\\\\\4   -  S\\\\\4   -  S\S	\S
S4U 4S jjjrS\	R                  S
\	R                  4S jrSrU =r$ )ÚHunyuanImageRefinerCausalConv3dé"   Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingÚdilationÚbiasÚpad_modeÚreturnNc	           
      óò   >• [         T	U ]  5         [        U[        5      (       a  X3U4OUnX€l        US   S-  US   S-  US   S-  US   S-  US   S-
  S4U l        [        R                  " XX4XVUS9U l        g )Nr   r   r   )r   )	ÚsuperÚ__init__Ú
isinstanceÚintr   Útime_causal_paddingÚnnÚConv3dÚconv)
Úselfr   r   r   r   r   r   r   r   Ú	__class__s
            €ÚÏC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\diffusers/models/autoencoders/autoencoder_kl_hunyuanimage_refiner.pyr   Ú(HunyuanImageRefinerCausalConv3d.__init__#   s‘   ø€ ô 	‰ÑÔäAKÈKÔY\×A]ÑA]�{°Ñ=Ðcnˆà Œà˜‰N˜aÑØ˜‰N˜aÑØ˜‰N˜aÑØ˜‰N˜aÑØ˜‰N˜QÑØð$
ˆÔ ô —I’I˜k¸ÈgÐfjÑkˆ�	ó    Úhidden_statesc                 óv   • [         R                  " XR                  U R                  S9nU R	                  U5      $ )N)Úmode)ÚFÚpadr!   r   r$   )r%   r*   s     r'   ÚforwardÚ'HunyuanImageRefinerCausalConv3d.forward>   s+   € ÜŸš˜m×-EÑ-EÈDÏMÉMÑZˆØ�y‰y˜Ó'Ð'r)   )r$   r   r!   )r   r   r   r   TÚ	replicate)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r    ÚtupleÚboolÚstrr   ÚtorchÚTensorr/   Ú__static_attributes__Ú__classcell__©r&   s   @r'   r   r   "   sä   ø† ð
 34Ø-.Ø./Ø/0ØØ#ñlàðlð ðlð ˜5  c¨3 Ñ/Ñ/ð	lð
 �e˜C  c˜MÑ*Ñ*ðlð �u˜S # s˜]Ñ+Ñ+ðlð ˜˜c 3¨˜mÑ,Ñ,ðlð ðlð ðlð 
÷lð lð6( U§\¡\ð (°e·l±l÷ (ò (r)   r   c                   óN   ^ • \ rS rSrSrSS\S\S\S\SS4
U 4S	 jjjrS
 rSr	U =r
$ )ÚHunyuanImageRefinerRMS_norméC   aŽ  
A custom RMS normalization layer.

Args:
    dim (int): The number of dimensions to normalize over.
    channel_first (bool, optional): Whether the input tensor has channels as the first dimension.
        Default is True.
    images (bool, optional): Whether the input represents image data. Default is True.
    bias (bool, optional): Whether to include a learnable bias term. Default is False.
ÚdimÚchannel_firstÚimagesr   r   Nc                 óR  >• [         TU ]  5         U(       d  SOSnU(       a  U/UQ7OU4nX l        US-  U l        [        R
                  " [        R                  " U5      5      U l        U(       a0  [        R
                  " [        R                  " U5      5      U l
        g SU l
        g )N)r   r   r   )r   r   g      à?g        )r   r   rB   Úscaler"   Ú	Parameterr9   ÚonesÚgammaÚzerosr   )r%   rA   rB   rC   r   Úbroadcastable_dimsÚshaper&   s          €r'   r   Ú$HunyuanImageRefinerRMS_norm.__init__O   sw   ø€ Ü‰ÑÔÞ.4™Y¸&ÐÞ.;�Ð*Ð)Ò*À#Àˆà*ÔØ˜#‘XˆŒ
Ü—\’\¤%§*¢*¨UÓ"3Ó4ˆŒ
Þ8<”B—L’L¤§¢¨UÓ!3Ó4ˆ�	À#ˆ�	r)   c                 ó–  ^• TR                   [        R                  [        R                  4;   =(       d    [	        U4S jS 5       5      n[
        R                  " U(       a  TR                  5       OTU R                  (       a  SOSS9R                  TR                   5      nX0R                  -  U R                  -  U R                  -   $ )Nc              3   óR   >#   • U  H  o[        TR                  5      ;   v •  M     g 7f©N)r8   Údtype)Ú.0ÚtÚxs     €r'   Ú	<genexpr>Ú6HunyuanImageRefinerRMS_norm.forward.<locals>.<genexpr>Z   s!   øé € ð Q
Ú'= !”�Q—W‘W“ÖÒ'=ùs   ƒ$')Úfloat4_Úfloat8_r   éÿÿÿÿ©rA   )rP   r9   Úfloat16Úbfloat16Úanyr-   Ú	normalizeÚfloatrB   ÚtorE   rH   r   )r%   rS   Úneeds_fp32_normalizeÚ
normalizeds    `  r'   r/   Ú#HunyuanImageRefinerRMS_norm.forwardY   s˜   ø€ Ø Ÿw™w¬5¯=©=¼%¿.¹.Ð*IÑI÷  
ÌSô Q
Ù'=óQ
ó N
Ðô —[’[Ö.B §¡¤ÈÐUY×Ug×UgÑPQÐmoÑq×tÑtØ�G‰Gó
ˆ
ð ŸJ™JÑ&¨¯©Ñ3°d·i±iÑ?Ð?r)   )r   rB   rH   rE   )TTF)r2   r3   r4   r5   Ú__doc__r    r7   r   r/   r;   r<   r=   s   @r'   r?   r?   C   sJ   ø† ñ	ñF˜Cð F°ð FÀTð FÐX\ð FÐim÷ Fð F÷@ð @r)   r?   c                   ój   ^ • \ rS rSrS\4U 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )ÚHunyuanImageRefinerAttnBlockéd   r   c                 ó  >• [         TU ]  5         Xl        [        USS9U l        [
        R                  " XSS9U l        [
        R                  " XSS9U l        [
        R                  " XSS9U l	        [
        R                  " XSS9U l
        g )NF©rC   r   ©r   )r   r   r   r?   Únormr"   r#   Úto_qÚto_kÚto_vÚproj_out)r%   r   r&   s     €r'   r   Ú%HunyuanImageRefinerAttnBlock.__init__e   sj   ø€ Ü‰ÑÔØ&Ôä/°ÀEÑJˆŒ	ä—I’I˜kÀAÑFˆŒ	Ü—I’I˜kÀAÑFˆŒ	Ü—I’I˜kÀAÑFˆŒ	ÜŸ	š	 +ÈÑJˆ�r)   rS   r   c                 ó  • UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nUR                  u  pgp‰n
UR                  XgX‰-  U
-  5      R                  SSS5      R                  S5      R                  5       nUR                  XgX‰-  U
-  5      R                  SSS5      R                  S5      R                  5       nUR                  XgX‰-  U
-  5      R                  SSS5      R                  S5      R                  5       n[        R                  R                  X4US S9nUR                  S5      R                  XhXšU5      R                  SSSSS5      nU R                  U5      nX-   $ )Nr   r   r   )Ú	attn_maské   r   )rj   rk   rl   rm   rK   ÚreshapeÚpermuteÚ	unsqueezeÚ
contiguousr"   Ú
functionalÚscaled_dot_product_attentionÚsqueezern   )r%   rS   ÚidentityÚqueryÚkeyÚvalueÚ
batch_sizeÚchannelsÚframesÚheightÚwidths              r'   r/   Ú$HunyuanImageRefinerAttnBlock.forwardp   sm  € Øˆà�I‰I�a‹Lˆà—	‘	˜!“ˆØ�i‰i˜‹lˆØ—	‘	˜!“ˆà6;·k±kÑ3ˆ
˜f¨eà—‘˜j°F±OÀeÑ4KÓL×TÑTÐUVÐXYÐ[\Ó]×gÑgÐhiÓj×uÑuÓwˆØ�k‰k˜*°±À%Ñ0GÓH×PÑPÐQRÐTUÐWXÓY×cÑcÐdeÓf×qÑqÓsˆØ—‘˜j°F±OÀeÑ4KÓL×TÑTÐUVÐXYÐ[\Ó]×gÑgÐhiÓj×uÑuÓwˆä�M‰M×6Ñ6°uÀ5ÐTXÐ6ÐYˆð �I‰I�a‹L× Ñ  °VÀHÓM×UÑUÐVWÐYZÐ\]Ð_`ÐbcÓdˆØ�M‰M˜!Óˆà‰|Ðr)   )r   rj   rn   rl   rk   rm   ©r2   r3   r4   r5   r    r   r9   r:   r/   r;   r<   r=   s   @r'   re   re   d   s1   ø† ð	K C÷ 	Kð˜Ÿ™ð ¨%¯,©,÷ ò r)   re   c                   ór   ^ • \ rS rSrS
S\S\S\4U 4S jjjr\SS j5       rS\	R                  4S jrS	rU =r$ )ÚHunyuanImageRefinerUpsampleDCAEé‰   r   r   Úadd_temporal_upsamplec                 ó€   >• [         TU ]  5         U(       a  SOSn[        XU-  SS9U l        X0l        XB-  U-  U l        g )Né   rr   r   ri   )r   r   r   r$   rˆ   Úrepeats)r%   r   r   rˆ   Úfactorr&   s        €r'   r   Ú(HunyuanImageRefinerUpsampleDCAE.__init__Š   sA   ø€ Ü‰ÑÔÞ3‘¸ˆÜ3°KÐPVÑAVÐdeÑfˆŒ	à%:Ô"ØÑ,°Ñ;ˆ�r)   c           
      óÄ   • U R                   u  pEpgnX-  U-  n	XY-  n
U R                  XAX#X¦Xx5      n U R                  SSSSSSSS5      n U R                  XJXa-  Xr-  Xƒ-  5      $ )	zä
Convert (b, r1*r2*r3*c, f, h, w) -> (b, c, r1*f, r2*h, r3*w)

Args:
    tensor: Input tensor of shape (b, r1*r2*r3*c, f, h, w)
    r1: temporal upsampling factor
    r2: height upsampling factor
    r3: width upsampling factor
r   rr   é   r   é   r   é   r   ©rK   Úviewrt   rs   )ÚtensorÚr1Úr2Úr3ÚbÚpacked_cÚfÚhÚwrŒ   Úcs              r'   Ú_dcae_upsample_rearrangeÚ8HunyuanImageRefinerUpsampleDCAE._dcae_upsample_rearrange’   sr   € ð  &Ÿ|™|Ñˆ�Q˜1Ø‘˜2‘ˆØÑˆà—‘˜Q B¨A°!Ó7ˆØ—‘  1 a¨¨A¨q°!°QÓ7ˆØ�~‰~˜a A¡F¨A©F°A±FÓ;Ð;r)   rS   c                 ó°  • U R                   (       a  SOSnU R                  U5      nU R                   (       a`  U R                  USSSS9nUS S 2S UR                  S   S-  24   nU R                  USSSS9nUR	                  U R
                  S-  SS9nX4-   $ U R                  X2SSS9nUR	                  U R
                  SS9nU R                  XBSSS9nX4-   $ )Nr   r   ©r•   r–   r—   ©r‹   rA   )rˆ   r$   rž   rK   Úrepeat_interleaver‹   )r%   rS   r•   r›   Úshortcuts        r'   r/   Ú'HunyuanImageRefinerUpsampleDCAE.forward¥   sö   € Ø×,×,‰Q°!ˆØ�I‰I�a‹LˆØ×%×%Ø×-Ñ-¨a°A¸!ÀÐ-ÐBˆAØ’!Ð&�q—w‘w˜q‘z Q‘Ð&Ð&Ñ'ˆAð ×4Ñ4°Q¸1ÀÀqÐ4ÐIˆHØ×1Ñ1¸$¿,¹,È!Ñ:KÐQRÐ1ÐSˆHð ‰|Ðð ×-Ñ-¨a¸1ÀÐ-ÐCˆAØ×*Ñ*°4·<±<ÀQÐ*ÐGˆHØ×4Ñ4°XÈÈqÐ4ÐQˆHØ‰|Ðr)   )rˆ   r$   r‹   ©T©r   r   r   )r2   r3   r4   r5   r    r7   r   Ústaticmethodrž   r9   r:   r/   r;   r<   r=   s   @r'   r†   r†   ‰   sL   ø† ñ< Cð <°sð <ÐSW÷ <ð <ð ó<ó ð<ð$˜Ÿ™÷ ò r)   r†   c                   ór   ^ • \ rS rSrS
S\S\S\4U 4S jjjr\SS j5       rS\	R                  4S jrS	rU =r$ )Ú!HunyuanImageRefinerDownsampleDCAEé·   r   r   Úadd_temporal_downsamplec                 ó”   >• [         TU ]  5         U(       a  SOSnX$-  S:X  d   e[        XU-  SS9U l        X0l        XA-  U-  U l        g )NrŠ   rr   r   r   ri   )r   r   r   r$   r¬   Ú
group_size)r%   r   r   r¬   rŒ   r&   s        €r'   r   Ú*HunyuanImageRefinerDownsampleDCAE.__init__¸   sR   ø€ Ü‰ÑÔÞ5‘¸9ˆØÑ$¨Ó)Ð)Ð)ä3°KÐQWÑAWÐefÑgˆŒ	à'>Ô$Ø Ñ.°,Ñ>ˆ�r)   c           
      óÈ   • U R                   u  pEpgnXa-  Xr-  Xƒ-  pºn	U R                  XEX‘X¢X³5      n U R                  SSSSSSSS5      n U R                  XAU-  U-  U-  XšU5      $ )	z‹
Convert (b, c, r1*f, r2*h, r3*w) -> (b, r1*r2*r3*c, f, h, w)

This packs spatial/temporal dimensions into channels (opposite of upsample)
r   r   r�   r‘   r   r   rr   r�   r’   )r”   r•   r–   r—   r˜   r�   Úpacked_fÚpacked_hÚpacked_wrš   r›   rœ   s               r'   Ú_dcae_downsample_rearrangeÚ<HunyuanImageRefinerDownsampleDCAE._dcae_downsample_rearrangeÂ   su   € ð .4¯\©\Ñ*ˆˆh (Ø‘. (¡.°(±.ˆaˆà—‘˜Q 1¨!°Ó7ˆØ—‘  1 a¨¨A¨q°!°QÓ7ˆØ�~‰~˜a b¡¨2¡°Ñ!1°1¸Ó;Ð;r)   rS   c                 ó^  • U R                   (       a  SOSnU R                  U5      nU R                   (       a‰  U R                  USSSS9n[        R                  " X3/SS9nU R                  USSSS9nUR
                  u  pVpxn	UR                  XSR
                  S   U R                  S-  XxU	5      R                  SS9nX4-   $ U R                  X2SSS9nU R                  XSSS9nUR
                  u  pVpxn	UR                  XSR
                  S   U R                  XxU	5      R                  SS9nX4-   $ )Nr   r   r¡   rY   )	r¬   r$   r´   r9   ÚcatrK   r“   r®   Úmean)
r%   rS   r•   r›   r¤   ÚBÚCÚTÚHÚWs
             r'   r/   Ú)HunyuanImageRefinerDownsampleDCAE.forwardÐ   s1  € Ø×.×.‰Q°AˆØ�I‰I�a‹LˆØ×'×'à×/Ñ/°°a¸AÀ!Ð/ÐDˆAÜ—	’	˜1˜& aÑ(ˆAð ×6Ñ6°q¸QÀ1ÈÐ6ÐKˆHØ$ŸN™N‰MˆA�!˜Ø—}‘} Q¯©°©
°D·O±OÀqÑ4HÈ!ÐPQÓR×WÑWÐ\]ÐWÐ^ˆHð ‰|Ðð ×/Ñ/°¸QÀ1Ð/ÐEˆAà×6Ñ6°qÀAÈ!Ð6ÐLˆHØ$ŸN™N‰MˆA�!˜Ø—}‘} Q¯©°©
°D·O±OÀQÈ1ÓM×RÑRÐWXÐRÐYˆHà‰|Ðr)   )r¬   r$   r®   r¦   r§   )r2   r3   r4   r5   r    r7   r   r¨   r´   r9   r:   r/   r;   r<   r=   s   @r'   rª   rª   ·   sL   ø† ñ? Cð ?°sð ?ÐUY÷ ?ð ?ð ó<ó ð<ð˜Ÿ™÷ ò 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$ )ÚHunyuanImageRefinerResnetBlockéç   Nr   r   Únon_linearityr   c                 ó"  >• [         TU ]  5         U=(       d    Un[        U5      U l        [	        USS9U l        [        XSS9U l        [	        USS9U l        [        X"SS9U l	        S U l
        X:w  a  [        R                  " XSSSS9U l
        g g )NFrh   r   ri   r   r   )r   r   r   )r   r   r	   Únonlinearityr?   Únorm1r   Úconv1Únorm2Úconv2Úconv_shortcutr"   r#   )r%   r   r   rÂ   r&   s       €r'   r   Ú'HunyuanImageRefinerResnetBlock.__init__è   sŽ   ø€ ô 	‰ÑÔØ#×2 {ˆä*¨=Ó9ˆÔä0°ÀUÑKˆŒ
Ü4°[Ð\]Ñ^ˆŒ
ä0°ÀeÑLˆŒ
Ü4°\Ð]^Ñ_ˆŒ
à!ˆÔØÓ&Ü!#§¢¨;ÐRSÐ\]ÐghÑ!iˆDÕð 'r)   r*   c                 ó  • UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R
                  b  U R                  U5      nX-   $ rO   )rÅ   rÄ   rÆ   rÇ   rÈ   rÉ   )r%   r*   Úresiduals      r'   r/   Ú&HunyuanImageRefinerResnetBlock.forwardý   s„   € Ø ˆàŸ
™
 =Ó1ˆØ×)Ñ)¨-Ó8ˆØŸ
™
 =Ó1ˆàŸ
™
 =Ó1ˆØ×)Ñ)¨-Ó8ˆØŸ
™
 =Ó1ˆà×ÑÑ)Ø×)Ñ)¨(Ó3ˆHàÑ'Ð'r)   )rÆ   rÈ   rÉ   rÄ   rÅ   rÇ   )NÚswish)r2   r3   r4   r5   r    r8   r   r9   r:   r/   r;   r<   r=   s   @r'   rÀ   rÀ   ç   se   ø† ð $(Ø$ñ	jàðjð ˜D‘jðjð ð	jð
 
÷jð jð*( U§\¡\ð (°e·l±l÷ (ò (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$ )ÚHunyuanImageRefinerMidBlocki  r   Ú
num_layersÚadd_attentionr   Nc                 ó’  >• [         TU ]  5         X0l        [        UUS9/n/ n[	        U5       HY  nU R                  (       a  UR                  [        U5      5        OUR                  S 5        UR                  [        UUS95        M[     [        R                  " U5      U l	        [        R                  " U5      U l
        SU l        g )N©r   r   F)r   r   rÒ   rÀ   ÚrangeÚappendre   r"   Ú
ModuleListÚ
attentionsÚresnetsÚgradient_checkpointing)r%   r   rÑ   rÒ   rÙ   rØ   Ú_r&   s          €r'   r   Ú$HunyuanImageRefinerMidBlock.__init__  s²   ø€ ô 	‰ÑÔØ*Ôô +Ø'Ø(ñð
ˆð ˆ
ä�zÖ"ˆAØ×!×!Ø×!Ñ!Ô">¸{Ó"KÕLà×!Ñ! $Ô'à�N‰NÜ.Ø +Ø!,ñöñ #ô Ÿ-š-¨
Ó3ˆŒÜ—}’} WÓ-ˆŒà&+ˆÕ#r)   r*   c                 ó®   • U R                   S   " U5      n[        U R                  U R                   SS  5       H  u  p#Ub  U" U5      nU" U5      nM     U$ )Nr   r   )rÙ   ÚziprØ   )r%   r*   ÚattnÚresnets       r'   r/   Ú#HunyuanImageRefinerMidBlock.forward3  sY   € ØŸ™ Qš¨Ó6ˆä §¡°·±¸a¸bÐ1AÖB‰LˆDØÑÙ $ ]Ó 3�Ù" =Ó1ŠMñ Cð
 Ðr)   )rÒ   rØ   rÚ   rÙ   )r   T©r2   r3   r4   r5   r    r7   r   r9   r:   r/   r;   r<   r=   s   @r'   rÐ   rÐ     s\   ø† ð Ø"ñ	",àð",ð ð",ð ð	",ð
 
÷",ð ",ðH U§\¡\ð °e·l±l÷ ò 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
\R                  S\R                  4S jrSr	U =r
$ )ÚHunyuanImageRefinerDownBlock3Di>  Nr   r   rÑ   Údownsample_out_channelsr¬   r   c                 ó4  >• [         TU ]  5         / n[        U5       H&  nUS:X  a  UOUnUR                  [	        UUS95        M(     [
        R                  " U5      U l        Ub&  [
        R                  " [        UUUS9/5      U l	        OS U l	        SU l
        g )Nr   rÔ   )r   r¬   F)r   r   rÕ   rÖ   rÀ   r"   r×   rÙ   rª   ÚdownsamplersrÚ   )	r%   r   r   rÑ   rå   r¬   rÙ   Úir&   s	           €r'   r   Ú'HunyuanImageRefinerDownBlock3D.__init__?  sœ   ø€ ô 	‰ÑÔØˆä�zÖ"ˆAØ)*¨a«™+°\ˆKØ�N‰NÜ.Ø +Ø!-ñöñ #ô —}’} WÓ-ˆŒà"Ñ.Ü "§¢ä5Ø$Ø%<Ø0Gñðó!ˆDÕð !%ˆDÔà&+ˆÕ#r)   r*   c                 óŒ   • U R                    H  nU" U5      nM     U R                  b  U R                   H  nU" U5      nM     U$ rO   )rÙ   rç   )r%   r*   rà   Údownsamplers       r'   r/   Ú&HunyuanImageRefinerDownBlock3D.forwardd  sJ   € Ø—l”lˆFÙ" =Ó1ŠMñ #ð ×ÑÑ(Ø#×0Ô0�Ù +¨MÓ :’ñ  1ð Ðr)   )rç   rÚ   rÙ   ©r   NTr„   r=   s   @r'   rä   rä   >  sw   ø† ð
 Ø.2Ø'+ñ#,àð#,ð ð#,ð ð	#,ð
 "% t¡ð#,ð "%ð#,ð 
÷#,ð #,ðJ U§\¡\ð °e·l±l÷ ò 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
\R                  S\R                  4S jr	Sr
U =r$ )ÚHunyuanImageRefinerUpBlock3Dio  Nr   r   rÑ   Úupsample_out_channelsrˆ   r   c                 ó4  >• [         T	U ]  5         / n[        U5       H&  nUS:X  a  UOUnUR                  [	        UUS95        M(     [
        R                  " U5      U l        Ub&  [
        R                  " [        UUUS9/5      U l	        OS U l	        SU l
        g )Nr   rÔ   )r   rˆ   F)r   r   rÕ   rÖ   rÀ   r"   r×   rÙ   r†   Ú
upsamplersrÚ   )
r%   r   r   rÑ   rð   rˆ   rÙ   rè   Úinput_channelsr&   s
            €r'   r   Ú%HunyuanImageRefinerUpBlock3D.__init__p  sš   ø€ ô 	‰ÑÔØˆä�zÖ"ˆAØ,-°«F™[¸ˆNà�N‰NÜ.Ø .Ø!-ñöñ #ô —}’} WÓ-ˆŒà Ñ,Ü Ÿmšmä3Ø$Ø%:Ø.CñðóˆD�Oð #ˆDŒOà&+ˆÕ#r)   r*   c                 ó,  • [         R                  " 5       (       a6  U R                  (       a%  U R                   H  nU R	                  X!5      nM     OU R                   H  nU" U5      nM     U R
                  b  U R
                   H  nU" U5      nM     U$ rO   )r9   Úis_grad_enabledrÚ   rÙ   Ú_gradient_checkpointing_funcrò   )r%   r*   rà   Ú	upsamplers       r'   r/   Ú$HunyuanImageRefinerUpBlock3D.forward–  s}   € Ü× Ò ×"Ñ" t×'B×'BØŸ,œ,�Ø $× AÑ AÀ&Ó X’ò 'ð Ÿ,œ,�Ù & }Ó 5’ñ 'ð �?‰?Ñ&Ø!Ÿ_œ_�	Ù )¨-Ó 8’ñ -ð Ðr)   )rÚ   rÙ   rò   rí   râ   r=   s   @r'   rï   rï   o  sw   ø† ð
 Ø,0Ø&*ñ$,àð$,ð ð$,ð ð	$,ð
  # T™zð$,ð  $ð$,ð 
÷$,ð $,ðL U§\¡\ð °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\	R                  4S jrSrU =r$ )ÚHunyuanImageRefinerEncoder3Di¦  z)
3D vae encoder for HunyuanImageRefiner.
r   r   Úblock_out_channels.Úlayers_per_blockÚtemporal_compression_ratioÚspatial_compression_ratioÚdownsample_match_channelr   Nc           	      óÐ  >• [         TU ]  5         Xl        X l        US   U R                  -  U l        [        XS   SS9U l        S U l        [        R                  " / 5      U l
        US   n[        [        U5      5       HŒ  n	U	[        R                  " U5      :  n
X9   nU
(       d  [        UUUS SS9nUnO:U	[        R                  " Xe-  5      :¬  nU(       a  X9S-      OUn[        UUUUUS9nUnU R                  R!                  U5        MŽ     [#        US   S9U l        [%        US   SS	9U l        [        R(                  " 5       U l        [        US   USS9U l        SU l        g )
NrX   r   r   ri   F)rÑ   r   r   rå   r¬   r   ©r   rh   )r   r   r   r   r®   r   Úconv_inÚ	mid_blockr"   r×   Údown_blocksrÕ   ÚlenÚnpÚlog2rä   rÖ   rÐ   r?   Únorm_outÚSiLUÚconv_actÚconv_outrÚ   )r%   r   r   rü   rý   rþ   rÿ   r   Úinput_channelrè   Úadd_spatial_downsampleÚoutput_channelÚ
down_blockr¬   rå   r&   s                  €r'   r   Ú%HunyuanImageRefinerEncoder3D.__init__«  su  ø€ ô 	‰ÑÔà&ÔØ(ÔØ,¨RÑ0°D×4EÑ4EÑEˆŒä6°{ÐWXÑDYÐghÑiˆŒØˆŒÜŸ=š=¨Ó,ˆÔà*¨1Ñ-ˆÜ”sÐ-Ó.Ö/ˆAØ%&¬¯ªÐ1JÓ)KÑ%KÐ"Ø/Ñ2ˆNÞ)Ü;Ø/Ø -Ø!/Ø,0Ø,1ñ�
ð !/‘à*+¬r¯wªwÐ7PÑ7nÓ/oÑ*oÐ'ÞG_Ð*<À¹UÒ*CÐesÐ'Ü;Ø/Ø -Ø!/Ø,CØ,Cñ�
ð !8�à×Ñ×#Ñ# JÖ/ñ1 0ô4 5ÐASÐTVÑAWÑXˆŒä3Ð4FÀrÑ4JÐSXÑYˆŒÜŸš›	ˆŒÜ7Ð8JÈ2Ñ8NÐP\ÐjkÑlˆŒà&+ˆÕ#r)   r*   c                 ó>  • 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  p4pVnUR                  USU R                  XVU5      R                  SS9nU R                  U5      nU R                  U5      nU R                  U5      nX-  nU$ )NrX   r   rY   )r  r9   rö   rÚ   r  r÷   r  rK   r“   r®   r¸   r	  r  r  )	r%   r*   r  r~   rÛ   Úframer�   r‚   Ú	short_cuts	            r'   r/   Ú$HunyuanImageRefinerEncoder3D.forwardâ  s  € ØŸ™ ]Ó3ˆä× Ò ×"Ñ" t×'B×'BØ"×.Ô.�
Ø $× AÑ AÀ*Ó \’ñ /ð !×=Ñ=¸d¿n¹nÈmÓ\‰Mà"×.Ô.�
Ù *¨=Ó 9’ñ /ð !ŸN™N¨=Ó9ˆMð /<×.AÑ.AÑ+ˆ
�u eØ!×&Ñ& z°2°t·±ÈÐW\Ó]×bÑbÐghÐbÐiˆ	àŸ™ mÓ4ˆØŸ™ mÓ4ˆØŸ™ mÓ4ˆàÑ"ˆàÐr)   )
r  r  r  r  rÚ   r®   r   r  r	  r   )r   é@   ©é€   é   é   é   r  r   rr   é   T©r2   r3   r4   r5   rc   r    r6   r7   r   r9   r:   r/   r;   r<   r=   s   @r'   rû   rû   ¦  s    ø† ñð ØØ.IØ !Ø*+Ø)+Ø)-ñ5,àð5,ð ð5,ð " # s (™Oð	5,ð
 ð5,ð %(ð5,ð $'ð5,ð #'ð5,ð 
÷5,ð 5,ðn U§\¡\ð °e·l±l÷ ò r)   rû   c                   ó¢   ^ • \ rS rSrSr       SS\S\S\\S4   S\S\S	\S
\4U 4S jjjrS\	R                  S\	R                  4S jrSrU =r$ )ÚHunyuanImageRefinerDecoder3Diý  zJ
Causal decoder for 3D video-like data used for HunyuanImage-2.1 Refiner.
r   r   rü   .rý   rÿ   rþ   Úupsample_match_channelc           	      ó"  >• [         TU ]  5         X@l        Xl        X l        US   U R                  -  U l        [        U R                  US   SS9U l        [        R                  " / 5      U l
        [        US   S9U l        US   n[        [        U5      5       H«  n	X9   n
U	[        R                   " U5      :  nU	[        R                   " U5      :  nU(       d  U(       a-  U(       a  X9S-      OU
n[#        U R                  S-   UU
UUS9nUnO[#        U R                  S-   UU
S SS9nU
nU R                  R%                  U5        M­     ['        US   SS	9U l        [        R*                  " 5       U l        [        US   USS9U l        SU l        g )
Nr   r   ri   r  r   )rÑ   r   r   rð   rˆ   FrX   rh   )r   r   rý   r   r   Úrepeatr   r  r"   r×   Ú	up_blocksrÐ   r  rÕ   r  r  r  rï   rÖ   r?   r	  r
  r  r  rÚ   )r%   r   r   rü   rý   rÿ   rþ   r   r  rè   r  Úadd_spatial_upsamplerˆ   rð   Úup_blockr&   s                  €r'   r   Ú%HunyuanImageRefinerDecoder3D.__init__  s”  ø€ ô 	‰ÑÔØ 0ÔØ&ÔØ(ÔØ(¨Ñ+¨t×/?Ñ/?Ñ?ˆŒä6°t×7GÑ7GÐI[Ð\]ÑI^ÐlmÑnˆŒÜŸš rÓ*ˆŒô 5ÐASÐTUÑAVÑWˆŒð +¨1Ñ-ˆÜ”sÐ-Ó.Ö/ˆAØ/Ñ2ˆNà#$¤r§w¢wÐ/HÓ'IÑ#IÐ Ø$%¬¯ªÐ0JÓ(KÑ$KÐ!Þ#Ö'<ÞE[Ð(:¸q¹5Ò(AÐaoÐ%Ü7Ø#×4Ñ4°qÑ8Ø -Ø!/Ø*?Ø*?ñ�ð !6‘ä7Ø#×4Ñ4°qÑ8Ø -Ø!/Ø*.Ø*/ñ�ð !/�à�N‰N×!Ñ! (Ö+ñ3 0ô8 4Ð4FÀrÑ4JÐSXÑYˆŒÜŸš›	ˆŒÜ7Ð8JÈ2Ñ8NÐP\ÐjkÑlˆŒà&+ˆÕ#r)   r*   r   c                 óô  • U R                  U5      UR                  U R                  SS9-   n[        R                  " 5       (       aR  U R
                  (       aA  U R                  U R                  U5      nU R                   H  nU R                  X!5      nM     O,U R                  U5      nU R                   H  nU" U5      nM     U R                  U5      nU R                  U5      nU R                  U5      nU$ )Nr   r¢   )r  r£   r"  r9   rö   rÚ   r÷   r  r#  r	  r  r  )r%   r*   r%  s      r'   r/   Ú$HunyuanImageRefinerDecoder3D.forward<  sÒ   € ØŸ™ ]Ó3°m×6UÑ6UÐ^b×^iÑ^iÐopÐ6UÐ6qÑqˆä× Ò ×"Ñ" t×'B×'BØ ×=Ñ=¸d¿n¹nÈmÓ\ˆMà ŸNœN�Ø $× AÑ AÀ(Ó Z’ò +ð !ŸN™N¨=Ó9ˆMà ŸNœN�Ù (¨Ó 7’ñ +ð Ÿ™ mÓ4ˆØŸ™ mÓ4ˆØŸ™ mÓ4ˆØÐr)   )r  r  r  rÚ   r   rý   r  r	  r   r"  r#  )é    r   )r  r  r  r  r  r   r  rr   Tr  r=   s   @r'   r  r  ý  s–   ø† ñð ØØ.IØ !Ø)+Ø*+Ø'+ñ8,àð8,ð ð8,ð " # s (™Oð	8,ð
 ð8,ð $'ð8,ð %(ð8,ð !%÷8,ð 8,ðt U§\¡\ð °e·l±l÷ ò r)   r  c                   óÌ  ^ • \ rS rSrSrSr\          S,S\S\S\S\\S4   S	\S
\S\S\	S\	S\
SS4U 4S jjj5       r     S-S\S-  S\S-  S\
S-  S\
S-  S\
S-  SS4S jjrS\R                  S\R                  4S jr\ S.S\R                  S\	S\\\   -  4S jj5       rS\R                  S\R                  4S jr\S.S\R                  S\	S\\R                  -  4S jj5       rS\R                  S \R                  S!\S\R                  4S" jrS\R                  S \R                  S!\S\R                  4S# jrS\R                  S \R                  S!\S\R                  4S$ jrS\R                  S\R                  4S% jrS\R                  S\R                  4S& jr   S/S'\R                  S(\	S\	S)\R8                  S-  S\\R                  -  4
S* jjrS+rU =r$ )0Ú AutoencoderKLHunyuanImageRefineriQ  a1  
A VAE model with KL loss for encoding videos into latents and decoding latent representations into videos. Used for
HunyuanImage-2.1 Refiner.

This model inherits from [`ModelMixin`]. Check the superclass documentation for it's generic methods implemented
for all models (such as downloading or saving).
Tr   r   Úlatent_channelsrü   .rý   rÿ   rþ   r   r   Úscaling_factorr   Nc           
      ó  >• [         TU ]  5         [        UUS-  UUUUUS9U l        [	        UU[        [        U5      5      UUUU	S9U l        X`l        Xpl	        SU l
        SU l        SU l        SU l        SU l        SU l        SU l        g )Nr   )r   r   rü   rý   rþ   rÿ   r   )r   r   rü   rý   rþ   rÿ   r   Fr  éÀ   g      Ð?)r   r   rû   Úencoderr  ÚlistÚreversedÚdecoderrÿ   rþ   Úuse_slicingÚ
use_tilingÚtile_sample_min_heightÚtile_sample_min_widthÚtile_sample_stride_heightÚtile_sample_stride_widthÚtile_overlap_factor)r%   r   r   r,  rü   rý   rÿ   rþ   r   r   r-  r&   s              €r'   r   Ú)AutoencoderKLHunyuanImageRefiner.__init__\  s²   ø€ ô 	‰ÑÔä3Ø#Ø(¨1Ñ,Ø1Ø-Ø'AØ&?Ø%=ñ
ˆŒô 4Ø'Ø%Ü#¤HÐ-?Ó$@ÓAØ-Ø'AØ&?Ø#9ñ
ˆŒð *CÔ&Ø*DÔ'ð !ˆÔð
  ˆŒð '*ˆÔ#Ø%(ˆÔ"ð *-ˆÔ&Ø(+ˆÔ%à#'ˆÕ r)   r6  r7  r8  r9  r:  c                 ó  • 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        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)r5  r6  r7  r8  r9  r:  )r%   r6  r7  r8  r9  r:  s         r'   Úenable_tilingÚ.AutoencoderKLHunyuanImageRefiner.enable_tiling–  sj   € ð2 ˆŒØ&<×&[À×@[Ñ@[ˆÔ#Ø%:×%X¸d×>XÑ>XˆÔ"Ø)B×)dÀd×FdÑFdˆÔ&Ø(@×(aÀD×DaÑDaˆÔ%Ø#6×#R¸$×:RÑ:RˆÕ r)   rS   c                 óÊ   • UR                   u      p#nU R                  (       a/  X@R                  :”  d  X0R                  :”  a  U R	                  U5      $ U R                  U5      nU$ rO   )rK   r5  r7  r6  Útiled_encoder0  )r%   rS   rÛ   r�   r‚   s        r'   Ú_encodeÚ(AutoencoderKLHunyuanImageRefiner._encode¶  sT   € Ø!"§¡Ñˆˆ1ˆa˜à�?�? ×(BÑ(BÓ BÀf×OjÑOjÓFjØ×$Ñ$ QÓ'Ð'à�L‰L˜‹OˆØˆr)   Úreturn_dictc                 ó>  • U R                   (       aY  UR                  S   S:”  aF  UR                  S5       Vs/ s H  o0R                  U5      PM     nn[        R
                  " U5      nOU R                  U5      n[        U5      nU(       d  U4$ [        US9$ s  snf )aÈ  
Encode a batch of images into latents.

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

Returns:
        The latent representations of the encoded videos. If `return_dict` is True, a
        [`~models.autoencoder_kl.AutoencoderKLOutput`] is returned, otherwise a plain `tuple` is returned.
r   r   )Úlatent_dist)r4  rK   ÚsplitrA  r9   r·   r   r
   )r%   rS   rC  Úx_sliceÚencoded_slicesr›   Ú	posteriors          r'   ÚencodeÚ'AutoencoderKLHunyuanImageRefiner.encode¿  s   € ð  ×× §¡¨¡
¨Q£ØCDÇ7Á7È1Ä:ÓNÂ:¸Ÿl™l¨7Ö3Á:ˆNÐNÜ—	’	˜.Ó)‰Aà—‘˜Q“ˆAä0°Ó3ˆ	æØ�<ÐÜ"¨yÑ9Ð9ùò Os   ¸BÚzc                 ó  • UR                   u      p#nU R                  U R                  -  nU R                  U R                  -  nU R                  (       a  XF:”  d  X5:”  a  U R                  U5      $ U R                  U5      nU$ rO   )rK   r6  rÿ   r7  r5  Útiled_decoder3  )r%   rL  rÛ   r�   r‚   Útile_latent_min_heightÚtile_latent_min_widthÚdecs           r'   Ú_decodeÚ(AutoencoderKLHunyuanImageRefiner._decodeÛ  sv   € Ø!"§¡Ñˆˆ1ˆa˜Ø!%×!<Ñ!<À×@^Ñ@^Ñ!^ÐØ $× :Ñ :¸d×>\Ñ>\Ñ \Ðà�?�? Ó =ÀÓA`Ø×$Ñ$ QÓ'Ð'à�l‰l˜1‹oˆàˆ
r)   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 )a›  
Decode a batch of images.

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

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   )Úsample)r4  rK   rF  rR  r9   r·   r   )r%   rL  rC  Úz_sliceÚdecoded_slicesÚdecodeds         r'   ÚdecodeÚ'AutoencoderKLHunyuanImageRefiner.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Úar˜   Úblend_extentc           	      ó  • [        UR                  S   UR                  S   U5      n[        U5       HI  nUS S 2S S 2S S 2U* U-   S S 24   SXC-  -
  -  US S 2S S 2S S 2US S 24   XC-  -  -   US S 2S S 2S S 2US S 24'   MK     U$ )Néþÿÿÿr   ©ÚminrK   rÕ   )r%   r[  r˜   r\  Úys        r'   Úblend_vÚ(AutoencoderKLHunyuanImageRefiner.blend_v  s—   € Ü˜1Ÿ7™7 2™;¨¯©°©°\ÓBˆÜ�|Ö$ˆAØ ¢¢A¢q¨<¨-¸!Ñ*;ºQÐ!>Ñ?À1ÀqÑGWÑCWÑXÐ[\Ò]^Ò`aÒcdÐfgÒijÐ]jÑ[kØÑ ñ\ñ  ˆAŠa’’A�qš!ˆmÓñ %ð ˆr)   c                 ó  • [        UR                  S   UR                  S   U5      n[        U5       HI  nUS S 2S S 2S S 2S S 2U* U-   4   SXC-  -
  -  US S 2S S 2S S 2S S 2U4   XC-  -  -   US S 2S S 2S S 2S S 2U4'   MK     U$ )NrX   r   r_  ©r%   r[  r˜   r\  rS   s        r'   Úblend_hÚ(AutoencoderKLHunyuanImageRefiner.blend_h	  s—   € Ü˜1Ÿ7™7 2™;¨¯©°©°\ÓBˆÜ�|Ö$ˆAØ ¢¢A¢qª!¨l¨]¸QÑ->Ð!>Ñ?À1ÀqÑGWÑCWÑXÐ[\Ò]^Ò`aÒcdÒfgÐijÐ]jÑ[kØÑ ñ\ñ  ˆAŠa’’A’q˜!ˆmÓñ %ð ˆr)   c           	      ó  • [        UR                  S   UR                  S   U5      n[        U5       HI  nUS S 2S S 2U* U-   S S 2S S 24   SXC-  -
  -  US S 2S S 2US S 2S S 24   XC-  -  -   US S 2S S 2US S 2S S 24'   MK     U$ )Néýÿÿÿr   r_  re  s        r'   Úblend_tÚ(AutoencoderKLHunyuanImageRefiner.blend_t  s—   € Ü˜1Ÿ7™7 2™;¨¯©°©°\ÓBˆÜ�|Ö$ˆAØ ¢¢A¨ }°qÑ'8º!ºQÐ!>Ñ?À1ÀqÑGWÑCWÑXÐ[\Ò]^Ò`aÐcdÒfgÒijÐ]jÑ[kØÑ ñ\ñ  ˆAŠa’�A’qš!ˆmÓñ %ð ˆr)   c                 ó
  • UR                   u      p#nU R                  U R                  -  nU R                  U R                  -  n[	        USU R
                  -
  -  5      n[	        USU R
                  -
  -  5      n[	        XPR
                  -  5      n	[	        X`R
                  -  5      n
XY-
  nXj-
  n/ n[        SX75       Hx  n/ n[        SXH5       HR  nUSS2SS2SS2XîU R                  -   2UUU R                  -   24   nU R                  U5      nUR                  U5        MT     UR                  U5        Mz     / n[        U5       H£  u  pï/ n[        U5       Hi  u  nnUS:”  a  U R                  XÞS-
     U   UU	5      nUS:”  a  U R                  UUS-
     UU
5      nUR                  USS2SS2SS2SU2SU24   5        Mk     UR                  [        R                  " USS95        M¥     [        R                  " USS9nU$ )z½Encode a batch of images using a tiled encoder.

Args:
    x (`torch.Tensor`): Input batch of videos.

Returns:
    `torch.Tensor`:
        The latent representation of the encoded videos.
r   r   NrX   rY   r^  )rK   r6  rÿ   r7  r    r:  rÕ   r0  rÖ   Ú	enumeraterb  rf  r9   r·   )r%   rS   rÛ   r�   r‚   rO  rP  Úoverlap_heightÚoverlap_widthÚblend_heightÚblend_widthÚrow_limit_heightÚrow_limit_widthÚrowsrè   ÚrowÚjÚtileÚresult_rowsÚ
result_rowÚmomentss                        r'   r@  Ú-AutoencoderKLHunyuanImageRefiner.tiled_encode  s  € ð "#§¡Ñˆˆ1ˆa˜à!%×!<Ñ!<À×@^Ñ@^Ñ!^ÐØ $× :Ñ :¸d×>\Ñ>\Ñ \ÐÜÐ3°q¸4×;SÑ;SÑ7SÑTÓUˆÜÐ1°Q¸×9QÑ9QÑ5QÑRÓSˆÜÐ1×4LÑ4LÑLÓMˆÜÐ/×2JÑ2JÑJÓKˆØ1Ñ@ÐØ/Ñ=ˆàˆÜ�q˜&Ö1ˆAØˆCÜ˜1˜eÖ3�ØÚÚÚØ˜D×7Ñ7Ñ7Ð7Ø˜˜D×6Ñ6Ñ6Ð6ð	8ñ�ð —|‘| DÓ)�Ø—
‘
˜4Ö ñ 4ð �K‰K˜Öñ 2ð ˆÜ –o‰FˆAØˆJÜ$ Sž>‘��4Ø�q“5ØŸ<™<¨°©U©°A©¸¸lÓK�DØ�q“5ØŸ<™<¨¨A°©E©
°D¸+ÓF�DØ×!Ñ! $¢qª!ªQÐ0AÐ1AÐ0AÐCSÀOÐCSÐ'SÑ"TÖUñ *ð ×ÑœuŸyšy¨¸Ñ<Ö=ñ &ô —)’)˜K¨RÑ0ˆàˆr)   c                 óâ  • UR                   u      p#nU R                  U R                  -  nU R                  U R                  -  n[	        USU R
                  -
  -  5      n[	        USU R
                  -
  -  5      n[	        XPR
                  -  5      n	[	        X`R
                  -  5      n
XY-
  nXj-
  n/ n[        SX75       Hd  n/ n[        SXH5       H>  nUSS2SS2SS2XîU-   2UUU-   24   nU R                  U5      nUR                  U5        M@     UR                  U5        Mf     / n[        U5       H£  u  pï/ n[        U5       Hi  u  nnUS:”  a  U R                  XÞS-
     U   UU	5      nUS:”  a  U R                  UUS-
     UU
5      nUR                  USS2SS2SS2SU2SU24   5        Mk     UR                  [        R                  " USS95        M¥     [        R                  " USS9nU$ )a¸  
Decode a batch of images using a tiled decoder.

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

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   NrX   rY   r^  )rK   r6  rÿ   r7  r    r:  rÕ   r3  rÖ   rm  rb  rf  r9   r·   )r%   rL  rÛ   r�   r‚   rO  rP  rn  ro  rp  rq  rr  rs  rt  rè   ru  rv  rw  rX  rx  ry  rQ  s                         r'   rN  Ú-AutoencoderKLHunyuanImageRefiner.tiled_decodeK  s
  € ð "#§¡Ñˆˆ1ˆa˜Ø!%×!<Ñ!<À×@^Ñ@^Ñ!^ÐØ $× :Ñ :¸d×>\Ñ>\Ñ \ÐÜÐ3°q¸4×;SÑ;SÑ7SÑTÓUˆÜÐ1°Q¸×9QÑ9QÑ5QÑRÓSˆÜÐ1×4LÑ4LÑLÓMˆÜÐ/×2JÑ2JÑJÓKˆØ1Ñ@ÐØ/Ñ=ˆàˆÜ�q˜&Ö1ˆAØˆCÜ˜1˜eÖ3�ØÚÚÚØÐ2Ñ2Ð2Ø˜Ð1Ñ1Ð1ð	3ñ�ð Ÿ,™, tÓ,�Ø—
‘
˜7Ö#ñ 4ð �K‰K˜Öñ 2ð ˆÜ –o‰FˆAØˆJÜ$ Sž>‘��4Ø�q“5ØŸ<™<¨°©U©°A©¸¸lÓK�DØ�q“5ØŸ<™<¨¨A°©E©
°D¸+ÓF�DØ×!Ñ! $¢qª!ªQÐ0AÐ1AÐ0AÐCSÀOÐCSÐ'SÑ"TÖUñ *ð ×ÑœuŸyšy¨¸Ñ<Ö=ñ &ô �iŠi˜¨Ñ,ˆàˆ
r)   rU  Ú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	                  XsS9nU$ )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  )rC  )rJ  rE  rU  r,   rY  )	r%   rU  r~  rC  r  rS   rI  rL  rQ  s	            r'   r/   Ú(AutoencoderKLHunyuanImageRefiner.forward�  sS   € ð. ˆØ—K‘K “N×.Ñ.ˆ	ÞØ× Ñ ¨9Ð Ð5‰Aà—‘Ó ˆAØ�k‰k˜!ˆkÐ5ˆØˆ
r)   )r3  r0  rÿ   rþ   r:  r6  r7  r8  r9  r4  r5  )
r   r   r)  r  r   r  rr   TTgfk}‘Ð–ð?)NNNNNr¦   )FTN) r2   r3   r4   r5   rc   Ú _supports_gradient_checkpointingr   r    r6   r7   r^   r   r=  r9   r:   rA  r   r
   r   rJ  rR  r   rY  rb  rf  rj  r@  rN  Ú	Generatorr/   r;   r<   r=   s   @r'   r+  r+  Q  sê  ø† ñð (,Ð$àð ØØ!Ø.IØ !Ø)+Ø*+Ø)-Ø'+Ø 'ñ7(àð7(ð ð7(ð ð	7(ð
 " # s (™Oð7(ð ð7(ð $'ð7(ð %(ð7(ð #'ð7(ð !%ð7(ð ð7(ð 
÷7(ó ð7(ðv .2Ø,0Ø26Ø15Ø,0ñSà # d¡
ðSð  # T™zðSð $)¨4¡<ð	Sð
 #(¨$¡,ðSð # T™\ðSð 
õSð@˜Ÿ™ð ¨%¯,©,ô ð à37ñ:Ø—‘ð:Ø,0ð:à	˜uÐ%AÑBÑ	Bô:ó ð:ð6
˜Ÿ™ð 
¨%¯,©,ô 
ð ñ-˜Ÿ™ð -°4ð -À=ÐSX×S_ÑS_ÑC_ô -ó ð-ð2˜Ÿ™ð ¨%¯,©,ð Àcð ÈeÏlÉlô ð˜Ÿ™ð ¨%¯,©,ð Àcð ÈeÏlÉlô ð˜Ÿ™ð ¨%¯,©,ð Àcð ÈeÏlÉlô ð0˜eŸl™lð 0¨u¯|©|ô 0ðd4˜eŸl™lð 4¨u¯|©|ô 4ðr "'Ø Ø,0ñà—‘ðð ðð ð	ð
 —?‘? TÑ)ðð 
˜Ÿ™Ñ	%÷ó r)   r+  )*Únumpyr  r9   Útorch.nnr"   Útorch.nn.functionalrw   r-   Útorch.utils.checkpointÚconfiguration_utilsr   r   Úutilsr   Úutils.accelerate_utilsr   Úactivationsr	   Úmodeling_outputsr
   Úmodeling_utilsr   Úvaer   r   r   Ú
get_loggerr2   ÚloggerÚModuler   r?   re   r†   rª   rÀ   rÐ   rä   rï   rû   r  r+  © r)   r'   Ú<module>r“     s  ðó  Û Ý ß Ð Û ç BÝ Ý 8Ý (Ý 2Ý 'ß NÑ Nð 
×	Ò	˜HÓ	%€ô( b§i¡iô (ôB@ "§)¡)ô @ôB" 2§9¡9ô "ôJ+ b§i¡iô +ô\-¨¯	©	ô -ô`$( R§Y¡Yô $(ôN- "§)¡)ô -ô`. R§Y¡Yô .ôb4 2§9¡9ô 4ônT 2§9¡9ô TônQ 2§9¡9ô QôhN zÐ3CÀ[õ Nr)   