o
    ^Rhc                     @   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
 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.0    N   )keysc                   @   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   U/home/air/sanwanet/backup_V2/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__0   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__9   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   A   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   r1   r   r'   sizediffsizer   r   r   r   G   s   



zCache.__setitem__c                 C   s&   | j |}| j|= |  j|8  _d S r-   )r"   r   r#   r$   )r   r1   r4   r   r   r   __delitem__W   s   zCache.__delitem__c                 C   s
   || j v S r-   )r#   r0   r   r   r   __contains__\      
zCache.__contains__c                 C   s   t |r-   )r.   r0   r   r   r   r/   _   s   zCache.__missing__c                 C   
   t | jS r-   )iterr#   r+   r   r   r   __iter__b   r8   zCache.__iter__c                 C   r9   r-   )lenr#   r+   r   r   r   __len__e   r8   zCache.__len__c                 C   s   || v r| | S |S r-   r   )r   r1   defaultr   r   r   geth   s   z	Cache.getc                 C   s4   || v r| | }| |= |S || j u rt||}|S r-   )_Cache__markerr.   r   r1   r>   r   r   r   r   r   n   s   
z	Cache.popc                 C   s$   || v r
| | }|S | | |< }|S r-   r   rA   r   r   r   
setdefaultx   s
   zCache.setdefaultc                 C      | j S )zThe maximum size of the cache.)r%   r+   r   r   r   r'         zCache.maxsizec                 C   rC   )zThe current size of the cache.)r$   r+   r   r   r   currsize   rD   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__objectr@   r   r"   r(   r,   r   r   r6   r7   r/   r;   r=   r?   r   rB   propertyr'   rE   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-   )rM   move_to_endr.   r   r1   r   cache_setitemr   r   r   r      s   zFIFOCache.__setitem__c                 C      || | | j |= d S r-   )rM   r   r1   cache_delitemr   r   r   r6         
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:   rM   StopIterationr.   typer   r   r0   r   r   r   r3         zFIFOCache.popitemr-   )	r   r   r   rF   r(   r   r   r6   r3   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   rJ   r-   )r   r(   rK   Counter_LFUCache__counterr&   r   r   r   r(      rN   zLFUCache.__init__c                 C   s(   || |}|| v r| j |  d8  < |S r   r]   r   r1   cache_getitemr   r   r   r   r      s   
zLFUCache.__getitem__c                 C   s"   || || | j |  d8  < d S r   r^   rP   r   r   r   r      s   zLFUCache.__setitem__c                 C   rR   r-   r^   rS   r   r   r   r6      rU   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   rW   N)r]   most_commonr2   r.   rZ   r   r   )r   r1   r   r   r   r   r3      s   zLFUCache.popitemr-   )
r   r   r   rF   r(   r   r   r   r6   r3   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   rJ   r-   )r   r(   rK   rL   _LRUCache__orderr&   r   r   r   r(      rN   zLRUCache.__init__c                 C       || |}|| v r|  | |S r-   _LRUCache__updater_   r   r   r   r         

zLRUCache.__getitem__c                 C      || || |  | d S r-   re   rP   r   r   r   r         zLRUCache.__setitem__c                 C   rR   r-   )rc   rS   r   r   r   r6      rU   zLRUCache.__delitem__c                 C   rV   )z>Remove and return the `(key, value)` pair least recently used.rW   N)rX   r:   rc   rY   r.   rZ   r   r   r0   r   r   r   r3      r[   zLRUCache.popitemc                 C   s2   z	| j | W d S  ty   d | j |< Y d S w r-   )rc   rO   r.   r0   r   r   r   __update   s
   zLRUCache.__updater-   )r   r   r   rF   r(   r   r   r   r6   r3   rf   r   r   r   r   r      s    
	r   c                   @   rb   )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)warningsrk   DeprecationWarningr   r(   rK   rL   _MRUCache__order)r   r'   r    rk   r   r   r   r(      s   zMRUCache.__init__c                 C   rd   r-   _MRUCache__updater_   r   r   r   r      rg   zMRUCache.__getitem__c                 C   rh   r-   rq   rP   r   r   r   r      ri   zMRUCache.__setitem__c                 C   rR   r-   )rp   rS   r   r   r   r6     rU   zMRUCache.__delitem__c                 C   rV   )z=Remove and return the `(key, value)` pair most recently used.rW   N)rX   r:   rp   rY   r.   rZ   r   r   r0   r   r   r   r3     r[   zMRUCache.popitemc                 C   s6   z| j j|dd W d S  ty   d | j |< Y d S w )NF)last)rp   rO   r.   r0   r   r   r   rj     s
   zMRUCache.__updater-   )r   r   r   rF   r(   r   r   r   r6   r3   rr   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   rC   )z(The `choice` function used by the cache.)rt   r+   r   r   r   ru     rD   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.rW   N)rt   list
IndexErrorr.   rZ   r   r   r0   r   r   r   r3   $  r[   zRRCache.popitem)	r   r   r   rF   randomru   r(   rH   r3   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(   2     
z_TimedCache._Timer.__init__c                 C   s   | j dkr	|  S | jS r   r{   rz   _Timer__timer+   r   r   r   __call__6  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__D     z_TimedCache._Timer.__exit__c                 C   s   t j| jffS r-   )ry   _Timerrz   r+   r   r   r   
__reduce__G     z_TimedCache._Timer.__reduce__c                 C   s   t | j|S r-   )getattrrz   )r   namer   r   r   __getattr__J     z_TimedCache._Timer.__getattr__N)	r   r   r   r(   r   r   r   r   r   r   r   r   r   r   1  s    r   Nc                 C   s   t | || t|| _d S r-   )r   r(   ry   r   _TimedCache__timer)r   r'   r|   r    r   r   r   r(   M  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,   Q     
$z_TimedCache.__repr__c                 C   r   r-   r   )r   	cache_lenr   r   r   r   r=   V  r   z_TimedCache.__len__c                    s<   | j }| | t jW  d    S 1 sw   Y  d S r-   )r   r   superrE   r   r)   r   r   rE   [  s   
$z_TimedCache.currsizec                 C   rC   )z%The timer function used by the cache.)r   r+   r   r   r   r|   a  rD   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   f  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?   k     $z_TimedCache.getc                 O   r   r-   )r   r   r   r   r   r   r   r   o  r   z_TimedCache.popc                 O   r   r-   )r   r   rB   r   r   r   r   rB   s  r   z_TimedCache.setdefault)r   r   r   rF   r   r   	monotonicr(   r   r,   r=   rH   rE   r|   r   r?   r   rB   __classcell__r   r   r   r   ry   .  s    
ry   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)r1   expiresrX   prevNc                 C   s   || _ || _d S r-   )r1   r   r   r1   r   r   r   r   r(   ~  r}   zTTLCache._Link.__init__c                 C   s   t j| j| jffS r-   )r   _Linkr1   r   r+   r   r   r   r     r   zTTLCache._Link.__reduce__c                 C   s   | j }| j}||_ ||_d S r-   )rX   r   )r   rX   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-   )ry   r(   r   r   _TTLCache__rootr   rX   rK   rL   _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   r1   linkr   r   r   r7        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   r/   )r   r1   r`   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   rX   r   )r   r1   r   rQ   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   r1   rT   r   r   r   r   r6     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   rX   r|   r   r1   )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   rC   r-   r   )objr   r   r   <lambda>  s    z'TTLCache.__setstate__.<locals>.<lambda>)r1   )
__dict__updater   r   rX   sortedr   valuesr   r|   )r   stater   r   r   r   r   r   __setstate__  s   zTTLCache.__setstate__c                 C   rC   )z,The time-to-live value of the cache's items.)r   r+   r   r   r   r     rD   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   rX   r   r   r6   r   r   appendr1   r   )	r   r   r   r   linksr   rT   r`   rX   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.

        rW   N)
r|   r   rX   r:   r   rY   r.   rZ   r   r   r   r   r1   r   r   r   r3     s   
$zTTLCache.popitemc                 C      | j | }| j | |S r-   )r   rO   r   r1   r   r   r   r   	__getlink     
zTTLCache.__getlinkr-   )r   r   r   rF   r   r   r   r(   r7   r   r   r   r6   r;   r   rH   r   r   r3   r   r   r   r   r   r   x  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r1   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-   )ry   r(   rK   rL   _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   r1   itemr   r   r   r7     r   zTLRUCache.__contains__c                 C   r   r   )_TLRUCache__getitemr.   r|   r   r/   )r   r1   r`   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   r1   r   rQ   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   r1   rT   r   r   r   r   r   r6   8  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   r1   )r   r   r   r   r   r   r;   A  s   
zTLRUCache.__iter__c                 C   rC   )z1The local time-to-use function used by the cache.)r   r+   r   r   r   r   H  rD   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   Nrl   c                 S   s   g | ]}|j s|qS r   )r   ).0r   r   r   r   
<listcomp>X  s    z$TLRUCache.expire.<locals>.<listcomp>r   )r|   r   r   r<   r   heapifyr   r6   r   r   r   heappopr   r1   )r   r   itemsorderr   rT   r`   r   r   r   r   r   M  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   rX   r:   r   rY   r.   r)   r   r   r   r   r   r   r3   e  s   
$zTLRUCache.popitemc                 C   r   r-   )r   rO   r   r   r   r   	__getitems  r   zTLRUCache.__getitemr-   )r   r   r   rF   	functoolstotal_orderingr   r   r   r(   r7   r   r   r   r6   r;   rH   r   r   r3   r   r   r   r   r   r     s    	

r   	CacheInfo)hitsmissesr'   rE   Fc                    s    fdd}|S )z_Decorator to wrap a function with a memoizing callable that saves
    results in a cache.

    c                    s|  rud t trfddnt tjjr$fddnfddd u r@ fdd}fdd	}}nid u rY fd
d}fdd	}}nP fdd}fdd	}fdd}n4d u r fdd}dd	 }n#d u r fdd}fdd	}n fdd}fdd	}d }|_|_|_||_||_	t
| S )Nr   c                      s   t  j jS r-   )
_CacheInfor'   rE   r   cacher   r   r   r   getinfo     z*cached.<locals>.decorator.<locals>.getinfoc                      s   t d t S r-   )r   r<   r   r   r   r   r     r   c                      s   t  ddS r   )r   r   r   r   r   r   r     s   c                     s   d7  | i |S r   r   r   r   )funcr   r   r   wrapper  s   z*cached.<locals>.decorator.<locals>.wrapperc                      s   d  d S r   r   r   r   r   r   cache_clear  s   z.cached.<locals>.decorator.<locals>.cache_clearc                     sr   | i |}z | }d7 |W S  t y   d7 Y nw | i |}z| |< W |S  ty8   Y |S w r   r.   r2   r   r   kresultv)r   r   r   r1   r   r   r   r     s    
c                      s       d d S r   r   r   r   r   r   r     s   c                     s   | i |}z  | }d7 |W  d    W S 1 s w   Y  W n t yE    d7 W d    n1 s>w   Y  Y nw | i |}z  ||W  d    W S 1 sbw   Y  W d S  tyt   | Y S w r   r.   rB   r2   r   )r   r   r   r1   lockr   r   r   r     s*   &

(c                      s:        d W d    d S 1 sw   Y  d S r   r   r   )r   r   r   r   r   r   r     s   
"c                      s.      W  d    S 1 sw   Y  d S r-   r   r   )r   r   r   r   
cache_info  s   $z-cached.<locals>.decorator.<locals>.cache_infoc                     s    | i |S r-   r   r   )r   r   r   r     r   c                   S   s   d S r-   r   r   r   r   r   r     r   c                     s^   | i |}z | W S  t y   Y nw | i |}z| |< W |S  ty.   Y |S w r-   r   r   r   r   r   )r   r   r1   r   r   r     s   

c                      s       d S r-   r   r   r   r   r   r     r   c                     s   | i |}z  | W  d    W S 1 sw   Y  W n	 t y)   Y nw | i |}z  ||W  d    W S 1 sFw   Y  W d S  tyX   | Y S w r-   r   r   )r   r   r1   r   r   r   r     s    &
(c                      s2        W d    d S 1 sw   Y  d S r-   r   r   r   r   r   r   r     s   
")
isinstancer   rK   abcMappingr   	cache_key
cache_lockr   r   r   update_wrapper)r   r   r   r   r   infor1   r   )r   r   r   r   r   	decorator  sB   

zcached.<locals>.decoratorr   )r   r1   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   r   r   r   cr   r   )r   r1   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   5  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   r   )r   r1   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   N  s   

")r   r   r   r   r   r   )r   r   r   r   r1   r   )r   r   r   "  s   zcachedmethod.<locals>.decoratorr   )r   r1   r   r   r   r  r   r
     s   9r
   )rF   __all____version__rK   collections.abcr   r   rx   r    r   r   r   MutableMappingr   r   r   r   r   r   ry   r   r   
namedtupler   hashkeyr	   	methodkeyr
   r   r   r   r   <module>   s6    f%)J z 