
    bi:                         d dl mZ d dlZddlmZmZ ddlmZ  G d dej                  j                        Z
 G d d	ej                  j                        Z G d
 dee      Zy)    )OptionalN   )ConfigMixinregister_to_config)
ModelMixinc                   l     e Zd Zddedee   def fdZdej                  dej                  fdZ xZ	S )	ResBlockchannelsmid_channelsdimsc                    t         |           ||}|dk(  rt        j                  j                  nt        j                  j
                  } |||dd      | _        t        j                  j                  d|      | _         |||dd      | _	        t        j                  j                  d|      | _
        t        j                  j                         | _        y )N   r      kernel_sizepadding    )super__init__torchnnConv2dConv3dconv1	GroupNormnorm1conv2norm2SiLU
activation)selfr
   r   r   Conv	__class__s        l/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/diffusers/pipelines/ltx/modeling_latent_upsampler.pyr   zResBlock.__init__   s    #L"&!)uxx(LaK
XX''L9
,aK
XX''H5
((--/    hidden_statesreturnc                     |}| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  ||z         }|S )N)r   r   r    r   r   )r!   r&   residuals      r$   forwardzResBlock.forward%   sf     

=1

=16

=1

=1(@Ar%   )Nr   )
__name__
__module____qualname__intr   r   r   Tensorr*   __classcell__r#   s   @r$   r	   r	      s=    * *HSM *PS *U\\ ell r%   r	   c                   &     e Zd Zd fd	Zd Z xZS )PixelShuffleNDc                 \    t         |           || _        || _        |dvrt	        d      y )N)r   r   r   zdims must be 1, 2, or 3)r   r   r   upscale_factors
ValueError)r!   r   r5   r#   s      r$   r   zPixelShuffleND.__init__1   s6    	.y 677 !r%   c           
      l   | j                   dk(  ri|j                  ddg| j                  d d       j                  dddddddd	      j	                  dd      j	                  d	d      j	                  dd      S | j                   dk(  rW|j                  ddg| j                  d d       j                  ddd	ddd      j	                  d	d      j	                  dd      S | j                   dk(  rG|j                  ddg| j                  d d       j                  ddddd	d      j	                  dd      S y )
Nr   r   r      r            )r   	unflattenr5   permuteflatten)r!   xs     r$   r*   z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   r*   r0   r1   s   @r$   r3   r3   0   s    8kr%   r3   c                        e Zd ZdZe	 	 	 	 	 	 ddedededededef fd       Zd	ej                  d
ej                  fdZ
 xZS )LTXLatentUpsamplerModela  
    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         	|           || _        || _        || _        || _        || _        || _        |dk(  rt        j                  j                  nt        j                  j                  } |||dd      | _        t        j                  j                  d|      | _        t        j                  j                         | _        t        j                  j#                  t%        |      D cg c]  }t'        ||       c}      | _        |rU|rSt        j                  j+                  t        j                  j                  |d|z  dd      t-        d            | _        n|rSt        j                  j+                  t        j                  j                  |d|z  dd      t-        d            | _        n`|rSt        j                  j+                  t        j                  j                  |d|z  dd      t-        d            | _        nt1        d	      t        j                  j#                  t%        |      D cg c]  }t'        ||       c}      | _         |||dd      | _        y c c}w c c}w )
Nr   r   r   r   r   )r      r<   z9Either spatial_upsample or temporal_upsample must be True)r   r   rC   r   rD   r   rE   rF   r   r   r   r   initial_convr   initial_normr   initial_activation
ModuleListranger	   
res_blocks
Sequentialr3   	upsamplerr6   post_upsample_res_blocks
final_conv)
r!   rC   r   rD   r   rE   rF   ConvNd_r#   s
            r$   r   z LTXLatentUpsamplerModel.__init__a   s    	&($8!	 0!2$(AI588??";!UVW!HH..r<@"'((--/((--Z_`tZu.vUVx4/P.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T1Xl.T)
% !{STU1 /w* Us   2I6I;r&   r'   c                    |j                   \  }}}}}| j                  dk(  r|j                  ddddd      j                  dd      }| j	                  |      }| j                  |      }| j                  |      }| j                  D ]
  } ||      } | j                  |      }| j                  D ]
  } ||      } | j                  |      }|j                  d|df      j                  ddddd      }|S | j	                  |      }| j                  |      }| j                  |      }| j                  D ]
  } ||      } | j                  r&| j                  |      }|d d d d dd d d d d f   }n]|j                  ddddd      j                  dd      }| j                  |      }|j                  d|df      j                  ddddd      }| j                  D ]
  } ||      } | j                  |      }|S )Nr   r   r   r   r<   r8   )shaper   r>   r?   rI   rJ   rK   rN   rP   rQ   rR   r=   rF   )r!   r&   
batch_sizenum_channels
num_framesheightwidthblocks           r$   r*   zLTXLatentUpsamplerModel.forward   s!   >K>Q>Q;
L*fe99>)11!Q1a@HHANM --m<M --m<M 33MBM 5 %m 45 !NN=9M66 5 %m 45 !OOM:M)33A
B7GHPPQRTUWXZ[]^_M, ) !--m<M --m<M 33MBM 5 %m 45 %% $} = -aAB1n = - 5 5aAq! D L LQPQ R $} = - 7 7J;K L T TUVXY[\^_ab c66 5 %m 45 !OOM:Mr%   )   i   r<   r   TF)r+   r,   r-   __doc__r   r.   boolr   r   r/   r*   r0   r1   s   @r$   rB   rB   N   s    $  $%!%"'0V0V 0V "	0V
 0V 0V  0V 0Vd(U\\ (ell (r%   rB   )typingr   r   configuration_utilsr   r   models.modeling_utilsr   r   Moduler	   r3   rB    r%   r$   <module>re      sM      B /uxx 2kUXX__ k<nj+ nr%   