
    +jTR                     ~   % S SK r 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JrJ	r	  S SK
Jr  S SKJr  S SKJrJr  S SKrS SKJr  0 r\	\\4   \S'   S\S	\4S
 jr " S S\5      r " S S5      rS r " S S\5      r " S S\5      r " S S5      r " S S\5      r " S S5      r  " S S\5      r!Sr"Sr# " S S\!5      r$g)     N)SequenceMappingDict)ModelPatcher)DynamicPrompt)ABCabstractmethod)is_linkNODE_CLASS_CONTAINS_UNIQUE_ID
class_typereturnc                     U [         ;   a	  [         U    $ [        R                  U    nSUR                  5       R	                  S0 5      R                  5       ;   [         U '   [         U    $ )N	UNIQUE_IDhidden)r   nodesNODE_CLASS_MAPPINGSINPUT_TYPESgetvalues)r   	class_defs     7/home/wildlama/comfy/ComfyUI/comfy_execution/caching.pyinclude_unique_id_in_inputr      sb    22,Z88))*5I0;y?T?T?V?Z?Z[ceg?h?o?o?q0q!*-(44    c                   H    \ rS rSrS r\S 5       rS rS rS r	S r
S rS	rg
)CacheKeySet   c                      0 U l         0 U l        g Nkeyssubcache_keysself	dynpromptnode_idsis_changed_caches       r   __init__CacheKeySet.__init__   s    	r   c                    #    [        5       e7fr   )NotImplementedError)r#   r%   s     r   add_keysCacheKeySet.add_keys   s     !##s   c                 H    [        U R                  R                  5       5      $ r   )setr    r#   s    r   all_node_idsCacheKeySet.all_node_ids#   s    499>>#$$r   c                 6    U R                   R                  5       $ r   )r    r   r/   s    r   get_used_keysCacheKeySet.get_used_keys&   s    yy!!r   c                 6    U R                   R                  5       $ r   )r!   r   r/   s    r   get_used_subcache_keys"CacheKeySet.get_used_subcache_keys)   s    !!((**r   c                 :    U R                   R                  US 5      $ r   )r    r   r#   node_ids     r   get_data_keyCacheKeySet.get_data_key,   s    yy}}Wd++r   c                 :    U R                   R                  US 5      $ r   )r!   r   r9   s     r   get_subcache_keyCacheKeySet.get_subcache_key/   s    !!%%gt44r   r   N)__name__
__module____qualname____firstlineno__r'   r	   r+   r0   r3   r6   r;   r>   __static_attributes__ r   r   r   r      s4      $ $%"+,5r   r   c                       \ rS rSrS rSrg)
Unhashable2   c                 $    [        S5      U l        g )NNaN)floatvaluer/   s    r   r'   Unhashable.__init__3   s    5\
r   )rL   N)r@   rA   rB   rC   r'   rD   rE   r   r   rG   rG   2   s    "r   rG   c                    [        U [        [        [        [        [
        [        S 5      45      (       a  U $ [        U [        5      (       aK  [        [        U R                  5       5       VVs/ s H  u  p[        U5      [        U5      4PM     snn5      $ [        U [        5      (       aB  [        [        [        R                  " 5       U  Vs/ s H  n[        U5      PM     sn5      5      $ [!        5       $ s  snnf s  snf r   )
isinstanceintrK   strboolbytestyper   	frozensetsorteditemsto_hashabler   zip	itertoolscountrG   )objkvis       r   rX   rX   6   s     #UCud4jABB
	C	!	!vciikGZ[GZtq;q>;q>:GZ[\\	C	"	"Y__.0MAQ0MNOO | \0Ms   -"C8
C>c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )CacheKeySetIDC   c                 2   > [         TU ]  XU5        Xl        g r   )superr'   r$   r#   r$   r%   r&   	__class__s       r   r'   CacheKeySetID.__init__D   s    .>?"r   c                   #    U Hw  nX R                   ;   a  M  U R                  R                  U5      (       d  M6  U R                  R                  U5      nX#S   4U R                   U'   X#S   4U R                  U'   My     g 7fNr   )r    r$   has_nodeget_noder!   r#   r%   r:   nodes       r   r+   CacheKeySetID.add_keysH   sv     G))#>>**733>>**73D")+=!>DIIg+24F*GDw'  s   A?B)r$   )r@   rA   rB   rC   r'   r+   rD   __classcell__rf   s   @r   ra   ra   C   s    #H Hr   ra   c                   T   ^  \ rS rSrU 4S jrS\4S jrS rS rS r	S r
S	 rS
rU =r$ )CacheKeySetInputSignatureR   c                 >   > [         TU ]  XU5        Xl        X0l        g r   )rd   r'   r$   r&   re   s       r   r'   "CacheKeySetInputSignature.__init__S   s    .>?" 0r   r   c                     gNFrE   r/   s    r   include_node_id_in_input2CacheKeySetInputSignature.include_node_id_in_inputX   s    r   c                 F  #    U H  nX R                   ;   a  M  U R                  R                  U5      (       d  M6  U R                  R                  U5      nU R	                  U R                  U5      I S h  vN U R                   U'   X#S   4U R
                  U'   M     g  N)7fri   )r    r$   rj   rk   get_node_signaturer!   rl   s       r   r+   "CacheKeySetInputSignature.add_keys[   s     G))#>>**733>>**73D'+'>'>t~~w'W!WDIIg+24F*GDw'   "Xs   A3B!5B6*B!c                   #    / nU R                  X5      u  pEUR                  U R                  XU5      I S h  vN 5        U H,  nUR                  U R                  XU5      I S h  vN 5        M.     [        U5      $  NE N7fr   )get_ordered_ancestryappendget_immediate_node_signaturerX   )r#   r$   r:   	signature	ancestorsorder_mappingancestor_ids          r   r{   ,CacheKeySetInputSignature.get_node_signaturee   sy     	#'#<#<Y#P 	t@@Ubccd$K4#D#DY]j#kkl %9%% dks!   6BA>-B&B 
'B Bc                 z  #    UR                  U5      (       d  [        S5      /$ UR                  U5      nUS   n[        R                  U   nXPR
                  R                  U5      I S h  vN /nU R                  5       (       d2  [        US5      (       a  UR                  (       d  [        U5      (       a  UR                  U5        US   n[        UR                  5       5       HK  n	[        X   5      (       a!  X   u  pX:   nUR                  U	SX445        M6  UR                  XU	   45        MM     U$  N7f)NrJ   r   NOT_IDEMPOTENTinputsANCESTOR)rj   rK   rk   r   r   r&   r   rx   hasattrr   r   r   rV   r    r
   )r#   r$   r:   ancestor_order_mappingrm   r   r   r   r   keyr   ancestor_socketancestor_indexs                r   r   6CacheKeySetInputSignature.get_immediate_node_signaturem   s/    !!'**%L>!!!'*,'
--j9	'<'<'@'@'I!IJ	((**wyBR/S/SXaXpXp  vP  Q[  v\  v\W%h&++-(Cv{##17.!7!D  #z>&S!TU  #c{!34 )  "Js   A*D;,D9-CD;c                 4    / n0 nU R                  XX45        X44$ r   )get_ordered_ancestry_internal)r#   r$   r:   r   r   s        r   r~   .CacheKeySetInputSignature.get_ordered_ancestry   s%    	**9yX''r   c                 H   UR                  U5      (       d  g UR                  U5      S   n[        UR                  5       5      nU HX  n[	        XW   5      (       d  M  XW   S   nX;  d  M%  UR                  U5        [        U5      S-
  XH'   U R                  XX45        MZ     g )Nr   r      )rj   rk   rV   r    r
   r   lenr   )	r#   r$   r:   r   r   r   
input_keysr   r   s	            r   r   7CacheKeySetInputSignature.get_ordered_ancestry_internal   s    !!'**##G,X6FKKM*
Cv{##$k!n3$$[114Y!1CM.66yyh r   )r$   r&   )r@   rA   rB   rC   r'   rR   rx   r+   r{   r   r~   r   rD   ro   rp   s   @r   rr   rr   R   s5    1
$ H&,(i ir   rr   c                       \ rS rSrSS jrS rS rS rS rS r	S r
S	 rS
 rS rS rS r\S 5       rS rS rS rS rS rS rS rSrg)
BasicCache   c                 l    Xl         SU l        X l        U   U   0 U l        0 U l        [        5       U l        g rw   )	key_classinitializedenable_providerscache	subcachesr.   _pending_store_tasks)r#   r   r   s      r   r'   BasicCache.__init__   s3    "  0
),!r   c                    #    Xl         U R                  XU5      U l        U R                  R                  U5      I S h  vN   X0l        SU l        g  N7f)NT)r$   r   cache_key_setr+   r&   r   r"   s       r   
set_promptBasicCache.set_prompt   sK     "!^^IAQR  ))(333 0 	4s   <AAAc                     U R                   (       d   eU R                  R                  5       nU R                  R	                  5        H"  nUR                  UR                  5       5      nM$     U$ r   )r   r   r0   r   r   union)r#   r%   subcaches      r   r0   BasicCache.all_node_ids   sX    %%224--/H~~h&;&;&=>H 0r   c                     [        U R                  R                  5       5      n/ nU R                   H  nX1;  d  M
  UR	                  U5        M     U H  nU R                  U	 M     g r   )r.   r   r3   r   r   )r#   preserve_keys	to_remover   s       r   _clean_cacheBasicCache._clean_cache   sY    D..<<>?	::C'  %  C

3 r   c                     [        U R                  R                  5       5      n/ nU R                   H  nX1;  d  M
  UR	                  U5        M     U H  nU R                  U	 M     g r   )r.   r   r6   r   r   )r#   preserve_subcachesr   r   s       r   _clean_subcachesBasicCache._clean_subcaches   s[     !3!3!J!J!LM	>>C,  % " Cs# r   c                 j    U R                   (       d   eU R                  5         U R                  5         g r   )r   r   r   r/   s    r   clean_unusedBasicCache.clean_unused   s)    r   c                     g r   rE   r#   kwargss     r   pollBasicCache.poll       r   c                     U R                   (       d  g U R                  R                  U5      nX R                  ;   a  U R                  U   $ g r   r   r   r;   r   r#   r:   	cache_keys      r   	get_localBasicCache.get_local   s@    &&33G<	

"::i((r   c                 |    U R                   (       d   eU R                  R                  U5      nX R                  U'   g r   r   r#   r:   rL   r   s       r   	set_localBasicCache.set_local   s3    &&33G<	 %

9r   c                    #    U R                   (       d   eU R                  R                  U5      nX R                  U'   U R	                  XU5      I S h  vN   g  N7fr   )r   r   r;   r   _notify_providers_storer   s       r   _set_immediateBasicCache._set_immediate   sL     &&33G<	 %

9**7uEEEs   AAAAc                    #    U R                   (       d  g U R                  R                  U5      nX R                  ;   a  U R                  U   $ U R	                  X5      I S h  vN nUb  X0R                  U'   U$ g  N7fr   )r   r   r;   r   _check_providers_lookup)r#   r:   r   external_results       r   _get_immediateBasicCache._get_immediate   st     &&33G<	

"::i(( $ < <W PP&$3JJy!"" Qs   A A="A;#A=c                   #    SSK JnJnJnJnJn  U R                  (       d  g U" 5       (       d  g U R                  U5      (       d  g U" U5      (       a  g U R                  X5      n	U	c  g U" UR                  UR                  S9n
U" 5        H  n UR                  X5      (       ah  [        R                  " U R                  XU
5      5      nU R                  R!                  U5        UR#                  U R                  R$                  5        M  M     g ! [&         a6  nUR)                  SUR*                  R,                   SU 35         S nAM  S nAff = f7f)Nr   _has_cache_providers_get_cache_providers
CacheValue_contains_self_unequal_logger)outputsuiCache provider z error on store: )comfy_execution.cache_providerr   r   r   r   r   r   _is_external_cacheable_value_build_contextr   r   should_cacheasynciocreate_task_safe_provider_storer   addadd_done_callbackdiscard	Exceptionwarningrf   r@   )r#   r:   r   rL   r   r   r   r   r   contextcache_valueprovidertaskes                 r   r   "BasicCache._notify_providers_store   s+    	
 	

 $$#%%0077!),,%%g9? 588D,.He((>>"..t/H/H\g/hiD--11$7**4+D+D+L+LM ? /  e/(2D2D2M2M1NN_`a_b cddes1   BEA<DE
E+EEEEc                    #    SSK Jn   U R                  X5      I S h  vN   g  N! [         a5  nUR	                  SU R
                  R                   SU 35         S nAg S nAff = f7f)Nr   )r   r   z async store error: )r   r   on_storer   r   rf   r@   )r   r   r   r   r   s        r   r   BasicCache._safe_provider_store
  s_     :	d##G999 	dOOoh.@.@.I.I-JJ^_`^abcc	ds6   A(& $& A(& 
A%+A A( A%%A(c                 ,  #    SSK JnJnJnJnJn  U R                  (       d  g U" 5       (       d  g U" U5      (       a  g U R                  X5      nUc  g U" 5        H  n	 U	R                  U5      (       d  M  U	R                  U5      I S h  vN n
U
b  [        X5      (       d+  UR                  SU	R                  R                   S35        Ms  [        U
R                  [        [         45      (       d+  UR                  SU	R                  R                   S35        M  SSKJn  U" U
R&                  [        U
R                  5      S9s  $ M     g  N! [(         a7  nUR                  SU	R                  R                   S	U 35         S nAGM2  S nAff = f7f)
Nr   r   z	Provider z returned invalid typez returned invalid outputs)
CacheEntry)r   r   r   z error on lookup: )r   r   r   r   r   r   r   r   r   	on_lookuprO   r   rf   r@   r   listtuple	executionr   r   r   )r#   r:   r   r   r   r   r   r   r   r   resultr   r   s                r   r   "BasicCache._check_providers_lookup  sf    	
 	

 $$#%%!),,%%g9?,.Hf,,W55'11'::%%f99)H4F4F4O4O3PPf(gh %fnntUmDD)H4F4F4O4O3PPi(jk 4%D<PQQ & /"  ;  f/(2D2D2M2M1NN`ab`c deefsh   AFE4F6E
EA EFAEF)EFE
F+FFFFc                 @    [        US5      =(       a    [        US5      $ )Nr   r   )r   )r#   rL   s     r   r   'BasicCache._is_external_cacheable_value6  s    ui(AWUD-AAr   c                     U R                   (       a  U R                  (       d  g U R                  R                  U5      R                  SS5      $ ! [         a     gf = f)N r   )r   r$   rk   r   r   r9   s     r   _get_class_typeBasicCache._get_class_type9  sM    t~~	>>**7377bII 		s   *A 
AAc                     SSK JnJnJn   U" U5      nUc  g U" UU R	                  U5      US9$ ! [
         a!  nUR                  SU SU 35         S nAg S nAff = f)Nr   )CacheContext_serialize_cache_keyr   )r:   r   cache_key_hashz'Failed to build cache context for node z: )r   r   r   r   r   r   r   )r#   r:   r   r   r   r   r   r   s           r   r   BasicCache._build_contextA  sr    ^^	1)<N%//8- 
  	OOEgYbQRPSTU	s   / / 
AAAc                 (  #    U R                   R                  U5      nU R                  R                  US 5      nUc#  [	        U R
                  5      nX@R                  U'   UR                  U R                  X R                  5      I S h  vN   U$  N7fr   )	r   r>   r   r   r   r   r   r$   r&   )r#   r:   children_idssubcache_keyr   s        r   _ensure_subcacheBasicCache._ensure_subcacheP  s|     ))::7C>>%%lD9!$..1H+3NN<(!!$..,@U@UVVV 	Ws   BB	B
Bc                     U R                   (       d   eU R                  R                  U5      nX R                  ;   a  U R                  U   $ g r   )r   r   r>   r   )r#   r:   r  s      r   _get_subcacheBasicCache._get_subcacheY  sC    ))::7C>>)>>,//r   c                     / nU R                    H#  nUR                  X R                   U   S.5        M%     U R                   H1  nUR                  X R                  U   R                  5       S.5        M3     U$ )N)r   rL   )r  r   )r   r   r   recursive_debug_dump)r#   r   r   s      r   r  BasicCache.recursive_debug_dumpa  s`    ::CMM#

3@A >>CMM3NN3<O<d<d<fgh "r   )	r   r   r   r$   r   r   r&   r   r   NF)r@   rA   rB   rC   r'   r   r0   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   r  r  r  rD   rE   r   r   r   r      s{    /  $ 
&
Fe: d d"HBr   r   c                   P   ^  \ rS rSrS
U 4S jjrS rS rS rS rS r	S r
S	rU =r$ )HierarchicalCacheii  c                     > [         TU ]  XS9  g )Nr   )rd   r'   r#   r   r   rf   s      r   r'   HierarchicalCache.__init__j  s    Fr   c                 $   U R                   c   eU R                   R                  U5      nUc  U $ / nUb1  UR                  U5        U R                   R                  U5      nUb  M1  U n[        U5       H  nUR	                  U5      nUb  M    g    U$ r   )r$   get_parent_node_idr   reversedr  )r#   r:   	parent_id	hierarchyr   s        r   _get_cache_for HierarchicalCache._get_cache_form  s    ~~)))NN55g>	K	#Y'99)DI # !),I''	2E} - r   c                 j   #    U R                  U5      nUc  g UR                  U5      I S h  vN $  N7fr   )r  r   r#   r:   r   s      r   r   HierarchicalCache.get  s4     ##G,=))'2222s   *313c                 V    U R                  U5      nUc  g [        R                  X!5      $ r   )r  r   r   r  s      r   r   HierarchicalCache.get_local  s+    ##G,=##E33r   c                 n   #    U R                  U5      nUc   eUR                  X5      I S h  vN   g  N7fr   )r  r   r#   r:   rL   r   s       r   r.   HierarchicalCache.set  s5     ##G,   ""7222s   +535c                 \    U R                  U5      nUc   e[        R                  X1U5        g r   )r  r   r   r"  s       r   r   HierarchicalCache.set_local  s.    ##G,   UU3r   c                 l   #    U R                  U5      nUc   eUR                  X5      I S h  vN $  N7fr   )r  r  )r#   r:   r  r   s       r   ensure_subcache_for%HierarchicalCache.ensure_subcache_for  s8     ##G,   ++GBBBBs   +424rE   r  )r@   rA   rB   rC   r'   r  r   r   r.   r   r'  rD   ro   rp   s   @r   r  r  i  s.    G$343
4
C Cr   r  c                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)	NullCachei  c                    #    g 7fr   rE   r"   s       r   r   NullCache.set_prompt          c                     / $ r   rE   r/   s    r   r0   NullCache.all_node_ids  s    	r   c                     g r   rE   r/   s    r   r   NullCache.clean_unused  r   r   c                     g r   rE   r   s     r   r   NullCache.poll  r   r   c                    #    g 7fr   rE   r9   s     r   r   NullCache.get  s     r.  c                     g r   rE   r9   s     r   r   NullCache.get_local  s    r   c                    #    g 7fr   rE   r#   r:   rL   s      r   r.   NullCache.set  r-  r.  c                     g r   rE   r:  s      r   r   NullCache.set_local  r   r   c                    #    U $ 7fr   rE   )r#   r:   r  s      r   r'  NullCache.ensure_subcache_for  s
     s   rE   N)r@   rA   rB   rC   r   r0   r   r   r   r   r.   r   r'  rD   rE   r   r   r*  r*    s/    r   r*  c                   b   ^  \ rS rSrSU 4S jjrU 4S jrS rS rS rS r	S r
U 4S	 jrS
rU =r$ )LRUCachei  c                 d   > [         TU ]  XS9  X l        SU l        SU l        0 U l        0 U l        g )Nr  r   )rd   r'   max_sizemin_generation
generationused_generationchildren)r#   r   rC  r   rf   s       r   r'   LRUCache.__init__  s6    F !r   c                    >#    [         TU ]  XU5      I S h  vN   U =R                  S-  sl        U H  nU R                  U5        M     g  N47fNr   )rd   r   rE  
_mark_used)r#   r$   r%   r&   r:   rf   s        r   r   LRUCache.set_prompt  sF     g 6FGGG1GOOG$   	Hs   AA5Ac                 F   [        U R                  5      U R                  :  a  U R                  U R                  :  a  U =R                  S-  sl        U R                   Vs/ s H#  oR
                  U   U R                  :  d  M!  UPM%     nnU H;  nU R                  U	 U R
                  U	 XR                  ;   d  M.  U R                  U	 M=     [        U R                  5      U R                  :  a  U R                  U R                  :  a  M  U R                  5         g s  snf rJ  )r   r   rC  rD  rE  rF  rG  r   )r#   r   r   s      r   r   LRUCache.clean_unused  s    $**o-$2E2E2W1$(,

f
6J6J36ORVReRe6e
If JJsO((---'c*	 ! $**o-$2E2E2W 	 gs   ! DDc                 b   #    U R                  U5        U R                  U5      I S h  vN $  N7fr   )rK  r   r9   s     r   r   LRUCache.get  s(      ((1111   &/-/c                 t    U R                   R                  U5      nUb  U R                  U R                  U'   g g r   )r   r;   rE  rF  r   s      r   rK  LRUCache._mark_used  s7    &&33G<	 .2ooD  + !r   c                 b   #    U R                  U5        U R                  X5      I S h  vN $  N7fr   )rK  r   r:  s      r   r.   LRUCache.set  s(      ((8888rQ  c                 R    U R                  U5        [        R                  XU5        g r   )rK  r   r   r:  s      r   r   LRUCache.set_local  s     TE2r   c                   >#    [         TU ]  X5      I S h  vN   U R                  R                  U5      I S h  vN   U R	                  U5        U R                  R                  U5      n/ U R                  U'   U HK  nU R	                  U5        U R                  U   R                  U R                  R                  U5      5        MM     U $  N N7fr   )rd   r  r   r+   rK  r;   rG  r   )r#   r:   r  r   child_idrf   s        r   r'  LRUCache.ensure_subcache_for  s     g&w===  )),777 &&33G<	#%i $HOOH%MM)$++D,>,>,K,KH,UV %  	>7s    CC"CCBCC)rG  rE  rC  rD  rF  )d   F)r@   rA   rB   rC   r'   r   r   r   rK  r.   r   r'  rD   ro   rp   s   @r   rA  rA    s0    %	 2>
93 r   rA  g?g?c                   `   ^  \ rS rSrS	U 4S jjrS rU 4S jrU 4S jrU 4S jrS	S jr	Sr
U =r$ )
RAMPressureCachei  c                 2   > [         TU ]  USUS9  0 U l        g )Nr   r  )rd   r'   
timestampsr  s      r   r'   RAMPressureCache.__init__  s    A8HIr   c                 $    U R                  5         g r   )r   r/   s    r   r   RAMPressureCache.clean_unused   s    r   c                    >#    [         R                   " 5       U R                  U R                  R                  U5      '   [        TU ]  X5      I S h  vN   g  N7fr   )timer_  r   r;   rd   r.   r#   r:   rL   rf   s      r   r.   RAMPressureCache.set  s=     DHIIK**77@Agk')))s   AAAAc                    >#    [         R                   " 5       U R                  U R                  R                  U5      '   [        TU ]  U5      I S h  vN $  N7fr   )rd  r_  r   r;   rd   r   )r#   r:   rf   s     r   r   RAMPressureCache.get  s@     DHIIK**77@AW[))))s   AAAAc                    > [         R                   " 5       U R                  U R                  R                  U5      '   [        TU ]  X5        g r   )rd  r_  r   r;   rd   r   re  s      r   r   RAMPressureCache.set_local  s5    DHIIK**77@A')r   c                 f  ^ ^^^	 [         R                  " 5       R                  U:  a  g / nT R                  R	                  5        H  u  mnU(       d  T R
                  T   T R                  :X  a  M,  [        T R                  T R
                  T   -
  -  n[        mUUU	U 4S jm	T	" UR                  5        UT-  n[        R                  " X5T R                  T   T45        M     [         R                  " 5       R                  U:  a  U(       a  UR                  5       u    nmT R                  T	 T R
                  R                  TS 5        T R                  R                  TS 5        T R                  R                  TS 5        [         R                  " 5       R                  U:  a
  U(       a  M  g g g g )Nc                   > U c  g U  H  n[        U[        [        45      (       a
  T" U5        M(  [        U[        R                  5      (       a@  UR
                  R                  S:X  a&  TUR                  5       UR                  5       -  -  mM  [        U[        5      (       d  M  TR                  T   TR                  :w  d  M  SmM     g )Ncpugꌠ9Y>)F)rO   r   r   torchTensordevicerT   numelelement_sizer   rF  rE  )r   outputr   	ram_usagescan_list_for_ram_usager#   s     r   ru  =RAMPressureCache.ram_release.<locals>.scan_list_for_ram_usage  s    ?%F!&4-88/7#FELL99fmm>P>PTY>Y!V\\^f6I6I6K%KK	#FL99d>R>RSV>W[_[j[j>j$(	 &r   )psutilvirtual_memory	availabler   rW   rF  rE  %RAM_CACHE_OLD_WORKFLOW_OOM_MULTIPLIERRAM_CACHE_DEFAULT_RAM_USAGEr   bisectinsortr_  poprG  )
r#   targetfree_active
clean_listcache_entry	oom_score_r   rt  ru  s
   `      @@@r   ram_releaseRAMPressureCache.ram_release  s\     ",,6
 $

 0 0 2C4#7#7#<#O>4??UYUiUijmUnCnoI3I) ) $K$7$78"I MM*$//#2F&LM/ !32 ##%//&8Z"(IAq#

3  $$S$/OOT*MMc4( ##%//&8ZZ8Z8r   )r_  r  )r@   rA   rB   rC   r'   r   r.   r   r   r  rD   ro   rp   s   @r   r]  r]    s&     ***$) $)r   r]  )%r   r|  rZ   rw  rd  rn  typingr   r   r   comfy.model_patcherr   comfy_execution.graphr   abcr   r	   r   comfy_execution.graph_utilsr
   r   rQ   rR   __annotations__r   r   rG   rX   ra   rr   r   r  r*  rA  r{  rz  r]  rE   r   r   <module>r     s          * * , / #  /13 tCI 353 54 55# 50" "HK HBi BiHQ Qf/C
 /Cb :6z 6x # 
 ), %9)x 9)r   