
    
3jQ'                         S SK JrJr  S SKJr  SSKJr   " S S\5      r " S S\5      r " S	 S
\\5      r	 " S S\\5      r
 " S S\
5      r " S S\	5      rg)   )ConfigMixinregister_to_config)QwenImageLoraLoaderMixin   )ModularPipelinec                   V   ^  \ rS rSrSrSr\S	S\4U 4S jjj5       rS r	S
S jr
SrU =r$ )QwenImagePachifier   z3
A class to pack and unpack latents for QwenImage.
config.json
patch_sizec                 "   > [         TU ]  5         g Nsuper__init__selfr   	__class__s     p/home/wildlama/miniconda3/lib/python3.13/site-packages/diffusers/modular_pipelines/qwenimage/modular_pipeline.pyr   QwenImagePachifier.__init__           c                    UR                   S:w  a(  UR                   S:w  a  [        SUR                    35      eUR                   S:X  a  UR                  S5      nUR                  u  p#pEnU R                  R
                  nXW-  S:w  d  Xg-  S:w  a  [        SU SU SU 35      eUR                  UUXW-  UXg-  U5      nUR                  SSSS	S
S5      nUR                  UXW-  Xg-  -  X7-  U-  5      nU$ )N      z-Latents must have 4 or 5 dimensions, but got r       -Latent height and width must be divisible by 
, but got  and    r   )	ndim
ValueError	unsqueezeshapeconfigr   viewpermutereshape)r   latents
batch_sizenum_channels_latentsnum_latent_frameslatent_heightlatent_widthr   s           r   pack_latentsQwenImagePachifier.pack_latents    s#   <<1!2LW\\N[\\<<1''*G[b[h[hX
*;L[[++
%*l.G1.L?
|:VcUddijviwx  ,, '&
 //q!Q1
 //(\-GH -
:
 r   c                    UR                   S:w  a  [        SUR                    35      eUR                  u  pVnU R                  R                  nU[        U5      XH-  -  -  nU[        U5      XH-  -  -  nUR                  UX(-  X8-  XxU-  -  UU5      nUR                  SSSSSS5      nUR                  XWX-  -  SX#5      nU$ )Nr   (Latents must have 3 dimensions, but got r   r    r   r   r   	r!   r"   r$   r%   r   intr&   r'   r(   )	r   r)   heightwidthvae_scale_factorr*   num_patcheschannelsr   s	            r   unpack_latents!QwenImagePachifier.unpack_latentsB   s    <<1G~VWW,3MM)
[[++
 s6{/?/LMNc%j-=-JKL,, j01
 //!Q1a3//*:;R.SUVX^fr    r      __name__
__module____qualname____firstlineno____doc__config_namer   r4   r   r/   r:   __static_attributes____classcell__r   s   @r   r	   r	      s8      K3   D r   r	   c                   V   ^  \ rS rSrSrSr\S	S\4U 4S jjj5       rS r	S
S jr
SrU =r$ )QwenImageLayeredPachifier]   z
A class to pack and unpack latents for QwenImage Layered.

Unlike QwenImagePachifier, this handles 5D latents with shape (B, layers+1, C, H, W).
r   r   c                 "   > [         TU ]  5         g r   r   r   s     r   r   "QwenImageLayeredPachifier.__init__f   r   r   c           	         UR                   S:w  a  [        SUR                    35      eUR                  u  p#pEnU R                  R                  nXW-  S:w  d  Xg-  S:w  a  [        SU SU SU 35      eUR                  UUUXW-  UXg-  U5      nUR                  SSSSS	S
S5      nUR                  UX5U-  -  Xg-  -  XG-  U-  5      nU$ )zI
Pack latents from (B, layers, C, H, W) to (B, layers * H/2 * W/2, C*4).
r   z=Latents must have 5 dimensions (B, layers, C, H, W), but got r   r   r   r   r    r   r   r      )r!   r"   r$   r%   r   r&   r'   r(   )r   r)   r*   layersr+   r-   r.   r   s           r   r/   &QwenImageLayeredPachifier.pack_latentsj   s   
 <<1\]d]i]i\jkllPWP]P]M
0[[++
%*l.G1.L?
|:VcUddijviwx  ,, '&
 //!Q1aA6//z12l6PQ -
:

 r   c           	         UR                   S:w  a  [        SUR                    35      eUR                  u  pgnU R                  R                  n	U	[        U5      XY-  -  -  nU	[        U5      XY-  -  -  nUR                  UUS-   X)-  X9-  XU	-  -  U	U	5      nUR                  SSSSSSS5      nUR                  UUS-   XU	-  -  UU5      nUR                  SSSSS5      nU$ )	z>
Unpack latents from (B, seq, C*4) to (B, C, layers+1, H, W).
r   r2   r    r   r   r   r   rP   r3   )
r   r)   r5   r6   rQ   r7   r*   _r9   r   s
             r   r:   (QwenImageLayeredPachifier.unpack_latents   s	   
 <<1G~VWW")--
x[[++
s6{/?/LMNc%j-=-JKL,,QJ j01
 //!Q1aA6//QJj01
 //!Q1a0r   r<   r=   r>   r@   rI   s   @r   rK   rK   ]   s8      K3  B! !r   rK   c                       \ rS rSrSrSr\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       rSrg)QwenImageModularPipeline   zy
A ModularPipeline for QwenImage.

> [!WARNING] > This is an experimental feature and is likely to change in the future.
QwenImageAutoBlocksc                 4    U R                   U R                  -  $ r   default_sample_sizer7   r   s    r   default_height'QwenImageModularPipeline.default_height       ''$*?*???r   c                 4    U R                   U R                  -  $ r   r[   r]   s    r   default_width&QwenImageModularPipeline.default_width   r`   r   c                     gN   r<   r]   s    r   r\   ,QwenImageModularPipeline.default_sample_size       r   c                     Sn[        U S5      (       a/  U R                  b"  S[        U R                  R                  5      -  nU$ Nr?   vaer   hasattrrk   lentemperal_downsampler   r7   s     r   r7   )QwenImageModularPipeline.vae_scale_factor   >    4DHH$8 C(D(D$EEr   c                     Sn[        U S5      (       a0  U R                  b#  U R                  R                  R                  S-  nU$ N   transformerr   rm   rv   r%   in_channelsr   r+   s     r   r+   -QwenImageModularPipeline.num_channels_latents   C    !4''D,<,<,H#'#3#3#:#:#F#F!#K ##r   c                     Sn[        U S5      (       a-  U R                  b   U R                  R                  R                  nU$ NFrv   rm   rv   r%   guidance_embedsr   is_guidance_distilleds     r   r   .QwenImageModularPipeline.is_guidance_distilled   >     %4''D,<,<,H$($4$4$;$;$K$K!$$r   c                     Sn[        U S5      (       aC  U R                  b6  U R                  R                  =(       a    U R                  R                  S:  nU$ NFguiderr    rm   r   _enablednum_conditionsr   requires_unconditional_embedss     r   r   6QwenImageModularPipeline.requires_unconditional_embeds   I    (-%4""t{{'>,0KK,@,@,cT[[E_E_bcEc),,r   r<   NrA   rB   rC   rD   rE   default_blocks_namepropertyr^   rb   r\   r7   r+   r   r   rG   r<   r   r   rW   rW      s     0@ @ @ @       $ $ % % - -r   rW   c                       \ rS rSrSrSr\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       rSrg)QwenImageEditModularPipeline   z~
A ModularPipeline for QwenImage-Edit.

> [!WARNING] > This is an experimental feature and is likely to change in the future.
QwenImageEditAutoBlocksc                 4    U R                   U R                  -  $ r   r[   r]   s    r   r^   +QwenImageEditModularPipeline.default_height   r`   r   c                 4    U R                   U R                  -  $ r   r[   r]   s    r   rb   *QwenImageEditModularPipeline.default_width   r`   r   c                     gre   r<   r]   s    r   r\   0QwenImageEditModularPipeline.default_sample_size   rh   r   c                     Sn[        U S5      (       a/  U R                  b"  S[        U R                  R                  5      -  nU$ rj   rl   rp   s     r   r7   -QwenImageEditModularPipeline.vae_scale_factor   rr   r   c                     Sn[        U S5      (       a0  U R                  b#  U R                  R                  R                  S-  nU$ rt   rw   ry   s     r   r+   1QwenImageEditModularPipeline.num_channels_latents   r{   r   c                     Sn[        U S5      (       a-  U R                  b   U R                  R                  R                  nU$ r}   r~   r   s     r   r   2QwenImageEditModularPipeline.is_guidance_distilled  r   r   c                     Sn[        U S5      (       aC  U R                  b6  U R                  R                  =(       a    U R                  R                  S:  nU$ r   r   r   s     r   r   :QwenImageEditModularPipeline.requires_unconditional_embeds  r   r   r<   Nr   r<   r   r   r   r      s     4 @ @ @ @       $ $ % % - -r   r   c                       \ rS rSrSrSrSrg) QwenImageEditPlusModularPipelinei  z
A ModularPipeline for QwenImage-Edit Plus.

> [!WARNING] > This is an experimental feature and is likely to change in the future.
QwenImageEditPlusAutoBlocksr<   NrA   rB   rC   rD   rE   r   rG   r<   r   r   r   r     s     8r   r   c                       \ rS rSrSrSrSrg)QwenImageLayeredModularPipelinei"  z
A ModularPipeline for QwenImage-Layered.

> [!WARNING] > This is an experimental feature and is likely to change in the future.
QwenImageLayeredAutoBlocksr<   Nr   r<   r   r   r   r   "  s     7r   r   N)configuration_utilsr   r   loadersr   modular_pipeliner   r	   rK   rW   r   r   r   r<   r   r   <module>r      si     C / .E EPO Od1-0H 1-h2-?4L 2-j8'C 87&> 7r   