a
    g+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   s   dS Nr   r   self_r   r   Q/var/www/html/texto_audio/venv/lib/python3.9/site-packages/cachetools/__init__.py__getitem__    s    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   s   dS r   r   r   r   r   r   pop&   s    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 0 d S N)r"   KeyError__missing__r   keyr   r   r   r   B   s    zCache.__getitem__c                 C   s   | j }| |}||kr td|| jvs8| j| |k rP| j| |krP|   q8|| jv rj|| j|  }n|}|| j|< || j|< |  j|7  _d S )Nzvalue too large)r$   r   
ValueErrorr"   r!   r#   popitem)r   r0   r   r&   sizeZdiffsizer   r   r   r   H   s    




zCache.__setitem__c                 C   s&   | j |}| j|= |  j|8  _d S r,   )r!   r   r"   r#   )r   r0   r3   r   r   r   __delitem__X   s    zCache.__delitem__c                 C   s
   || j v S r,   )r"   r/   r   r   r   __contains__]   s    zCache.__contains__c                 C   s   t |d S r,   )r-   r/   r   r   r   r.   `   s    zCache.__missing__c                 C   s
   t | jS r,   )iterr"   r*   r   r   r   __iter__c   s    zCache.__iter__c                 C   s
   t | jS r,   )lenr"   r*   r   r   r   __len__f   s    zCache.__len__c                 C   s   || v r| | S |S d S r,   r   )r   r0   defaultr   r   r   geti   s    z	Cache.getc                 C   s4   || v r| | }| |= n|| j u r,t|n|}|S r,   )_Cache__markerr-   r   r0   r:   r   r   r   r   r   o   s    

z	Cache.popc                 C   s"   || v r| | }n| | |< }|S r,   r   r=   r   r   r   
setdefaulty   s    
zCache.setdefaultc                 C   s   | j S )zThe maximum size of the cache.)r$   r*   r   r   r   r&      s    zCache.maxsizec                 C   s   | j S )zThe current size of the cache.)r#   r*   r   r   r   currsize   s    zCache.currsizec                 C   s   dS )z+Return the size of a cache element's value.r   r   )r   r   r   r   r      s    zCache.getsizeof)N)N)N)r   r   r   __doc__objectr<   r   r!   r'   r+   r   r   r4   r5   r.   r7   r9   r;   r   r>   propertyr&   r?   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   s   t | || t | _d S r,   )r   r'   collectionsOrderedDict_FIFOCache__orderr%   r   r   r   r'      s    zFIFOCache.__init__c                 C   s>   || || z| j | W n ty8   d | j |< Y n0 d S r,   )rF   move_to_endr-   r   r0   r   cache_setitemr   r   r   r      s
    zFIFOCache.__setitem__c                 C   s   || | | j |= d S r,   )rF   r   r0   cache_delitemr   r   r   r4      s    
zFIFOCache.__delitem__c                 C   sL   zt t| j}W n& ty8   tdt| j dY n0 || |fS dS )z9Remove and return the `(key, value)` pair first inserted.%s is emptyN)nextr6   rF   StopIterationr-   typer   r   r/   r   r   r   r2      s
    zFIFOCache.popitem)N)	r   r   r   r@   r'   r   r   r4   r2   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   s   t | || t | _d S r,   )r   r'   rD   Counter_LFUCache__counterr%   r   r   r   r'      s    zLFUCache.__init__c                 C   s(   || |}|| v r$| j |  d8  < |S r   rQ   r   r0   cache_getitemr   r   r   r   r      s    
zLFUCache.__getitem__c                 C   s"   || || | j |  d8  < d S r   rR   rH   r   r   r   r      s    zLFUCache.__setitem__c                 C   s   || | | j |= d S r,   rR   rJ   r   r   r   r4      s    
zLFUCache.__delitem__c                 C   sP   z| j d\\}}W n& ty<   tdt| j dY n0 || |fS dS )z@Remove and return the `(key, value)` pair least frequently used.r   rL   N)rQ   most_commonr1   r-   rO   r   r   )r   r0   r   r   r   r   r2      s
    zLFUCache.popitem)N)
r   r   r   r@   r'   r   r   r   r4   r2   r   r   r   r   r      s   
r   c                   @   sT   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   s   t | || t | _d S r,   )r   r'   rD   rE   _LRUCache__orderr%   r   r   r   r'      s    zLRUCache.__init__c                 C   s    || |}|| v r|  | |S r,   _LRUCache__updaterS   r   r   r   r      s    

zLRUCache.__getitem__c                 C   s   || || |  | d S r,   rW   rH   r   r   r   r      s    zLRUCache.__setitem__c                 C   s   || | | j |= d S r,   )rV   rJ   r   r   r   r4      s    
zLRUCache.__delitem__c                 C   sL   zt t| j}W n& ty8   tdt| j dY n0 || |fS dS )z>Remove and return the `(key, value)` pair least recently used.rL   N)rM   r6   rV   rN   r-   rO   r   r   r/   r   r   r   r2      s
    zLRUCache.popitemc                 C   s2   z| j | W n ty,   d | j |< Y n0 d S r,   )rV   rG   r-   r/   r   r   r   __update   s    zLRUCache.__update)N)r   r   r   r@   r'   r   r   r   r4   r2   rX   r   r   r   r   r      s   
	r   c                   @   sT   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.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)warningsrZ   DeprecationWarningr   r'   rD   rE   _MRUCache__order)r   r&   r   rZ   r   r   r   r'      s    zMRUCache.__init__c                 C   s    || |}|| v r|  | |S r,   _MRUCache__updaterS   r   r   r   r      s    

zMRUCache.__getitem__c                 C   s   || || |  | d S r,   r`   rH   r   r   r   r     s    zMRUCache.__setitem__c                 C   s   || | | j |= d S r,   )r_   rJ   r   r   r   r4     s    
zMRUCache.__delitem__c                 C   sL   zt t| j}W n& ty8   tdt| j dY n0 || |fS dS )z=Remove and return the `(key, value)` pair most recently used.rL   N)rM   r6   r_   rN   r-   rO   r   r   r/   r   r   r   r2   	  s
    zMRUCache.popitemc                 C   s6   z| j j|dd W n ty0   d | j |< Y n0 d S )NF)last)r_   rG   r-   r/   r   r   r   rY     s    zMRUCache.__update)N)r   r   r   r@   r'   r   r   r   r4   r2   ra   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   s   | j S )z(The `choice` function used by the cache.)rc   r*   r   r   r   rd      s    zRRCache.choicec                 C   sL   z|  t| }W n& ty8   tdt| j dY n0 || |fS dS )z/Remove and return a random `(key, value)` pair.rL   N)rc   list
IndexErrorr-   rO   r   r   r/   r   r   r   r2   %  s
    zRRCache.popitem)	r   r   r   r@   randomrd   r'   rB   r2   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  s    z_TimedCache._Timer.__init__c                 C   s   | j dkr|  S | jS d S r   rj   ri   Z_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   rl   r   timer   r   r   	__enter__=  s
    
z_TimedCache._Timer.__enter__c                 G   s   |  j d8  _ d S r   )rj   )r   excr   r   r   __exit__E  s    z_TimedCache._Timer.__exit__c                 C   s   t j| jffS r,   )rh   _Timerri   r*   r   r   r   
__reduce__H  s    z_TimedCache._Timer.__reduce__c                 C   s   t | j|S r,   )getattrri   )r   namer   r   r   __getattr__K  s    z_TimedCache._Timer.__getattr__N)	r   r   r   r'   rm   rp   rr   rt   rw   r   r   r   r   rs   2  s   rs   Nc                 C   s   t | || t|| _d S r,   )r   r'   rh   rs   _TimedCache__timer)r   r&   rk   r   r   r   r   r'   N  s    z_TimedCache.__init__c                 C   s<   | j "}| | || W  d    S 1 s.0    Y  d S r,   rx   expire)r   Z
cache_reprro   r   r   r   r+   R  s    
z_TimedCache.__repr__c                 C   s<   | j "}| | || W  d    S 1 s.0    Y  d S r,   ry   )r   	cache_lenro   r   r   r   r9   W  s    
z_TimedCache.__len__c                    s<   | j "}| | t jW  d    S 1 s.0    Y  d S r,   )rx   rz   superr?   rn   r(   r   r   r?   \  s    
z_TimedCache.currsizec                 C   s   | j S )z%The timer function used by the cache.)rx   r*   r   r   r   rk   b  s    z_TimedCache.timerc                 C   s>   | j $}| | t|  W d    n1 s00    Y  d S r,   )rx   rz   r   clearrn   r   r   r   r~   g  s    
z_TimedCache.clearc                 O   sB   | j ( tj| g|R i |W  d    S 1 s40    Y  d S r,   )rx   r   r;   r   argskwargsr   r   r   r;   l  s    z_TimedCache.getc                 O   sB   | j ( tj| g|R i |W  d    S 1 s40    Y  d S r,   )rx   r   r   r   r   r   r   r   p  s    z_TimedCache.popc                 O   sB   | j ( tj| g|R i |W  d    S 1 s40    Y  d S r,   )rx   r   r>   r   r   r   r   r>   t  s    z_TimedCache.setdefault)r   r   r   r@   rs   ro   	monotonicr'   r   r+   r9   rB   r?   rk   r~   r;   r   r>   __classcell__r   r   r}   r   rh   /  s   
rh   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)r0   expiresrM   prevNc                 C   s   || _ || _d S r,   )r0   r   r   r0   r   r   r   r   r'     s    zTTLCache._Link.__init__c                 C   s   t j| j| jffS r,   )r   _Linkr0   r   r*   r   r   r   rt     s    zTTLCache._Link.__reduce__c                 C   s   | j }| j}||_ ||_d S r,   )rM   r   )r   rM   r   r   r   r   unlink  s    zTTLCache._Link.unlink)NN)r   r   r   r   r'   rt   r   r   r   r   r   r   |  s   
r   Nc                 C   s>   t | ||| t  | _}| |_|_t | _	|| _
d S r,   )rh   r'   r   r   _TTLCache__rootr   rM   rD   rE   _TTLCache__links_TTLCache__ttl)r   r&   ttlrk   r   rootr   r   r   r'     s
    
zTTLCache.__init__c                 C   s6   z| j | }W n ty"   Y dS 0 |  |jk S d S NF)r   r-   rk   r   )r   r0   linkr   r   r   r5     s
    zTTLCache.__contains__c                 C   sR   z|  |}W n ty$   d}Y n0 |  |jk  }|rD| |S || |S d S r   )_TTLCache__getlinkr-   rk   r   r.   )r   r0   rT   r   expiredr   r   r   r     s    

zTTLCache.__getitem__c                 C   s   | j &}| | || || W d    n1 s20    Y  z| |}W n& typ   t| | j|< }Y n
0 |  || j |_	| j
 |_}|j |_}| |_|_d S r,   )rk   rz   r   r-   r   r   r   r   r   r   r   rM   r   )r   r0   r   rI   ro   r   r   r   r   r   r   r     s    
*zTTLCache.__setitem__c                 C   s8   || | | j |}|  |  |jk s4t|d S r,   )r   r   r   rk   r   r-   )r   r0   rK   r   r   r   r   r4     s
    
zTTLCache.__delitem__c                 c   sX   | j }|j}||urT| j"}||jk r.|jV  W d    n1 sB0    Y  |j}qd S r,   )r   rM   rk   r   r0   )r   r   currro   r   r   r   r7     s    
&zTTLCache.__iter__c                 C   sj   | j | | j}| |_|_t| j dd dD ]"}||_|j |_}| |_|_q4| | 	  d S )Nc                 S   s   | j S r,   r   )objr   r   r   <lambda>      z'TTLCache.__setstate__.<locals>.<lambda>)r0   )
__dict__updater   r   rM   sortedr   valuesrz   rk   )r   stater   r   r   r   r   r   __setstate__  s    zTTLCache.__setstate__c                 C   s   | j S )z,The time-to-live value of the cache's items.)r   r*   r   r   r   r     s    zTTLCache.ttlc           	      C   s   |du r|   }| j}|j}| j}g }tj}tj}||ur||jk s||j	|| |j	f || |j	 ||j	= |j}|
  |}q2|S )qRemove expired items from the cache and return an iterable of the
        expired `(key, value)` pairs.

        N)rk   r   rM   r   r   r4   r   r   appendr0   r   )	r   ro   r   r   linksr   rK   rT   rM   r   r   r   rz     s     zTTLCache.expirec              	   C   s   | j p}| | ztt| j}W n& tyJ   tdt| j dY n0 || 	|fW  d   S W d   n1 s|0    Y  dS zmRemove and return the `(key, value)` pair least recently used that
        has not already expired.

        rL   N)
rk   rz   rM   r6   r   rN   r-   rO   r   r   r   ro   r0   r   r   r   r2     s    
zTTLCache.popitemc                 C   s   | j | }| j | |S r,   )r   rG   r   r0   r   r   r   r   Z	__getlink  s    
zTTLCache.__getlink)N)r   r   r   r@   r   ro   r   r'   r5   r   r   r   r4   r7   r   rB   r   rz   r2   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r0   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__  s    zTLRUCache._Item.__lt__)NN)r   r   r   r   r'   r   r   r   r   r   _Item  s   
r   Nc                 C   s*   t | ||| t | _g | _|| _d S r,   )rh   r'   rD   rE   _TLRUCache__items_TLRUCache__order_TLRUCache__ttu)r   r&   tturk   r   r   r   r   r'     s    
zTLRUCache.__init__c                 C   s6   z| j | }W n ty"   Y dS 0 |  |jk S d S r   )r   r-   rk   r   )r   r0   itemr   r   r   r5     s
    zTLRUCache.__contains__c                 C   sR   z|  |}W n ty$   d}Y n0 |  |jk  }|rD| |S || |S d S r   )_TLRUCache__getitemr-   rk   r   r.   )r   r0   rT   r   r   r   r   r   r     s    

zTLRUCache.__getitem__c                 C   s   | j L}| |||}||k s.W d    d S | | || || W d    n1 sX0    Y  zd| |_W n ty   Y n0 t|| | j|< }t	
| j| d S NT)rk   r   rz   r   r   r-   r   r   r   heapqheappushr   )r   r0   r   rI   ro   r   r   r   r   r   r   )  s    
*zTLRUCache.__setitem__c                 C   sX   | j }|| | W d    n1 s&0    Y  | j|}d|_||jk sTt|d S r   )rk   r   r   r   r   r-   )r   r0   rK   ro   r   r   r   r   r4   9  s    (
zTLRUCache.__delitem__c              	   c   sN   | j D ]B}| j(}||jk r*|js*|jV  W d    q1 s>0    Y  qd S r,   )r   rk   r   r   r0   )r   r   ro   r   r   r   r7   B  s    
zTLRUCache.__iter__c                 C   s   | j S )z1The local time-to-use function used by the cache.)r   r*   r   r   r   r   I  s    zTLRUCache.ttuc                 C   s   |du r|   }| j}| j}t|t|d krNdd |D  | _}t| g }tj}tj}|r|d j	sz||d j
k st|}|j	s^||j|| |jf || |j ||j= q^|S )r   Nr[   c                 S   s   g | ]}|j s|qS r   )r   ).0r   r   r   r   
<listcomp>Y  r   z$TLRUCache.expire.<locals>.<listcomp>r   )rk   r   r   r8   r   heapifyr   r4   r   r   r   heappopr   r0   )r   ro   itemsorderr   rK   rT   r   r   r   r   rz   N  s"    


zTLRUCache.expirec              	   C   s   | j n}| | ztt| j}W n$ tyH   td| jj dY n0 || 	|fW  d   S W d   n1 sz0    Y  dS r   )
rk   rz   rM   r6   r   rN   r-   r(   r   r   r   r   r   r   r2   f  s    
zTLRUCache.popitemc                 C   s   | j | }| j | |S r,   )r   rG   r   r   r   r   Z	__getitemt  s    
zTLRUCache.__getitem)N)r   r   r   r@   	functoolstotal_orderingr   ro   r   r'   r5   r   r   r   r4   r7   rB   r   rz   r2   r   r   r   r   r   r      s   	

r   	CacheInfo)hitsmissesr&   r?   Fc                    s    fdd}|S )z_Decorator to wrap a function with a memoizing callable that saves
    results in a cache.

    c                    s   rRt  tr fdd}n$t  tjjr8 fdd}ndd }t|  |}nt|  d } |_|_|_t	
|| S )Nc                    s   t | | j jS r,   )
_CacheInfor&   r?   r   r   cacher   r   	make_info  s    z,cached.<locals>.decorator.<locals>.make_infoc                    s   t | |d t S r,   )r   r8   r   r   r   r   r     s    c                 S   s   t | |ddS r   )r   r   r   r   r   r     s    )
isinstancer   rD   abcMappingr   r   	cache_key
cache_lockr   update_wrapper)funcr   wrapperr   infor0   lockr   r   	decorator  s    
zcached.<locals>.decoratorr   )r   r0   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 yX   Y n0 | g|R i |}z|||< W n ty   Y n0 |S r,   )r-   r1   r   r   r   ckv)r   r0   methodr   r   r     s    
z0cachedmethod.<locals>.decorator.<locals>.wrapperc                    s    | }|d ur|   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 |}z6|  || W  d    W S 1 sf0    Y  W n t y   Y n0 | g|R i |}z:|  |||W  d    W S 1 s0    Y  W n t y   | Y S 0 d S r,   )r-   r>   r1   r   )r   r0   r   r   r   r   r     s    
,
0c                    sD    | }|d ur@|  |   W d    n1 s60    Y  d S r,   r   r   )r   r   r   r   r~     s    
)r   r   r   cache_clearr   r   )r   r   r~   r   r0   r   )r   r   r     s    zcachedmethod.<locals>.decoratorr   )r   r0   r   r   r   r   r   r
     s    9r
   )r@   __all____version__rD   collections.abcr   r   rg   ro    r   Z_decoratorsr   r   r   MutableMappingr   r   r   r   r   r   rh   r   r   
namedtupler   Zhashkeyr	   Z	methodkeyr
   r   r   r   r   <module>   s4   f%)J z$