
    +j                        d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
Z
d dlZd dlZd dlZd dlmZ d dlmZmZ d dlZ G d dej                  Z G d d	ej                  Z G d
 dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z  G d dej                  Z! G d  d!ej                  Z" G d" d#ej                  Z# G d$ d%ej                  Z$ G d& d'ej                  Z% G d( d)ej                  Z& G d* d+ej                  Z' G d, d-ej                  Z( G d. d/ej                  Z) G d0 d1ej                  Z* G d2 d3ej                  Z+ G d4 d5ej                  Z, G d6 d7ej                  Z- G d8 d9ej                  Z. G d: d;          Z/ G d< d=          Z0 G d> d?ej                  Z1 G d@ dAej2        j3                  Z4 G dB dCej                  Z5 G dD dEej                  Z3 G dF dGej2        j3                  Z6 G dH dIej                  Z7 G dJ dKej2        j3                  Z8 G dL dMej                  Z9 G dN dOej                  Z: G dP dQej                  Z; G dR dSej                  Z< G dT dUej                  Z= G dV dWej                  Z> G dX dYej                  Z? G dZ d[e          Z@d\e@fd]ZAdS )^    N)sampling)	sa_solver)override)ComfyExtensionioc                   N    e Zd Zed             Zedej        fd            ZeZdS )BasicSchedulerc                    t          j        ddt           j                            d          t           j                            dt
          j        j                  t           j                            dddd	
          t           j	                            ddddd          gt           j
                                        g          S )Nr	   model/sampling/schedulersmodel	scheduleroptionssteps      '  defaultminmaxdenoise      ?        {Gz?r   r   r   stepnode_idcategoryinputsoutputs)r   SchemaModelInputCombocomfysamplersSCHEDULER_NAMESIntFloatSigmasOutputclss    A/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_custom_sampler.pydefine_schemazBasicScheduler.define_schema   s    y$0w''{EN4RSSWbaUCCy#3CdSS	 Y%%''(

 

 

 
	
    returnc                 ^   |}|dk     r>|dk    r&t          j        t          j        g                     S t	          ||z            }t
          j                            |                    d          ||          	                                }||dz    d          }t          j        |          S )Nr   r   model_samplingr   )
r   
NodeOutputtorchFloatTensorintr'   r(   calculate_sigmasget_model_objectcpu)r/   r   r   r   r   total_stepssigmass          r0   executezBasicScheduler.execute    s    S==#~~}U%6r%:%:;;;eGm,,K001G1GHX1Y1Y[dfqrrvvxx%!)&}V$$$r2   N	__name__
__module____qualname__classmethodr1   r   r6   r?   
get_sigmas r2   r0   r	   r	      sW        
 
 [
 	%"- 	% 	% 	% [	% JJJr2   r	   c                   N    e Zd Zed             Zedej        fd            ZeZdS )KarrasSchedulerc                    t          j        ddt           j                            dddd          t           j                            dd	d
dddd          t           j                            ddd
dddd          t           j                            ddd
dddd          gt           j                                        g          S )NrH   r   r   r   r   r   r   	sigma_max~1[:-@r        @r   FTr   r   r   r   roundadvanced	sigma_min<lޝ?rhog      @      Y@r   r   r#   r*   r%   r+   r,   r-   r.   s    r0   r1   zKarrasScheduler.define_schema0   s    y%0WbaUCC{I3FY]ejuyzz{I3FY]ejuyzzucsDX]hlmm	 Y%%''(

 

 

 
	
r2   r3   c                 Z    t          j        ||||          }t          j        |          S N)nrP   rJ   rR   )k_diffusion_samplingget_sigmas_karrasr   r6   r/   r   rJ   rP   rR   r>   s         r0   r?   zKarrasScheduler.execute>   s-    %7%9`iorsss}V$$$r2   Nr@   rF   r2   r0   rH   rH   /   W        
 
 [
 %"- % % % [% JJJr2   rH   c                   N    e Zd Zed             Zedej        fd            ZeZdS )ExponentialSchedulerc                 D   t          j        ddt           j                            dddd          t           j                            dd	d
dddd          t           j                            ddd
dddd          gt           j                                        g          S )Nr]   r   r   r   r   r   r   rJ   rK   r   rL   r   FTrM   rP   rQ   r   rT   r.   s    r0   r1   z"ExponentialScheduler.define_schemaF   s    y*0WbaUCC{I3FY]ejuyzz{I3FY]ejuyzz
 Y%%''(	
 	
 	
 		
r2   r3   c                 X    t          j        |||          }t          j        |          S )N)rW   rP   rJ   )rX   get_sigmas_exponentialr   r6   )r/   r   rJ   rP   r>   s        r0   r?   zExponentialScheduler.executeS   s+    %<uPYenooo}V$$$r2   Nr@   rF   r2   r0   r]   r]   E   sW        

 

 [

 %R] % % % [% JJJr2   r]   c                   N    e Zd Zed             Zedej        fd            ZeZdS )PolyexponentialSchedulerc                    t          j        ddt           j                            dddd          t           j                            dd	d
dddd          t           j                            ddd
dddd          t           j                            ddd
dddd          gt           j                                        g          S )Nrb   r   r   r   r   r   r   rJ   rK   r   rL   r   FTrM   rP   rQ   rR   r   rS   r   rT   r.   s    r0   r1   z&PolyexponentialScheduler.define_schema[   s    y.0WbaUCC{I3FY]ejuyzz{I3FY]ejuyzzucsDX]hlmm	 Y%%''(

 

 

 
	
r2   r3   c                 Z    t          j        ||||          }t          j        |          S rV   )rX   get_sigmas_polyexponentialr   r6   rZ   s         r0   r?   z PolyexponentialScheduler.executei   s.    %@5T]irx{|||}V$$$r2   Nr@   rF   r2   r0   rb   rb   Z   r[   r2   rb   c                   N    e Zd Zed             Zedej        fd            ZeZdS )LaplaceSchedulerc                    t          j        ddt           j                            dddd          t           j                            dd	d
dddd          t           j                            ddd
dddd          t           j                            dd
ddddd          t           j                            ddd
dddd          gt           j                                        g          S )Nrg   r   r   r   r   r   r   rJ   rK   r   rL   r   FTrM   rP   rQ   mug      $      $@皙?beta      ?r   rT   r.   s    r0   r1   zLaplaceScheduler.define_schemaq   s    y&0WbaUCC{I3FY]ejuyzz{I3FY]ejuyzztSeCW\gkllvsCW\gkll Y%%''(
 
 
 	
r2   r3   c                 \    t          j        |||||          }t          j        |          S )N)rW   rP   rJ   ri   rl   )rX   get_sigmas_laplacer   r6   )r/   r   rJ   rP   ri   rl   r>   s          r0   r?   zLaplaceScheduler.execute   s0    %85Iajoqx|}}}}V$$$r2   Nr@   rF   r2   r0   rg   rg   p   sW        
 
 [
 %r} % % % [% JJJr2   rg   c                   N    e Zd Zed             Zedej        fd            ZeZdS )SDTurboSchedulerc                 2   t          j        ddt           j                            d          t           j                            dddd          t           j                            dd	d
d	d          gt           j                                        g          S )Nrq   r   r   r   r   
   r   r   r   r   r   r   r   r   r#   r$   r%   r*   r+   r,   r-   r.   s    r0   r1   zSDTurboScheduler.define_schema   s    y&0w''WaQB??y#1#DQQ
 Y%%''(	
 	
 	
 		
r2   r3   c                 j   dt          d|z            z
  }t          j        t          j        dd          dz  dz
  d          |||z            }|                    d                              |          }t          j        ||                    dg          g          }t          j	        |          S )Nrs   r      d   )r   r5   )
r9   r7   fliparanger;   sigmacat	new_zerosr   r6   )r/   r   r   r   
start_step	timestepsr>   s          r0   r?   zSDTurboScheduler.execute   s    #b7l+++
Ju|Ar22S81<dCCJz\aOaDab	''(899??	JJFF$4$4aS$9$9:;;}V$$$r2   Nr@   rF   r2   r0   rq   rq      sW        

 

 [

 %r} % % % [% JJJr2   rq   c                   N    e Zd Zed             Zedej        fd            ZeZdS )BetaSamplingSchedulerc                    t          j        ddt           j                            d          t           j                            dddd          t           j                            d	d
ddddd          t           j                            dd
ddddd          gt           j                                        g          S )Nr   r   r   r   r   r   r   r   alphag333333?r   g      I@r   FTrM   rl   r   rt   r.   s    r0   r1   z#BetaSamplingScheduler.define_schema   s    y+0w''WbaUCCw$TY^imnnvsDX]hlmm	 Y%%''(

 

 

 
	
r2   r3   c                     t           j                            |                    d          |||          }t	          j        |          S )Nr5   )r   rl   )r'   r(   beta_schedulerr;   r   r6   )r/   r   r   r   rl   r>   s         r0   r?   zBetaSamplingScheduler.execute   sB    ..u/E/EFV/W/WY^fkrv.ww}V$$$r2   Nr@   rF   r2   r0   r   r      sW        
 
 [
 %2= % % % [% JJJr2   r   c                   N    e Zd Zed             Zedej        fd            ZeZdS )VPSchedulerc                    t          j        ddt           j                            dddd          t           j                            dd	d
dddd          t           j                            ddd
dddd          t           j                            ddd
dddd          gt           j                                        g          S )Nr   r   r   r   r   r   r   beta_dgfffff3@r   rL   r   FTrM   beta_minrk   eps_sMbP?r   -C6?r   rT   r.   s    r0   r1   zVPScheduler.define_schema   s    y!0WbaUCCx3FQU]bmqrrz3CVRV^cnrssw3Cf\alpqq	 Y%%''(

 

 

 
	
r2   r3   c                 Z    t          j        ||||          }t          j        |          S )N)rW   r   r   r   )rX   get_sigmas_vpr   r6   )r/   r   r   r   r   r>   s         r0   r?   zVPScheduler.execute   s-    %3eFU]ejkkk}V$$$r2   Nr@   rF   r2   r0   r   r      sW        
 
 [
 % % % % [% JJJr2   r   c                   N    e Zd Zed             Zedej        fd            ZeZdS )SplitSigmasc                 .   t          j        ddt           j                            d          t           j                            dddd          gt           j                            d	          t           j                            d
	          g          S )Nr   model/sampling/sigmasr>   r   r   r   r   high_sigmasdisplay_name
low_sigmasr   )r   r#   r,   r%   r*   r-   r.   s    r0   r1   zSplitSigmas.define_schema   s    y!,	))VQA5AA
 	  m <<	  l ;;
 
 
 	
r2   r3   c                 Z    |d |dz            }||d          }t          j        ||          S Nr   )r   r6   )r/   r>   r   sigmas1sigmas2s        r0   r?   zSplitSigmas.execute   s3    $(#-}Wg...r2   Nr@   rF   r2   r0   r   r      sW        
 
 [
 /bm / / / [/
 JJJr2   r   c                   N    e Zd Zed             Zedej        fd            ZeZdS )SplitSigmasDenoisec                 0   t          j        ddt           j                            d          t           j                            ddddd          gt           j                            d	
          t           j                            d
          g          S )Nr   r   r>   r   r   r   r   r   r   r   r   r   r   r#   r,   r%   r+   r-   r.   s    r0   r1   z SplitSigmasDenoise.define_schema   s    y(,	))y#3CdSS
 	  m <<	  l ;;
 
 
 	
r2   r3   c                     t          |j        d         dz
  d          }t          ||z            }|d |          }||dz    d          }t          j        ||          S )Nr   r   )r   shaperN   r   r6   )r/   r>   r   r   r=   r   r   s          r0   r?   zSplitSigmasDenoise.execute   sg    FL$q(!,,EGO,,K.);?+,,-}Wg...r2   Nr@   rF   r2   r0   r   r      sW        
 
 [
 / / / / [/ JJJr2   r   c                   N    e Zd Zed             Zedej        fd            ZeZdS )
FlipSigmasc                     t          j        ddt           j                            d          gt           j                                        g          S )Nr   r   r>   r   )r   r#   r,   r%   r-   r.   s    r0   r1   zFlipSigmas.define_schema   sI    y ,IOOH--.Y%%''(	
 
 
 	
r2   r3   c                     t          |          dk    rt          j        |          S |                    d          }|d         dk    rd|d<   t          j        |          S )Nr   r   )lenr   r6   rx   r/   r>   s     r0   r?   zFlipSigmas.execute  sX    v;;!=(((Q!9>>F1I}V$$$r2   Nr@   rF   r2   r0   r   r      sW        
 
 [
 % % % % [% JJJr2   r   c                   N    e Zd Zed             Zedej        fd            ZeZdS )SetFirstSigmac                     t          j        ddt           j                            d          t           j                            dddddd	
          gt           j                                        g          S )Nr   r   r>   rz   g      a@r        @r   Fr   r   r   r   rN   r   r   r.   s    r0   r1   zSetFirstSigma.define_schema  sl    y#,	))w3GRW_dee Y%%''(
 
 
 	
r2   r3   c                 \    |                                 }||d<   t          j        |          S Nr   )cloner   r6   )r/   r>   rz   s      r0   r?   zSetFirstSigma.execute!  s(    q	}V$$$r2   N)	rA   rB   rC   rD   r1   r   r6   r?   set_first_sigmarF   r2   r0   r   r     sW        	
 	
 [	
 %r} % % % [%
 OOOr2   r   c                   l    e Zd Zed             Zedej        dededede	de
j        fd            ZeZd	S )
ExtendIntermediateSigmasc                    t          j        ddgdt           j                            d          t           j                            dddd	          t           j                            d
ddddd          t           j                            dddddd          t           j                            dg d          gt           j                                        g          S )Nr   zinterpolate sigmasr   r>   r      r   rw   r   start_at_sigmag      r   r   Fr   end_at_sigmag      (@r   spacinglinearcosinesiner   r   search_aliasesr    r!   r"   )r   r#   r,   r%   r*   r+   r&   r-   r.   s    r0   r1   z&ExtendIntermediateSigmas.define_schema*  s    y.01,	))WaQC@@/4W[_glmm~t'X\dijjy2N2N2NOO Y%%''(
 
 
 	
r2   r>   r   r   r   r   r3   c                 x   |dk     rt          d          }d d d d|         }t          j        dd|dz   |j                  dd	         } ||          }g }	t	          t          |          dz
            D ]l}
||
         }||
dz            }|	                    |           ||cxk    r|k    r5n :|||z
  z  |z   }|	                    |                                           mt          |          dk    r|	                    |d	                    t          j	        |	          }	t          j        |	          S )
Nr   infc                     | S NrF   xs    r0   <lambda>z2ExtendIntermediateSigmas.execute.<locals>.<lambda>@  s     r2   c                 J    t          j        | t          j        z  dz            S )Nr   )r7   sinmathpir   s    r0   r   z2ExtendIntermediateSigmas.execute.<locals>.<lambda>A  s    	!DG)A+ 6 6 r2   c                 P    dt          j        | t          j        z  dz            z
  S )Nr   r   )r7   cosr   r   r   s    r0   r   z2ExtendIntermediateSigmas.execute.<locals>.<lambda>B  s    EIaik$:$: : r2   r   r   )devicer   )floatr7   linspacer   ranger   appendextendtolistr8   r   r6   )r/   r>   r   r   r   r   interpolatorr   computed_spacingextended_sigmasisigma_current
sigma_nextinterpolated_stepss                 r0   r?   z ExtendIntermediateSigmas.execute:  sm   A"5\\N "k66::
 
 	 N1a6=AAA!B$G'<??s6{{Q'' 	D 	DA"1IM!J""=111}>>>>>>>>>%5m9S%TWd%d"&&'9'@'@'B'BCCC v;;??""6":...+O<<}_---r2   N)rA   rB   rC   rD   r1   r7   Tensorr9   r   strr   r6   r?   r   rF   r2   r0   r   r   )  s        
 
 [
 .U\ .# .u .\a .lo .tv  uB . . . [.B FFFr2   r   c                   N    e Zd Zed             Zedej        fd            ZeZdS )SamplingPercentToSigmac                 4   t          j        ddt           j                            d          t           j                            ddddd          t           j                            d	d
d          gt           j                            d          g          S )Nr   r   r   sampling_percentr   r   r   r   return_actual_sigmaFzvReturn the actual sigma value instead of the value used for interval checks.
This only affects results at 0.0 and 1.0.)r   tooltipsigma_valuer   r   )r   r#   r$   r%   r+   Booleanr-   r.   s    r0   r1   z$SamplingPercentToSigma.define_schema`  s    y,,w''13CSW]^^
  !6  PI   J  J
 X__-_@@A	
 	
 	
 		
r2   r3   c                     |                     d          }|                    |          }|r?|dk    r|j                                        }n|dk    r|j                                        }t          j        |          S )Nr5   r   r   )r;   percent_to_sigmarJ   itemrP   r   r6   )r/   r   r   r   r5   	sigma_vals         r0   r?   zSamplingPercentToSigma.executem  s    //0@AA"334DEE	 	<3&&*499;;		!S((*499;;	}Y'''r2   N)	rA   rB   rC   rD   r1   r   r6   r?   	get_sigmarF   r2   r0   r   r   _  sW        

 

 [

 (bm ( ( ( [( IIIr2   r   c                   N    e Zd Zed             Zedej        fd            ZeZdS )KSamplerSelectc                     t          j        ddt           j                            dt          j        j                  gt           j                                        g          S )Nr   model/sampling/samplerssampler_namer   r   )	r   r#   r&   r%   r'   r(   SAMPLER_NAMESSamplerr-   r.   s    r0   r1   zKSamplerSelect.define_schema|  sR    y$.HNN>5>;WNXXYZ&&(()	
 
 
 	
r2   r3   c                 h    t           j                            |          }t          j        |          S r   )r'   r(   sampler_objectr   r6   )r/   r   samplers      r0   r?   zKSamplerSelect.execute  s'    .//==}W%%%r2   N	rA   rB   rC   rD   r1   r   r6   r?   get_samplerrF   r2   r0   r   r   {  sW        
 
 [
 &bm & & & [& KKKr2   r   c                   N    e Zd Zed             Zedej        fd            ZeZdS )SamplerDPMPP_3M_SDEc                 F   t          j        ddt           j                            ddddddd	
          t           j                            ddddddd	
          t           j                            dddgd	          gt           j                                        g          S )Nr   r   etar   r   rS   r   FTrM   s_noisenoise_devicegpur<   r   rO   r   r   r#   r+   r%   r&   r   r-   r.   s    r0   r1   z!SamplerDPMPP_3M_SDE.define_schema  s    y).ucsDX]hlmmy#3EPT\alpqq~u~PTUU
 Z&&(()	
 	
 	
 		
r2   r3   c                     |dk    rd}nd}t           j                            |||d          }t          j        |          S )Nr<   dpmpp_3m_sdedpmpp_3m_sde_gpur   r   r'   r(   ksamplerr   r6   )r/   r   r   r   r   r   s         r0   r?   zSamplerDPMPP_3M_SDE.execute  sI    5  )LL-L.)),PW8X8XYY}W%%%r2   Nr   rF   r2   r0   r   r     sW        

 

 [

 &BM & & & [& KKKr2   r   c                   N    e Zd Zed             Zedej        fd            ZeZdS )SamplerDPMPP_2M_SDEc                    t          j        ddt           j                            dddg          t           j                            ddd	d
ddd          t           j                            ddd	d
ddd          t           j                            dddgd          gt           j                                        g          S )Nr  r   solver_typemidpointheunr   r   r   r   rS   r   FTrM   r   r   r   r<   r   r   r   r#   r&   r%   r+   r   r-   r.   s    r0   r1   z!SamplerDPMPP_2M_SDE.define_schema  s    y).}z66JKKucsDX]hlmmy#3EPT\alpqq~u~PTUU	 Z&&(()

 

 

 
	
r2   r3   c                     |dk    rd}nd}t           j                            ||||d          }t          j        |          S )Nr<   dpmpp_2m_sdedpmpp_2m_sde_gpu)r   r   r  r  )r/   r  r   r   r   r   r   s          r0   r?   zSamplerDPMPP_2M_SDE.execute  sL    5  )LL-L.)),PWhs8t8tuu}W%%%r2   Nr   rF   r2   r0   r  r    sW        
 
 [
 & & & & [& KKKr2   r  c                   N    e Zd Zed             Zedej        fd            ZeZdS )SamplerDPMPP_SDEc                    t          j        ddt           j                            ddddddd	
          t           j                            ddddddd	
          t           j                            ddddddd	
          t           j                            dddgd	          gt           j                                        g          S )Nr  r   r   r   r   rS   r   FTrM   r   rrm   r   r   r<   r   r   r   r.   s    r0   r1   zSamplerDPMPP_SDE.define_schema  s    y&.ucsDX]hlmmy#3EPT\alpqqsCSe$V[fjkk~u~PTUU	 Z&&(()

 

 

 
	
r2   r3   c                     |dk    rd}nd}t           j                            ||||d          }t          j        |          S )Nr<   	dpmpp_sdedpmpp_sde_gpu)r   r   r  r  )r/   r   r   r  r   r   r   s          r0   r?   zSamplerDPMPP_SDE.execute  sL    5  &LL*L.)),PW^_8`8`aa}W%%%r2   Nr   rF   r2   r0   r  r    sW        
 
 [
 &r} & & & [& KKKr2   r  c                   N    e Zd Zed             Zedej        fd            ZeZdS )SamplerDPMPP_2S_Ancestralc                     t          j        ddt           j                            dddddd	          t           j                            d
ddddd	          gt           j                                        g          S )Nr  r   r   r   r   rS   r   Fr   r   r   r   r#   r+   r%   r   r-   r.   s    r0   r1   z'SamplerDPMPP_2S_Ancestral.define_schema  sy    y/.ucsDX]^^y#3EPT\abb Z&&(()
 
 
 	
r2   r3   c                 p    t           j                            d||d          }t          j        |          S )Ndpmpp_2s_ancestralr   r  r/   r   r   r   s       r0   r?   z!SamplerDPMPP_2S_Ancestral.execute  s3    .))*>X_@`@`aa}W%%%r2   Nr   rF   r2   r0   r  r    W        	
 	
 [	
 &bm & & & [& KKKr2   r  c                   N    e Zd Zed             Zedej        fd            ZeZdS )SamplerEulerAncestralc                     t          j        ddt           j                            ddddddd	
          t           j                            ddddddd	
          gt           j                                        g          S )Nr  r   r   r   r   rS   r   FTrM   r   r   r  r.   s    r0   r1   z#SamplerEulerAncestral.define_schema  s    y+.ucsDX]hlmmy#3EPT\alpqq Z&&(()
 
 
 	
r2   r3   c                 p    t           j                            d||d          }t          j        |          S )Neuler_ancestralr   r  r  s       r0   r?   zSamplerEulerAncestral.execute  s3    .))*;SU\=]=]^^}W%%%r2   Nr   rF   r2   r0   r  r    r  r2   r  c                   N    e Zd Zed             Zedej        fd            ZeZdS )SamplerEulerAncestralCFGPPc                     t          j        dddt           j                            dddddd	          t           j                            d
ddddd	          gt           j                                        g          S )Nr"  zSamplerEulerAncestralCFG++r   r   r   r   r   Fr   r   rj   r   r   r    r!   r"   r  r.   s    r0   r1   z(SamplerEulerAncestralCFGPP.define_schema  s{    y05.ucs$V[\\y#3Dt[`aa Z&&(()	
 	
 	
 		
r2   r3   c                 p    t           j                            d||d          }t          j        |          S )Neuler_ancestral_cfg_ppr   r  r  s       r0   r?   z"SamplerEulerAncestralCFGPP.execute  s9    .))$G,,. . }W%%%r2   Nr   rF   r2   r0   r"  r"    sW        

 

 [

 &bm & & & [& KKKr2   r"  c                   N    e Zd Zed             Zedej        fd            ZeZdS )
SamplerLMSc                     t          j        ddt           j                            ddddd          gt           j                                        g	          S )
Nr(  r   order   r   rw   Tr   r   r   rO   r   )r   r#   r*   r%   r   r-   r.   s    r0   r1   zSamplerLMS.define_schema  sS    y .FLL!dLSSTZ&&(()	
 
 
 	
r2   r3   c                 n    t           j                            dd|i          }t          j        |          S )Nlmsr*  r  )r/   r*  r   s      r0   r?   zSamplerLMS.execute#  s.    .))%'51ABB}W%%%r2   Nr   rF   r2   r0   r(  r(    sW        
 
 [
 &r} & & & [& KKKr2   r(  c                   N    e Zd Zed             Zedej        fd            ZeZdS )SamplerDPMAdaptativec                 L   t          j        ddt           j                            ddddd          t           j                            dd	d
dddd          t           j                            ddd
dddd          t           j                            dd	d
dddd          t           j                            dd
d
dddd          t           j                            ddd
dddd          t           j                            dd
d
dddd          t           j                            ddd
dddd          t           j                            dd
d
dddd          t           j                            ddd
dddd          g
t           j                                        g          S )Nr0  r   r*     r   Tr,  rtolg?r   rS   r   FrM   atolgq?h_initpcoefficoeffr   dcoeffaccept_safetygQ?r   r   r   )r   r#   r*   r%   r+   r   r-   r.   s    r0   r1   z"SamplerDPMAdaptative.define_schema+  s   y*.WaQAMMvt%dZ_jnoovv3EPT\alpqqx3EPT\alpqqx#5t[`koppx#5t[`koppx#5t[`kopp#5W[chswxxucsDX]hlmmy#3EPT\alpqq Z&&(()
 
 
 	
r2   r3   c                     t           j                            d|||||||||	|
d
          }t          j        |          S )Ndpm_adaptive)
r*  r3  r4  r5  r6  r7  r8  r9  r   r   r  )r/   r*  r3  r4  r5  r6  r7  r8  r9  r   r   r   s               r0   r?   zSamplerDPMAdaptative.execute?  sd    .)).ESWaeqw  DJHNZ`  tA  JMHO;R ;R S S }W%%%r2   Nr   rF   r2   r0   r0  r0  *  sY        
 
 [
& &hjhu & & & [& KKKr2   r0  c                   N    e Zd Zed             Zedej        fd            ZeZdS )SamplerER_SDEc                    t          j        ddt           j                            dg d          t           j                            ddddd	
          t           j                            dddddddd	          t           j                            ddddddd	          gt           j                                        g          S )Nr=  r   r  )ER-SDEReverse-time SDEODEr   	max_stager2  r   Tr,  r   r   r   rS   r   FzStochastic strength of reverse-time SDE.
When eta=0, it reduces to deterministic ODE. This setting doesn't apply to ER-SDE solver type.r   r   r   r   rN   r   rO   r   rM   r   )r   r#   r&   r%   r*   r+   r   r-   r.   s    r0   r1   zSamplerER_SDE.define_schemaJ  s    y#.}6[6[6[\\[!DQQucsDX]  hr  }A  B  By#3EPT\alpqq	 Z&&(()

 

 

 
	
r2   r3   c                     |dk    s|dk    r
dk    rdd}fd}|dk    rd }n|}d}t           j                            ||||d          }t          j        |          S )NrA  r@  r   c                     | dz   z  S r   rF   )r   r   s    r0   reverse_time_sde_noise_scalerz<SamplerER_SDE.execute.<locals>.reverse_time_sde_noise_scaler^  s    q>!r2   r?  er_sde)r   noise_scalerrB  r  )	r/   r  rB  r   r   rF  rH  r   r   s	      `     r0   r?   zSamplerER_SDE.executeX  s    %K3E$E$E#QR((CG	" 	" 	" 	" 	" (""LL8L.)),G]i  yB  9C  9C  D  D}W%%%r2   Nr   rF   r2   r0   r=  r=  I  sW        
 
 [
 &bm & & & [&$ KKKr2   r=  c                   N    e Zd Zed             Zedej        fd            ZeZdS )SamplerSASolverc                    t          j        ddgdt           j                            d          t           j                            ddddd	d
d          t           j                            dddddd          t           j                            dddddd          t           j                            ddddd	d
d          t           j                            ddddd          t           j                            ddddd          t           j                            dd          t           j                            dd          g	t           j                                        g           S )!NrJ  sder   r   r   r   r   rj   r   FTrM   sde_start_percentg?r   )r   r   r   r   rO   sde_end_percentg?r   rS   predictor_orderr2  r      r,  corrector_orderr+  r   use_pece)rO   simple_order_2r   )	r   r#   r$   r%   r+   r*   r   r   r-   r.   s    r0   r1   zSamplerSASolver.define_schemao  s@   y%!7.w''ucs4W\gkll2CScX]hlmm0#3CV[fjkky#3EPT\alpqq.qaRVWW.qaRVWW
  d ;;
  !1D AA
 Z&&(()
 
 
 	
r2   r3   c
           
      (   |                     d          }
|
                    |          }|
                    |          }t          j        |||          }d}t          j                            |||||||	d          }t          j        |          S )Nr5   )r   r   )tau_funcr   rO  rQ  rR  rS  )	r;   r   r   get_tau_interval_funcr'   r(   r  r   r6   )r/   r   r   rM  rN  r   rO  rQ  rR  rS  r5   start_sigma	end_sigmarU  r   r   s                   r0   r?   zSamplerSASolver.execute  s    //0@AA$556GHH"33ODD	2;	sSSS".))$"#2#2$"0 

 

 }W%%%r2   Nr   rF   r2   r0   rJ  rJ  n  sa        
 
 [
& &  NP  N[ & & & [&( KKKr2   rJ  c                   J    e Zd Zed             Zedej        fd            ZdS )SamplerSEEDS2c                    t          j        dddgdt           j                            dddg          t           j                            d	d
dddddd          t           j                            dd
dddddd          t           j                            dddd
dddd          gt           j                                        gd          S )NrZ  rL  zexp heunr   r  phi_1phi_2r   r   r   r   rS   r   FzStochastic strengthTrC  r   zSDE noise multiplierr  rm   z7Relative step size for the intermediate stage (c2 node)zThis sampler node can represent multiple samplers:

seeds_2
- default setting

exp_heun_2_x0
- solver_type=phi_2, r=1.0, eta=0.0

exp_heun_2_x0_sde
- solver_type=phi_2, r=1.0, eta=1.0, s_noise=1.0)r   r   r    r!   r"   descriptionr	  r.   s    r0   r1   zSamplerSEEDS2.define_schema  s    y#!:..}w6HIIucsDX]g|  HL  M  My#3EPT\a  lB  MQ  R  RsCTsUZ  e^  im  n  n	 Z&&(()C
 
 
 	
r2   r3   c                 x    d}t           j                            |||||d          }t          j        |          S )Nseeds_2)r   r   r  r  r  )r/   r  r   r   r  r   r   s          r0   r?   zSamplerSEEDS2.execute  sB     .))G!KPP
 
 }W%%%r2   NrA   rB   rC   rD   r1   r   r6   r?   rF   r2   r0   rZ  rZ    sV        
 
 [
. &bm & & & [& & &r2   rZ  c                       e Zd Zd Zd ZdS )Noise_EmptyNoisec                     d| _         d S r   seedselfs    r0   __init__zNoise_EmptyNoise.__init__  s    			r2   c           	      V   |d         }|j         rt|                                }g }|D ]<}|                    t          j        |j        |j        |j        d                     =t          j	        
                    |          S t          j        |j        |j        |j        d          S )Nsamplesr<   )dtypelayoutr   )	is_nestedunbindr   r7   zerosr   rl  rm  r'   nested_tensorNestedTensor)rh  input_latentlatent_imagetensorsrp  ts         r0   generate_noisezNoise_EmptyNoise.generate_noise  s    #I.! 	w"))++GE a aU[Y^___````&33E:::;|19KT`Tgpuvvvvr2   NrA   rB   rC   ri  rw  rF   r2   r0   rc  rc    s7          	w 	w 	w 	w 	wr2   rc  c                       e Zd Zd Zd ZdS )Noise_RandomNoisec                     || _         d S r   re  )rh  rf  s     r0   ri  zNoise_RandomNoise.__init__  s    			r2   c                 z    |d         }d|v r|d         nd }t           j                            || j        |          S )Nrk  batch_index)r'   sampleprepare_noiserf  )rh  rs  rt  
batch_indss       r0   rw  z Noise_RandomNoise.generate_noise  sB    #I.4A\4Q4Q\-00W[
|)),	:NNNr2   Nrx  rF   r2   r0   rz  rz    s7          O O O O Or2   rz  c                   N    e Zd Zed             Zedej        fd            ZeZdS )SamplerCustomc                    t          j        ddt           j                            d          t           j                            ddd          t           j                            dddd	d
          t           j                            dddddd          t           j                            d          t           j                            d          t           j                            d          t           j	                            d          t           j
                            d          g	t           j
                            d          t           j
                            d          g          S )Nr  model/sampling/custom_samplingr   	add_noiseT)r   rO   
noise_seedr       r   r   r   control_after_generatecfg       @r   rS   rk   r   r   positivenegativer   r>   rt  outputr   denoised_outputr   )r   r#   r$   r%   r   r*   r+   Conditioningr   r,   Latentr-   r.   s    r0   r1   zSamplerCustom.define_schema  s   y#5w''
  dT JJ\1!ASlpqqucsCW[\\%%j11%%j11
  ++	))	//
 	  h 77	  .? @@
 
 
 	
r2   r3   c
                 f   |	}
|
d         }	|
                                 }
t          j                            ||	|
                    dd           |
                    dd                     }	|	|
d<   |s"t                                          |
          }n"t          |                              |
          }d }d|
v r|
d         }i }t          j	        ||j
        d         dz
  |          }t          j        j         }t          j                            ||||||||	||||          }|
                                 }|                    dd            |                    dd            ||d<   d|v r|j                            |d                                                   }|j        r[d	 |                                D             }t          j                            t          j                            ||                    }|
                                 }||d<   n|}t/          j        ||          S )
Nrk  downscale_ratio_spacialdownscale_ratio_temporal
noise_maskr   r   )r  callbackdisable_pbarrf  x0c                     g | ]	}|j         
S rF   r   .0r   s     r0   
<listcomp>z)SamplerCustom.execute.<locals>.<listcomp>       C C CQ C C Cr2   )copyr'   r~  fix_empty_latent_channelsgetrc  rw  rz  latent_previewprepare_callbackr   utilsPROGRESS_BAR_ENABLEDsample_custompopr   process_latent_outr<   rn  ro  rq  rr  unpack_latentsr   r6   )r/   r   r  r  r  r  r  r   r>   rt  latentnoiser  	x0_outputr  r  rk  outx0_outlatent_shapesout_denoiseds                        r0   r?   zSamplerCustom.execute  sV   i(|==e\SYS]S]^wy}S~S~  AG  AK  AK  Lf  hl  Am  Am  n  n(y 	I$&&55f==EE%j11@@HHE
6!!-J	!25&,r:JQ:NPYZZ ;;;,,,UE3QY[ceq  I  T\  kw  ~H,  I  Ikkmm)4000*D111 I9[33IdO4G4G4I4IJJF  m C C'..2B2B C C C,99%+:T:TU[]j:k:kll!;;==L&,L##L}S,///r2   N	rA   rB   rC   rD   r1   r   r6   r?   r~  rF   r2   r0   r  r    sZ        
 
 [
* #0npn{ #0 #0 #0 [#0J FFFr2   r  c                       e Zd Zd ZdS )Guider_Basicc                 4    |                      d|i           d S )Nr  )inner_set_conds)rh  r  s     r0   	set_condszGuider_Basic.set_conds  s!    j(344444r2   N)rA   rB   rC   r  rF   r2   r0   r  r    s#        5 5 5 5 5r2   r  c                   N    e Zd Zed             Zedej        fd            ZeZdS )BasicGuiderc           	          t          j        dddt           j                            d          t           j                            d          gt           j                                        g          S )Nr  zBasic Guidermodel/sampling/guidersr   conditioningr$  )r   r#   r$   r%   r  Guiderr-   r.   s    r0   r1   zBasicGuider.define_schema  sc    y!'-w''%%n55 Y%%''(	
 	
 	
 		
r2   r3   c                 r    t          |          }|                    |           t          j        |          S r   )r  r  r   r6   )r/   r   r  guiders       r0   r?   zBasicGuider.execute(  s3    e$$&&&}V$$$r2   N	rA   rB   rC   rD   r1   r   r6   r?   
get_guiderrF   r2   r0   r  r    sW        

 

 [

 %R] % % % [%
 JJJr2   r  c                   N    e Zd Zed             Zedej        fd            ZeZdS )	CFGGuiderc                 j   t          j        dddt           j                            d          t           j                            d          t           j                            d          t           j                            ddd	d
dd          gt           j                                        g          S )Nr  z
CFG Guiderr  r   r  r  r  r  r   rS   rk   r   r   r$  r   r#   r$   r%   r  r+   r  r-   r.   s    r0   r1   zCFGGuider.define_schema1  s    y%-w''%%j11%%j11ucsCW[\\	 Y%%''(
 
 
 	
r2   r3   c                     t           j                            |          }|                    ||           |                    |           t          j        |          S r   )r'   r(   r  r  set_cfgr   r6   )r/   r   r  r  r  r  s         r0   r?   zCFGGuider.execute@  sO    ))%008,,,s}V$$$r2   Nr  rF   r2   r0   r  r  0  sW        
 
 [
 % % % % [% JJJr2   r  c                   (    e Zd ZddZd Zi dfdZdS )Guider_DualCFGFc                 0    || _         || _        || _        d S r   )cfg1cfg2nested)rh  r  r  r  s       r0   r  zGuider_DualCFG.set_cfgJ  s    		r2   c                 f    t          j        |ddi          }|                     |||d           d S )Nprompt_typer  )r  middler  )node_helpersconditioning_set_valuesr  )rh  r  r  r  s       r0   r  zGuider_DualCFG.set_condsO  s>    5f}j>YZZ(fRZ[[\\\\\r2   Nc                 f   | j                             dd           }| j                             dd           }| j                             dd           }| j        rt          j                            | j        |||g|||          }t          j                            | j        |d         |d         | j        |||||	  	        }	|d         | j	        |	|d         z
  z  z   S |                    dd	          d	k    r8t          j        | j	        d
          rd }t          j        | j        d
          rd }t          j                            | j        |||g|||          }t          j                            | j        |d         |d         | j	        |||||	  	        |d         |d         z
  | j        z  z   S )Nr  r  r  r   r   model_optionsconduncondr   disable_cfg1_optimizationFr   )condsr  r  r'   r(   calc_cond_batchinner_modelcfg_functionr  r  r   isclose)
rh  r   timestepr  rf  negative_condmiddle_condpositive_condr  	pred_texts
             r0   predict_noisezGuider_DualCFG.predict_noiseS  s   
z488jnnXt44
z488; 	N.001AMS^`mCnpqs{  ~K  L  LC33D4Dc!fcRSfVZV_abdl  }J  Q^  gr3  s  sIq6DISV);<<<  !<eDDMM<	3// +$(M|DIs33 +&*.001AMS^`mCnpqs{  ~K  L  LC>..t/?QQQUQZ\]_g  xE  LW  `m.  n  n  ru  vw  rx  {~  @  {A  rA  EI  EN  qN  N  Nr2   )F)rA   rB   rC   r  r  r  rF   r2   r0   r  r  I  s[           
] ] ] 8: N N N N N Nr2   r  c                   N    e Zd Zed             Zedej        fd            ZeZdS )DualCFGGuiderc                 6   t          j        ddgddt           j                            d          t           j                            d          t           j                            d          t           j                            d          t           j                            d	d
dddd          t           j                            dd
dddd          t           j                            dddg          gt           j                                        g          S )Nr  zdual prompt guidancezDual CFG Guiderr  r   cond1cond2r  	cfg_condsr  r   rS   rk   r   r   cfg_cond2_negativestyleregularr  r   )r   r   r   r    r!   r"   )	r   r#   r$   r%   r  r+   r&   r  r-   r.   s    r0   r1   zDualCFGGuider.define_schemag  s    y#23*-w''%%g..%%g..%%j11{CSeRU]abb3Scu[^fjkkwH0EFF Y%%''(
 
 
 	
r2   r3   c                     t          |          }|                    |||           |                    |||dk               t          j        |          S )Nr  )r  )r  r  r  r   r6   )	r/   r   r  r  r  r  r  r  r  s	            r0   r?   zDualCFGGuider.executez  sU    &&x000y"4ex>OQQQ}V$$$r2   Nr  rF   r2   r0   r  r  f  sY        
 
 [
$ %]_]j % % % [% JJJr2   r  c                   B     e Zd Z fdZd fd	Zd fd	Zi dfdZ xZS )	Guider_DualModelc                 f    t                                          |           || _        d | _        d S r   )superri  uncond_model_patcheruncond_inner)rh  model_patcherr  	__class__s      r0   ri  zGuider_DualModel.__init__  s1    '''$8! r2   NFc
                 :   d | _         g | _        d | _        t          j        | j        d          sdt          t          d | j        d                             i}
t          j
                            | j        |j        |
| j        j                  \  | _         }
| _        |
d         | _        | j                                         	 t!                                          |||||||||		  	        | j         M| j                                         t          j
                            d| j        i| j                   d | _         S S # | j         L| j                                         t          j
                            d| j        i| j                   d | _         w xY w)Nr   r  c                 *    |                                  S r   )r  )as    r0   r   z/Guider_DualModel.outer_sample.<locals>.<lambda>  s     r2   r  )r  uncond_loaded_uncond_negr   r  r  listmapr  r'   sampler_helpersprepare_samplingr  r   r  pre_runr  outer_samplecleanupcleanup_models)rh  r  rt  r   r>   denoise_maskr  r  rf  r  ucr  s              r0   r   zGuider_DualModel.outer_sample  s    |DHc** 	0d3'9'94:j;Q#R#RSSTB8=8M8^8^)5;D<U<c9e 9e5Dr4#5!*~D%--///	)77''|Wfl\dfrtx  IV'  W  W ,)11333%44j$BR5SUYUghhh$(!! -t ,)11333%44j$BR5SUYUghhh$(!((((s   )E AFc                 P   | j         t|}|2t          j        |          dk    r| j                             |          }t          j                            | j         |d| j        i||||	|
          d         | _        t                      
                    |||||||||	|

  
        S )Nr   r  r  )r  r7   count_nonzeroprocess_latent_inr'   r(   process_condsr  _uncond_condsr  inner_sample)rh  r  rt  r   r   r>   r  r  r  rf  r  lir  s               r0   r
  zGuider_DualModel.inner_sample  s    (B~%"5b"9"9A"="=&88<<!&!=!=!5:t7G*H&RTVbdh  yF "> "G "G HR"SDww##E<&R^`hjvx|  MZ#  [  [  	[r2   c                 &   | j                             dd           }t          j                            | j        |g|||          d         }| j        0t          j        | j	        d          r|                    dd          s|S |}d|v rd |
                                D             }t          j                            | j        | j        g|||          d         }t          j                            | j        ||| j	        ||||| j        	  	        S )	Nr  r   r   r  Fmultigpu_clonesc                 &    i | ]\  }}|d k    ||S )r  rF   )r  kvs      r0   
<dictcomp>z2Guider_DualModel.predict_noise.<locals>.<dictcomp>  s)    #e#e#eTQaSdNdNdAqNdNdNdr2   r  )r  r  r'   r(   r  r  r  r   r  r  itemsr	  r  )	rh  r   r  r  rf  r  r  uncond_model_optionsr  s	            r0   r  zGuider_DualModel.predict_noise  s$   :>>*d33~--d.>
AxYfgghij$dh)D)D$]M^M^_z  }B  NC  NC$K,--#e#e]5H5H5J5J#e#e#e //0ADDVCWYZ\dfz{{|}~~**4+;T648UVX`9FX^b^p + r r 	rr2   )NNFNNr   )rA   rB   rC   ri  r   r
  r  __classcell__)r  s   @r0   r  r    s        ! ! ! ! !
) ) ) ) ) )&[ [ [ [ [ [ 8: r r r r r r r rr2   r  c                   P    e Zd Zed             Zeddej        fd            ZeZdS )DualModelGuiderc                    t          j        ddddt           j                            dd          t           j                            ddd	
          t           j                            d          t           j                            dddddd          t           j                            ddd
          gt           j                                        g          S )Nr  zDual Model CFG Guiderr  Tr   z/Model used for the positive (conditional) pass.)r   model_negativezVModel used for the negative (unconditional) pass. Use the same model for ordinary CFG.)optionalr   r  r  g      @r   rS   rk   r   r   r  zsNegative conditioning run on the negative model. Leave unconnected for a text-free (image-only) unconditional pass.)r   r   r    is_experimentalr!   r"   r  r.   s    r0   r1   zDualModelGuider.define_schema  s    y%0- w0abb/$  Ia  b  b%%j11ucsCW[\\%%j4  J%  @  @ Y%%''(
 
 
 	
r2   Nr3   c                     |d i gg}|t          ||          nt          j                            |          }|                    ||           |                    |           t          j        |          S r   )r  r'   r(   r  r  r  r   r6   )r/   r   r  r  r  r  r  s          r0   r?   zDualModelGuider.execute  sx    r
|H<J<V!%888\a\j\t\tuz\{\{8,,,s}V$$$r2   )NNr  rF   r2   r0   r  r    s^        
 
 [
  % %RTR_ % % % [% JJJr2   r  c                   N    e Zd Zed             Zedej        fd            ZeZdS )DisableNoisec                 p    t          j        ddgdg t           j                                        g          S )Nr  z
zero noisemodel/sampling/noiser   )r   r#   Noiser-   r.   s    r0   r1   zDisableNoise.define_schema  s;    y"(>+X__&&'
 
 
 	
r2   r3   c                 B    t          j        t                                S r   )r   r6   rc  r.   s    r0   r?   zDisableNoise.execute  s    }-//000r2   N	rA   rB   rC   rD   r1   r   r6   r?   	get_noiserF   r2   r0   r  r    sW        
 
 [
 1 1 1 1 [1 IIIr2   r  c                   N    e Zd Zed             Zedej        fd            ZeZdS )RandomNoisec                     t          j        ddt           j                            ddddd          gt           j                                        g          S )	Nr%  r  r  r   r  Tr  r   )r   r#   r*   r%   r   r-   r.   s    r0   r1   zRandomNoise.define_schema  sS    y!+FLLqaEWptLuuvX__&&'	
 
 
 	
r2   r3   c                 D    t          j        t          |                    S r   )r   r6   rz  )r/   r  s     r0   r?   zRandomNoise.execute  s    }.z::;;;r2   Nr"  rF   r2   r0   r%  r%    sW        
 
 [
 <BM < < < [< IIIr2   r%  c                   N    e Zd Zed             Zedej        fd            ZeZdS )SamplerCustomAdvancedc                    t          j        ddt           j                            d          t           j                            d          t           j                            d          t           j                            d          t           j                            d          gt           j                            d	          t           j                            d
	          g          S )Nr)  r  r  r  r   r>   rt  r  r   r  r   )	r   r#   r   r%   r  r   r,   r  r-   r.   s    r0   r1   z#SamplerCustomAdvanced.define_schema  s    y+5w''	))
  ++	))	// 	  h 77	  .? @@
 
 
 	
r2   r3   c           
      n   |}|d         }|                                 }t          j                            |j        ||                    dd           |                    dd                     }||d<   d }d|v r|d         }i }t          j        |j        |j        d         dz
  |          }	t          j	        j
         }
|                    |                    |          |||||	|
|j                  }|                    t          j                                                  }|                                 }|                    dd            |                    dd            ||d<   d|v r|j        j                            |d                                                   }|j        r[d	 |                                D             }t          j                            t          j	                            ||                    }|                                 }||d<   n|}t3          j        ||          S )
Nrk  r  r  r  r   r   )r  r  r  rf  r  c                     g | ]	}|j         
S rF   r  r  s     r0   r  z1SamplerCustomAdvanced.execute.<locals>.<listcomp>"  r  r2   )r  r'   r~  r  r  r  r  r  r   r  r  rw  rf  tomodel_managementintermediate_devicer  r   r  r<   rn  ro  rq  rr  r  r   r6   )r/   r  r  r   r>   rt  r  r  r  r  r  rk  r  r  r  r  s                   r0   r?   zSamplerCustomAdvanced.execute  sV   i(|==f>RT`bhblbl  nG  IM  cN  cN  PV  PZ  PZ  [u  w{  P|  P|  }  }(y
6!!-J	!263GVXIY\]I]_hii ;;;-- 4 4V < <lGU[jt  @H  Wc  jo  jt-  u  u**U3GGIIJJkkmm)4000*D111 I9)/BB9T?CVCVCXCXYYF  m C C'..2B2B C C C,99%+:T:TU[]j:k:kll!;;==L&,L##L}S,///r2   Nr  rF   r2   r0   r)  r)    sX        
 
 [
" 0bm 0 0 0 [0B FFFr2   r)  c                   N    e Zd Zed             Zedej        fd            ZeZdS )AddNoisec                 ^   t          j        dddt           j                            d          t           j                            d          t           j                            d          t           j                            d          gt           j                                        g          S )	Nr1  z"experimental/custom_sampling/noiseTr   r  r>   rt  )r   r    r  r!   r"   )r   r#   r$   r%   r   r,   r  r-   r.   s    r0   r1   zAddNoise.define_schema-  s    y9 w''w''	))	//	 	  ""
 
 
 	
r2   r3   c                    t          |          dk    rt          j        |          S |}|d         }|                    |          }|                    d          }|                    d          }|                    d          }	t          |          dk    r$t          j        |d         |d         z
            }
n|d         }
t          j        |          dk    r |	|          }|                    |
||          } ||          }t          j	        |ddd	          }|
                                }||d<   t          j        |          S )
Nr   rk  r5   r  r  r   r   r   )nanposinfneginf)r   r   r6   rw  r;   r7   absr  noise_scaling
nan_to_numr  )r/   r   r  r>   rt  r  noisyr5   r  r  scaler  s               r0   r?   zAddNoise.execute>  sE   v;;!=...i($$V,,//0@AA"334HII!223FGGv;;??IfQi&*455EE1IE|,,q00,,\::L,,UE<HH""5)) CCHHHkkmmI}S!!!r2   N)	rA   rB   rC   rD   r1   r   r6   r?   r  rF   r2   r0   r1  r1  ,  sW        
 
 [
  "BM " " " ["8 IIIr2   r1  c                   J    e Zd Zed             Zedej        fd            ZdS )ManualSigmasc                     t          j        dddgddt           j                            ddd	          gt           j                                        g
          S )Nr=  zcustom noise schedulezdefine sigmaszexperimental/custom_samplingTr>   z1, 0.5F)r   	multiline)r   r   r    r  r!   r"   )r   r#   Stringr%   r,   r-   r.   s    r0   r1   zManualSigmas.define_schema^  s^    y"3_E3 	(eLL Y%%''(	
 	
 	
 		
r2   r3   c                     t          j        d|          }d |D             }t          j        |          }t	          j        |          S )Nz[-+]?(?:\d*\.*\d+)c                 ,    g | ]}t          |          S rF   )r   )r  r   s     r0   r  z(ManualSigmas.execute.<locals>.<listcomp>n  s    +++q%((+++r2   )refindallr7   r8   r   r6   r   s     r0   r?   zManualSigmas.executek  sG    16::++F+++"6**}V$$$r2   Nra  rF   r2   r0   r=  r=  ]  sV        

 

 [

 % % % % [% % %r2   r=  c                   Z    e Zd Zedej        fd            Zedej        fd            ZdS )CFGOverrider3   c                    t          j        ddddt           j                            d          t           j                            dddd	d
d          t           j                            ddddd          t           j                            ddddd          gt           j                                        g          S )NrF  zCFG OverridezOverride cfg to a fixed value over a [start, end] percent (sigma) range. With multiple overrides, the one nearest the sampler wins on overlap.zsampling/custom_samplingr   r  r   r   rS   rk   r   r   start_percentr   r   end_percent)r   r   r^  r    r!   r"   )r   r#   r$   r%   r+   r-   r.   s    r0   r1   zCFGOverride.define_schemas  s    y!'`/w''ucsCW[\\#TYZZ}csRWXX	 X__&&'
 
 
 	
r2   c                 8  	 |                     d          }|                    |          |                    |          		fd}|                                }|                    t          j        j        j        |           t          j	        |          S )Nr5   c                     t          |d                                         d                   }|cxk    rk    s
n  | |i |S | j        }|j        }|_        	  | |i |||_        S # ||_        w xY w)Nr   r   )r   flatten	class_objr  )	executorargskwargsrz   r  savedr  sigma_hisigma_los	         r0   predict_noise_wrapperz2CFGOverride.execute.<locals>.predict_noise_wrapper  s    $q'//++A.//E11111111x0000'FJEFJ#x000"

U
""""s   A+ +	A4)
r;   r   r   add_wrapperr'   patcher_extension
WrappersMPPREDICT_NOISEr   r6   )
r/   r   r  rH  rI  msrT  mrR  rS  s
     `     @@r0   r?   zCFGOverride.execute  s    ##$455&&}55&&{33
	# 
	# 
	# 
	# 
	# 
	# 
	# KKMM	e-8FH]^^^}Qr2   N)	rA   rB   rC   rD   r   r#   r1   r6   r?   rF   r2   r0   rF  rF  r  sd        
bi 
 
 
 [
          [     r2   rF  c                   L    e Zd Zedeeej                          fd            ZdS )CustomSamplersExtensionr3   c                   K   g t           t          t          t          t          t
          t          t          t          t          t          t          t          t          t          t          t           t"          t$          t&          t(          t*          t,          t.          t0          t2          t4          t6          t8          t:          t<          t>          t@          tB          tD          tF          tH          S r   )%r  rF  r	   rH   r]   rb   rg   r   r   rq   r   r  r"  r(  r   r  r  r  r0  r=  rJ  rZ  r   r   r   r   r   r   r  r  r  r  r%  r  r1  r)  r=  rg  s    r0   get_node_listz%CustomSamplersExtension.get_node_list  s     &
&
&
 &
 	&

 !&
 %&
 &
 &
 "&
 &
 &
 "&
 '&
 &
  &
   !&
" #&
$ &%&
& !'&
( )&
* +&
, -&
. /&
0 1&
2 3&
4 5&
6 %7&
8 #9&
: ;&
< =&
> ?&
@ A&
B C&
D E&
F G&
H "I&
J K&
 &	
r2   N)	rA   rB   rC   r   r  typer   	ComfyNoder^  rF   r2   r0   r\  r\    sE        '
T$r|*<%= '
 '
 '
 X'
 '
 '
r2   r\  r3   c                  "   K   t                      S r   )r\  rF   r2   r0   comfy_entrypointrb    s      "$$$r2   )Br   comfy.samplersr'   comfy.sampler_helperscomfy.patcher_extensioncomfy.samplecomfy.k_diffusionr   rX   r   r  r7   comfy.utilsr  typing_extensionsr   comfy_api.latestr   r   rC  r`  r	   rH   r]   rb   rg   rq   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r"  r(  r0  r=  rJ  rZ  rc  rz  r  r(   r  r  r  r  r  r  r  r  r%  r)  r1  r=  rF  r\  rb  rF   r2   r0   <module>rk     su                    > > > > > > ' ' ' ' ' '              & & & & & & / / / / / / / / 				    R\   <    bl   ,    2<   *    r|   ,    r|   0    r|   0    BL   ,    ",   ,    ",   0       4       ,    BL   *3 3 3 3 3r| 3 3 3l    R\   8    R\   "    ",   2    ",   6    r|   4       (    BL   (       .       "    2<   >" " " " "BL " " "J* * * * *bl * * *Z &  &  &  &  &BL  &  &  &Fw w w w w w w w O O O O O O O O= = = = =BL = = =~5 5 5 5 55>+ 5 5 5    ",   ,       2N N N N NU^- N N N:    BL   :/r /r /r /r /ru~/ /r /r /rb    bl   <    2<   $    ",   "5 5 5 5 5BL 5 5 5n/ / / / /r| / / /b% % % % %2< % % %*&  &  &  &  & ", &  &  & R)
 )
 )
 )
 )
n )
 )
 )
X% 7 % % % % % %r2   