o
    ix                     @   s&  U d dl mZmZmZm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 eeZg Zee
 ed< e Zdaee
df ed< de
d	dfd
dZde
d	dfddZd	ee
df fddZd	efddZdddZded	efddZded	ee fddZded	efddZded	efddZ dS )     )AnyOptionalTupleListN)CacheProviderCacheContext
CacheValue
_providers ._providers_snapshotproviderreturnc                 C   s   t 4 | tv rtd| jj d 	 W d   dS t|  ttat	d| jj  W d   dS 1 s9w   Y  dS )zPRegister an external cache provider. Providers are called in registration order.	Provider z already registeredNzRegistered cache provider: )
_providers_lockr	   _loggerwarning	__class____name__appendtupler   debugr   r
   r
   </mnt/c/Users/fbmor/ComfyUI/comfy_execution/cache_provider.pyregister_cache_provider   s   
"r   c              	   C   s   t ; zt|  ttatd| jj  W n t	y,   t
d| jj d Y n	w W d    d S W d    d S 1 s@w   Y  d S )NzUnregistered cache provider: r   z was not registered)r   r	   remover   r   r   r   r   r   
ValueErrorr   r   r
   r
   r   unregister_cache_provider   s   
"r   c                   C   s   t S N)r   r
   r
   r
   r   _get_cache_providers)   s   r   c                   C   s   t tS r   )boolr   r
   r
   r
   r   _has_cache_providers-   s   r    c                   C   s6   t  t  daW d    d S 1 sw   Y  d S )Nr
   )r   r	   clearr   r
   r
   r
   r   _clear_cache_providers1   s   "r"   objc                 C   s   t | trdtdd | D dd dfS t | tr(dtdd | D d	d dfS t | tr6d
dd | D fS t | trBdd | D S t | trXdtdd |  D dd diS t | tt	t
ttd frkt| j| fS t | trvd|  fS tdt| j )N__frozenset__c                 S      g | ]}t |qS r
   _canonicalize.0itemr
   r
   r   
<listcomp>?       z!_canonicalize.<locals>.<listcomp>c                 S      t j| ddS NT)	sort_keysjsondumpsxr
   r
   r   <lambda>@       z_canonicalize.<locals>.<lambda>)key__set__c                 S   r%   r
   r&   r(   r
   r
   r   r+   D   r,   c                 S   r-   r.   r0   r3   r
   r
   r   r5   E   r6   	__tuple__c                 S   r%   r
   r&   r(   r
   r
   r   r+   H   r,   c                 S   r%   r
   r&   r(   r
   r
   r   r+   J   r,   __dict__c                 S   s    g | ]\}}t |t |gqS r
   r&   r)   kvr
   r
   r   r+   M   s     c                 S   r-   r.   r0   r3   r
   r
   r   r5   N   r6   	__bytes__zCannot canonicalize type: )
isinstance	frozensetsortedsetr   listdictitemsintfloatstrr   typer   byteshexr   r#   r
   r
   r   r'   8   s0   





r'   	cache_keyc              
   C   sf   zt | }tj|ddd}t|d W S  ty2 } zt	d|  W Y d }~d S d }~ww )NT),:)r/   
separatorszutf-8zFailed to serialize cache key: )
r'   r1   r2   hashlibsha256encode	hexdigest	Exceptionr   r   )rM   	canonicaljson_strer
   r
   r   _serialize_cache_keyX   s   rY   c                 C   s   z	| | ksW dS W n
 t y   Y dS w t| ttttfr&tdd | D S t| tr6tdd |  D S t	| dr@t
| jS dS )NTc                 s   s    | ]}t |V  qd S r   _contains_self_unequalr(   r
   r
   r   	<genexpr>m   s    z)_contains_self_unequal.<locals>.<genexpr>c                 s   s$    | ]\}}t |pt |V  qd S r   rZ   r;   r
   r
   r   r\   o   s   " valueF)rU   r?   r@   r   rC   rB   anyrD   rE   hasattrr[   r]   rL   r
   r
   r   r[   d   s   


r[   r]   c                    sN   zdd l W n
 ty   Y dS w d fdd | jD ]} | qS )Nr   c                    sp   t | jr|  |   7 d S t | tr$|  D ]} | qd S t | ttfr4| D ]} | q-d S d S r   )r?   Tensornumelelement_sizerD   valuesrC   r   )r#   r=   r*   estimatetorchtotalr
   r   re   }   s   


z&_estimate_value_size.<locals>.estimate)rf   ImportErroroutputs)r]   outputr
   rd   r   _estimate_value_sizeu   s   

rk   )r   N)!typingr   r   r   r   rQ   r1   logging	threadingcomfy_api.latest._cachingr   r   r   	getLoggerr   r   r	   __annotations__Lockr   r   r   r   r   r   r    r"   r'   rH   rY   r[   rF   rk   r
   r
   r
   r   <module>   s&    

 