
    3j                        S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
r
S SKrS SKrS SKrS SKJr  S SKJrJr  S SKr " S S\R(                  5      r " S S	\R(                  5      r " S
 S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r  " S S\R(                  5      r! " S  S!\R(                  5      r" " S" S#\R(                  5      r# " S$ S%\R(                  5      r$ " S& S'\R(                  5      r% " S( S)\R(                  5      r& " S* S+\R(                  5      r' " S, S-\R(                  5      r( " S. S/\R(                  5      r) " S0 S1\R(                  5      r* " S2 S3\R(                  5      r+ " S4 S5\R(                  5      r, " S6 S7\R(                  5      r- " S8 S9\R(                  5      r. " S: S;5      r/ " S< S=5      r0 " S> S?\R(                  5      r1 " S@ SA\Rd                  Rf                  5      r4 " SB SC\R(                  5      r5 " SD SE\R(                  5      r3 " SF SG\Rd                  Rf                  5      r6 " SH SI\R(                  5      r7 " SJ SK\Rd                  Rf                  5      r8 " SL SM\R(                  5      r9 " SN SO\R(                  5      r: " SP SQ\R(                  5      r; " SR SS\R(                  5      r< " ST SU\R(                  5      r= " SV SW\R(                  5      r> " SX SY\R(                  5      r? " SZ S[\5      r@S\\@4S] jrAg)^    N)sampling)	sa_solver)override)ComfyExtensionioc                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)BasicScheduler   c                    [         R                  " SS[         R                  R                  S5      [         R                  R                  S[
        R                  R                  S9[         R                  R                  SSSS	S
9[         R                  R                  SSSSSS9/[         R                  R                  5       /S9$ )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_schemaBasicScheduler.define_schema   s    yy$0w'{ENN4R4RSWbaUCy#3CdS	 YY%%'(

 
	
    returnc                 B   UnUS:  a=  US::  a*  [         R                  " [        R                  " / 5      5      $ [	        X4-  5      n[
        R                  R                  UR                  S5      X%5      R                  5       nXcS-   * S  n[         R                  " U5      $ )Nr   r   model_samplingr   )
r   
NodeOutputtorchFloatTensorintr(   r)   calculate_sigmasget_model_objectcpu)r0   r   r   r   r   total_stepssigmass          r1   executeBasicScheduler.execute    s    S=#~}}U%6%6r%:;;em,K001G1GHX1Y[drvvx!)&}}V$$r4    N__name__
__module____qualname____firstlineno__classmethodr2   r   r8   rA   
get_sigmas__static_attributes__rC   r4   r1   r	   r	      s:    
 
 	%"-- 	% 	% Jr4   r	   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)KarrasScheduler/   c                 t   [         R                  " SS[         R                  R                  SSSSS9[         R                  R                  SS	S
SSSSS9[         R                  R                  SSS
SSSSS9[         R                  R                  SSS
SSSSS9/[         R
                  R                  5       /S9$ )NrM   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    r1   r2   KarrasScheduler.define_schema0   s    yy%0WbaUC{I3FY]ejuyz{I3FY]ejuyzucsDX]hlm	 YY%%'(

 
	
r4   r5   c                 X    [         R                  " XX$S9n[        R                  " U5      $ N)nrV   rP   rX   )k_diffusion_samplingget_sigmas_karrasr   r8   r0   r   rP   rV   rX   r@   s         r1   rA   KarrasScheduler.execute>   s$    %77%`is}}V$$r4   rC   NrD   rC   r4   r1   rM   rM   /   :    
 
 %"-- % % Jr4   rM   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)ExponentialSchedulerE   c                 0   [         R                  " SS[         R                  R                  SSSSS9[         R                  R                  SS	S
SSSSS9[         R                  R                  SSS
SSSSS9/[         R
                  R                  5       /S9$ )Nre   r   r   r   r   r   r   rP   rQ   r   rR   r   FTrS   rV   rW   r   rZ   r/   s    r1   r2   "ExponentialScheduler.define_schemaF   s    yy*0WbaUC{I3FY]ejuyz{I3FY]ejuyz
 YY%%'(	
 		
r4   r5   c                 X    [         R                  " XUS9n[        R                  " U5      $ )N)r^   rV   rP   )r_   get_sigmas_exponentialr   r8   )r0   r   rP   rV   r@   s        r1   rA   ExponentialScheduler.executeS   s$    %<<ueno}}V$$r4   rC   NrD   rC   r4   r1   re   re   E   s:    

 

 %R]] % % Jr4   re   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)PolyexponentialSchedulerZ   c                 t   [         R                  " SS[         R                  R                  SSSSS9[         R                  R                  SS	S
SSSSS9[         R                  R                  SSS
SSSSS9[         R                  R                  SSS
SSSSS9/[         R
                  R                  5       /S9$ )Nrm   r   r   r   r   r   r   rP   rQ   r   rR   r   FTrS   rV   rW   rX   r   rY   r   rZ   r/   s    r1   r2   &PolyexponentialScheduler.define_schema[   s    yy.0WbaUC{I3FY]ejuyz{I3FY]ejuyzucsDX]hlm	 YY%%'(

 
	
r4   r5   c                 X    [         R                  " XX$S9n[        R                  " U5      $ r]   )r_   get_sigmas_polyexponentialr   r8   ra   s         r1   rA    PolyexponentialScheduler.executei   s$    %@@5ir|}}V$$r4   rC   NrD   rC   r4   r1   rm   rm   Z   rc   r4   rm   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)LaplaceSchedulerp   c                    [         R                  " SS[         R                  R                  SSSSS9[         R                  R                  SS	S
SSSSS9[         R                  R                  SSS
SSSSS9[         R                  R                  SS
SSSSSS9[         R                  R                  SSS
SSSSS9/[         R
                  R                  5       /S9$ )Nru   r   r   r   r   r   r   rP   rQ   r   rR   r   FTrS   rV   rW   mug      $      $@皙?beta      ?r   rZ   r/   s    r1   r2   LaplaceScheduler.define_schemaq   s    yy&0WbaUC{I3FY]ejuyz{I3FY]ejuyztSeCW\gklvsCW\gkl YY%%'(
 	
r4   r5   c                 Z    [         R                  " XX$US9n[        R                  " U5      $ )N)r^   rV   rP   rx   r{   )r_   get_sigmas_laplacer   r8   )r0   r   rP   rV   rx   r{   r@   s          r1   rA   LaplaceScheduler.execute   s'    %885ajx|}}}V$$r4   rC   NrD   rC   r4   r1   ru   ru   p   s:    
 
 %r}} % % Jr4   ru   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SDTurboScheduler   c                 $   [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSSS9[         R
                  R                  SS	S
S	SS9/[         R                  R                  5       /S9$ )Nr   r   r   r   r   
   r   r   r   r   r   r   r   r   r$   r%   r&   r+   r,   r-   r.   r/   s    r1   r2   SDTurboScheduler.define_schema   su    yy&0w'WaQB?y#1#DQ
 YY%%'(	
 		
r4   r5   c                 L   S[        SU-  5      -
  n[        R                  " [        R                  " SS5      S-  S-
  S5      XDU-    nUR	                  S5      R                  U5      n[        R                  " XfR                  S/5      /5      n[        R                  " U5      $ )Nr   r      d   )r   r7   )
r;   r9   fliparanger=   sigmacat	new_zerosr   r8   )r0   r   r   r   
start_step	timestepsr@   s          r1   rA   SDTurboScheduler.execute   s    #b7l++
JJu||Ar2S81<dCJ\aOab	''(89??	JF$4$4aS$9:;}}V$$r4   rC   NrD   rC   r4   r1   r   r      s:    

 

 %r}} % % Jr4   r   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)BetaSamplingScheduler   c                 l   [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSSS9[         R
                  R                  S	S
SSSSSS9[         R
                  R                  SS
SSSSSS9/[         R                  R                  5       /S9$ )Nr   r   r   r   r   r   r   r   alphag333333?r   g      I@r   FTrS   r{   r   r   r/   s    r1   r2   #BetaSamplingScheduler.define_schema   s    yy+0w'WbaUCw$TY^imnvsDX]hlm	 YY%%'(

 
	
r4   r5   c                     [         R                  R                  UR                  S5      X#US9n[        R
                  " U5      $ )Nr7   )r   r{   )r(   r)   beta_schedulerr=   r   r8   )r0   r   r   r   r{   r@   s         r1   rA   BetaSamplingScheduler.execute   s:    ..u/E/EFV/WY^rv.w}}V$$r4   rC   NrD   rC   r4   r1   r   r      s:    
 
 %2== % % Jr4   r   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)VPScheduler   c                 t   [         R                  " SS[         R                  R                  SSSSS9[         R                  R                  SS	S
SSSSS9[         R                  R                  SSS
SSSSS9[         R                  R                  SSS
SSSSS9/[         R
                  R                  5       /S9$ )Nr   r   r   r   r   r   r   beta_dgfffff3@r   rR   r   FTrS   beta_minrz   eps_sMbP?r   -C6?r   rZ   r/   s    r1   r2   VPScheduler.define_schema   s    yy!0WbaUCx3FQU]bmqrz3CVRV^cnrsw3Cf\alpq	 YY%%'(

 
	
r4   r5   c                 X    [         R                  " XX4S9n[        R                  " U5      $ )N)r^   r   r   r   )r_   get_sigmas_vpr   r8   )r0   r   r   r   r   r@   s         r1   rA   VPScheduler.execute   s$    %33eU]k}}V$$r4   rC   NrD   rC   r4   r1   r   r      s:    
 
 % % % Jr4   r   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SplitSigmas   c                    [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSSS9/[         R                  R                  SS	9[         R                  R                  S
S	9/S9$ )Nr   model/sampling/sigmasr@   r   r   r   r   high_sigmasdisplay_name
low_sigmasr   )r   r$   r-   r&   r+   r.   r/   s    r1   r2   SplitSigmas.define_schema   sw    yy!,		)VQA5A
 		  m <		  l ;
 	
r4   r5   c                 F    US US-    nXS  n[         R                  " X45      $ Nr   )r   r8   )r0   r@   r   sigmas1sigmas2s        r1   rA   SplitSigmas.execute   s*    $(#-}}W..r4   rC   NrD   rC   r4   r1   r   r      s:    
 
 /bmm / /
 Jr4   r   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SplitSigmasDenoise   c                    [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSSSS9/[         R                  R                  S	S
9[         R                  R                  SS
9/S9$ )Nr   r   r@   r   r   r   r   r   r   r   r   r   r   r$   r-   r&   r,   r.   r/   s    r1   r2    SplitSigmasDenoise.define_schema   sy    yy(,		)y#3CdS
 		  m <		  l ;
 	
r4   r5   c                     [        UR                  S   S-
  S5      n[        X2-  5      nUS U*  nXS-   * S  n[        R                  " XV5      $ )Nr   r   )r   shaperT   r   r8   )r0   r@   r   r   r?   r   r   s          r1   rA   SplitSigmasDenoise.execute   sW    FLL$q(!,EO,K.)?+,-}}W..r4   rC   NrD   rC   r4   r1   r   r      s:    
 
 / / / Jr4   r   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)
FlipSigmas   c                     [         R                  " SS[         R                  R                  S5      /[         R                  R	                  5       /S9$ )Nr   r   r@   r   )r   r$   r-   r&   r.   r/   s    r1   r2   FlipSigmas.define_schema   s?    yy ,IIOOH-.YY%%'(	
 	
r4   r5   c                     [        U5      S:X  a  [        R                  " U5      $ UR                  S5      nUS   S:X  a  SUS'   [        R                  " U5      $ )Nr   r   )lenr   r8   r   )r0   r@   s     r1   rA   FlipSigmas.execute  sM    v;!==((Q!9>F1I}}V$$r4   rC   NrD   rC   r4   r1   r   r      s:    
 
 % % % Jr4   r   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SetFirstSigmai  c                     [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSSSS	S
9/[         R                  R                  5       /S9$ )Nr   r   r@   r   g      a@r        @r   Fr   r   r   r   rT   r   r   r/   s    r1   r2   SetFirstSigma.define_schema  sa    yy#,		)w3GRW_de YY%%'(
 	
r4   r5   c                 V    UR                  5       nX!S'   [        R                  " U5      $ Nr   )cloner   r8   )r0   r@   r   s      r1   rA   SetFirstSigma.execute!  s#    q	}}V$$r4   rC   N)rE   rF   rG   rH   rI   r2   r   r8   rA   set_first_sigmarK   rC   r4   r1   r   r     s:    	
 	
 %r}} % %
 Or4   r   c                   |    \ rS rSr\S 5       r\S\R                  S\S\	S\	S\
S\R                  4S	 j5       r\rS
rg)ExtendIntermediateSigmasi)  c                    [         R                  " SS/S[         R                  R                  S5      [         R                  R                  SSSSS	9[         R
                  R                  S
SSSSSS9[         R
                  R                  SSSSSSS9[         R                  R                  S/ SQS9/[         R                  R                  5       /S9$ )Nr   zinterpolate sigmasr   r@   r      r   r   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    r1   r2   &ExtendIntermediateSigmas.define_schema*  s    yy.01,		)WaQC@/4W[_glm~t'X\dijy2NO YY%%'(
 	
r4   r@   r   r   r   r   r5   c                 &   US:  a  [        S5      nS S S S.U   n[        R                  " SSUS-   UR                  S9SS	 nU" U5      n/ n	[	        [        U5      S-
  5       HZ  n
X   nXS-      nU	R                  U5        XKs=::  a  U::  d  M-  O  M1  XU-
  -  U-   nU	R                  UR                  5       5        M\     [        U5      S:  a  U	R                  US	   5        [        R                  " U	5      n	[        R                  " U	5      $ )
Nr   infc                     U $ NrC   xs    r1   <lambda>2ExtendIntermediateSigmas.execute.<locals>.<lambda>@  s    r4   c                 V    [         R                  " U [        R                  -  S-  5      $ )Nr   )r9   sinmathpir   s    r1   r   r   A  s    		!DGG)A+ 6r4   c                 \    S[         R                  " U [        R                  -  S-  5      -
  $ )Nr   r   )r9   cosr   r   r   s    r1   r   r   B  s    EIIaik$: :r4   r   r   )devicer   )floatr9   linspacer   ranger   appendextendtolistr:   r   r8   )r0   r@   r   r   r   r   interpolatorr   computed_spacingextended_sigmasisigma_current
sigma_nextinterpolated_stepss                 r1   rA    ExtendIntermediateSigmas.execute:  s   A"5\N "6:
 	 NN1a6==A!BG'?s6{Q'A"IM!J""=1>>>%5m9S%TWd%d"&&'9'@'@'BC ( v;?""6":.++O<}}_--r4   rC   N)rE   rF   rG   rH   rI   r2   r9   Tensorr;   r   strr   r8   rA   r   rK   rC   r4   r1   r   r   )  so    
 
 .U\\ .# .u .\a .lo .tv  uB  uB . .B Fr4   r   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SamplingPercentToSigmai_  c                     [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSSSS9[         R
                  R                  S	S
SS9/[         R                  R                  SS9/S9$ )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    r1   r2   $SamplingPercentToSigma.define_schema`  s    yy,,w'13CSW]^

  !6  PI   J
 XX__-_@A	
 		
r4   r5   c                    UR                  S5      nUR                  U5      nU(       aA  US:X  a  UR                  R                  5       nO US:X  a  UR                  R                  5       n[
        R                  " U5      $ )Nr7   r   r   )r=   percent_to_sigmarP   itemrV   r   r8   )r0   r   r  r  r7   	sigma_vals         r1   rA   SamplingPercentToSigma.executem  sn    //0@A"334DE	3&*4499;	!S(*4499;	}}Y''r4   rC   N)rE   rF   rG   rH   rI   r2   r   r8   rA   	get_sigmarK   rC   r4   r1   r  r  _  s:    

 

 (bmm ( ( Ir4   r  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)KSamplerSelecti{  c           	          [         R                  " SS[         R                  R                  S[        R
                  R                  S9/[         R                  R                  5       /S9$ )Nr  model/sampling/samplerssampler_namer   r   )	r   r$   r'   r&   r(   r)   SAMPLER_NAMESSamplerr.   r/   s    r1   r2   KSamplerSelect.define_schema|  sM    yy$.HHNN>5>>;W;WNXYZZ&&()	
 	
r4   r5   c                 l    [         R                  R                  U5      n[        R                  " U5      $ r   )r(   r)   sampler_objectr   r8   )r0   r  samplers      r1   rA   KSamplerSelect.execute  s%    ..//=}}W%%r4   rC   NrE   rF   rG   rH   rI   r2   r   r8   rA   get_samplerrK   rC   r4   r1   r  r  {  s:    
 
 &bmm & & Kr4   r  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SamplerDPMPP_3M_SDEi  c                 2   [         R                  " SS[         R                  R                  SSSSSSS	S
9[         R                  R                  SSSSSSS	S
9[         R                  R                  SSS/S	S9/[         R
                  R                  5       /S9$ )Nr   r  etar   r   rY   r   FTrS   s_noisenoise_devicegpur>   r   rU   r   r   r$   r,   r&   r'   r  r.   r/   s    r1   r2   !SamplerDPMPP_3M_SDE.define_schema  s    yy).ucsDX]hlmy#3EPT\alpq~u~PTU
 ZZ&&()	
 		
r4   r5   c                     US:X  a  SnOSn[         R                  R                  XAUS.5      n[        R                  " U5      $ )Nr>   dpmpp_3m_sdedpmpp_3m_sde_gpur"  r#  r(   r)   ksamplerr   r8   )r0   r"  r#  r$  r  r  s         r1   rA   SamplerDPMPP_3M_SDE.execute  s=    5 )L-L..)),PW8XY}}W%%r4   rC   Nr  rC   r4   r1   r   r     s:    

 

 &BMM & & Kr4   r   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SamplerDPMPP_2M_SDEi  c                 p   [         R                  " SS[         R                  R                  SSS/S9[         R                  R                  SSS	S
SSSS9[         R                  R                  SSS	S
SSSS9[         R                  R                  SSS/SS9/[         R
                  R                  5       /S9$ )Nr1  r  solver_typemidpointheunr   r"  r   r   rY   r   FTrS   r#  r$  r%  r>   r&  r   r   r$   r'   r&   r,   r  r.   r/   s    r1   r2   !SamplerDPMPP_2M_SDE.define_schema  s    yy).}z66JKucsDX]hlmy#3EPT\alpq~u~PTU	 ZZ&&()

 
	
r4   r5   c                     US:X  a  SnOSn[         R                  R                  XRX1S.5      n[        R                  " U5      $ )Nr>   dpmpp_2m_sdedpmpp_2m_sde_gpu)r"  r#  r3  r-  )r0   r3  r"  r#  r$  r  r  s          r1   rA   SamplerDPMPP_2M_SDE.execute  s=    5 )L-L..)),PW8tu}}W%%r4   rC   Nr  rC   r4   r1   r1  r1    s:    
 
 & & & Kr4   r1  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SamplerDPMPP_SDEi  c                 v   [         R                  " SS[         R                  R                  SSSSSSS	S
9[         R                  R                  SSSSSSS	S
9[         R                  R                  SSSSSSS	S
9[         R                  R                  SSS/S	S9/[         R
                  R                  5       /S9$ )Nr=  r  r"  r   r   rY   r   FTrS   r#  rr|   r$  r%  r>   r&  r   r'  r/   s    r1   r2   SamplerDPMPP_SDE.define_schema  s    yy&.ucsDX]hlmy#3EPT\alpqsCSe$V[fjk~u~PTU	 ZZ&&()

 
	
r4   r5   c                     US:X  a  SnOSn[         R                  R                  XQX#S.5      n[        R                  " U5      $ )Nr>   	dpmpp_sdedpmpp_sde_gpu)r"  r#  r?  r-  )r0   r"  r#  r?  r$  r  r  s          r1   rA   SamplerDPMPP_SDE.execute  s=    5 &L*L..)),PW8`a}}W%%r4   rC   Nr  rC   r4   r1   r=  r=    s:    
 
 &r}} & & Kr4   r=  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SamplerDPMPP_2S_Ancestrali  c                     [         R                  " SS[         R                  R                  SSSSSSS	9[         R                  R                  S
SSSSSS	9/[         R                  R                  5       /S9$ )NrF  r  r"  r   r   rY   r   Fr   r#  r   r   r$   r,   r&   r  r.   r/   s    r1   r2   'SamplerDPMPP_2S_Ancestral.define_schema  sn    yy/.ucsDX]^y#3EPT\ab ZZ&&()
 	
r4   r5   c                 r    [         R                  R                  SXS.5      n[        R                  " U5      $ )Ndpmpp_2s_ancestralr,  r-  r0   r"  r#  r  s       r1   rA   !SamplerDPMPP_2S_Ancestral.execute  s+    ..))*>@`a}}W%%r4   rC   Nr  rC   r4   r1   rF  rF    :    	
 	
 &bmm & & Kr4   rF  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SamplerEulerAncestrali  c                     [         R                  " SS[         R                  R                  SSSSSSS	S
9[         R                  R                  SSSSSSS	S
9/[         R                  R                  5       /S9$ )NrP  r  r"  r   r   rY   r   FTrS   r#  r   rH  r/   s    r1   r2   #SamplerEulerAncestral.define_schema  st    yy+.ucsDX]hlmy#3EPT\alpq ZZ&&()
 	
r4   r5   c                 r    [         R                  R                  SXS.5      n[        R                  " U5      $ )Neuler_ancestralr,  r-  rL  s       r1   rA   SamplerEulerAncestral.execute  s+    ..))*;S=]^}}W%%r4   rC   Nr  rC   r4   r1   rP  rP    rN  r4   rP  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SamplerEulerAncestralCFGPPi  c                     [         R                  " SSS[         R                  R                  SSSSSSS	9[         R                  R                  S
SSSSSS	9/[         R                  R                  5       /S9$ )NrW  zSamplerEulerAncestralCFG++r  r"  r   r   r   Fr   r#  ry   r    r   r!   r"   r#   rH  r/   s    r1   r2   (SamplerEulerAncestralCFGPP.define_schema  sp    yy05.ucs$V[\y#3Dt[`a ZZ&&()	
 		
r4   r5   c                 r    [         R                  R                  SXS.5      n[        R                  " U5      $ )Neuler_ancestral_cfg_ppr,  r-  rL  s       r1   rA   "SamplerEulerAncestralCFGPP.execute  s0    ..))$,. }}W%%r4   rC   Nr  rC   r4   r1   rW  rW    s:    

 

 &bmm & & Kr4   rW  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)
SamplerLMSi  c                     [         R                  " SS[         R                  R                  SSSSSS9/[         R                  R                  5       /S	9$ )
Nr_  r  order   r   r   Tr   r   r   rU   r   )r   r$   r+   r&   r  r.   r/   s    r1   r2   SamplerLMS.define_schema  sI    yy .FFLL!dLSTZZ&&()	
 	
r4   r5   c                 r    [         R                  R                  SSU05      n[        R                  " U5      $ )Nlmsra  r-  )r0   ra  r  s      r1   rA   SamplerLMS.execute#  s,    ..))%'51AB}}W%%r4   rC   Nr  rC   r4   r1   r_  r_    s:    
 
 &r}} & & Kr4   r_  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SamplerDPMAdaptativei*  c                    [         R                  " SS[         R                  R                  SSSSSS9[         R                  R                  SS	S
SSSSS9[         R                  R                  SSS
SSSSS9[         R                  R                  SS	S
SSSSS9[         R                  R                  SS
S
SSSSS9[         R                  R                  SSS
SSSSS9[         R                  R                  SS
S
SSSSS9[         R                  R                  SSS
SSSSS9[         R                  R                  SS
S
SSSSS9[         R                  R                  SSS
SSSSS9/
[         R
                  R                  5       /S9$ )Nri  r  ra     r   Trc  rtolg?r   rY   r   FrS   atolgq?h_initpcoefficoeffr   dcoeffaccept_safetygQ?r"  r#  r   )r   r$   r+   r&   r,   r  r.   r/   s    r1   r2   "SamplerDPMAdaptative.define_schema+  sq   yy*.WaQAMvt%dZ_jnovv3EPT\alpqx3EPT\alpqx#5t[`kopx#5t[`kopx#5t[`kop#5W[chswxucsDX]hlmy#3EPT\alpq ZZ&&()
 	
r4   r5   c                 |    [         R                  R                  SXX4UXgXU
S.
5      n[        R                  " U5      $ )Ndpm_adaptive)
ra  rl  rm  rn  ro  rp  rq  rr  r"  r#  r-  )r0   ra  rl  rm  rn  ro  rp  rq  rr  r"  r#  r  s               r1   rA   SamplerDPMAdaptative.execute?  sI    ..)).Eae  DJHN  tAHO;R S }}W%%r4   rC   Nr  rC   r4   r1   ri  ri  *  s=    
 
& &hjhuhu & & Kr4   ri  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SamplerER_SDEiI  c                 r   [         R                  " SS[         R                  R                  S/ SQS9[         R                  R                  SSSSS	S
9[         R
                  R                  SSSSSSSS	S9[         R
                  R                  SSSSSSS	S9/[         R                  R                  5       /S9$ )Nrx  r  r3  )ER-SDEReverse-time SDEODEr   	max_stagerk  r   Trc  r"  r   r   rY   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   rT   r  rU   r#  rS   r   )r   r$   r'   r&   r+   r,   r  r.   r/   s    r1   r2   SamplerER_SDE.define_schemaJ  s    yy#.}6[\[!DQucsDX]  hr  }A  By#3EPT\alpq	 ZZ&&()

 
	
r4   r5   c                    ^ US:X  d  US:X  a
  TS:X  a  SmSnU4S jnUS:X  a  S nOUnSn[         R                  R                  XtXbS.5      n[        R                  " U5      $ )Nr|  r{  r   c                    > U TS-   -  $ r   rC   )r   r"  s    r1   reverse_time_sde_noise_scaler<SamplerER_SDE.execute.<locals>.reverse_time_sde_noise_scaler^  s    q>!r4   rz  er_sde)r#  noise_scalerr}  r-  )	r0   r3  r}  r"  r#  r  r  r  r  s	      `     r1   rA   SamplerER_SDE.executeX  sq    %K3E$E#QR(CG	" ("L8L..)),]i  9C  D}}W%%r4   rC   Nr  rC   r4   r1   rx  rx  I  s:    
 
 &bmm & &$ Kr4   rx  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SamplerSASolverin  c                    [         R                  " SS/S[         R                  R                  S5      [         R                  R                  SSSSS	S
SS9[         R                  R                  SSSSSSS9[         R                  R                  SSSSSSS9[         R                  R                  SSSSS	S
SS9[         R
                  R                  SSSSSS9[         R
                  R                  SSSSSS9[         R                  R                  SSS9[         R                  R                  SSS9/	[         R                  R                  5       /S 9$ )!Nr  sder  r   r"  r   r   ry   r   FTrS   sde_start_percentg?r   )r   r   r   r   rU   sde_end_percentg?r#  rY   predictor_orderrk  r      rc  corrector_orderrb  r   use_pece)rU   simple_order_2r   )	r   r$   r%   r&   r,   r+   r	  r  r.   r/   s    r1   r2   SamplerSASolver.define_schemao  s.   yy%!7.w'ucs4W\gkl2CScX]hlm0#3CV[fjky#3EPT\alpq.qaRVW.qaRVW

  d ;

  !1D A
 ZZ&&()
 	
r4   r5   c
           
         UR                  S5      n
U
R                  U5      nU
R                  U5      n[        R                  " XUS9nSn[        R
                  R                  UUUUUUU	S.5      n[        R                  " U5      $ )Nr7   )r"  r   )tau_funcr#  r  r  r  r  )	r=   r  r   get_tau_interval_funcr(   r)   r.  r   r8   )r0   r   r"  r  r  r#  r  r  r  r  r7   start_sigma	end_sigmar  r  r  s                   r1   rA   SamplerSASolver.execute  s    //0@A$556GH"33OD	22;sS"..))$"#2#2$"0

 }}W%%r4   rC   Nr  rC   r4   r1   r  r  n  sI    
 
& &  NP  N[  N[ & &( Kr4   r  c                   P    \ rS rSr\S 5       r\S\R                  4S j5       rSr	g)SamplerSEEDS2i  c                    [         R                  " SSS/S[         R                  R                  SSS/S9[         R                  R                  S	S
SSSSSSS9[         R                  R                  SS
SSSSSSS9[         R                  R                  SSSS
SSSSS9/[         R
                  R                  5       /SS9$ )Nr  r  zexp heunr  r3  phi_1phi_2r   r"  r   r   rY   r   FzStochastic strengthTr~  r#  zSDE noise multiplierr?  r|   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#   descriptionr6  r/   s    r1   r2   SamplerSEEDS2.define_schema  s    yy#!:..}w6HIucsDX]g|  HL  My#3EPT\a  lB  MQ  RsCTsUZ  e^  im  n	 ZZ&&()C
 	
r4   r5   c                 x    Sn[         R                  R                  UX#XAS.5      n[        R                  " U5      $ )Nseeds_2)r"  r#  r?  r3  r-  )r0   r3  r"  r#  r?  r  r  s          r1   rA   SamplerSEEDS2.execute  s7     ..))!P
 }}W%%r4   rC   N
rE   rF   rG   rH   rI   r2   r   r8   rA   rK   rC   r4   r1   r  r    s3    
 
. &bmm & &r4   r  c                        \ rS rSrS rS rSrg)Noise_EmptyNoisei  c                     SU l         g r   seedselfs    r1   __init__Noise_EmptyNoise.__init__  s	    	r4   c           
         US   nUR                   (       a~  UR                  5       n/ nU HG  nUR                  [        R                  " UR
                  UR                  UR                  SS95        MI     [        R                  R                  U5      $ [        R                  " UR
                  UR                  UR                  SS9$ )Nsamplesr>   )dtypelayoutr   )	is_nestedunbindr   r9   zerosr   r  r  r(   nested_tensorNestedTensor)r  input_latentlatent_imagetensorsr  ts         r1   generate_noiseNoise_EmptyNoise.generate_noise  s    #I.!!"))+GEU[[Y^_` &&33E::;;|119K9KT`TgTgpuvvr4   r  NrE   rF   rG   rH   r  r  rK   rC   r4   r1   r  r    s    	wr4   r  c                        \ rS rSrS rS rSrg)Noise_RandomNoisei  c                     Xl         g r   r  )r  r  s     r1   r  Noise_RandomNoise.__init__  s    	r4   c                 z    US   nSU;   a  US   OS n[         R                  R                  X R                  U5      $ )Nr  batch_index)r(   sampleprepare_noiser  )r  r  r  
batch_indss       r1   r   Noise_RandomNoise.generate_noise  s;    #I.4A\4Q\-0W[
||)),		:NNr4   r  Nr  rC   r4   r1   r  r    s    Or4   r  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SamplerCustomi  c                    [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSS9[         R
                  R                  SSSS	SS
9[         R                  R                  SSSSSSS9[         R                  R                  S5      [         R                  R                  S5      [         R                  R                  S5      [         R                  R                  S5      [         R                  R                  S5      /	[         R                  R                  SS9[         R                  R                  SS9/S9$ )Nr  model/sampling/customr   	add_noiseT)r   rU   
noise_seedr       r   r   r   control_after_generatecfg       @r   rY   rz   r   r   positivenegativer  r@   r  outputr   denoised_outputr   )r   r$   r%   r&   r	  r+   r,   Conditioningr  r-   Latentr.   r/   s    r1   r2   SamplerCustom.define_schema  s   yy#,w'

  dT J\1!ASlpqucsCW[\%%j1%%j1

  +		)		/
 		  h 7		  .? @
 	
r4   r5   c
                 L   U	n
U
S   n	U
R                  5       n
[        R                  R                  XU
R	                  SS 5      U
R	                  SS 5      5      n	XS'   U(       d  [        5       R                  U
5      nO[        U5      R                  U
5      nS nSU
;   a  U
S   n0 n[        R                  " XR                  S   S-
  U5      n[        R                  R                  (       + n[        R                  R                  XXGXXiXXS9nU
R                  5       nUR                  SS 5        UR                  SS 5        UUS'   SU;   a  UR                  R!                  US   R#                  5       5      nUR$                  (       ag  UR'                  5        Vs/ s H  nUR                  PM     nn[        R(                  R+                  [        R                  R-                  UU5      5      nU
R                  5       nUUS'   OUn[.        R0                  " UU5      $ s  snf )	Nr  downscale_ratio_spacialdownscale_ratio_temporal
noise_maskr   r   )r  callbackdisable_pbarr  x0)copyr(   r  fix_empty_latent_channelsgetr  r  r  latent_previewprepare_callbackr   utilsPROGRESS_BAR_ENABLEDsample_custompopr   process_latent_outr>   r  r  r  r  unpack_latentsr   r8   )r0   r   r  r  r  r  r  r  r@   r  latentnoiser  	x0_outputr  r  r  outx0_outr   latent_shapesout_denoiseds                         r1   rA   SamplerCustom.execute  s   i(||==eSYS]S]^wy}S~  AG  AK  AK  Lf  hl  Am  n(y$&55f=E%j1@@HE
6!-J	!225,,r:JQ:NPYZ ;;;;;,,,,U3[c  I  kw,  Ikkm)40*D1 I9[[33IdO4G4G4IJF  29..2B C2BQ2B C,,99%++:T:TU[]j:kl!;;=L&,L#L}}S,// !Ds   H!rC   NrE   rF   rG   rH   rI   r2   r   r8   rA   r  rK   rC   r4   r1   r  r    s>    
 
* #0npn{n{ #0 #0J Fr4   r  c                       \ rS rSrS rSrg)Guider_Basici  c                 *    U R                  SU05        g )Nr  )inner_set_conds)r  r  s     r1   	set_condsGuider_Basic.set_conds  s    j(34r4   rC   N)rE   rF   rG   rH   r  rK   rC   r4   r1   r  r    s    5r4   r  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)BasicGuideri  c           	          [         R                  " SSS[         R                  R                  S5      [         R                  R                  S5      /[         R
                  R                  5       /S9$ )Nr  zBasic Guidermodel/sampling/guidersr   conditioningrY  )r   r$   r%   r&   r  Guiderr.   r/   s    r1   r2   BasicGuider.define_schema  sX    yy!'-w'%%n5 YY%%'(	
 		
r4   r5   c                 f    [        U5      nUR                  U5        [        R                  " U5      $ r   )r  r  r   r8   )r0   r   r  guiders       r1   rA   BasicGuider.execute(  s)    e$&}}V$$r4   rC   NrE   rF   rG   rH   rI   r2   r   r8   rA   
get_guiderrK   rC   r4   r1   r  r    s:    

 

 %R]] % %
 Jr4   r  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)	CFGGuideri0  c                 b   [         R                  " SSS[         R                  R                  S5      [         R                  R                  S5      [         R                  R                  S5      [         R
                  R                  SSS	S
SSS9/[         R                  R                  5       /S9$ )Nr  z
CFG Guiderr  r   r  r  r  r  r   rY   rz   r   r   rY  r   r$   r%   r&   r  r,   r  r.   r/   s    r1   r2   CFGGuider.define_schema1  s    yy%-w'%%j1%%j1ucsCW[\	 YY%%'(
 	
r4   r5   c                     [         R                  R                  U5      nUR                  X#5        UR	                  U5        [
        R                  " U5      $ r   )r(   r)   r  r  set_cfgr   r8   )r0   r   r  r  r  r  s         r1   rA   CFGGuider.execute@  s?    ))%0,s}}V$$r4   rC   Nr  rC   r4   r1   r  r  0  s:    
 
 % % % Jr4   r  c                   2    \ rS rSrSS jrS r0 S4S jrSrg)Guider_DualCFGiI  c                 (    Xl         X l        X0l        g r   cfg1cfg2nested)r  r  r  r  s       r1   r  Guider_DualCFG.set_cfgJ  s    		r4   c                 ^    [         R                  " USS05      nU R                  XUS.5        g )Nprompt_typer  )r  middler  )node_helpersconditioning_set_valuesr  )r  r  r  r  s       r1   r  Guider_DualCFG.set_condsO  s-    55f}j>YZ(RZ[\r4   Nc                    U R                   R                  SS 5      nU R                   R                  SS 5      nU R                   R                  SS 5      nU R                  (       a  [        R                  R                  U R                  XVU/XU5      n[        R                  R                  U R                  US   US   U R                  XX7US9	n	US   U R                  XS   -
  -  -   $ UR                  SS	5      S	:X  aP  [        R                  " U R                  S
5      (       a*  S n[        R                  " U R                  S
5      (       a  S n[        R                  R                  U R                  XVU/XU5      n[        R                  R                  U R                  US   US   U R                  XX6US9	US   US   -
  U R                  -  -   $ )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)
r  r   timestepr  r  negative_condmiddle_condpositive_condr  	pred_texts
             r1   predict_noiseGuider_DualCFG.predict_noiseS  s   

z48jjnnXt4

z48;;..001A1AM`mCnpq  ~K  LC33D4D4Dc!fcRSfVZV_V_ab  }J  gr3  sIq6DIIV);<<<  !<eDM<<		3//$(M||DIIs33&*..001A1AM`mCnpq  ~K  LC>>..t/?/?QQQUQZQZ\]  xE  `m.  n  ru  vw  rx  {~  @  {A  rA  EI  EN  EN  qN  N  Nr4   r  )F)rE   rF   rG   rH   r  r  r,  rK   rC   r4   r1   r  r  I  s    
] 8: Nr4   r  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)DualCFGGuiderif  c                 "   [         R                  " SS/SS[         R                  R                  S5      [         R                  R                  S5      [         R                  R                  S5      [         R                  R                  S5      [         R
                  R                  S	S
SSSSS9[         R
                  R                  SS
SSSSS9[         R                  R                  SSS/S9/[         R                  R                  5       /S9$ )Nr/  zdual prompt guidancezDual CFG Guiderr  r   cond1cond2r  	cfg_condsr  r   rY   rz   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    r1   r2   DualCFGGuider.define_schemag  s    yy#23*-w'%%g.%%g.%%j1{CSeRU]ab3Scu[^fjkwH0EF YY%%'(
 	
r4   r5   c                     [        U5      nUR                  X#U5        UR                  XVUS:H  S9  [        R                  " U5      $ )Nr  )r  )r  r  r  r   r8   )	r0   r   r1  r2  r  r3  r4  r5  r  s	            r1   rA   DualCFGGuider.executez  s@    &x0yex>OQ}}V$$r4   rC   Nr  rC   r4   r1   r/  r/  f  s=    
 
$ %]_]j]j % % Jr4   r/  c                   V   ^  \ rS rSrU 4S jrSU 4S jjrS	U 4S jjr0 S4S jrSrU =r	$ )
Guider_DualModeli  c                 >   > [         TU ]  U5        X l        S U l        g r   )superr  uncond_model_patcheruncond_inner)r  model_patcherr>  	__class__s      r1   r  Guider_DualModel.__init__  s    '$8! r4   Nc
                 z  > S U l         / U l        S U l        [        R                  " U R
                  S5      (       d  S[        [        S U R                  S   5      5      0n
[        R                  R                  U R                  UR                  XR                  R                  5      u  U l         ol        U
S   U l        U R                  R                  5          [         TU ]E  XX4XVXxU	S9	U R                   bX  U R                  R%                  5         [        R                  R'                  SU R                  0U R                  5        S U l         $ $ ! U R                   bX  U R                  R%                  5         [        R                  R'                  SU R                  0U R                  5        S U l         f f = f)Nr   r  c                 "    U R                  5       $ r   )r  )as    r1   r   /Guider_DualModel.outer_sample.<locals>.<lambda>  s
    r4   r  )r?  uncond_loaded_uncond_negr   r&  r  listmapr"  r(   sampler_helpersprepare_samplingr>  r   r  pre_runr=  outer_samplecleanupcleanup_models)r  r  r  r  r@   denoise_maskr  r  r  r  ucrA  s              r1   rO  Guider_DualModel.outer_sample  sz    ||DHHc**d3'94::j;Q#RSTB8=8M8M8^8^))5;;<U<U<c<c9e5Dr#5!*~D%%--/	)7'Wlfr  IV'  W  ,))113%%44j$BRBR5SUYUgUgh$(! -t  ,))113%%44j$BRBR5SUYUgUgh$(! -s   E A'F:c                 4  > U R                   bz  UnUb5  [        R                  " U5      S:  a  U R                   R                  U5      n[        R
                  R                  U R                   USU R                  0X;XiU
S9S   U l        [        TU ])  XX4XVXxXS9
$ )Nr   r  rG  )r?  r9   count_nonzeroprocess_latent_inr(   r)   process_condsrI  _uncond_condsr=  inner_sample)r  r  r  r   r  r@   rR  r  r  r  r  lirA  s               r1   rZ  Guider_DualModel.inner_sample  s    (B~%"5"5b"9A"=&&88<!&!=!=!!5:t7G7G*H&Vb  yF "> "G HR"SDw#E&`hx|#  [  	[r4   c                    U R                   R                  SS 5      n[        R                  R	                  U R
                  U/XU5      S   nU R                  b=  [        R                  " U R                  S5      (       a  UR                  SS5      (       d  U$ UnSU;   a,  UR                  5        VV	s0 s H  u  pUS:w  d  M  X_M     nnn	[        R                  R	                  U R                  U R                  /XU5      S   n
[        R                  R                  U R
                  XjU R                  XX5U R                  S9	$ s  sn	nf )Nr  r   r   r!  Fmultigpu_clonesr  )r"  r  r(   r)   r#  r$  r?  r   r&  r  itemsrY  r%  )r  r   r'  r  r  r  r  uncond_model_optionskvr   s              r1   r,  Guider_DualModel.predict_noise  s4   ::>>*d3~~--d.>.>
AYfghij$dhh)D)D]M^M^_z  }B  NC  NCK,-5B5H5H5J#e5JTQaSdNdDAD5J #e//0A0ADDVDVCWYZfz{|}~~~**4+;+;T488UV9F^b^p^p + r 	r $fs   4EE)rY  rI  r?  rH  r>  )NNFNNr   )
rE   rF   rG   rH   r  rO  rZ  r,  rK   __classcell__)rA  s   @r1   r;  r;    s&    !
)&[ 8: r rr4   r;  c                   X    \ rS rSr\S 5       r\SS\R                  4S jj5       r\r	Sr
g)DualModelGuideri  c                    [         R                  " SSSS[         R                  R                  SSS9[         R                  R                  SSS	S
9[         R                  R                  S5      [         R
                  R                  SSSSSSS9[         R                  R                  SSSS
9/[         R                  R                  5       /S9$ )Nrf  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   rY   rz   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    r1   r2   DualModelGuider.define_schema  s    yy%0- w0ab/$  Ia  b%%j1ucsCW[\%%j4  J%  @ YY%%'(
 	
r4   Nr5   c                     Uc  S 0 //nUb  [        X5      O[        R                  R                  U5      nUR	                  X%5        UR                  U5        [        R                  " U5      $ r   )r;  r(   r)   r  r  r  r   r8   )r0   r   r  r  rh  r  r  s          r1   rA   DualModelGuider.execute  sa    r
|H<J<V!%8\a\j\j\t\tuz\{,s}}V$$r4   rC   )NNr  rC   r4   r1   rf  rf    s=    
 
  %RTR_R_ % % Jr4   rf  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)DisableNoisei  c                 n    [         R                  " SS/S/ [         R                  R                  5       /S9$ )Nro  z
zero noisemodel/sampling/noiser   )r   r$   Noiser.   r/   s    r1   r2   DisableNoise.define_schema  s2    yy"(>+XX__&'
 	
r4   r5   c                 >    [         R                  " [        5       5      $ r   )r   r8   r  r/   s    r1   rA   DisableNoise.execute  s    }}-/00r4   rC   NrE   rF   rG   rH   rI   r2   r   r8   rA   	get_noiserK   rC   r4   r1   ro  ro    s:    
 
 1 1 1 Ir4   ro  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)RandomNoisei  c                     [         R                  " SS[         R                  R                  SSSSSS9/[         R                  R                  5       /S9$ )	Nry  rq  r  r   r  Tr  r   )r   r$   r+   r&   rr  r.   r/   s    r1   r2   RandomNoise.define_schema  sI    yy!+FFLLqaEWptLuvXX__&'	
 	
r4   r5   c                 @    [         R                  " [        U5      5      $ r   )r   r8   r  )r0   r  s     r1   rA   RandomNoise.execute  s    }}.z:;;r4   rC   Nrv  rC   r4   r1   ry  ry    s:    
 
 <BMM < < Ir4   ry  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)SamplerCustomAdvancedi  c                    [         R                  " SS[         R                  R                  S5      [         R                  R                  S5      [         R
                  R                  S5      [         R                  R                  S5      [         R                  R                  S5      /[         R                  R                  SS	9[         R                  R                  S
S	9/S9$ )Nr  r  r  r  r  r@   r  r  r   r  r   )	r   r$   rr  r&   r  r  r-   r  r.   r/   s    r1   r2   #SamplerCustomAdvanced.define_schema  s    yy+,w'		)

  +		)		/ 		  h 7		  .? @
 	
r4   r5   c                 |   UnUS   nUR                  5       n[        R                  R                  UR                  XVR                  SS 5      UR                  SS 5      5      nXVS'   S nSU;   a  US   n0 n[        R                  " UR                  UR                  S   S-
  U5      n	[        R                  R                  (       + n
UR                  UR                  U5      XSXGXUR                  S9nUR                  [        R                  R                  5       5      nUR                  5       nUR!                  SS 5        UR!                  SS 5        XS'   SU;   a  UR                  R"                  R%                  US   R'                  5       5      nUR(                  (       ae  UR+                  5        Vs/ s H  oR                  PM     nn[        R,                  R/                  [        R                  R1                  X5      5      nUR                  5       nUUS'   OUn[2        R4                  " UU5      $ s  snf )	Nr  r  r  r  r   r   )rR  r  r  r  r  )r  r(   r  r  r@  r  r  r  r   r  r  r  r  tomodel_managementintermediate_devicer  r   r  r>   r  r  r  r  r  r   r8   )r0   r  r  r  r@   r  r  r  r  r  r  r  r  r  r   r  r  s                    r1   rA   SamplerCustomAdvanced.execute  s   i(||==f>R>RT`blbl  nG  IM  cN  PV  PZ  PZ  [u  w{  P|  }(y
6!-J	!2263G3GVXIY\]I]_hi ;;;;;-- 4 4V <lU[  @H  jo  jt  jt-  u**U33GGIJkkm)40*D1 I9))//BB9T?CVCVCXYF  29..2B C2BQ2B C,,99%++:T:TU[:kl!;;=L&,L#L}}S,// !Ds   7H9rC   Nr  rC   r4   r1   r  r    s;    
 
" 0bmm 0 0B Fr4   r  c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)AddNoisei,  c                 \   [         R                  " SSS[         R                  R                  S5      [         R                  R                  S5      [         R
                  R                  S5      [         R                  R                  S5      /[         R                  R                  5       /S9$ )	Nr  z"experimental/custom_sampling/noiseTr   r  r@   r  )r    r!   rj  r"   r#   )r   r$   r%   r&   rr  r-   r  r.   r/   s    r1   r2   AddNoise.define_schema-  sx    yy9 w'w'		)		/	 		  "
 	
r4   r5   c                 D   [        U5      S:X  a  [        R                  " U5      $ UnUS   nUR                  U5      nUR	                  S5      nUR	                  S5      nUR	                  S5      n	[        U5      S:  a   [
        R                  " US   US   -
  5      n
OUS   n
[
        R                  " U5      S:  a  U	" U5      nUR                  XU5      nU" U5      n[
        R                  " USSSS	9nUR                  5       nXkS'   [        R                  " U5      $ )
Nr   r  r7   r  rW  r   r   r   )nanposinfneginf)r   r   r8   r  r=   r9   absrV  noise_scaling
nan_to_numr  )r0   r   r  r@   r  r  noisyr7   r  rW  scaler  s               r1   rA   AddNoise.execute>  s   v;!==..i($$V,//0@A"334HI!223FGv;?IIfQi&*45E1IE|,q0,\:L,,U<H"5)  CCHkkmI}}S!!r4   rC   N)rE   rF   rG   rH   rI   r2   r   r8   rA   r  rK   rC   r4   r1   r  r  ,  s:    
 
  "BMM " "8 Ir4   r  c                   P    \ rS rSr\S 5       r\S\R                  4S j5       rSr	g)ManualSigmasi]  c                     [         R                  " SSS/SS[         R                  R                  SSSS	9/[         R                  R                  5       /S
9$ )Nr  zcustom noise schedulezdefine sigmaszexperimental/custom_samplingTr@   z1, 0.5F)r   	multiline)r    r   r!   rj  r"   r#   )r   r$   Stringr&   r-   r.   r/   s    r1   r2   ManualSigmas.define_schema^  sT    yy"3_E3 		(eL YY%%'(	
 		
r4   r5   c                     [         R                  " SU5      nU Vs/ s H  n[        U5      PM     nn[        R                  " U5      n[
        R                  " U5      $ s  snf )Nz[-+]?(?:\d*\.*\d+))refindallr   r9   r:   r   r8   )r0   r@   r   s      r1   rA   ManualSigmas.executek  sO    16:$*+Fq%(F+""6*}}V$$ ,s   ArC   Nr  rC   r4   r1   r  r  ]  s3    

 

 % % %r4   r  c                   l    \ rS rSr\S\R                  4S j5       r\S\R                  4S j5       r	Sr
g)CFGOverrideir  r5   c                 l   [         R                  " SSSS[         R                  R                  S5      [         R                  R                  SSSS	S
SS9[         R                  R                  SSSSSS9[         R                  R                  SSSSSS9/[         R                  R                  5       /S9$ )Nr  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.r  r   r  r   r   rY   rz   r   r   start_percentr   r   end_percent)r    r   r  r!   r"   r#   )r   r$   r%   r&   r,   r.   r/   s    r1   r2   CFGOverride.define_schemas  s    yy!'`-w'ucsCW[\#TYZ}csRWX	 XX__&'
 	
r4   c                 2  ^^^	 UR                  S5      nUR                  U5      mUR                  U5      m	UUU	4S jnUR                  5       nUR                  [        R
                  R                  R                  U5        [        R                  " U5      $ )Nr7   c                    > [        US   R                  5       S   5      nTUs=::  a  T::  d
  O  U " U0 UD6$ U R                  nUR                  nTUl         U " U0 UD6XTl        $ ! XTl        f = f)Nr   r   )r   flatten	class_objr  )	executorargskwargsr   r  savedr  sigma_hisigma_los	         r1   predict_noise_wrapper2CFGOverride.execute.<locals>.predict_noise_wrapper  sr    $q'//+A./E11000''FJJEFJ#00"
U
s   A& &A.)
r=   r  r   add_wrapperr(   patcher_extension
WrappersMPPREDICT_NOISEr   r8   )
r0   r   r  r  r  msr  mr  r  s
     `     @@r1   rA   CFGOverride.execute  sv    ##$45&&}5&&{3
	# KKM	e--88FFH]^}}Qr4   rC   N)rE   rF   rG   rH   rI   r   r$   r2   r8   rA   rK   rC   r4   r1   r  r  r  s>    
bii 
 
       r4   r  c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)CustomSamplersExtensioni  r5   c                   #    / [         P[        P[        P[        P[        P[
        P[        P[        P[        P[        P[        P[        P[        P[        P[        P[        P[         P["        P[$        P[&        P[(        P[*        P[,        P[.        P[0        P[2        P[4        P[6        P[8        P[:        P[<        P[>        P[@        P[B        P[D        P[F        P[H        P$ 7fr   )%r  r  r	   rM   re   rm   ru   r   r   r   r  rP  rW  r_  r   r1  r=  rF  ri  rx  r  r  r   r   r   r   r   r  r  r/  rf  r  ry  ro  r  r  r  r  s    r1   get_node_list%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&
 &	
s   C!C#rC   N)rE   rF   rG   rH   r   rJ  typer   	ComfyNoder  rK   rC   r4   r1   r  r    s)    '
T$r||*<%= '
 '
r4   r  r5   c                     #    [        5       $ 7fr   )r  rC   r4   r1   comfy_entrypointr    s     "$$s   )Br   comfy.samplersr(   comfy.sampler_helperscomfy.patcher_extensioncomfy.samplecomfy.k_diffusionr   r_   r   r  r9   comfy.utilsr  typing_extensionsr   comfy_api.latestr   r   r  r  r	   rM   re   rm   ru   r   r   r   r   r   r   r   r   r  r  r   r1  r=  rF  rP  rW  r_  ri  rx  r  r  r  r  r  r)   r  r  r  r  r/  r;  rf  ro  ry  r  r  r  r  r  r  rC   r4   r1   <module>r     s         > '     & / 	R\\ <bll ,2<< *r|| ,r|| 0r|| 0BLL ,",, ,",, 0 4 ,BLL *3r|| 3lR\\ 8R\\ "",, 2",, 6r|| 4 (BLL ( . "2<< >"BLL "J*bll *Z &BLL  &Fw w O O=BLL =~55>>++ 5",, , 2NU^^-- N:BLL :/ru~~// /rbbll <2<< $",, "5BLL 5n/r|| /b%2<< %*& ",, & R)
n )
X% 7 %r4   