§
    9†Æj   ã                   óF   — d Z ddlZddlZddlmZmZ  G d„ de¦  «        ZdS )z—
LCM + LTX scheduler combining Latent Consistency Model with RectifiedFlow (LTX).
Optimized for Lightning LoRA compatibility and ultra-fast inference.
é    N)ÚSchedulerMixinÚSchedulerOutputc                   óv   — e Zd ZdZddededefd„Zddedefd
„Zdej	        dej	        dej	        de
fd„Zd„ Zd	S )ÚLCMSchedulera  
    LCM + LTX scheduler combining Latent Consistency Model with RectifiedFlow.
    - LCM: Enables 2-8 step inference with consistency models
    - LTX: Uses RectifiedFlow for better flow matching dynamics
    Optimized for Lightning LoRAs and ultra-fast, high-quality generation.
    éè  é   ç      ð?Únum_train_timestepsÚnum_inference_stepsÚshiftc                 ó>   — || _         || _        || _        d | _        d S )N)r
   r   r   Ú_step_index)Úselfr
   r   r   s       úBC:\Users\johnn\OneDrive\Documents\AI\shared\utils\lcm_scheduler.pyÚ__init__zLCMScheduler.__init__   s'   € Ø#6ˆÔ Ø#6ˆÔ ØˆŒ
ØˆÔÐÐó    Nc                 ó²  — t          |d¦  «        | _        |€| j        }t          j        dd| j        dz   t          j        |¬¦  «        }d}d}|||z
  d|z
  z  z   }||z  d|dz
  |z  z   z  }|| _        | j        dd…         | j        z  | _        |�>| j         	                    |¦  «        | _        | j         	                    |¦  «        | _        d| _
        dS )	z@Set timesteps for LCM+LTX inference using RectifiedFlow approaché   Nr   é   )ÚdtypeÚdevicer	   gJ°«ðå†h?éÿÿÿÿ)Úminr   r   ÚtorchÚlinspaceÚfloat32Úsigmasr
   Ú	timestepsÚtor   )	r   r   r   r   ÚkwargsÚtÚ	sigma_maxÚ	sigma_minr   s	            r   Úset_timestepszLCMScheduler.set_timesteps   sí   € å#&Ð':¸AÑ#>Ô#>ˆÔ àˆ=Ø”JˆEõ ŒN˜1˜a Ô!9¸AÑ!=ÅUÄ]Ð[aÐbÑbÔbˆð ˆ	Ø!ˆ	ð ˜i¨)Ñ3¸¸A¹Ñ>Ñ>ˆð ˜‘ 1¨°©	°VÑ';Ñ#;Ñ<ˆàˆŒØœ S b SÔ)¨DÔ,DÑDˆŒàÐØ!œ^×.Ò.¨vÑ6Ô6ˆDŒNØœ+Ÿ.š.¨Ñ0Ô0ˆDŒKØˆÔÐÐr   Úmodel_outputÚtimestepÚsampleÚreturnc                 ó  — | j         €|                      |¦  «         | j        | j                  }| j         dz   t          | j        ¦  «        k     r| j        | j         dz            }nt	          j        |¦  «        }||z
  }t          |j        ¦  «        t          |j        ¦  «        k     r?|                     d¦  «        }t          |j        ¦  «        t          |j        ¦  «        k     °?|||z  z   }| xj         dz  c_         t          |¬¦  «        S )zç
        Perform LCM + LTX step combining consistency model with rectified flow.
        - LCM: Direct consistency model prediction for fast inference
        - LTX: RectifiedFlow dynamics for optimal probability flow path
        Nr   r   )Úprev_sample)	r   Ú_init_step_indexr   Úlenr   Ú
zeros_likeÚshapeÚ	unsqueezer   )	r   r%   r&   r'   r    ÚsigmaÚ
sigma_nextÚ
sigma_diffr*   s	            r   ÚstepzLCMScheduler.step8   s  € ð ÔÐ#Ø×!Ò! (Ñ+Ô+Ð+ð ”˜DÔ,Ô-ˆØÔ˜aÑ¥# d¤kÑ"2Ô"2Ò2Ð2Øœ TÔ%5¸Ñ%9Ô:ˆJˆJåÔ)¨%Ñ0Ô0ˆJð ! 5Ñ(ˆ
Ý�*Ô"Ñ#Ô#¥c¨&¬,Ñ&7Ô&7Ò7Ð7Ø#×-Ò-¨bÑ1Ô1ˆJõ �*Ô"Ñ#Ô#¥c¨&¬,Ñ&7Ô&7Ò7Ð7ð
 ˜|¨jÑ8Ñ8ˆØÐÔ˜AÑÐÔå¨;Ð7Ñ7Ô7Ð7r   c                 ó¨  — t          |t          j        ¦  «        r|                     | j        j        ¦  «        }| j        |k                         ¦   «         }t          |¦  «        dk    r!|d                              ¦   «         | _	        dS t          j
        | j        |z
  ¦  «        }t          j        |¦  «                             ¦   «         | _	        dS )z/Initialize step index based on current timestepr   N)Ú
isinstancer   ÚTensorr   r   r   Únonzeror,   Úitemr   ÚabsÚargmin)r   r&   ÚindicesÚdiffss       r   r+   zLCMScheduler._init_step_indexY   s­   € å�h¥¤Ñ-Ô-ð 	:Ø—{’{ 4¤>Ô#8Ñ9Ô9ˆHØ”> XÒ-×6Ò6Ñ8Ô8ˆÝˆw‰<Œ<˜!ÒÐØ& qœzŸšÑ0Ô0ˆDÔÐÐõ ”I˜dœn¨xÑ7Ñ8Ô8ˆEÝ$œ|¨EÑ2Ô2×7Ò7Ñ9Ô9ˆDÔÐÐr   )r   r   r	   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatr   r$   r   r6   r   r3   r+   © r   r   r   r      s»   € € € € € ðð ð ð  ¨Cð  ÈSð  Ð]bð  ð  ð  ð  ð ð  °ð  È%ð  ð  ð  ð  ð>8 ¤ð 8¸¼ð 8ÈuÌ|ð 8Ðjyð 8ð 8ð 8ð 8ðB
:ð 
:ð 
:ð 
:ð 
:r   r   )r@   r   ÚmathÚ%diffusers.schedulers.scheduling_utilsr   r   r   rC   r   r   ú<module>rF      sy   ððð ð
 €€€Ø €€€Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QðX:ð X:ð X:ð X:ð X:�>ñ X:ô X:ð X:ð X:ð X:r   