
    +jTR                        U d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlZd dlmZ i Ze	eef         ed<   ded	efd
Z G d de          Z G d d          Zd Z G d de          Z G d de          Z G d d          Z G d de          Z G d d          Z  G d de          Z!dZ"dZ# G d de!          Z$dS )     N)SequenceMappingDict)ModelPatcher)DynamicPrompt)ABCabstractmethod)is_linkNODE_CLASS_CONTAINS_UNIQUE_ID
class_typereturnc                     | t           v rt           |          S t          j        |          }d|                                                    di                                           v t           | <   t           |          S )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      sk    222,Z88)*5I0;y?T?T?V?V?Z?Z[ceg?h?h?o?o?q?q0q!*-(44    c                   H    e Zd Zd Zed             Zd Zd Zd Zd Z	d Z
dS )	CacheKeySetc                 "    i | _         i | _        d S N)keyssubcache_keysself	dynpromptnode_idsis_changed_caches       r   __init__zCacheKeySet.__init__   s    	r   c                 "   K   t                      r   )NotImplementedError)r!   r#   s     r   add_keyszCacheKeySet.add_keys   s      !###r   c                 N    t          | j                                                  S r   )setr   r!   s    r   all_node_idszCacheKeySet.all_node_ids#   s    49>>##$$$r   c                 4    | j                                         S r   )r   r   r+   s    r   get_used_keyszCacheKeySet.get_used_keys&   s    y!!!r   c                 4    | j                                         S r   )r   r   r+   s    r   get_used_subcache_keysz"CacheKeySet.get_used_subcache_keys)   s    !((***r   c                 8    | j                             |d           S r   )r   r   r!   node_ids     r   get_data_keyzCacheKeySet.get_data_key,   s    y}}Wd+++r   c                 8    | j                             |d           S r   )r   r   r2   s     r   get_subcache_keyzCacheKeySet.get_subcache_key/   s    !%%gt444r   N)__name__
__module____qualname__r%   r	   r(   r,   r.   r0   r4   r6    r   r   r   r      s              $ $ ^$% % %" " "+ + +, , ,5 5 5 5 5r   r   c                       e Zd Zd ZdS )
Unhashablec                 .    t          d          | _        d S )NNaN)floatvaluer+   s    r   r%   zUnhashable.__init__3   s    5\\


r   N)r7   r8   r9   r%   r:   r   r   r<   r<   2   s#        " " " " "r   r<   c                    t          | t          t          t          t          t
          t          d           f          r| S t          | t                    r8t          d t          | 
                                          D                       S t          | t                    r8t          t          t          j                    d | D                                 S t                      S )Nc                 P    g | ]#\  }}t          |          t          |          f$S r:   to_hashable).0kvs      r   
<listcomp>zto_hashable.<locals>.<listcomp><   s-    [[[tq!;q>>;q>>:[[[r   c                 ,    g | ]}t          |          S r:   rC   )rE   is     r   rH   zto_hashable.<locals>.<listcomp>>   s    0M0M0MAQ0M0M0Mr   )
isinstanceintr?   strboolbytestyper   	frozensetsorteditemsr   zip	itertoolscountr<   )objs    r   rD   rD   6   s     #UCud4jjABB 
	C	!	! [[vciikkGZGZ[[[\\\	C	"	" Y_..0M0M0M0M0MNNOOO ||r   c                   $     e Zd Z fdZd Z xZS )CacheKeySetIDc                 \    t                                          |||           || _        d S r   )superr%   r"   r!   r"   r#   r$   	__class__s       r   r%   zCacheKeySetID.__init__D   s+    H.>???"r   c                    K   |D ]e}|| j         v r| j                            |          s'| j                            |          }||d         f| j         |<   ||d         f| j        |<   fd S Nr   )r   r"   has_nodeget_noder   r!   r#   r3   nodes       r   r(   zCacheKeySetID.add_keysH   s       	H 	HG$)##>**733 >**733D")4+=!>DIg+2D4F*GDw''	H 	Hr   )r7   r8   r9   r%   r(   __classcell__r]   s   @r   rY   rY   C   sN        # # # # #H H H H H H Hr   rY   c                   H     e Zd Z fdZdefdZd Zd Zd Zd Z	d Z
 xZS )	CacheKeySetInputSignaturec                 j    t                                          |||           || _        || _        d S r   )r[   r%   r"   r$   r\   s       r   r%   z"CacheKeySetInputSignature.__init__S   s5    H.>???" 0r   r   c                     dS NFr:   r+   s    r   include_node_id_in_inputz2CacheKeySetInputSignature.include_node_id_in_inputX   s    ur   c                   K   |D ]|}|| j         v r| j                            |          s'| j                            |          }|                     | j        |           d {V | j         |<   ||d         f| j        |<   }d S r_   )r   r"   r`   ra   get_node_signaturer   rb   s       r   r(   z"CacheKeySetInputSignature.add_keys[   s       	H 	HG$)##>**733 >**733D'+'>'>t~w'W'W!W!W!W!W!W!WDIg+2D4F*GDw''	H 	Hr   c                 $  K   g }|                      ||          \  }}|                    |                     |||           d {V            |D ]2}|                    |                     |||           d {V            3t          |          S r   )get_ordered_ancestryappendget_immediate_node_signaturerD   )r!   r"   r3   	signature	ancestorsorder_mappingancestor_ids          r   rm   z,CacheKeySetInputSignature.get_node_signaturee   s      	#'#<#<Y#P#P 	=t@@GUbccccccccddd$ 	m 	mK4#D#DYP[]j#k#kkkkkkkllll9%%%r   c                   K   |                     |          st          d          gS |                    |          }|d         }t          j        |         }|| j                            |           d {V g}|                                 s&t          |d          r|j	        st          |          r|                    |           |d         }t          |                                          D ]b}	t          ||	                   r.||	         \  }
}||
         }|                    |	d||ff           E|                    |	||	         f           c|S )Nr>   r   NOT_IDEMPOTENTinputsANCESTOR)r`   r?   ra   r   r   r$   r   rk   hasattrrw   r   rp   rR   r   r
   )r!   r"   r3   ancestor_order_mappingrc   r   r   rr   rx   keyru   ancestor_socketancestor_indexs                r   rq   z6CacheKeySetInputSignature.get_immediate_node_signaturem   s     !!'** 	"%LL>!!!'**,'
-j9	t'<'@'@'I'I!I!I!I!I!I!IJ	((** 	&wyBR/S/S 	&XaXp 	&  vP  Q[  v\  v\ 	&W%%%h&++--(( 	5 	5Cvc{## 517.o!7!D  #z>?&S!TUUUU  #vc{!34444r   c                 B    g }i }|                      ||||           ||fS r   )get_ordered_ancestry_internal)r!   r"   r3   rs   rt   s        r   ro   z.CacheKeySetInputSignature.get_ordered_ancestry   s1    	**9gy-XXX-''r   c                    |                     |          sd S |                    |          d         }t          |                                          }|D ]k}t	          ||                   rT||         d         }||vrB|                    |           t          |          dz
  ||<   |                     ||||           ld S )Nrx   r      )r`   ra   rR   r   r
   rp   lenr   )	r!   r"   r3   rs   rt   rx   
input_keysr|   ru   s	            r   r   z7CacheKeySetInputSignature.get_ordered_ancestry_internal   s    !!'** 	F##G,,X6FKKMM**
 	i 	iCvc{## i$Sk!nm33$$[11114Y!1CM+.66y+yZghhh	i 	ir   )r7   r8   r9   r%   rN   rk   r(   rm   rq   ro   r   rd   re   s   @r   rg   rg   R   s        1 1 1 1 1
$    H H H& & &  ,( ( (i i i i i i ir   rg   c                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zed             Zd Zd Zd Zd Zd Zd Zd ZdS )
BasicCacheFc                 z    || _         d| _        || _        |  |  i | _        i | _        t                      | _        d S rj   )	key_classinitializedenable_providerscache	subcachesr*   _pending_store_tasks)r!   r   r   s      r   r%   zBasicCache.__init__   sE    "  0%'
),!!!r   c                    K   || _         |                     |||          | _        | j                            |           d {V  || _        d| _        d S )NT)r"   r   cache_key_setr(   r$   r   r    s       r   
set_promptzBasicCache.set_prompt   se      "!^^IxAQRR ))(333333333 0r   c                     | j         sJ | j                                        }| j                                        D ])}|                    |                                          }*|S r   )r   r   r,   r   r   union)r!   r#   subcaches      r   r,   zBasicCache.all_node_ids   sf    %2244--// 	? 	?H~~h&;&;&=&=>>HHr   c                     t          | j                                                  }g }| j        D ]}||vr|                    |           |D ]
}| j        |= d S r   )r*   r   r.   r   rp   )r!   preserve_keys	to_remover|   s       r   _clean_cachezBasicCache._clean_cache   sx    D.<<>>??	: 	& 	&C-''  %%% 	  	 C
3	  	 r   c                     t          | j                                                  }g }| j        D ]}||vr|                    |           |D ]
}| j        |= d S r   )r*   r   r0   r   rp   )r!   preserve_subcachesr   r|   s       r   _clean_subcacheszBasicCache._clean_subcaches   s|     !3!J!J!L!LMM	> 	& 	&C,,,  %%% 	$ 	$Cs##	$ 	$r   c                 h    | j         sJ |                                  |                                  d S r   )r   r   r   r+   s    r   clean_unusedzBasicCache.clean_unused   s;    r   c                     d S r   r:   r!   kwargss     r   pollzBasicCache.poll       r   c                 x    | j         sd S | j                            |          }|| j        v r| j        |         S d S r   r   r   r4   r   r!   r3   	cache_keys      r   	get_localzBasicCache.get_local   sG     	4&33G<<	
"":i((tr   c                 `    | j         sJ | j                            |          }|| j        |<   d S r   r   r!   r3   r@   r   s       r   	set_localzBasicCache.set_local   s9    &33G<<	 %
9r   c                    K   | j         sJ | j                            |          }|| j        |<   |                     |||           d {V  d S r   )r   r   r4   r   _notify_providers_storer   s       r   _set_immediatezBasicCache._set_immediate   sg      &33G<<	 %
9**7IuEEEEEEEEEEEr   c                    K   | j         sd S | j                            |          }|| j        v r| j        |         S |                     ||           d {V }||| j        |<   |S d S r   )r   r   r4   r   _check_providers_lookup)r!   r3   r   external_results       r   _get_immediatezBasicCache._get_immediate   s       	4&33G<<	
"":i(( $ < <Wi P PPPPPPP&$3DJy!""tr   c                 ~  K   ddl m}m}m}m}m} | j        sd S  |            sd S |                     |          sd S  ||          rd S |                     ||          }	|	d S  ||j	        |j
                  }
 |            D ]}	 |                    |	|
          rbt          j        |                     ||	|
                    }| j                            |           |                    | j        j                   |# t&          $ r/}|                    d|j        j         d|            Y d }~d }~ww xY wd S )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warningr]   r7   )r!   r3   r   r@   r   r   r   r   r   contextcache_valueprovidertaskes                 r   r   z"BasicCache._notify_providers_store   s     	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	

 $ 	F##%% 	F0077 	F!!),, 	F%%gy99?F j58DDD,,.. 	e 	eHe((+>> N".t/H/HSZ\g/h/hiiD-11$777**4+D+LMMM e e e c(2D2M c c`a c cdddddddde	e 	es   A8D
D:%D55D:c                    K   ddl m} 	 |                     ||           d {V  d S # t          $ r0}|                    d| j        j         d|            Y d }~d S d }~ww xY w)Nr   )r   r   z async store error: )r   r   on_storer   r   r]   r7   )r   r   r   r   r   s        r   r   zBasicCache._safe_provider_store
  s      ::::::	d##G[99999999999 	d 	d 	dOObh.@.Ibb_`bbccccccccc	ds   ( 
A"%AA"c                   K   ddl m}m}m}m}m} | j        sd S  |            sd S  ||          rd S |                     ||          }|d S  |            D ]}		 |	                    |          s|		                    |           d {V }
|
t          |
|          s$|                    d|	j        j         d           kt          |
j        t          t           f          s$|                    d|	j        j         d           ddlm}  ||
j        t          |
j                            c S # t(          $ r0}|                    d|	j        j         d	|            Y d }~d }~ww xY wd S )
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_lookuprK   r   r]   r7   r   listtuple	executionr   r   r   )r!   r3   r   r   r   r   r   r   r   r   resultr   r   s                r   r   z"BasicCache._check_providers_lookup  s*     	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	

 $ 	4##%% 	4!!),, 	4%%gy99?4,,.. 	f 	fHf,,W55 '11'::::::::%%fj99 !(gH4F4O(g(g(ghhh %fntUmDD !(jH4F4O(j(j(jkkk 444444%:D<P<PQQQQQQ &  f f f d(2D2M d dab d deeeeeeeef ts,   D41AD4AD4)D44
E.>%E))E.c                 B    t          |d          ot          |d          S )Nr   r   )rz   )r!   r@   s     r   r   z'BasicCache._is_external_cacheable_value6  s!    ui((AWUD-A-AAr   c                     | j         r| j        sdS 	 | j                            |                              dd          S # t          $ r Y dS w xY w)N r   )r   r"   ra   r   r   r2   s     r   _get_class_typezBasicCache._get_class_type9  sh     	t~ 	2	>**73377bIII 	 	 	22	s   -A   
AAc                     ddl m}m}m} 	  ||          }|d S  |||                     |          |          S # t
          $ r&}|                    d| d|            Y d }~d S d }~ww xY w)Nr   )CacheContext_serialize_cache_keyr   )r3   r   cache_key_hashz'Failed to build cache context for node z: )r   r   r   r   r   r   r   )r!   r3   r   r   r   r   r   r   s           r   r   zBasicCache._build_contextA  s    ^^^^^^^^^^	11)<<N%t<//88-   
  	 	 	OOTgTTQRTTUUU44444	s   <  < 
A,A''A,c                   K   | j                             |          }| j                            |d           }|t	          | j                  }|| j        |<   |                    | j        || j                   d {V  |S r   )	r   r6   r   r   r   r   r   r"   r$   )r!   r3   children_idssubcache_keyr   s        r   _ensure_subcachezBasicCache._ensure_subcacheP  s      )::7CC>%%lD99!$.11H+3DN<(!!$.,@UVVVVVVVVVr   c                 x    | j         sJ | j                            |          }|| j        v r| j        |         S d S r   )r   r   r6   r   )r!   r3   r   s      r   _get_subcachezBasicCache._get_subcacheY  sF    )::7CC4>))>,//4r   c                     g }| j         D ]%}|                    || j         |         d           &| j        D ]7}|                    || j        |                                         d           8|S )N)r|   r@   )r   r   )r   rp   r   recursive_debug_dump)r!   r   r|   s      r   r   zBasicCache.recursive_debug_dumpa  s    : 	B 	BCMM#
3@@AAAA> 	i 	iCMM3DN3<O<d<d<f<fgghhhhr   NF)r7   r8   r9   r%   r   r,   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   r:   r   r   r   r      s^       / / / /            $ $ $     
    & & &
F F F  e e e: d d \d" " "HB B B            r   r   c                   D     e Zd Zd	 fd	Zd Zd Zd Zd Zd Zd Z	 xZ
S )
HierarchicalCacheFc                 N    t                                          ||           d S )Nr   )r[   r%   r!   r   r   r]   s      r   r%   zHierarchicalCache.__init__j  s'    5EFFFFFr   c                    | j         J | j                             |          }|| S g }|1|                    |           | j                             |          }|1| }t          |          D ]}|                    |          }| d S |S r   )r"   get_parent_node_idrp   reversedr   )r!   r3   	parent_id	hierarchyr   s        r   _get_cache_forz HierarchicalCache._get_cache_form  s    ~)))N55g>>	K	#Y'''99)DDI # !),, 	 	I''	22E}tt r   c                 n   K   |                      |          }|d S |                    |           d {V S r   )r   r   r!   r3   r   s      r   r   zHierarchicalCache.get  sI      ##G,,=4))'222222222r   c                 j    |                      |          }|d S t                              ||          S r   )r   r   r   r   s      r   r   zHierarchicalCache.get_local  s5    ##G,,=4##E7333r   c                 t   K   |                      |          }|J |                    ||           d {V  d S r   )r   r   r!   r3   r@   r   s       r   r*   zHierarchicalCache.set  sS      ##G,,   ""7E22222222222r   c                 p    |                      |          }|J t                              |||           d S r   )r   r   r   r   s       r   r   zHierarchicalCache.set_local  s?    ##G,,   UGU33333r   c                 p   K   |                      |          }|J |                    ||           d {V S r   )r   r   )r!   r3   r   r   s       r   ensure_subcache_forz%HierarchicalCache.ensure_subcache_for  sM      ##G,,   ++G\BBBBBBBBBr   r   )r7   r8   r9   r%   r   r   r   r*   r   r   rd   re   s   @r   r   r   i  s        G G G G G G  $3 3 34 4 43 3 3
4 4 4
C C C C C C Cr   r   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )	NullCachec                 
   K   d S r   r:   r    s       r   r   zNullCache.set_prompt        r   c                     g S r   r:   r+   s    r   r,   zNullCache.all_node_ids  s    	r   c                     d S r   r:   r+   s    r   r   zNullCache.clean_unused  r   r   c                     d S r   r:   r   s     r   r   zNullCache.poll  r   r   c                 
   K   d S r   r:   r2   s     r   r   zNullCache.get  s      tr   c                     d S r   r:   r2   s     r   r   zNullCache.get_local  s    tr   c                 
   K   d S r   r:   r!   r3   r@   s      r   r*   zNullCache.set  r   r   c                     d S r   r:   r  s      r   r   zNullCache.set_local  r   r   c                 
   K   | S r   r:   )r!   r3   r   s      r   r   zNullCache.ensure_subcache_for  s      r   N)r7   r8   r9   r   r,   r   r   r   r   r*   r   r   r:   r   r   r   r     s                            r   r   c                   R     e Zd Zd fd	Z fdZd Zd Zd Zd Zd	 Z	 fd
Z
 xZS )LRUCached   Fc                     t                                          ||           || _        d| _        d| _        i | _        i | _        d S )Nr   r   )r[   r%   max_sizemin_generation
generationused_generationchildren)r!   r   r  r   r]   s       r   r%   zLRUCache.__init__  sJ    5EFFF !r   c                    K   t                                          |||           d {V  | xj        dz  c_        |D ]}|                     |           d S )Nr   )r[   r   r  
_mark_used)r!   r"   r#   r$   r3   r]   s        r   r   zLRUCache.set_prompt  st      gg  H6FGGGGGGGGG1 	% 	%GOOG$$$$	% 	%r   c                 v    t           j                   j        k    r j         j        k     rv xj        dz  c_         fd j        D             }|D ]#} j        |=  j        |= | j        v r j        |= $t           j                   j        k    r j         j        k     v                                  d S )Nr   c                 @    g | ]}j         |         j        k     |S r:   )r  r  )rE   r|   r!   s     r   rH   z)LRUCache.clean_unused.<locals>.<listcomp>  s/    fffd6J36ORVRe6e6e6e6e6er   )r   r   r  r  r  r  r  r   )r!   r   r|   s   `  r   r   zLRUCache.clean_unused  s    $*oo--$2E2W2W1$ffff
fffI  + +JsO(-$-''c* $*oo--$2E2W2W 	r   c                 f   K   |                      |           |                     |           d {V S r   )r  r   r2   s     r   r   zLRUCache.get  s>         ((111111111r   c                 `    | j                             |          }|| j        | j        |<   d S d S r   )r   r4   r  r  r   s      r   r  zLRUCache._mark_used  s;    &33G<<	 .2oD +++ ! r   c                 h   K   |                      |           |                     ||           d {V S r   )r  r   r  s      r   r*   zLRUCache.set  s@         ((%888888888r   c                 h    |                      |           t                              | ||           d S r   )r  r   r   r  s      r   r   zLRUCache.set_local  s2       T7E22222r   c                   K   t                                          ||           d {V  | j                            |           d {V  |                     |           | j                            |          }g | j        |<   |D ]O}|                     |           | j        |                             | j                            |                     P| S r   )r[   r   r   r(   r  r4   r  rp   )r!   r3   r   r   child_idr]   s        r   r   zLRUCache.ensure_subcache_for  s      gg&&w========= )),777777777   &33G<<	#%i $ 	W 	WHOOH%%%M)$++D,>,K,KH,U,UVVVVr   )r	  F)r7   r8   r9   r%   r   r   r   r  r*   r   r   rd   re   s   @r   r  r    s             % % % % %	  	  	 2 2 2> > >
9 9 93 3 3        r   r  g?g?c                   L     e Zd Zd fd	Zd Z fdZ fdZ fdZddZ xZ	S )	RAMPressureCacheFc                 ^    t                                          |d|           i | _        d S )Nr   r   )r[   r%   
timestampsr   s      r   r%   zRAMPressureCache.__init__  s.    A8HIIIr   c                 .    |                                   d S r   )r   r+   s    r   r   zRAMPressureCache.clean_unused   s    r   c                    K   t          j                     | j        | j                            |          <   t	                                          ||           d {V  d S r   )timer  r   r4   r[   r*   r!   r3   r@   r]   s      r   r*   zRAMPressureCache.set  sZ      DHIKK*77@@Aggkk'5)))))))))))r   c                    K   t          j                     | j        | j                            |          <   t	                                          |           d {V S r   )r   r  r   r4   r[   r   )r!   r3   r]   s     r   r   zRAMPressureCache.get  sR      DHIKK*77@@AWW[[)))))))))r   c                     t          j                     | j        | j                            |          <   t	                                          ||           d S r   )r   r  r   r4   r[   r   r!  s      r   r   zRAMPressureCache.set_local  sF    DHIKK*77@@A'5)))))r   c                    	 t          j                    j        |k    rd S g } j                                        D ]\  }|s j                  j        k    rt           j         j                 z
  z  }t          	 fd	 	|j	                   |z  }t          j        || j                 f           t          j                    j        |k     r|r|                                \  }} j        =  j                            d             j                            d             j                            d            t          j                    j        |k     r|d S d S d S d S )Nc                 r   | d S | D ]}t          |t          t          f          r |           *t          |t          j                  r=|j        j        dk    r-|                                |                                z  z  t          |t                    rj
                 j        k    rdd S )Ncpugꌠ9Y>)F)rK   r   r   torchTensordevicerP   numelelement_sizer   r  r  )r   outputr|   	ram_usagescan_list_for_ram_usager!   s     r   r.  z=RAMPressureCache.ram_release.<locals>.scan_list_for_ram_usage  s    ?F% ) )F!&4-88 )//7777#FEL99 )fm>PTY>Y>Y!V\\^^f6I6I6K6K%KK		#FL99 )d>RSV>W[_[j>j>j$(	) )r   )psutilvirtual_memory	availabler   rS   r  r  %RAM_CACHE_OLD_WORKFLOW_OOM_MULTIPLIERRAM_CACHE_DEFAULT_RAM_USAGEr   bisectinsortr  popr  )
r!   targetfree_active
clean_listcache_entry	oom_score_r|   r-  r.  s
   `      @@@r   ram_releasezRAMPressureCache.ram_release  s    "",66F
 $
 0 0 2 2 	N 	NC 4#7#<#O#O>4?UYUijmUnCnoI3I) ) ) ) ) ) ) ) $#K$7888"I M*y$/#2F&LMMMM#%%/&88Z8"((IAq#
3 $$S$///OT***Mc4((( #%%/&88Z888888888r   r   )
r7   r8   r9   r%   r   r*   r   r   r=  rd   re   s   @r   r  r    s                  * * * * ** * * * ** * * * *$) $) $) $) $) $) $) $)r   r  )%r   r4  rU   r/  r   r'  typingr   r   r   comfy.model_patcherr   comfy_execution.graphr   abcr   r	   r   comfy_execution.graph_utilsr
   r   rM   rN   __annotations__r   r   r<   rD   rY   rg   r   r   r   r  r3  r2  r  r:   r   r   <module>rD     s            * * * * * * * * * * , , , , , , / / / / / / # # # # # # # #  / / / / / /13 tCI 3 3 353 54 5 5 5 55 5 5 5 5# 5 5 50" " " " " " " "  H H H H HK H H HBi Bi Bi Bi Bi Bi Bi BiHQ Q Q Q Q Q Q Qf/C /C /C /C /C
 /C /C /Cb       :6 6 6 6 6z 6 6 6x # 
 ), %9) 9) 9) 9) 9)x 9) 9) 9) 9) 9)r   