
    
3j[.                     `   S SK r S SKrS SKJs  Jr  SSKJrJr  SSK	J
r
  SSSSS	.r " S
 S\R                  R                  5      r " S S\R                  R                  5      r " S S\R                  R                  5      r " S S\R                  R                  5      r " S S\
\5      rg)    N   )ConfigMixinregister_to_config)
ModelMixin)r      )r      )r      )r   r	   )g      ?g      ?       @g      @c                   |   ^  \ rS rSr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
$ )ResBlock!   N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 )Nr   r   r	   kernel_sizepadding    )super__init__torchnnConv2dConv3dconv1	GroupNormnorm1conv2norm2SiLU
activation)selfr   r   r   Conv	__class__s        c/home/wildlama/miniconda3/lib/python3.13/site-packages/diffusers/pipelines/ltx2/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   Tensorr.   __static_attributes____classcell__r%   s   @r&   r   r   !   sF    * *C$J *S * *U\\ ell  r(   r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )PixelShuffleND;   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__<   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   )r   	unflattenr=   permuteflattenr#   xs     r&   r.   PixelShuffleND.forwardE   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   )r0   r1   r2   r3   r   r.   r6   r7   r8   s   @r&   r:   r:   ;   s    8k kr(   r:   c            	       ~   ^  \ rS 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$ )BlurDownsampleY   z
Anti-aliased spatial downsampling by integer stride using a fixed separable binomial kernel. Applies only on H,W.
Works for dims=2 or dims=3 (per-frame).
r   strider   r*   Nc           	        > [         TU ]  5         US;  a  [        SU 35      eUS:  d	  US-  S:w  a  [        SU 35      eXl        X l        X0l        [        R                  " [        U5       Vs/ s H  n[        R                  " US-
  U5      PM     sn5      nUS S 2S 4   US S S 24   -  nXUR                  5       -  R                  5       nU R                  SUS S S S 2S S 24   5        g s  snf )N)r   r   z$`dims` must be either 2 or 3 but is r   r   r	   z0`kernel_size` must be an odd number >= 3 but is kernel)r   r   r>   r   rN   r   r   tensorrangemathcombsumfloatregister_buffer)r#   r   rN   r   kk2dr%   s         r&   r   BlurDownsample.__init___   s    vCD6JKK?kAo2OP[}]^^	& LL{ASTASA$))K!OQ7ASTU4j1T1W:%WWY%%'Xs4q!+;'<= Us   0$C,rI   c           	         U R                   S:X  a  U$ U R                  S:X  ar  UR                  S   nU R                  R	                  USU R
                  U R
                  5      n[        R                  " XS U R                   U R
                  S-  US9nU$ UR                  u  pBn  nUR                  SS5      R                  SS5      nU R                  R	                  USU R
                  U R
                  5      n[        R                  " XS U R                   U R
                  S-  US9nUR                  SS  u  pxUR                  SXE45      R                  USXWU5      nU$ )Nr	   r   )weightbiasrN   r   groupsr   rA   )rN   r   shaperP   expandr   Fconv2d	transposerG   rE   reshape)	r#   rI   cr\   bf_h2w2s	            r&   r.   BlurDownsample.forwardt   s7   ;;!H99>
A[[''1d.>.>@P@PQFT[[RVRbRbfgRgpqrA  GGMA!QAq!))!Q/A[[''1d.>.>@P@PQFT[[RVRbRbfgRgpqrAWWRS\FBAv&..q"aR@Ar(   )r   r   rN   )rB   )r0   r1   r2   r3   __doc__r4   r   r   r5   r.   r6   r7   r8   s   @r&   rL   rL   Y   sN    
>S ># >C > > >* %,,  r(   rL   c                   v   ^  \ rS rSrSrS
S\S\4U 4S jjjrS\R                  S\R                  4S jr
S	rU =r$ )SpatialRationalResampler   ak  
Scales by the spatial size of the input by a rational number `scale`. For example, `scale = 0.75` will downsample
by a factor of 3 / 4, while `scale = 1.5` will upsample by a factor of 3 / 2. This works by first upsampling the
input by the (integer) numerator of `scale`, and then performing a blur + stride anti-aliased downsample by the
(integer) denominator.
r   scalec           	        > [         TU ]  5         [        U5      U l        [        R                  US 5      nUc,  [        SU S[        [        R                  5       5       35      eUu  U l	        U l
        [        R                  R                  XR                  S-  U-  SSS9U l        [        SU R                  U R                  4S9U l        [#        SU R                  S9U l        g )	NzThe supplied `scale` z( is not supported; supported scales are r   r   r	   r   )r=   )r   rN   )r   r   rV   rq    RATIONAL_RESAMPLER_SCALE_MAPPINGgetr>   listkeysnumdenr   r   r   convr:   pixel_shufflerL   	blur_down)r#   r   rq   	num_denomr%   s       r&   r   !SpatialRationalResampler.__init__   s    5\
488E	'w.VW[\|  ]B  ]B  ]D  XE  WF  G  '$(HHOOL88Q;,2N\]ghOi	+A$((?ST'Qtxx@r(   rI   r*   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r,   )ry   rz   r{   rH   s     r&   r.    SpatialRationalResampler.forward   s4     IIaLq!NN1r(   )r{   ry   rx   rw   rz   rq   )   r
   )r0   r1   r2   r3   rm   r4   rV   r   r   r5   r.   r6   r7   r8   s   @r&   ro   ro      sD    AS A A A %,,  r(   ro   c                      ^  \ rS rSrSr\        SS\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$ )LTX2LatentUpsamplerModel   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_upsamplerational_spatial_scaleuse_rational_resamplerc	           
      $  > [         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(       af  U(       a  [1        X'S9U l        O[        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[3        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      )r   rq   r   z9Either spatial_upsample or temporal_upsample must be True)r   r   r   r   r   r   r   r   r   r   r   r   initial_convr   initial_normr!   initial_activation
ModuleListrR   r   
res_blocks
Sequentialr:   	upsamplerro   r>   post_upsample_res_blocks
final_conv)r#   r   r   r   r   r   r   r   r   ConvNdri   r%   s              r&   r   !LTX2LatentUpsamplerModel.__init__   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 %!9|!r!&!4!4HHOOL!l2BPQ[\O]"1%" "XX00a,.>AWXYq!DN
 XYY(-(;(;8=>R8ST8S1Xl.8ST)
% !STU7 /w0 Us   )JJ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   r   rA   )r`   r   rF   rG   r   r   r   r   r   r   r   rE   r   )r#   r)   
batch_sizenum_channels
num_framesheightwidthblocks           r&   r.    LTX2LatentUpsamplerModel.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   r   r   r   r   r   r   r   r   r   r   r   )   r   r   r   TFr
   T)r0   r1   r2   r3   rm   r   r4   boolrV   r   r   r5   r.   r6   r7   r8   s   @r&   r   r      s    $   $%!%"'(+'+5V5V 5V "	5V
 5V 5V  5V !&5V !%5V 5Vn(U\\ (ell ( (r(   r   )rS   r   torch.nn.functionalr   
functionalrb   configuration_utilsr   r   models.modeling_utilsr   rs   Moduler   r:   rL   ro   r    r(   r&   <module>r      s        B / 				$  uxx 4kUXX__ k<-UXX__ -`uxx Bsz; sr(   