
    +h:                         S SK Jr  S SKrSSKJrJr  SSKJr   " S S\R                  R                  5      r
 " S S	\R                  R                  5      r " S
 S\\5      rg)    )OptionalN   )ConfigMixinregister_to_config)
ModelMixinc                   |   ^  \ 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
U =r$ )ResBlock   channelsmid_channelsdimsc                   > [         TU ]  5         Uc  UnUS:X  a  [        R                  R                  O[        R                  R
                  nU" XSSS9U l        [        R                  R                  SU5      U l        U" X!SSS9U l	        [        R                  R                  SU5      U l
        [        R                  R                  5       U l        g )N   r      kernel_sizepadding    )super__init__torchnnConv2dConv3dconv1	GroupNormnorm1conv2norm2SiLU
activation)selfr   r   r   Conv	__class__s        k/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/pipelines/ltx/modeling_latent_upsampler.pyr   ResBlock.__init__   s    #L"&!)uxx(aK
XX''L9
,aK
XX''H5
((--/    hidden_statesreturnc                     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                  X-   5      nU$ )N)r   r   r!   r   r   )r"   r(   residuals      r%   forwardResBlock.forward%   sd     

=1

=16

=1

=1(@Ar'   )r!   r   r   r   r   )Nr   )__name__
__module____qualname____firstlineno__intr   r   r   Tensorr,   __static_attributes____classcell__r$   s   @r%   r	   r	      sG    * *HSM *PS * *U\\ ell  r'   r	   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )PixelShuffleND0   c                 \   > [         TU ]  5         Xl        X l        US;  a  [	        S5      eg )N)r   r   r   zdims must be 1, 2, or 3)r   r   r   upscale_factors
ValueError)r"   r   r;   r$   s      r%   r   PixelShuffleND.__init__1   s2    	.y 677 !r'   c           
      r   U R                   S:X  ai  UR                  SS/U R                  S S Q75      R                  SSSSSSSS	5      R	                  SS5      R	                  S	S5      R	                  SS5      $ U R                   S:X  aW  UR                  SS/U R                  S S Q75      R                  SSS	SSS5      R	                  S	S5      R	                  SS5      $ U R                   S:X  aG  UR                  SS/U R                  S S Q75      R                  SSSSS	S5      R	                  SS5      $ g )
Nr   r   r      r            )r   	unflattenr;   permuteflatten)r"   xs     r%   r,   PixelShuffleND.forward:   s=   99> A>T%9%9"1%=>?Aq!Q1a0AAA YY!^ A>T%9%9"1%=>?GG1aQRTUWXYaabcefgoopqstu YY!^;;q2"A(<(<Ra(@"ABJJ1aQRTUWXZ[\ddefhijj r'   )r   r;   ))r   r   r   )r.   r/   r0   r1   r   r,   r4   r5   r6   s   @r%   r8   r8   0   s    8k kr'   r8   c                      ^  \ rS rSrSr\      SS\S\S\S\S\S\4U 4S	 jjj5       rS
\	R                  S\	R                  4S jrSrU =r$ )LTXLatentUpsamplerModelN   a  
Model to spatially upsample VAE latents.

Args:
    in_channels (`int`, defaults to `128`):
        Number of channels in the input latent
    mid_channels (`int`, defaults to `512`):
        Number of channels in the middle layers
    num_blocks_per_stage (`int`, defaults to `4`):
        Number of ResBlocks to use in each stage (pre/post upsampling)
    dims (`int`, defaults to `3`):
        Number of dimensions for convolutions (2 or 3)
    spatial_upsample (`bool`, defaults to `True`):
        Whether to spatially upsample the latent
    temporal_upsample (`bool`, defaults to `False`):
        Whether to temporally upsample the latent
in_channelsr   num_blocks_per_stager   spatial_upsampletemporal_upsamplec           
        > [         T	U ]  5         Xl        X l        X0l        X@l        XPl        X`l        US:X  a  [        R                  R                  O[        R                  R                  nU" XSSS9U l        [        R                  R                  SU5      U l        [        R                  R                  5       U l        [        R                  R#                  [%        U5       Vs/ s H  n['        X$S9PM     sn5      U l        U(       aW  U(       aP  [        R                  R+                  [        R                  R                  USU-  SSS9[-        S5      5      U l        OU(       aP  [        R                  R+                  [        R                  R                  USU-  SSS9[-        S5      5      U l        ObU(       aP  [        R                  R+                  [        R                  R                  USU-  SSS9[-        S5      5      U l        O[1        S	5      e[        R                  R#                  [%        U5       Vs/ s H  n['        X$S9PM     sn5      U l        U" X!SSS9U l        g s  snf s  snf )
Nr   r   r   r   r   )r      rC   z9Either spatial_upsample or temporal_upsample must be True)r   r   rL   r   rM   r   rN   rO   r   r   r   r   initial_convr   initial_normr    initial_activation
ModuleListranger	   
res_blocks
Sequentialr8   	upsamplerr<   post_upsample_res_blocks
final_conv)
r"   rL   r   rM   r   rN   rO   ConvNd_r$   s
            r%   r    LTXLatentUpsamplerModel.__init__a   s    	&($8!	 0!2$(AI588??";!UVW!HH..r<@"'((--/((--Z_`tZu.vZuUVx/PZu.vw 1"XX00a,.>AWXYq!DN "XX00a,.>AWXYq!DN "XX00a,.>AWXYq!DN
 XYY(-(;(;8=>R8ST8S1Xl.8ST)
% !STU1 /w* Us   )I2I7r(   r)   c                    UR                   u  p#pEnU R                  S:X  a  UR                  SSSSS5      R                  SS5      nU R	                  U5      nU R                  U5      nU R                  U5      nU R                   H  nU" U5      nM     U R                  U5      nU R                   H  nU" U5      nM     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 R                  U5      nU R                  U5      nU R                   H  nU" U5      nM     U R                  (       a&  U R                  U5      nUS S 2S S 2SS 2S S 2S S 24   nO]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 R                   H  nU" U5      nM     U R                  U5      nU$ )Nr   r   r   r   rC   r?   )shaper   rE   rF   rR   rS   rT   rW   rY   rZ   r[   rD   rO   )r"   r(   
batch_sizenum_channels
num_framesheightwidthblocks           r%   r,   LTXLatentUpsamplerModel.forward   s	   >K>Q>Q;
*e99>)11!Q1a@HHANM --m<M --m<M 33MBM %m 4 ) !NN=9M66 %m 4 7 !OOM:M)33A
B7GHPPQRTUWXZ[]^_M, ) !--m<M --m<M 33MBM %m 4 ) %% $} = -aAB1n = - 5 5aAq! D L LQPQ R $} = - 7 7J;K L T TUVXY[\^_ab c66 %m 4 7 !OOM:Mr'   )r   r[   rL   rT   rR   rS   r   rM   rZ   rW   rN   rO   rY   )   i   rC   r   TF)r.   r/   r0   r1   __doc__r   r2   boolr   r   r3   r,   r4   r5   r6   s   @r%   rJ   rJ   N   s    $  $%!%"'0V0V 0V "	0V
 0V 0V  0V 0Vd(U\\ (ell ( (r'   rJ   )typingr   r   configuration_utilsr   r   models.modeling_utilsr   r   Moduler	   r8   rJ    r'   r%   <module>rp      sM      B /uxx 2kUXX__ k<nj+ nr'   