o
    j[                     @   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edg dZe
jdddfddZe
jdddfddZdS ) z0Extensible memoizing collections and decorators.)	Cache	FIFOCacheLFUCacheLRUCacheRRCache	TLRUCacheTTLCachecachedcachedmethodz7.1.1    N   )keysc                   @   s4   e Zd ZdZdZdd Zdd Zdd Zd	d
 ZdS )_DefaultSizezAA minimal "fake" dict that returns a constant size 1 for any key. c                 C      dS Nr   r   self_keyr   r   T/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/cachetools/__init__.py__getitem__#      z_DefaultSize.__getitem__c                 C      d S Nr   )r   r   _valuer   r   r   __setitem__&   r   z_DefaultSize.__setitem__c                 C   r   r   r   r   r   r   r   pop)   r   z_DefaultSize.popc                 C   r   r   r   r   r   r   r   clear,   r   z_DefaultSize.clearN)	__name__
__module____qualname____doc__	__slots__r   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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__7   s   
zCache.__init__c                 C   s    dt | jt| j| j| jf S )Nz%s(%s, maxsize=%r, currsize=%r))typer   reprr'   r)   r(   r   r   r   r   __repr__@   s   zCache.__repr__c                 C   s*   z| j | W S  ty   | | Y S w r   )r'   KeyError__missing__r   keyr   r   r   r   H   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   r3   valuer+   sizeZdiffsizer   r   r   r   N   s   



zCache.__setitem__c                 C   s&   | j |}| j|= |  j|8  _d S r   )r&   r   r'   r(   )r   r3   r7   r   r   r   __delitem__^   s   zCache.__delitem__c                 C   s
   || j v S r   )r'   r2   r   r   r   __contains__c      
zCache.__contains__c                 C   s   t |r   )r0   r2   r   r   r   r1   f   s   zCache.__missing__c                 C   
   t | jS r   )iterr'   r   r   r   r   __iter__i   r:   zCache.__iter__c                 C   r;   r   )lenr'   r   r   r   r   __len__l   r:   zCache.__len__c                 C   s   || v r| | S |S r   r   )r   r3   defaultr   r   r   getu   s   z	Cache.getc                 C   s4   || v r| | }| |= |S || j u rt||}|S r   )_Cache__markerr0   r   r3   r@   r6   r   r   r   r   {   s   
z	Cache.popc                 C   s$   || v r
| | }|S | | |< }|S r   r   rC   r   r   r   
setdefault   s
   zCache.setdefaultc                 C   s   | j   | j  d| _d S r#   )r'   r   r&   r(   r   r   r   r   r      s   


zCache.clearc                 C      | j S )zThe maximum size of the cache.)r)   r   r   r   r   r+         zCache.maxsizec                 C   rE   )zThe current size of the cache.)r(   r   r   r   r   currsize   rF   zCache.currsizec                 C   r   )z+Return the size of a cache element's value.r   r   )r6   r   r   r   r$      s   zCache.getsizeofr   )r   r   r    r!   objectrB   r   r&   r,   r/   r   r   r8   r9   r1   r=   r?   rA   r   rD   r   propertyr+   rG   staticmethodr$   r   r   r   r   r   0   s.    
	
	



r   c                   @   sF   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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   s4   || || || j v r| j | d S d | j |< d S r   )rN   move_to_endr   r3   r6   cache_setitemr   r   r   r      s   
zFIFOCache.__setitem__c                 C      || | | j |= d S r   )rN   r   r3   cache_delitemr   r   r   r8         
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   StopIterationr0   r-   r   r   r2   r   r   r   r5         zFIFOCache.popitemc                 C      t |  | j  d S r   )r   r   rN   r   r   r   r   r         
zFIFOCache.clearr   )
r   r   r    r!   r,   r   r   r8   r5   r   r   r   r   r   r      s    
	r   c                   @   sj   e Zd ZdZG dd 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d ZdS )r   z1Least Frequently Used (LFU) cache implementation.c                   @   s    e Zd ZdZdd Zdd ZdS )zLFUCache._Link)countr   rY   prevc                 C   s   || _ t | _d S r   )r^   setr   )r   r^   r   r   r   r,      s   zLFUCache._Link.__init__c                 C      | j }| j}||_ ||_d S r   rY   r_   r   rY   r_   r   r   r   unlink      
zLFUCache._Link.unlinkN)r   r   r    r"   r,   rd   r   r   r   r   _Link   s    rf   Nc                 C   s4   t | || td | _}| |_|_i | _d S r#   )r   r,   r   rf   _LFUCache__rootr_   rY   _LFUCache__links)r   r+   r$   rootr   r   r   r,      s   
zLFUCache.__init__c                 C       || |}|| v r|  | |S r   )_LFUCache__touchr   r3   cache_getitemr6   r   r   r   r         

zLFUCache.__getitem__c                 C   sz   || || || j v r| | d S | j}|j}|jdkr0td}|j|_| |_|j_||_|j	| || j |< d S r   )
rh   rk   rg   rY   r^   r   rf   r_   r   add)r   r3   r6   rR   ri   linkr   r   r   r      s   



zLFUCache.__setitem__c                 C   s8   || | | j |}|j| |js|  d S d S r   )rh   r   r   removerd   r   r3   rU   rp   r   r   r   r8      s   
zLFUCache.__delitem__c                 C   sD   | j }|j}||u rtdt| j dtt|j}|| |fS )z@Remove and return the `(key, value)` pair least frequently used.rX   N)rg   rY   r0   r-   r   r<   r   r   )r   ri   currr3   r   r   r   r5      s   zLFUCache.popitemc                 C   *   t |  | j}| |_|_| j  d S r   )r   r   rg   r_   rY   rh   r   ri   r   r   r   r        
zLFUCache.clearc                 C   s   | j | }|j}|j|jd kr6t|jdkr | jd7  _dS t|jd }|j|_| |_|j_||_|j| |j	| |jsI|
  || j |< dS )zIncrement use countr   N)rh   rY   r^   r>   r   r   rf   r_   ro   rq   rd   )r   r3   rp   rs   r   r   r   __touch  s   
zLFUCache.__touchr   )r   r   r    r!   rf   r,   r   r   r   r8   r5   r   rk   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ejfd	d
Z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   rj   r   _LRUCache__touchrl   r   r   r   r   "  rn   zLRUCache.__getitem__c                 C   s   || || |  | d S r   ry   rQ   r   r   r   r   (  s   zLRUCache.__setitem__c                 C   rS   r   )rx   rT   r   r   r   r8   ,  rV   zLRUCache.__delitem__c                 C   rW   )z>Remove and return the `(key, value)` pair least recently used.rX   N)rY   r<   rx   rZ   r0   r-   r   r   r2   r   r   r   r5   0  r[   zLRUCache.popitemc                 C   r\   r   )r   r   rx   r   r   r   r   r   9  r]   zLRUCache.clearc                 C   s2   z	| j | W dS  ty   d| j |< Y dS w )zMark as recently usedN)rx   rP   r0   r2   r   r   r   rw   =  s
   zLRUCache.__touchr   )r   r   r    r!   r,   r   r   r   r8   r5   r   rz   r   r   r   r   r     s    
	r   c                   @   sX   e Zd ZdZejdfddZe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-Random Replacement (RR) cache implementation.Nc                 C   s$   t | || || _i | _g | _d S r   )r   r,   _RRCache__choice_RRCache__index_RRCache__keys)r   r+   choicer$   r   r   r   r,   H  s   
zRRCache.__init__c                 C   rE   )z(The `choice` function used by the cache.)r{   r   r   r   r   r~   N  rF   zRRCache.choicec                 C   s:   || || || j vrt| j| j |< | j| d S d S r   )r|   r>   r}   appendrQ   r   r   r   r   S  s
   
zRRCache.__setitem__c                 C   sT   || | | j |}|t| jd kr#| jd }|| j|< || j |< | j  d S )Nr   )r|   r   r>   r}   )r   r3   rU   indexlastr   r   r   r8   Y  s   



zRRCache.__delitem__c                 C   sB   z|  | j}W n ty   tdt| j dw || |fS )z/Remove and return a random `(key, value)` pair.rX   N)r{   r}   
IndexErrorr0   r-   r   r   r2   r   r   r   r5   b  s   zRRCache.popitemc                 C   $   t |  | j  | jd d = d S r   )r   r   r|   r}   r   r   r   r   r   k     

zRRCache.clear)r   r   r    r!   randomr~   r,   rI   r   r   r8   r5   r   r   r   r   r   r   E  s    
		r   c                       s   e Zd ZdZG dd dZd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d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,   u     
z_TimedCache._Timer.__init__c                 C   s   | j dkr	|  S | jS r#   r   r   Z_Timer__timer   r   r   r   __call__y  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__     z_TimedCache._Timer.__exit__c                 C   s   t j| jffS r   )r   _Timerr   r   r   r   r   
__reduce__     z_TimedCache._Timer.__reduce__c                 C   s   t | j|S r   )getattrr   )r   namer   r   r   __getattr__     z_TimedCache._Timer.__getattr__N)	r   r   r    r,   r   r   r   r   r   r   r   r   r   r   t  s    r   Nc                 C   s   t | || t|| _d S r   )r   r,   r   r   _TimedCache__timer)r   r+   r   r$   r   r   r   r,     s   z_TimedCache.__init__c                 C   <   | j }| | || W  d    S 1 sw   Y  d S r   r   expire)r   Z
cache_reprr   r   r   r   r/        
$z_TimedCache.__repr__c                 C   r   r   r   )r   Z	cache_lenr   r   r   r   r?     r   z_TimedCache.__len__c                    s<   | j }| | t jW  d    S 1 sw   Y  d S r   )r   r   superrG   r   	__class__r   r   rG     s   
$z_TimedCache.currsizec                 C   rE   )z%The timer function used by the cache.)r   r   r   r   r   r     rF   z_TimedCache.timerc                 O   B   | j  tj| g|R i |W  d    S 1 sw   Y  d S r   )r   r   rA   r   argskwargsr   r   r   rA        $z_TimedCache.getc                 O   r   r   )r   r   r   r   r   r   r   r     r   z_TimedCache.popc                 O   r   r   )r   r   rD   r   r   r   r   rD     r   z_TimedCache.setdefaultc                 C   s   t |  d S r   )r   r   r   r   r   r   r     s   z_TimedCache.clearc                 C   s   t r   )NotImplementedErrorr   r   r   r   r     r   z_TimedCache.expirer   )r   r   r    r!   r   r,   r   r/   r?   rI   rG   r   rA   r   rD   r   r   __classcell__r   r   r   r   r   q  s    

r   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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)r3   expiresrY   r_   Nc                 C   s   || _ || _d S r   )r3   r   r   r3   r   r   r   r   r,     r   zTTLCache._Link.__init__c                 C   s   t j| j| jffS r   )r   rf   r3   r   r   r   r   r   r     r   zTTLCache._Link.__reduce__c                 C   ra   r   rb   rc   r   r   r   rd     re   zTTLCache._Link.unlinkNN)r   r   r    r"   r,   r   rd   r   r   r   r   rf     s
    
rf   Nc                 C   s>   t | ||| t  | _}| |_|_t | _	|| _
d S r   )r   r,   r   rf   _TTLCache__rootr_   rY   rL   rM   _TTLCache__links_TTLCache__ttl)r   r+   ttlr   r$   ri   r   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   r0   r   r   )r   r3   rp   r   r   r   r9        zTTLCache.__contains__c                 C   N   z|  |}W n ty   d}Y n	w |  |jk  }|r"| |S || |S r   )_TTLCache__getlinkr0   r   r   r1   )r   r3   rm   rp   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   r0   r   rf   r   rd   r   r   r   rY   r_   )r   r3   r6   rR   r   rp   ri   r_   r   r   r   r     s   
zTTLCache.__setitem__c                 C   s8   || | | j |}|  |  |jk st|d S r   )r   r   rd   r   r   r0   rr   r   r   r   r8     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   r3   )r   ri   rs   r   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   rE   r   r   )objr   r   r   <lambda>  s    z'TTLCache.__setstate__.<locals>.<lambda>)r3   )
__dict__updater   r_   rY   sortedr   valuesr   r   )r   stateri   rp   r_   r   r   r   __setstate__  s   zTTLCache.__setstate__c                 C   rE   )z,The time-to-live value of the cache's items.)r   r   r   r   r   r     rF   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   r8   r   r   r   r3   rd   )	r   r   ri   rs   linksr   rU   rm   rY   r   r   r   r     s"   zTTLCache.expirec              	   C   x   | 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   r0   r-   r   r   r   r   r3   r   r   r   r5   2     
$zTTLCache.popitemc                 C   rt   r   )r   r   r   r_   rY   r   ru   r   r   r   r   @  rv   zTTLCache.clearc                 C      | j | }| j | |S r   )r   rP   r   r3   r6   r   r   r   Z	__getlinkF     
zTTLCache.__getlinkr   )r   r   r    r!   rf   r   	monotonicr,   r9   r   r   r   r8   r=   r   rI   r   r   r5   r   r   r   r   r   r   r     s     



r   c                   @   s   e Zd 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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r3   r   removedNc                 C   s   || _ || _d| _d S r   r   r   r   r   r   r,   U  s   
zTLRUCache._Item.__init__c                 C   s   | j |j k S r   r   )r   otherr   r   r   __lt__Z  r   zTLRUCache._Item.__lt__r   )r   r   r    r"   r,   r   r   r   r   r   _ItemQ  s    
r   Nc                 C   s*   t | ||| t | _g | _|| _d S r   )r   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   r0   r   r   )r   r3   itemr   r   r   r9   c  r   zTLRUCache.__contains__c                 C   r   r   )_TLRUCache__getitemr0   r   r   r1   )r   r3   rm   r   r   r   r   r   r   k  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   r0   r   r   r   heapqheappushr   )r   r3   r6   rR   r   r   r   r   r   r   r   w  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   r0   )r   r3   rU   r   r   r   r   r   r8     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   r3   )r   rs   r   r   r   r   r=     s   
zTLRUCache.__iter__c                 C   rE   )z1The local time-to-use function used by the cache.)r   r   r   r   r   r     rF   zTLRUCache.ttuc                 C   s   |du r|   }| j}| j}t|t|| j kr(dd |D  | _}t| g }tj}tj	}|rj|d j
s>||d jk sjt|}|j
s\||j|| |jf || |j ||j= |rj|d j
s>||d jk r>|S )r   Nc                 S   s   g | ]}|j s|qS r   )r   ).0r   r   r   r   
<listcomp>  s    z$TLRUCache.expire.<locals>.<listcomp>r
   )r   r   r   r>   _TLRUCache__HEAP_CLEANUP_FACTORr   heapifyr   r8   r   r   r   heappopr   r3   )r   r   itemsorderr   rU   rm   r   r   r   r   r     s$   

zTLRUCache.expirec              	   C   r   r   )
r   r   rY   r<   r   rZ   r0   r-   r   r   r   r   r   r   r5     r   zTLRUCache.popitemc                 C   r   r   )r   r   r   r   r   r   r   r   r     r   zTLRUCache.clearc                 C   r   r   )r   rP   r   r   r   r   Z	__getitem  r   zTLRUCache.__getitemr   )r   r   r    r!   r   	functoolstotal_orderingr   r   r   r,   r9   r   r   r   r8   r=   rI   r   r   r5   r   r   r   r   r   r   r   L  s"    	

r   	CacheInfo)hitsmissesr+   rG   Fc                    &   ddl m   fdd}|S )z_Decorator to wrap a function with a memoizing callable that saves
    results in a cache.

    r   _wrapperc                    sd   r*t trfdd}nt tjjrfdd}ndd } | |dS  | S )Nc                    s   t | | j jS r   )
_CacheInfor+   rG   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   info)
isinstancer   rL   abcMapping)funcr   r   r   	conditionr   r3   lockr   r   	decorator  s   
zcached.<locals>.decorator)_cachedr   r   r3   r   r   r   r   r   r   r   r     s   r   c                    r   )z]Decorator to wrap a method with a memoizing callable that saves
    results in a cache.

    r   r   c                    s0   rdd } | |dS  | S )Nc                 S   sD   t | trt||| j| jS t | tjjrt||d t| S t	d)Nz)cache(self) must return a mutable mapping)
r   r   r   r+   rG   rL   r   r   r>   	TypeError)r   r   r   r   r   r   r     s
   
z2cachedmethod.<locals>.decorator.<locals>.make_infor   r   )methodr   r   r   r   r     s   zcachedmethod.<locals>.decorator)Z_cachedmethodr   r   r   r   r   r	     s   r	   )r!   __all____version__rL   collections.abcr   r   r   r    r   r   r   MutableMappingr   r   r   r   r   r   r   r   
namedtupler   Zhashkeyr   Z	methodkeyr	   r   r   r   r   <module>   s4    w T*,N  