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.2.0é    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   úV/home/dinkstrade/pdmp-scanner/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   sB   |dk rt dƒ‚|r|| _| jtjuri | _i | _d| _|| _d S )Nr
   zmaxsize must be non-negative)Ú
ValueErrorÚ	getsizeofr   Ú_Cache__sizeÚ_Cache__dataÚ_Cache__currsizeÚ_Cache__maxsize©r   Úmaxsizer$   r   r   r   Ú__init__4   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   G   s
   ÿzCache.__getitem__c                 C   sÊ   | j }|  |¡}|dk rtdƒ‚||krtdƒ‚|| jvr2|}| j| |kr1|  ¡  | j| |ks&n || j|  }| j| |krR|  ¡  || jvrK|}| j| |ks@|| j|< || j|< |  j|7  _d S )Nr
   zvalue size must be non-negativezvalue too large)r(   r$   r#   r&   r'   Úpopitemr%   )r   r2   Úvaluer*   ÚsizeÚdiffsizer   r   r   r   M   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__b   s   zCache.__delitem__c                 C   s
   || j v S r   )r&   r1   r   r   r   Ú__contains__g   ó   
zCache.__contains__c                 C   s   t |ƒ‚r   )r/   r1   r   r   r   r0   j   s   zCache.__missing__c                 C   ó
   t | jƒS r   )Úiterr&   r   r   r   r   Ú__iter__m   r9   zCache.__iter__c                 C   r:   r   )Úlenr&   r   r   r   r   Ú__len__p   r9   zCache.__len__c                 C   s   || v r| | S |S r   r   )r   r2   Údefaultr   r   r   Úgety   s   z	Cache.getc                 C   s4   || v r| | }| |= |S || j u rt|ƒ‚|}|S r   )Ú_Cache__markerr/   ©r   r2   r?   r4   r   r   r   r      s   
üz	Cache.popc                 C   s$   || v r
| | }|S | | |< }|S r   r   rB   r   r   r   Ú
setdefault‰   s
   ÿzCache.setdefaultc                 C   s   | j  ¡  | j ¡  d| _d S ©Nr
   )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   )r4   r   r   r   r$   ¥   s   zCache.getsizeofr   )r   r   r    r!   ÚobjectrA   r   r%   r+   r.   r   r   r7   r8   r0   r<   r>   r@   r   rC   r   Úpropertyr*   rG   Ústaticmethodr$   r   r   r   r   r   -   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   r2   r4   Ú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/   r,   r   r   r1   r   r   r   r3   ½   ó   ÿ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   r7   r3   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 rD   )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   r2   Úcache_getitemr4   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   r2   r4   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   r2   rU   rp   r   r   r   r7   ö   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   r/   r,   r   r;   r   r   )r   ri   Úcurrr2   r   r   r   r3   ý   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   r2   rp   rs   r   r   r   Ú__touch  s   
zLFUCache.__touchr   )r   r   r    r!   rf   r+   r   r   r   r7   r3   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   r7   0  rV   zLRUCache.__delitem__c                 C   rW   )z>Remove and return the `(key, value)` pair least recently used.rX   N)rY   r;   rx   rZ   r/   r,   r   r   r1   r   r   r   r3   4  r[   zLRUCache.popitemc                 C   r\   r   )r   r   rx   r   r   r   r   r   =  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   r/   r1   r   r   r   rw   A  s
   ÿzLRUCache.__touchr   )r   r   r    r!   r+   r   r   r   r7   r3   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+   L  s   
zRRCache.__init__c                 C   rE   )z(The `choice` function used by the cache.)r{   r   r   r   r   r~   R  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   W  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   r2   rU   ÚindexÚlastr   r   r   r7   ]  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}   Ú
IndexErrorr/   r,   r   r   r1   r   r   r   r3   f  s   ÿzRRCache.popitemc                 C   ó$   t  | ¡ | j ¡  | jd d …= d S r   )r   r   r|   r}   r   r   r   r   r   o  ó   

zRRCache.clear)r   r   r    r!   Úrandomr~   r+   rI   r   r   r7   r3   r   r   r   r   r   r   I  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 rD   )Ú_Timer__timerÚ_Timer__nesting)r   Útimerr   r   r   r+   y  ó   
z_TimedCache._Timer.__init__c                 C   s   | j dkr	|  ¡ S | jS rD   ©r‰   rˆ   Ú_Timer__timer   r   r   r   Ú__call__}  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•   x  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   Ú
cache_reprr�   r   r   r   r.   ˜  ó   
$þz_TimedCache.__repr__c                 C   r�   r   rž   )r   Ú	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   r@   ©r   ÚargsÚkwargsr   r   r   r@   ­  ó   $ÿz_TimedCache.getc                 O   r¦   r   )rœ   r   r   r§   r   r   r   r   ±  rª   z_TimedCache.popc                 O   r¦   r   )rœ   r   rC   r§   r   r   r   rC   µ  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Š   r@   r   rC   r   rŸ   Ú__classcell__r   r   r¤   r   r‡   u  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)Úexpiresr2   rY   r_   Nc                 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   rf   r2   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±   r/   rŠ   r­   )r   r2   rp   r   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   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¸   r/   r   rf   r±   rd   r²   r­   r°   rY   r_   )r   r2   r4   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­   r/   rr   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   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>)r2   )
Ú__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   r7   r   r­   r   r2   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   r/   r,   r   r   ©r   r�   r2   r   r   r   r3   6  ó   
ÿ$ùzTTLCache.popitemc                 C   rt   r   )r‡   r   r°   r_   rY   r±   ru   r   r   r   r   D  rv   zTTLCache.clearc                 C   ó   | j | }| j  |¡ |S r   )r±   rP   ©r   r2   r4   r   r   r   Ú	__getlinkJ  ó   
zTTLCache.__getlinkr   )r   r   r    r!   rf   r�   Ú	monotonicr+   r8   r   r   r   r7   r<   rÃ   rI   r³   rŸ   r3   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ejf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)r­   r2   ÚremovedNc                 C   s   || _ || _d| _d S rµ   )r2   r­   rÐ   r®   r   r   r   r+   Y  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   Ú_ItemU  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+   a  s   

zTLRUCache.__init__c                 C   r´   rµ   )rÔ   r/   rŠ   r­   )r   r2   Úitemr   r   r   r8   g  r¶   zTLRUCache.__contains__c                 C   r·   rµ   )Ú_TLRUCache__getitemr/   rŠ   r­   r0   )r   r2   rm   rØ   r¹   r   r   r   r   o  rº   zTLRUCache.__getitem__c                 C   s¶   | j �*}|  |¡ |  |||¡}||k s |  |¡W  d   ƒ S || ||ƒ W d   ƒ n1 s0w   Y  zd|  |¡_W n	 tyF   Y nw t ||¡ | j	|< }t
 | j|¡ d S ©NT)rŠ   rŸ   rÖ   Ú_TLRUCache__delitemrÙ   rÐ   r/   r   rÓ   rÔ   ÚheapqÚheappushrÕ   )r   r2   r4   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   �  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   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   r7   r   rÐ   r­   Úheappopr   r2   )r   r�   ÚitemsÚorderr¹   rU   rm   rØ   r   r   r   rŸ   ¢  s$   

ûzTLRUCache.expirec              	   C   rÆ   rÇ   )
rŠ   rŸ   rY   r;   rÔ   rZ   r/   r,   r   r   rÈ   r   r   r   r3   º  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   Ú	__getitemÍ  rÍ   zTLRUCache.__getitemc                 C   s6   z	d| j  |¡_W n
 ty   Y d S w || |ƒ d S rÚ   )rÔ   r   rÐ   r/   rT   r   r   r   Ú	__delitemÒ  s   ÿzTLRUCache.__delitemr   )r   r   r    r!   rà   Ú	functoolsÚtotal_orderingrÓ   r�   rÎ   r+   r8   r   r   r   r7   r<   rI   r×   rŸ   r3   r   rÙ   rÛ   r   r   r   r   r   P  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 rD   )rï   rð   r   r   r   ró   ÷  r—   ©Úinfo)Ú
isinstancer   rL   ÚabcÚMapping)Úfuncró   ©rî   rò   Ú	conditionrõ   r2   Úlockr   r   Ú	decoratoré  s   
zcached.<locals>.decorator)Ú_cachedrî   ©rò   r2   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)Ú_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ï   Úhashkeyr   Ú	methodkeyr	   r   r   r   r   Ú<module>   s4    ~ T*,N  ÿ