o
    |j6h+U                     @   s,  d Z dZdZ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
 ddlmZ G dd	 d	ZG d
d dejjZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZedg dZe
jddfdd Ze
jdfd!d"ZdS )#z0Extensible memoizing collections and decorators.)
Cache	FIFOCacheLFUCacheLRUCacheMRUCacheRRCache	TLRUCacheTTLCachecachedcachedmethodz5.5.2    N   )keys)_cached_wrapperc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	_DefaultSize c                 C      dS Nr   r   self_r   r   b/var/www/html/chefvision.cloud.itp360.com/venv/lib/python3.10/site-packages/cachetools/__init__.py__getitem__       z_DefaultSize.__getitem__c                 C   s   |dksJ d S r   r   )r   r   valuer   r   r   __setitem__#   s   z_DefaultSize.__setitem__c                 C   r   r   r   r   r   r   r   pop&   r   z_DefaultSize.popN)__name__
__module____qualname__	__slots__r   r   r   r   r   r   r   r      s
    r   c                   @   s   e Zd ZdZe Ze Zd!ddZdd Z	dd Z
d	d
 Zdd Zdd Zdd Zdd Zdd Zd!ddZefddZd!ddZedd Zedd Zedd  ZdS )"r   z?Mutable mapping to serve as a simple cache or cache base class.Nc                 C   s6   |r|| _ | j tj urt | _t | _d| _|| _d S Nr   )	getsizeofr   dict_Cache__size_Cache__data_Cache__currsize_Cache__maxsizer   maxsizer!   r   r   r   __init__1   s   
zCache.__init__c                 C   s   d| j jt| j| j| jf S )Nz%s(%s, maxsize=%r, currsize=%r))	__class__r   reprr$   r&   r%   r   r   r   r   __repr__:   s   zCache.__repr__c                 C   s*   z| j | W S  ty   | | Y S w N)r$   KeyError__missing__r   keyr   r   r   r   B   s
   zCache.__getitem__c                 C   s   | j }| |}||krtd|| jvs| j| |k r.| j| |kr.|   | j| |ks#|| jv r;|| j|  }n|}|| j|< || j|< |  j|7  _d S )Nzvalue too large)r&   r!   
ValueErrorr$   r#   r%   popitem)r   r2   r   r(   sizediffsizer   r   r   r   H   s   



zCache.__setitem__c                 C   s&   | j |}| j|= |  j|8  _d S r.   )r#   r   r$   r%   )r   r2   r5   r   r   r   __delitem__X   s   zCache.__delitem__c                 C   s
   || j v S r.   )r$   r1   r   r   r   __contains__]      
zCache.__contains__c                 C   s   t |r.   )r/   r1   r   r   r   r0   `   s   zCache.__missing__c                 C   
   t | jS r.   )iterr$   r,   r   r   r   __iter__c   r9   zCache.__iter__c                 C   r:   r.   )lenr$   r,   r   r   r   __len__f   r9   zCache.__len__c                 C   s   || v r| | S |S r.   r   )r   r2   defaultr   r   r   geti   s   z	Cache.getc                 C   s4   || v r| | }| |= |S || j u rt||}|S r.   )_Cache__markerr/   r   r2   r?   r   r   r   r   r   o   s   
z	Cache.popc                 C   s$   || v r
| | }|S | | |< }|S r.   r   rB   r   r   r   
setdefaulty   s
   zCache.setdefaultc                 C      | j S )zThe maximum size of the cache.)r&   r,   r   r   r   r(         zCache.maxsizec                 C   rD   )zThe current size of the cache.)r%   r,   r   r   r   currsize   rE   zCache.currsizec                 C   r   )z+Return the size of a cache element's value.r   r   )r   r   r   r   r!      s   zCache.getsizeofr.   )r   r   r   __doc__objectrA   r   r#   r)   r-   r   r   r7   r8   r0   r<   r>   r@   r   rC   propertyr(   rF   staticmethodr!   r   r   r   r   r   *   s,    
	




r   c                   @   s>   e Zd ZdZdddZejfddZejfddZd	d
 ZdS )r   z/First In First Out (FIFO) cache implementation.Nc                 C      t | || t | _d S r.   )r   r)   collectionsOrderedDict_FIFOCache__orderr'   r   r   r   r)         zFIFOCache.__init__c                 C   s>   || || z	| j | W d S  ty   d | j |< Y d S w r.   )rN   move_to_endr/   r   r2   r   cache_setitemr   r   r   r      s   zFIFOCache.__setitem__c                 C      || | | j |= d S r.   )rN   r   r2   cache_delitemr   r   r   r7         
zFIFOCache.__delitem__c                 C   D   z	t t| j}W n ty   tdt| j dw || |fS )z9Remove and return the `(key, value)` pair first inserted.%s is emptyN)nextr;   rN   StopIterationr/   typer   r   r1   r   r   r   r4         zFIFOCache.popitemr.   )	r   r   r   rG   r)   r   r   r7   r4   r   r   r   r   r      s    
r   c                   @   sL   e Zd ZdZdddZejfddZejfddZejfd	d
Zdd Z	dS )r   z1Least Frequently Used (LFU) cache implementation.Nc                 C   rK   r.   )r   r)   rL   Counter_LFUCache__counterr'   r   r   r   r)      rO   zLFUCache.__init__c                 C   s(   || |}|| v r| j |  d8  < |S r   r^   r   r2   cache_getitemr   r   r   r   r      s   
zLFUCache.__getitem__c                 C   s"   || || | j |  d8  < d S r   r_   rQ   r   r   r   r      s   zLFUCache.__setitem__c                 C   rS   r.   r_   rT   r   r   r   r7      rV   zLFUCache.__delitem__c                 C   sH   z| j d\\}}W n ty   tdt| j dw || |fS )z@Remove and return the `(key, value)` pair least frequently used.r   rX   N)r^   most_commonr3   r/   r[   r   r   )r   r2   r   r   r   r   r4      s   zLFUCache.popitemr.   )
r   r   r   rG   r)   r   r   r   r7   r4   r   r   r   r   r      s    
r   c                   @   T   e Zd ZdZdddZejfddZejfddZejfd	d
Zdd Z	dd Z
dS )r   z/Least Recently Used (LRU) cache implementation.Nc                 C   rK   r.   )r   r)   rL   rM   _LRUCache__orderr'   r   r   r   r)      rO   zLRUCache.__init__c                 C       || |}|| v r|  | |S r.   _LRUCache__updater`   r   r   r   r         

zLRUCache.__getitem__c                 C      || || |  | d S r.   rf   rQ   r   r   r   r         zLRUCache.__setitem__c                 C   rS   r.   )rd   rT   r   r   r   r7      rV   zLRUCache.__delitem__c                 C   rW   )z>Remove and return the `(key, value)` pair least recently used.rX   N)rY   r;   rd   rZ   r/   r[   r   r   r1   r   r   r   r4      r\   zLRUCache.popitemc                 C   s2   z	| j | W d S  ty   d | j |< Y d S w r.   )rd   rP   r/   r1   r   r   r   __update   s
   zLRUCache.__updater.   )r   r   r   rG   r)   r   r   r   r7   r4   rg   r   r   r   r   r      s    
	r   c                   @   rc   )r   z.Most Recently Used (MRU) cache implementation.Nc                 C   s6   ddl m} |dtdd t| || t | _d S )Nr   )warnzMRUCache is deprecated   )
stacklevel)warningsrl   DeprecationWarningr   r)   rL   rM   _MRUCache__order)r   r(   r!   rl   r   r   r   r)      s   zMRUCache.__init__c                 C   re   r.   _MRUCache__updater`   r   r   r   r      rh   zMRUCache.__getitem__c                 C   ri   r.   rr   rQ   r   r   r   r     rj   zMRUCache.__setitem__c                 C   rS   r.   )rq   rT   r   r   r   r7     rV   zMRUCache.__delitem__c                 C   rW   )z=Remove and return the `(key, value)` pair most recently used.rX   N)rY   r;   rq   rZ   r/   r[   r   r   r1   r   r   r   r4   	  r\   zMRUCache.popitemc                 C   s6   z| j j|dd W d S  ty   d | j |< Y d S w )NF)last)rq   rP   r/   r1   r   r   r   rk     s
   zMRUCache.__updater.   )r   r   r   rG   r)   r   r   r   r7   r4   rs   r   r   r   r   r      s    
	r   c                   @   s4   e Zd ZdZejdfddZedd Zdd ZdS )	r   z-Random Replacement (RR) cache implementation.Nc                 C   s   t | || || _d S r.   )r   r)   _RRCache__choice)r   r(   choicer!   r   r   r   r)     s   
zRRCache.__init__c                 C   rD   )z(The `choice` function used by the cache.)ru   r,   r   r   r   rv      rE   zRRCache.choicec                 C   sD   z	|  t| }W n ty   tdt| j dw || |fS )z/Remove and return a random `(key, value)` pair.rX   N)ru   list
IndexErrorr/   r[   r   r   r1   r   r   r   r4   %  r\   zRRCache.popitem)	r   r   r   rG   randomrv   r)   rI   r4   r   r   r   r   r     s    
r   c                       s   e Zd ZdZG dd dZejdfddZej	fddZ	ej
fd	d
Z
e fddZedd Zdd Zdd Zdd Zdd Z  ZS )_TimedCachez0Base class for time aware cache implementations.c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )z_TimedCache._Timerc                 C   s   || _ d| _d S r    )_Timer__timer_Timer__nesting)r   timerr   r   r   r)   3     
z_TimedCache._Timer.__init__c                 C   s   | j dkr	|  S | jS r    r|   r{   _Timer__timer,   r   r   r   __call__7  s   
z_TimedCache._Timer.__call__c                 C   s2   | j dkr|   | _}n| j}|  j d7  _ |S )Nr   r   r   r   timer   r   r   	__enter__=  s
   
z_TimedCache._Timer.__enter__c                 G   s   |  j d8  _ d S r   )r|   )r   excr   r   r   __exit__E     z_TimedCache._Timer.__exit__c                 C   s   t j| jffS r.   )rz   _Timerr{   r,   r   r   r   
__reduce__H     z_TimedCache._Timer.__reduce__c                 C   s   t | j|S r.   )getattrr{   )r   namer   r   r   __getattr__K     z_TimedCache._Timer.__getattr__N)	r   r   r   r)   r   r   r   r   r   r   r   r   r   r   2  s    r   Nc                 C   s   t | || t|| _d S r.   )r   r)   rz   r   _TimedCache__timer)r   r(   r}   r!   r   r   r   r)   N  s   z_TimedCache.__init__c                 C   <   | j }| | || W  d    S 1 sw   Y  d S r.   r   expire)r   
cache_reprr   r   r   r   r-   R     
$z_TimedCache.__repr__c                 C   r   r.   r   )r   	cache_lenr   r   r   r   r>   W  r   z_TimedCache.__len__c                    s<   | j }| | t jW  d    S 1 sw   Y  d S r.   )r   r   superrF   r   r*   r   r   rF   \  s   
$z_TimedCache.currsizec                 C   rD   )z%The timer function used by the cache.)r   r,   r   r   r   r}   b  rE   z_TimedCache.timerc                 C   s@   | j }| | t|  W d    d S 1 sw   Y  d S r.   )r   r   r   clearr   r   r   r   r   g  s   
"z_TimedCache.clearc                 O   B   | j  tj| g|R i |W  d    S 1 sw   Y  d S r.   )r   r   r@   r   argskwargsr   r   r   r@   l     $z_TimedCache.getc                 O   r   r.   )r   r   r   r   r   r   r   r   p  r   z_TimedCache.popc                 O   r   r.   )r   r   rC   r   r   r   r   rC   t  r   z_TimedCache.setdefault)r   r   r   rG   r   r   	monotonicr)   r   r-   r>   rI   rF   r}   r   r@   r   rC   __classcell__r   r   r   r   rz   /  s    
rz   c                   @   s   e Zd ZdZG dd dZejdfddZdd Ze	j
fd	d
Z
e	jfddZe	jfddZdd Zdd Zedd ZdddZdd Zdd ZdS )r   z@LRU Cache implementation with per-item time-to-live (TTL) value.c                   @   s*   e Zd ZdZd	ddZdd Zdd ZdS )
zTTLCache._Link)r2   expiresrY   prevNc                 C   s   || _ || _d S r.   )r2   r   r   r2   r   r   r   r   r)     r~   zTTLCache._Link.__init__c                 C   s   t j| j| jffS r.   )r   _Linkr2   r   r,   r   r   r   r     r   zTTLCache._Link.__reduce__c                 C   s   | j }| j}||_ ||_d S r.   )rY   r   )r   rY   r   r   r   r   unlink  s   
zTTLCache._Link.unlinkNN)r   r   r   r   r)   r   r   r   r   r   r   r   |  s
    
r   Nc                 C   s>   t | ||| t  | _}| |_|_t | _	|| _
d S r.   )rz   r)   r   r   _TTLCache__rootr   rY   rL   rM   _TTLCache__links_TTLCache__ttl)r   r(   ttlr}   r!   rootr   r   r   r)     s
   

zTTLCache.__init__c                 C   2   z| j | }W n
 ty   Y dS w |  |jk S NF)r   r/   r}   r   )r   r2   linkr   r   r   r8        zTTLCache.__contains__c                 C   N   z|  |}W n ty   d}Y n	w |  |jk  }|r"| |S || |S r   )_TTLCache__getlinkr/   r}   r   r0   )r   r2   ra   r   expiredr   r   r   r        

zTTLCache.__getitem__c                 C   s   | j }| | || || W d    n1 sw   Y  z| |}W n ty8   t| | j|< }Y nw |  || j |_	| j
 |_}|j |_}| |_|_d S r.   )r}   r   r   r/   r   r   r   r   r   r   r   rY   r   )r   r2   r   rR   r   r   r   r   r   r   r   r     s   
zTTLCache.__setitem__c                 C   s8   || | | j |}|  |  |jk st|d S r.   )r   r   r   r}   r   r/   )r   r2   rU   r   r   r   r   r7     s   
zTTLCache.__delitem__c                 c   sd    | j }|j}||ur0| j}||jk r|jV  W d    n1 s"w   Y  |j}||usd S d S r.   )r   rY   r}   r   r2   )r   r   currr   r   r   r   r<     s   
zTTLCache.__iter__c                 C   sj   | j | | j}| |_|_t| j dd dD ]}||_|j |_}| |_|_q| | 	  d S )Nc                 S   rD   r.   r   )objr   r   r   <lambda>  s    z'TTLCache.__setstate__.<locals>.<lambda>)r2   )
__dict__updater   r   rY   sortedr   valuesr   r}   )r   stater   r   r   r   r   r   __setstate__  s   zTTLCache.__setstate__c                 C   rD   )z,The time-to-live value of the cache's items.)r   r,   r   r   r   r     rE   zTTLCache.ttlc           	      C   s   |du r|   }| j}|j}| j}g }tj}tj}||urJ||jk sJ||j	|| |j	f || |j	 ||j	= |j}|
  |}||urJ||jk r"|S )qRemove expired items from the cache and return an iterable of the
        expired `(key, value)` pairs.

        N)r}   r   rY   r   r   r7   r   r   appendr2   r   )	r   r   r   r   linksr   rU   ra   rY   r   r   r   r     s"   zTTLCache.expirec              	   C   sx   | j /}| | z	tt| j}W n ty#   tdt| j dw || 	|fW  d   S 1 s5w   Y  dS zmRemove and return the `(key, value)` pair least recently used that
        has not already expired.

        rX   N)
r}   r   rY   r;   r   rZ   r/   r[   r   r   r   r   r2   r   r   r   r4     s   
$zTTLCache.popitemc                 C      | j | }| j | |S r.   )r   rP   r   r2   r   r   r   r   	__getlink     
zTTLCache.__getlinkr.   )r   r   r   rG   r   r   r   r)   r8   r   r   r   r7   r<   r   rI   r   r   r4   r   r   r   r   r   r   y  s    



r   c                   @   s   e Zd ZdZejG dd dZejdfddZ	dd Z
ejfd	d
ZejfddZejfddZdd Zedd ZdddZdd Zdd ZdS )r   z;Time aware Least Recently Used (TLRU) cache implementation.c                   @   s"   e Zd ZdZdddZdd ZdS )zTLRUCache._Itemr2   r   removedNc                 C   s   || _ || _d| _d S r   r   r   r   r   r   r)     s   
zTLRUCache._Item.__init__c                 C   s   | j |j k S r.   r   )r   otherr   r   r   __lt__  r   zTLRUCache._Item.__lt__r   )r   r   r   r   r)   r   r   r   r   r   _Item  s    
r   Nc                 C   s*   t | ||| t | _g | _|| _d S r.   )rz   r)   rL   rM   _TLRUCache__items_TLRUCache__order_TLRUCache__ttu)r   r(   ttur}   r!   r   r   r   r)     s   

zTLRUCache.__init__c                 C   r   r   )r   r/   r}   r   )r   r2   itemr   r   r   r8     r   zTLRUCache.__contains__c                 C   r   r   )_TLRUCache__getitemr/   r}   r   r0   )r   r2   ra   r   r   r   r   r   r     r   zTLRUCache.__getitem__c                 C   s   | j '}| |||}||k s	 W d    d S | | || || W d    n1 s-w   Y  zd| |_W n	 tyC   Y nw t|| | j|< }t	
| j| d S NT)r}   r   r   r   r   r/   r   r   r   heapqheappushr   )r   r2   r   rR   r   r   r   r   r   r   r   )  s   
zTLRUCache.__setitem__c                 C   sX   | j }|| | W d    n1 sw   Y  | j|}d|_||jk s*t|d S r   )r}   r   r   r   r   r/   )r   r2   rU   r   r   r   r   r   r7   9  s   
zTLRUCache.__delitem__c              	   c   sP    | j D ]!}| j}||jk r|js|jV  W d    n1 s w   Y  qd S r.   )r   r}   r   r   r2   )r   r   r   r   r   r   r<   B  s   
zTLRUCache.__iter__c                 C   rD   )z1The local time-to-use function used by the cache.)r   r,   r   r   r   r   I  rE   zTLRUCache.ttuc                 C   s   |du r|   }| j}| j}t|t|d kr'dd |D  | _}t| g }tj}tj}|ri|d j	s=||d j
k sit|}|j	s[||j|| |jf || |j ||j= |ri|d j	s=||d j
k r=|S )r   Nrm   c                 S   s   g | ]}|j s|qS r   )r   ).0r   r   r   r   
<listcomp>Y  s    z$TLRUCache.expire.<locals>.<listcomp>r   )r}   r   r   r=   r   heapifyr   r7   r   r   r   heappopr   r2   )r   r   itemsorderr   rU   ra   r   r   r   r   r   N  s$   

zTLRUCache.expirec              	   C   sv   | j .}| | z	tt| j}W n ty"   td| jj dw || 	|fW  d   S 1 s4w   Y  dS r   )
r}   r   rY   r;   r   rZ   r/   r*   r   r   r   r   r   r   r4   f  s   
$zTLRUCache.popitemc                 C   r   r.   )r   rP   r   r   r   r   	__getitemt  r   zTLRUCache.__getitemr.   )r   r   r   rG   	functoolstotal_orderingr   r   r   r)   r8   r   r   r   r7   r<   rI   r   r   r4   r   r   r   r   r   r      s    	

r   	CacheInfo)hitsmissesr(   rF   Fc                    s    fdd}|S )z_Decorator to wrap a function with a memoizing callable that saves
    results in a cache.

    c                    s   r)t  tr fdd}nt  tjjr fdd}ndd }t|  |}nt|  d } |_|_|_t	
|| S )Nc                    s   t | | j jS r.   )
_CacheInfor(   rF   r   r   cacher   r   	make_info  r   z,cached.<locals>.decorator.<locals>.make_infoc                    s   t | |d t S r.   )r   r=   r   r   r   r   r     r   c                 S   s   t | |ddS r    )r   r   r   r   r   r     r   )
isinstancer   rL   abcMappingr   r   	cache_key
cache_lockr   update_wrapper)funcr   wrapperr   infor2   lockr   r   	decorator  s   
zcached.<locals>.decoratorr   )r   r2   r   r   r   r   r   r   r	     s   r	   c                    s    fdd}|S )zoDecorator to wrap a class or instance method with a memoizing
    callable that saves results in a cache.

    c                    sj   d u r fdd}fdd}n fdd}fdd}|_ |_|_||_t| S )Nc                    s    | }|d u r| g|R i |S | g|R i |}z|| W S  t y,   Y nw | g|R i |}z|||< W |S  tyI   Y |S w r.   )r/   r3   r   r   r   ckv)r   r2   methodr   r   r     s"   

z0cachedmethod.<locals>.decorator.<locals>.wrapperc                    s     | }|d ur|   d S d S r.   r   r   r   r   r   r   r     s   z.cachedmethod.<locals>.decorator.<locals>.clearc                    s    | }|d u r| g|R i |S | g|R i |}z|  || W  d    W S 1 s3w   Y  W n	 t yB   Y nw | g|R i |}z|  |||W  d    W S 1 sew   Y  W d S  tyw   | Y S w r.   )r/   rC   r3   r   )r   r2   r   r   r   r   r     s&   
&

(c                    sJ    | }|d ur#|  |   W d    d S 1 sw   Y  d S d S r.   r   r   )r   r   r   r   r     s   

")r   r   r   cache_clearr   r   )r   r   r   r   r2   r   )r   r   r     s   zcachedmethod.<locals>.decoratorr   )r   r2   r   r   r   r   r   r
     s   9r
   )rG   __all____version__rL   collections.abcr   r   ry   r    r   _decoratorsr   r   r   MutableMappingr   r   r   r   r   r   rz   r   r   
namedtupler   hashkeyr	   	methodkeyr
   r   r   r   r   <module>   s6    f%)J z$