
    ^(j                       d dl mZ d dlmZm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d dlZd dlZerd dlmZ d dlmZ d dlmZ  G d	 d
e      Z G d de      Z G d de      Z G d d      Zdd g fd6dZe
 G d d             Ze
 G d d             Z ej>                  dg d      Z  G d de      Z!d7dZ"d8dZ#d Z$d8dZ%d9d:dZ&d;d Z' G d! d"      Z(d<d#Z)d<d$Z*d<d%Z+d<d&Z,d=d'Z-e(j\                  e)e(j^                  e*e(j`                  e+e(jb                  e,iZ2d>d(Z3d9d?d)Z4d@d*Z5d@d+Z6dAd,Z7 G d- d.      Z8e8jr                  e5e8jt                  e6e8jv                  e6e8jx                  e7iZ=dBd/Z>d0 Z?dCd1Z@dDd2ZAdEd3ZBdEd4ZCdFd5ZDy)G    )annotations)TYPE_CHECKINGCallableN)	dataclass)ABCabstractmethod)	BaseModel)ModelPatcher)ControlBasec                  6    e Zd Zd Zedd       Zedd       Zy)ContextWindowABCc                     y N selfs    ?/Users/danicosta/Desktop/Flux2/ComfyUI/comfy/context_windows.py__init__zContextWindowABC.__init__           c                    t        d      )z@
        Get torch.Tensor applicable to current window.
        Not implemented.NotImplementedError)r   fulls     r   
get_tensorzContextWindowABC.get_tensor       
 ""455r   c                    t        d      )z
        Apply torch.Tensor of window to the full tensor, in place. Returns reference to updated full tensor, not a copy.
        r   r   )r   r   to_adds      r   
add_windowzContextWindowABC.add_window   r   r   Nr   torch.Tensorreturnr"   r   r"   r   r"   r#   r"   )__name__
__module____qualname__r   r   r   r    r   r   r   r   r      s/     6 6 6 6r   r   c                  J    e Zd Zd Zedd       Zeddd       Zed	d       Zy)
ContextHandlerABCc                     y r   r   r   s    r   r   zContextHandlerABC.__init__$   r   r   c                    t        d      Nr   r   r   modelcondsx_intimestepmodel_optionss         r   should_use_contextz$ContextHandlerABC.should_use_context'       !"455r   Nc                    t        d      r,   r   )r   cond_inr0   windowdevices        r   get_resized_condz"ContextHandlerABC.get_resized_cond+   r4   r   c                    t        d      r,   r   )r   calc_cond_batchr.   r/   r0   r1   r2   s          r   executezContextHandlerABC.execute/   r4   r   r.   r	   r/   list[list[dict]]r0   r"   r1   r"   r2   	dict[str]r#   boolr   )r6   
list[dict]r0   r"   r7   r   r#   listr;   r   r.   r	   r/   r>   r0   r"   r1   r"   r2   r?   )r%   r&   r'   r   r   r3   r9   r<   r   r   r   r)   r)   #   sC     6 6 6 6 6 6r   r)   c                  8    e Zd ZdddZddg fddZd	d
dZddZy)IndexListContextWindowc                    || _         t        |      | _        || _        || _        t        |      t        |      z   d|z  z  | _        y )N   )
index_listlencontext_lengthdimtotal_framesminmaxcenter_ratio)r   rH   rK   rL   s       r   r   zIndexListContextWindow.__init__6   sC    $!*o( _s:>1|CSTr   Nc                ^   || j                   }|dk(  r|j                  |   dk(  r|S | j                  }t        | dd       }||dk\  r|gt	        |      z   }t        t        d       g|z  |gz         }||   }|r$t        t        d       g|z  |gz         }||   ||<   |j                  |      S )Nr      causal_anchor_index)rK   shaperH   getattrrB   tuplesliceto)	r   r   r8   rK   retain_index_listindices
anchor_idxidxr7   s	            r   r   z!IndexListContextWindow.get_tensor=   s    ;((C!8

31,K//T#8$?
!jAo!lT']2GU4[MC'7)34ct+/@.AABCs)F3Kyy  r   c                    || j                   }t        t        d       g|z  | j                  gz         }||xx   |z  cc<   |S r   )rK   rU   rV   rH   )r   r   r   rK   r[   s        r   r    z!IndexListContextWindow.add_windowM   sD    ;((CU4[MC'4??*;;<S	V	r   c                d    t        | j                  |z        }t        t        |d      |dz
        S )Nr   rQ   )intrO   rM   rN   )r   num_regions
region_idxs      r   get_region_indexz'IndexListContextWindow.get_region_indexT   s/    **[89
3z1%{Q77r   )r   r   )rH   	list[int]rK   r^   rL   r^   r!   r   r$   )r_   r^   r#   r^   )r%   r&   r'   r   r   r    ra   r   r   r   rE   rE   5   s!    U 59dVX ! 8r   rE   c                  &    e Zd ZdZdZdZdZdZd Zy)IndexListCallbacksevaluate_context_windowscombine_context_window_resultsexecute_startexecute_cleanupresize_cond_itemc                    i S r   r   r   s    r   init_callbacksz!IndexListCallbacks.init_callbacks`   s    	r   N)	r%   r&   r'   EVALUATE_CONTEXT_WINDOWSCOMBINE_CONTEXT_WINDOW_RESULTSEXECUTE_STARTEXECUTE_CLEANUPRESIZE_COND_ITEMrk   r   r   r   rd   rd   Y   s#    9%E"#M'O)r   rd   rQ   c                f   t        | d      r$t        | j                  t        j                        sy | j                  }||j
                  k\  ry |j                  |      }	|dk(  r$|j                  |j                        |z
  }
|	|
k7  ry |dk(  r+|dk(  r&|j                  ||||      }| j                  |      S |dkD  rQt        |dd       }||dk\  r|dz
  }n|}|j                  |d  D cg c]  }||z
  	 }}|D cg c]
  }d|k  s	| }}nt        |j                        }|sy |dkD  r=g }|D ]1  }t        |      D ]!  }||z  |z   }||	k  s|j                  |       # 3 |}|sy t        t!        d       g|z  |gz         }||   j#                  |      }| j                  |      S c c}w c c}w )NcondrQ   r   rK   rX   rR   )hasattr
isinstancerr   torchTensorndimsizerK   r   
_copy_withrT   rH   rB   rangeappendrU   rV   rW   )
cond_valuer7   r0   r8   temporal_dimtemporal_scaletemporal_offsetrX   cond_tensor	cond_sizeexpected_sizeslicedrZ   
skip_countirY   scaledksir[   s                       r   
slice_condr   d   s   J'Jz,U//K{'''  .I		&**-?%!! 3"";L\m"n$$V,, V%:DA
!jAo(1,J(J060A0A*+0NO0N11&0NO%0ga1g0v(()A>*'!+	>MM"% + 
 
t,y8
9C  (F  ((+ P0s   *F)<
F.F.c                  "    e Zd ZU ded<   ded<   y)ContextSchedulestrnamer   funcNr%   r&   r'   __annotations__r   r   r   r   r          
I
Nr   r   c                  "    e Zd ZU ded<   ded<   y)ContextFuseMethodr   r   r   r   Nr   r   r   r   r   r      r   r   r   ContextResults)
window_idxsub_conds_out	sub_condsr7   c            	          e Zd Zddddddg ddf		 	 	 	 	 	 	 	 	 	 	 ddZddZdddZddd	Zdd
ZddZddZ		 dddZ
	 	 	 	 	 	 ddZy)IndexListContextHandlerrQ   r   FTc                4   || _         || _        || _        || _        || _        || _        || _        d| _        || _        |	r6|	j                  d      D cg c]  }t        |j                                c}ng | _        |
| _        || _        i | _        y c c}w )Nr   ,)context_schedulefuse_methodrJ   context_overlapcontext_strideclosed_looprK   _step	freenoisesplitr^   stripcond_retain_index_listsplit_conds_to_windowscausal_window_fix	callbacks)r   r   r   rJ   r   r   r   rK   r   r   r   r   xs                r   r   z IndexListContextHandler.__init__   s     !1&,.,&
"e{?U?[?[\_?`&a?`!s1779~?`&a  BD#&<#!2	 'bs    Bc           
     J   |j                  | j                        | j                  kD  r{t        j                  d| j                   d| j
                   d|j                  | j                         d       | j                  r"t        j                  d| j                          yy)NzUsing context windows z with overlap z for z frames.z%Retaining original cond for indexes: TF)ry   rK   rJ   logginginfor   r   r-   s         r   r3   z*IndexListContextHandler.should_use_context   s    99TXX!4!44LL1$2E2E1FnUYUiUiTjjoptpypyz~  {C  {C  qD  pE  EM  N  O**DTE`E`Dabcr   Nc                V    |j                   | j                  |j                   |       |S r   )previous_controlnetprepare_control_objects)r   controlr8   s      r   r   z/IndexListContextHandler.prepare_control_objects   s)    &&2(()D)DfMr   c                   |y g }| j                   rtt        |      dkD  rf|j                  t        |            }t        j                  d| d|j
                  d    d|j
                  d    d|j                  d       ||   g}|D ]k  }|j                         }|D ]A  }		 ||	   }
t        |
t        j                        r| j                  |
j                  k  r^|
j                  | j                        |j                  | j                        k(  r'|j                  |
      }|j                  |      ||	<   n|
j                  |      ||	<   n|	d	k(  r| j!                  |
|      ||	<   ntt        |
t"              r^|
j                         }|j%                         D ]4  \  }}d
}t&        j(                  j+                  t,        j.                  | j0                        D ]  } |||||||      }||||<   d} n |s@| j2                  4| j2                  j5                  |||||| j6                        }||||<   d}|rt        |t        j                        r| j                  |j                  k  r7|j                  | j                        |j                  | j                        k(  sJ|j                  | j                  k  s(|j                  d      |j                  | j                        k(  sW|j                  ||      ||<   n|dk(  rt9        |d      rt        |j:                  t        j                        rt|j:                  }|j                  dkD  s|j                  d      |j                  | j                        k(  s|j=                  |j                  ||d            ||<   |dk(  rt9        |d      rt        |j:                  t        j                        r|j:                  }|j                  dk\  si|j                  d      |j                  | j                        k(  s|j                  ||d| j6                        }|j=                  |      ||<   t9        |d      r"t        |j:                  t        j                        r| j                  |j:                  j                  k  rA|j:                  j                  | j                        |j                  | j                        k(  s^|j:                  j                  | j                  k  s|j:                  j                  d      |j                  | j                        k(  s|j=                  |j                  |j:                  || j6                              ||<   |dk(  s|j=                  |j:                        ||<   |j>                  ||   _        7 |||	<   n|
||	<   ~
D |jA                  |       n |S # ~
w xY w)NrQ   z)Splitting conds to windows; using region z for window r   -z with center ratio z.3fr   FT)rX   audio_embedrr   rK   vace_context      rs   num_video_frames)!r   rI   ra   r   r   rH   rO   copyru   rv   rw   rK   rx   ry   r   rW   r   dictitemscomfypatcher_extensionget_all_callbacksrd   rp   r   _modelresize_cond_for_context_windowr   rt   rr   rz   rJ   r|   )r   r6   r0   r7   r8   resized_condregionactual_condresized_actual_condkey	cond_itemactual_cond_itemnew_cond_itemcond_keyr}   handledcallbackresult
audio_cond	vace_condsliced_vaces                        r   r9   z(IndexListContextHandler.get_resized_cond   s   ?&&3w<!+;,,S\:FLLDVHLY_YjYjklYmXnnopv  qB  qB  CE  qF  pG  GZ  [a  [n  [n  or  Zs  t  uv'G"K"-"2"2"4"?" +C 0I!)U\\:88inn49QUYU^U^_c_g_gUh9h/5/@/@/K,7G7J7J67R/47@||F7K/4	)373O3OPY[a3b+C0#It4(1(84A4G4G4I0Hj&+G,1,C,C,U,U 2 C CT^^- *2(JPTV\^k)l#)#5>DM($;.2G$)- $+t{{/F)-)S)S$,j&$6:6Q6Q *T *S $*#5>DM($;.2G& ()*ellC$(HHz$>:??SWS[S[C\`d`i`ijnjrjr`sCs$.OOdhh$>:??STCUY]YbYbcgckckYlCl>D>O>OPZ\b>cM($;!)]!:wzSY?Z_ijtjyjy  |A  |H  |H  `I-7__
#-??Q#6:??1;MQUQZQZ[_[c[cQd;d>H>S>STZTeTefprx~Te  UA  ?BM($;!)^!;
TZ@[`jkukzkz  }B  }I  }I  aJ,6OO	#,>>Q#69>>!;LPTPYPYZ^ZbZbPc;c282C2CIv[\pt  qL  qL2C  3MK>H>S>ST_>`M($;!(V!<JOO]b]i]iAj%)XX
0D0D%DI]I]^b^f^fIgkoktktuyu}u}k~I~%/__%9%9DHH%DI]I]^_I`dhdmdmnrnvnvdwIw>H>S>STZTeTefpfufuw}  RV  Rm  RmTe  Un  ?oM($;!)-?!?:D:O:OPZP_P_:`h 7?E?T?Th 7 <U 5JV 4A+C03<+C0!A #B  34I #J  "sO   #EW90CW9-W93A'W9-W9A8W9-W94C-W9#7W9AW9A W99W<c                    t        j                  |d   d   |d   d      }t        j                  |      }t        j                  |      dk(  ry t	        |d   j                               | _        y )Ntransformer_optionssample_sigmasr   g-C6?)rtol)rv   isclosenonzeronumelr^   itemr   )r   r1   r2   maskmatchess        r   set_stepz IndexListContextHandler.set_step  s`    }}]+@A/RT\]^T_flm--%;;w1$*+
r   c                    |j                  | j                        }| j                  j                  || |      }|D cg c]  }t	        || j                  |       }}|S c c}w )N)rK   rL   )ry   rK   r   r   rE   )r   r.   r0   r2   full_lengthcontext_windowsr7   s          r   get_context_windowsz+IndexListContextHandler.get_context_windows  sf    ii)//44[$Vp  Apfl1&dhhU`ap  A As   A c                   || _         | j                  ||       | j                  |||      }t        t	        |            }|D 	cg c]  }	t        j                  |       }
}	| j                  j                  t        j                  k(  rC|D 	cg c]7  }	t        j                  t        || j                        |j                        9 }}	nB|D 	cg c]7  }	t        j                  t        || j                        |j                        9 }}	|D 	cg c]  }	dg|j                   | j                     z  ! }}	t"        j$                  j'                  t(        j*                  | j,                        D ]  } || |||||        |D ]l  }| j/                  ||||||g|      }|D ]M  }| j1                  ||j2                  |j4                  |j6                  |j8                  t;        |      ||
||
       O n 	 | j                  j                  t        j                  k(  rM~|
t"        j$                  j'                  t(        j<                  | j,                        D ]  } || |||||        S t?        t;        |
            D ]  }|
|xx   ||   z  cc<    ~|
t"        j$                  j'                  t(        j<                  | j,                        D ]  } || |||||        S c c}	w c c}	w c c}	w c c}	w # t"        j$                  j'                  t(        j<                  | j,                        D ]  } || |||||        w xY w)Nr8   g        ) r   r   r   rB   	enumeraterv   
zeros_liker   r   ContextFuseMethodsRELATIVEonesget_shape_for_dimrK   r8   zerosrS   r   r   r   rd   rn   r   re   rf   r   r   r7   r   rI   ro   r{   )r   r;   r.   r/   r0   r1   r2   r   enumerated_context_windows_conds_finalcounts_finalbiases_finalr   enum_windowresultsr   r   s                     r   r<   zIndexListContextHandler.execute"  s   h.225$N%))O*D%E"7<=u!u''-u=  $6$?$??glmglbcEJJ'8txx'HQUQ\Q\]glLmhmnhmcdEKK(9$(IRVR]R]^hmLn@EF1#DHH!55F//AABTBbBbdhdrdrsHT5$xG t 6K33OUDRWYadocpr  AG!33D&:N:NPVP`P`bhboboqw  rC  rC  EH  Ic  Ed  fn,7|U " 6
	L$$(:(C(CC " "33EEFXFhFhjnjxjxyudE8]K z s;/0ANl1o5N 1 "!33EEFXFhFhjnjxjxyudE8]K z9 >mnF. "33EEFXFhFhjnjxjxyudE8]K zs+   K<K$<K)$K.5)K3 )+K3 3AL?c
                   g }
|D ]  \  }}t         j                  j                          d}| j                  rB|j                  d   dz
  }d|cxk  r|j                  | j                        k  rn n	||_        d}t         j                  j                  t        j                  | j                        D ]  } || ||||||||||	        ||d   d<   |j                  ||      }|j                  ||d      }|D cg c]  }| j                  ||||       }} ||||||      }|:t        t!        |            D ]#  }||   j#                  |j$                        ||<   % |rYt        t!        |            D ]B  }||   j'                  | j                  d||   j(                  | j                     dz
        ||<   D |
j+                  t-        ||||              |
S c c}w )NFr   rQ   Tr   context_windowr   )r   model_management)throw_exception_if_processing_interruptedr   rH   ry   rK   rR   r   r   rd   rl   r   r   r9   r{   rI   rW   r8   narrowrS   r|   r   )r   r;   r.   r0   r/   r1   r   r2   r8   first_devicer   r   r7   anchor_appliedrZ   r   sub_xsub_timesteprr   r   r   r   s                         r   re   z0IndexListContextHandler.evaluate_context_windowsG  s   (*"<J""LLN #N%%#..q1A5

8TYYtxx%881;F.%)N!33EEFXFqFqsw  tB  tB  CudE8]JX^`mou  xD  E C FLM/01AB%%dF3E!,,Xv1,ELW\]W\t..tT66JW\I]+E9e\S`aM!s=12A'4Q'7':':4;;'GM!$ 3 s=12A'4Q'7'>'>txxMZ[L\LbLbcgckckLlopLp'qM!$ 3 NN>*mYPVWXA #=B  ^s   ;Gc                   | j                   j                  t        j                  k(  r(t	        |j
                        D ]  \  }}dt        ||j
                  d   |j
                  d   z   dz  z
        |j
                  d   |j
                  d   z
  dz   dz  z  z
  }t        d|      }t        t        |            D ]  }|
|   |   }|||z   z  }|||z   z  }t        t        d       g| j                  z  |gz         }t        t        d       g| j                  z  |gz         }||   |   |z  ||   |   |z  z   ||   |<   ||z   |
|   |<     nt        |j                  |j                  | j                     |j
                  | |      }t!        ||| j                  |j"                        }t        t        |            D ]2  }|j%                  ||   ||   |z         |j%                  |	|   |       4 t&        j(                  j+                  t,        j.                  | j0                        D ]  } || |||||||||	|
        y )NrQ   r   r   rG   g{Gz?)sigmar   )r   r   r   r   r   rH   absrN   r{   rI   rU   rV   rK   get_context_weightsrJ   rS   match_weights_to_dimr8   r    r   r   r   rd   rm   r   )r   r0   r   r   r7   r   total_windowsr1   r   r   r   posr[   biasr   
bias_totalprev_weight
new_weight
idx_window
pos_windowweightsweights_tensorr   s                          r   rf   z6IndexListContextHandler.combine_context_window_resultsn  s     $6$?$??%f&7&78S3sf&7&7&:V=N=Nr=R&RVW%WWX]c]n]noq]ru{  vG  vG  HI  vJ  ^J  MQ  ^Q  UV  ]V  W  W4s=12A!-a!5J#-d1B#CK"&*t*;"<J!&d}txx'?3%'G!HJ!&d}txx'?3%'G!HJ1<Q
1Kk1Y\ijk\lmw\x  |F  ]F  2FKN:.+5+<LOC( 3 9" *&*?*?DHHAUW]WhWhjnv~G1'4RVR]R]^N3}-.!!+a.-2B^2ST!!,q/>B / //AABTBsBsuy  vD  vD  EHT4	6:}^fhs  vB  DP  Q Er   )r   r   r   r   rJ   r^   r   r^   r   r^   r   r@   rK   r^   r   r@   r   rb   r   r@   r   r@   r=   r   )r   r   r#   r   )r6   rA   r0   r"   r7   rE   r#   rB   )r1   r"   r2   r?   )r.   r	   r0   r"   r2   r?   r#   zlist[IndexListContextWindow]rC   )NN)
r;   r   r.   r	   r0   r"   r1   r"   r   z(list[tuple[int, IndexListContextWindow]])r0   r"   r7   rE   r   r^   r   r^   r1   r"   r   list[torch.Tensor]r   r	  r   r	  )r%   r&   r'   r   r3   r   r9   r   r   r<   re   rf   r   r   r   r   r      s    no  GH  ^_#(!Unp  PU)-".1@Ddm KO$($
Pd,#LL JN$NQ1CQSeQ vHQr   r   c                    |j                  dd       }|t        d      |j                  dd       }|;t        |      }t        ||j                     |j
                        ||j                  <    | ||g|i |S )Nr2   zdmodel_options not found in prepare_sampling_wrapper; this should never happen, something went wrong.context_handler)get	ExceptionrB   rM   rK   rJ   )executorr.   noise_shapeargskwargsr2   handlers          r   _prepare_sampling_wrapperr    s    JJ5M~'4'8'89JD'QG;'#&{7;;'?AWAW#XGKK E;8888r   c                v    | j                  t        j                  j                  j                  dt
               y )NContextWindows_prepare_sampling)add_wrapper_with_keyr   r   
WrappersMPPREPARE_SAMPLINGr  r.   s    r   create_prepare_sampling_wrapperr    s+    	**;;)!r   c                6   |j                  dd       }|t        d      |j                  dd       }	|	t        d      |	j                  s | |||||g|i |S t        ||	j                  |	j
                  |	j                  |d         } | |||||g|i |S )Nr2   zbmodel_options not found in sampler_sample_wrapper; this should never happen, something went wrong.r  zdcontext_handler not found in sampler_sample_wrapper; this should never happen, something went wrong.seed)r  r  r   apply_freenoiserK   rJ   r   )
r  guidersigmas
extra_argsr   noiser  r  r2   r  s
             r   _sampler_sample_wrapperr"    s    NN?D9M|}}'4'8'89JD'QG~
HeUdUfUUE7;;0F0FH_H_aklrastEFFJ%Q$Q&QQr   c                v    | j                  t        j                  j                  j                  dt
               y )NContextWindows_sampler_sample)r  r   r   r  SAMPLER_SAMPLEr"  r  s    r   create_sampler_sample_wrapperr&    s+    	**99'r   c                
   t        |j                        }t        j                  |       j	                  |      }t        |      D ]  }|j                  d      } t        ||z
  dz
        D ]  }|j                  d      } |S )Nr   r   rQ   r   )rI   rS   rv   rw   rW   r{   	unsqueeze)r  r0   rK   r8   
total_dimsr  r   s          r   r   r     sx    TZZJ\\'*--V-<N3Z'11!4 :#a'('11"5 )r   c                    t        | j                        }g }t        |      D ]  }|j                  d        |j                  | j                  |          t        ||z
  dz
        D ]  }|j                  d        |S )NrQ   )rI   rS   r{   r|   )r0   rK   r)  rS   r   s        r   r   r     sj    TZZJE3ZQ 	LLC!:#a'(Q )Lr   c                      e Zd ZdZdZdZdZy)ContextScheduleslooped_uniformstandard_uniformstandard_staticbatchedN)r%   r&   r'   UNIFORM_LOOPEDUNIFORM_STANDARDSTATIC_STANDARDBATCHEDr   r   r   r,  r,    s    %N)'OGr   r,  c                   g }| |j                   k  r%|j                  t        t        |                    |S t	        |j
                  t        t        j                  t        j                  | |j                   z                    dz         }dt        j                  |      z  D ]  }t        t        | t        |j                        z              }t        t        t        |j                        |z        |z   | |z   |j                  rdn|j                   z   |j                   |z  |j                  z
        D ]?  }|j                  t        |||j                   |z  z   |      D cg c]  }|| z  	 c}       A  |S c c}w )NrQ   r   )rJ   r|   rB   r{   rM   r   r^   npceillog2arangeroundordered_halvingr   r   r   )	
num_framesr  r2   windowsr   context_steppadjes	            r   create_windows_uniform_loopedrB    sN   GG***tE*-.///RWWRWWZRYRhRhEh=i5j1kno1opNRYY~66%
_W]]%CCDE.=>DW%8%8w?V?V>VW##l2W5L5LL
A
 NNE!QAWAWZfAf=fht4uv4uqA
N4uvw
 7 N ws   &E?c                   g }| |j                   k  r%|j                  t        t        |                    |S t	        |j
                  t        t        j                  t        j                  | |j                   z                    dz         }dt        j                  |      z  D ]  }t        t        | t        |j                        z              }t        t        t        |j                        |z        |z   | |z   |j                   z   |j                   |z  |j                  z
        D ]?  }|j                  t        |||j                   |z  z   |      D cg c]  }|| z  	 c}       A  g }	d}
|
t        |      k  rt!        ||
   |       \  }}|rc||
   |   }t#        ||
   |        |||
dz   t        |      z     vr5|j%                  |
dz   t        t        |||j                   z                      t        d|
      D ]   }||
   ||   k(  s|	j                  |
        n |
dz  }
|
t        |      k  r|	j'                          |	D ]  }|j)                  |        |S c c}w )NrQ   r   )r<  )rJ   r|   rB   r{   rM   r   r^   r6  r7  r8  r9  r:  r;  r   r   rI   does_window_roll_overshift_window_to_endinsertreversepop)r<  r  r2   r=  r   r>  r?  r@  rA  delete_idxswin_iis_rollroll_idxroll_valpre_ir   s                   r   create_windows_uniform_standardrO    sB    GW+++tE*-.///RWWRWWZRYRhRhEh=i5j1kno1opNRYY~66%
_W]]%CCDE.=>D!8!8 89##l2W5L5LL
A
 NNE!QAWAWZfAf=fht4uv4uqA
N4uvw
 7 KE
#g,
1'%.*Mu~h/H:Fwa3w<'?@@uQwU8XH^H^=^-_(`a1e_Eu~/""5) % 	
 #g,
$ A  N7 ws   I%c           
        g }| |j                   k  r%|j                  t        t        |                    |S |j                   |j                  z
  }t        d| |      D ]  }||j                   z   }|| k\  r>|| z
  }||z
  }|j                  t        t        |||j                   z                       |S |j                  t        t        |||j                   z                       |S Nr   )rJ   r|   rB   r{   r   )	r<  r  r2   r=  delta	start_idxendingfinal_deltafinal_start_idxs	            r   create_windows_static_standardrW    s    GW+++tE*-./""W%<%<<E1j%0	W333Z :-K'+5ONN4oI_I_7_ `abN 	tE)Y9O9O-OPQR 1 Nr   c                    g }| |j                   k  r%|j                  t        t        |                    |S t        d| |j                         D ]=  }|j                  t        t        |t	        ||j                   z   |                          ? |S rQ  )rJ   r|   rB   r{   rM   )r<  r  r2   r=  rS  s        r   create_windows_batchedrY  '  s|    GW+++tE*-./ 1j'*@*@A	tE)SW=S=S1SU_-`abc BNr   c                ,    t        t        |             gS r   rB   r{   )r<  r  s     r   create_windows_defaultr\  4  s    z"#$$r   c                h    t         j                  | d       }|t        d|  d      t        | |      S )NzUnknown context_schedule ''.)CONTEXT_MAPPINGr  
ValueErrorr   )r   r   s     r   get_matching_context_schedulera  @  s?    /6D|56F5GrJKK+T22r   c                B    |j                   j                  | ||||      S )N)r   r  r   idxsr   r   )lengthr   rc  r  r   s        r   r   r   G  s&    ##F%Vahl#mmr   c                    dg| z  S )Ng      ?r   )re  r  s     r   create_weights_flatrg  K  s    56>r   c                    | dz  dk(  r7| dz  }t        t        d|dz   d            t        t        |dd            z   }|S | dz   dz  }t        t        d|d            |gz   t        t        |dz
  dd            z   }|S )NrG   r   rQ   r   r[  )re  r  
max_weightweight_sequences       r   create_weights_pyramidrk  O  s     zQq[
uQ
Q:;d5UVXZC[>\\  qjQ&
uQ
A67:,FeT^abTbdegiNjIkkr   c                0   t        j                  |       }t        |      dkD  r0t        j                  dd|j                        }||d |j                   t        |      |dz
  k  r1t        j                  dd|j                        }|||j                   d  |S )Nr   gBA8rQ   )rv   r   rM   linspacer   rN   )re  r   rc  r  r  weights_torchramp_up	ramp_downs           r   create_weights_overlap_linearrq  Z  s     JJ(M
4y1}..7+B+BC29.w../
4y;q= NN1eW-D-DE	3<w.../0r   c                  2    e Zd ZdZdZdZdZeeegZeeeegZy)r   flatpyramidrelativezoverlap-linearN)	r%   r&   r'   FLATPYRAMIDr   OVERLAP_LINEARLISTLIST_STATICr   r   r   r   r   h  s0    DGH%NT>*DHdN;Kr   r   c                h    t         j                  | d       }|t        d|  d      t        | |      S )NzUnknown fuse_method 'r^  )FUSE_MAPPINGr  r`  r   rd  s     r   get_matching_fuse_methodr}  y  s;    K.D|0R@AA[$//r   c                <    | d}|d d d   }t        |d      }|dz  S )N064br   rG   l            )r^   )valbin_strbin_flipas_ints       r   r;  r;    s1    T
Gtt}H1F Wr   c                    t        t        |            }| D ]  }|D ]  }	 |j                  |         |S # t        $ r Y &w xY wr   )rB   r{   remover`  )r=  r<  all_indexeswr  s        r   get_missing_indexesr    sT    uZ()KC""3'     s   7	AAc                R    d}t        |       D ]  \  }}||z  }||k  rd|fc S |} y)Nr   T)Fr   )r   )r7   r<  prev_valr   r  s        r   rD  rD    s>    HF#3J>7N	 $
 r   c                b    | d   }t        t        |             D ]  }| |   |z
  |z   |z  | |<    y rQ  )r{   rI   )r7   r<  	start_valr   s       r   shift_window_to_startr    s<    q	I3v; Qi)+z9ZGq	  r   c                ~    t        | |       | d   }||z
  dz
  }t        t        |             D ]  }| |   |z   | |<    y )Nr   rQ   )r  r{   rI   )r7   r<  end_val	end_deltar   s        r   rE  rE    sI    &*-RjGW$q(I3v;1I	)q	  r   c                    t        j                  d       t        j                  d      j	                  |      }| j
                  |   }||z
  }t        d||z
  |      D ]  }||z   }	t        |||	z
        }
|
dk  r | S t        j                  |
|d      |z   }t        d       g| j                  z  }|||<   t        d       g| j                  z  }t        |	|	|
z         ||<   | t        |         | t        |      <    | S )Nz#Context windows: Applying FreeNoisecpur   r   )	generatorr8   )r   r   rv   	Generatormanual_seedrS   r{   rM   randpermrV   rx   rU   )r!  rK   rJ   r   r  r  latent_video_lengthrR  rS  	place_idxactual_deltalist_idxsource_slicetarget_slices                 r   r  r    s   LL67u-99$?I++c*_,E11NBEJ	.	5"5	"AB1 L >>,)ERU^^d}uzz1$Sd}uzz1!)Y-EFS%*5+>%?eL!" K  Lr   )r7   rE   r0   r"   r~   r^   r   r^   r   r^   rX   rb   )r  r"   )r.   r
   r   )r  list[float]r0   r"   rK   r^   r#   r"   )r0   r"   rK   r^   r#   rb   )r<  r^   r  r   r2   r?   )r<  r^   r  r   )r   r   r#   r   )
re  r^   r   r^   rc  rb   r  r   r   r"   )re  r^   r#   r  )re  r^   r   r^   rc  rb   r  r   )r   r   r#   r   )r=  zlist[list[int]]r<  r^   r#   rb   )r7   rb   r<  r^   r#   ztuple[bool, int])r7   rb   r<  r^   )
r!  r"   rK   r^   rJ   r^   r   r^   r  r^   )E
__future__r   typingr   r   rv   numpyr6  collectionsdataclassesr   abcr   r   r   comfy.model_managementr   comfy.patcher_extensioncomfy.model_baser	   comfy.model_patcherr
   comfy.controlnetr   r   r)   rE   rd   r   r   r   
namedtupler   r   r  r  r"  r&  r   r   r,  rB  rO  rW  rY  r\  r1  r2  r3  r4  r_  ra  r   rg  rk  rq  r   rv  rw  r   rx  r|  r}  r;  r  rD  r  rE  r  r   r   r   <module>r     s   " *    ! #   *0,6s 6$6 6$!8- !8H  @  WX  wy 0)f       (''(8:pqgQ/ gQT	9R &-`&
%
 ##%B%%'F$$&D4	3n	< < 0 6!7%%'D	0	H*r   