
    i                         d dl mZmZ d dlmZ ddlmZ  G d de      Z G d dee      Z G d	 d
ee      Z	 G d de	      Z
y)   )ConfigMixinregister_to_config)QwenImageLoraLoaderMixin   )ModularPipelinec                   F     e Zd ZdZdZeddef fd       Zd ZddZ	 xZ
S )	QwenImagePachifierz;
    A class to pack and unpack latents for QwenImage.
    zconfig.json
patch_sizec                 "    t         |           y N)super__init__)selfr
   	__class__s     /home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/diffusers/modular_pipelines/qwenimage/modular_pipeline.pyr   zQwenImagePachifier.__init__   s        c                    |j                   dk7  r'|j                   dk7  rt        d|j                          |j                   dk(  r|j                  d      }|j                  \  }}}}}| j                  j
                  }||z  dk7  s||z  dk7  rt        d| d| d|       |j                  ||||z  |||z  |      }|j                  dddd	d
d      }|j                  |||z  ||z  z  ||z  |z        }|S )N      z-Latents must have 4 or 5 dimensions, but got r       z-Latent height and width must be divisible by z
, but got z 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_latentszQwenImagePachifier.pack_latents    s6   <<1!2LW\\N[\\<<1''*G[b[h[hX
(*;]L[[++
:%*lZ.G1.L?
|:VcUddijviwx  ,, Z'J&
 //q!Q1
 //j(\Z-GH :-
:
 r   c                    |j                   dk7  rt        d|j                          |j                  \  }}}| j                  j                  }|t        |      ||z  z  z  }|t        |      ||z  z  z  }|j                  |||z  ||z  |||z  z  ||      }|j                  dddddd      }|j                  ||||z  z  d||      }|S )Nr   z(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_latentsz!QwenImagePachifier.unpack_latentsB   s    <<1G~VWW,3MM)
K[[++
 s6{/?*/LMNc%j-=
-JKL,,j Zj01
 //!Q1a3//*h:
;R.SUVX^`efr   )r   )   )__name__
__module____qualname____doc__config_namer   r(   r   r&   r.   __classcell__)r   s   @r   r	   r	      s3      K3   Dr   r	   c                       e Zd ZdZdZed        Zed        Zed        Zed        Z	ed        Z
ed        Zed	        Zy
)QwenImageModularPipelinez
    A ModularPipeline for QwenImage.

    > [!WARNING] > This is an experimental feature and is likely to change in the future.
    QwenImageAutoBlocksc                 4    | j                   | j                  z  S r   default_sample_sizer+   r   s    r   default_heightz'QwenImageModularPipeline.default_heightf       ''$*?*???r   c                 4    | j                   | j                  z  S r   r:   r<   s    r   default_widthz&QwenImageModularPipeline.default_widthj   r>   r   c                      yN    r<   s    r   r;   z,QwenImageModularPipeline.default_sample_sizen       r   c                 ~    d}t        | d      r.| j                  "dt        | j                  j                        z  }|S Nr/   vaer   hasattrrH   lentemperal_downsampler   r+   s     r   r+   z)QwenImageModularPipeline.vae_scale_factorr   ;    4DHH$8 C(D(D$EEr   c                     d}t        | d      r/| j                  #| j                  j                  j                  dz  }|S N   transformerr   rJ   rR   r   in_channelsr   r"   s     r   r"   z-QwenImageModularPipeline.num_channels_latentsy   @    !4'D,<,<,H#'#3#3#:#:#F#F!#K ##r   c                 z    d}t        | d      r,| j                   | j                  j                  j                  }|S NFrR   rJ   rR   r   guidance_embedsr   is_guidance_distilleds     r   r\   z.QwenImageModularPipeline.is_guidance_distilled   ;     %4'D,<,<,H$($4$4$;$;$K$K!$$r   c                     d}t        | d      r=| j                  1| j                  j                  xr | j                  j                  dkD  }|S NFguiderr   rJ   r`   _enablednum_conditionsr   requires_unconditional_embedss     r   re   z6QwenImageModularPipeline.requires_unconditional_embeds   F    (-%4"t{{'>,0KK,@,@,cT[[E_E_bcEc),,r   Nr0   r1   r2   r3   default_blocks_namepropertyr=   r@   r;   r+   r"   r\   re   rD   r   r   r7   r7   ]   s     0@ @ @ @       $ $ % % - -r   r7   c                       e Zd ZdZdZed        Zed        Zed        Zed        Z	ed        Z
ed        Zed	        Zy
)QwenImageEditModularPipelinez
    A ModularPipeline for QwenImage-Edit.

    > [!WARNING] > This is an experimental feature and is likely to change in the future.
    QwenImageEditAutoBlocksc                 4    | j                   | j                  z  S r   r:   r<   s    r   r=   z+QwenImageEditModularPipeline.default_height   r>   r   c                 4    | j                   | j                  z  S r   r:   r<   s    r   r@   z*QwenImageEditModularPipeline.default_width   r>   r   c                      yrB   rD   r<   s    r   r;   z0QwenImageEditModularPipeline.default_sample_size   rE   r   c                 ~    d}t        | d      r.| j                  "dt        | j                  j                        z  }|S rG   rI   rM   s     r   r+   z-QwenImageEditModularPipeline.vae_scale_factor   rN   r   c                     d}t        | d      r/| j                  #| j                  j                  j                  dz  }|S rP   rS   rU   s     r   r"   z1QwenImageEditModularPipeline.num_channels_latents   rV   r   c                 z    d}t        | d      r,| j                   | j                  j                  j                  }|S rX   rY   r[   s     r   r\   z2QwenImageEditModularPipeline.is_guidance_distilled   r]   r   c                     d}t        | d      r=| j                  1| j                  j                  xr | j                  j                  dkD  }|S r_   ra   rd   s     r   re   z:QwenImageEditModularPipeline.requires_unconditional_embeds   rf   r   Nrg   rD   r   r   rk   rk      s     4 @ @ @ @       $ $ % % - -r   rk   c                       e Zd ZdZdZy) QwenImageEditPlusModularPipelinez
    A ModularPipeline for QwenImage-Edit Plus.

    > [!WARNING] > This is an experimental feature and is likely to change in the future.
    QwenImageEditPlusAutoBlocksN)r0   r1   r2   r3   rh   rD   r   r   ru   ru      s     8r   ru   N)configuration_utilsr   r   loadersr   modular_pipeliner   r	   r7   rk   ru   rD   r   r   <module>rz      sM     C / .E EP1-0H 1-h2-?4L 2-j8'C 8r   