o
    ÓèFh•a  ã                   @   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.3.3é    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   úL/var/www/html/loop/nvenv/lib/python3.10/site-packages/cachetools/__init__.pyÚ__getitem__    ó   z_DefaultSize.__getitem__c                 C   s   |dksJ ‚d S r   r   )r   r   Úvaluer   r   r   Ú__setitem__#   s   z_DefaultSize.__setitem__c                 C   r   r   r   r   r   r   r   Úpop&   r   z_DefaultSize.popN)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   r   r   r   r   r   r   r      s
    r   c                   @   sª   e Zd ZdZeƒ Zeƒ Zd!dd„Zdd„ Z	dd„ Z
d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd!dd„Zefdd„Zd!dd„Zedd„ ƒZedd„ ƒZedd „ ƒZdS )"r   z?Mutable mapping to serve as a simple cache or cache base class.Nc                 C   s6   |r|| _ | j tj urtƒ | _tƒ | _d| _|| _d S ©Nr   )Ú	getsizeofr   ÚdictÚ_Cache__sizeÚ_Cache__dataÚ_Cache__currsizeÚ_Cache__maxsize©r   Úmaxsizer    r   r   r   Ú__init__1   s   
zCache.__init__c                 C   s   d| j jt| jƒ| j| jf S )Nz%s(%s, maxsize=%r, currsize=%r))Ú	__class__r   Úreprr#   r%   r$   ©r   r   r   r   Ú__repr__:   s   üzCache.__repr__c                 C   s*   z| j | W S  ty   |  |¡ Y S w ©N)r#   ÚKeyErrorÚ__missing__©r   Úkeyr   r   r   r   B   s
   ÿzCache.__getitem__c                 C   s    | j }|  |¡}||krtdƒ‚|| jvs| j| |k r.| j| |kr.|  ¡  | j| |ks#|| jv r;|| j|  }n|}|| j|< || j|< |  j|7  _d S )Nzvalue too large)r%   r    Ú
ValueErrorr#   r"   r$   Úpopitem)r   r1   r   r'   ÚsizeÚdiffsizer   r   r   r   H   s   
ÿ


zCache.__setitem__c                 C   s&   | j  |¡}| j|= |  j|8  _d S r-   )r"   r   r#   r$   )r   r1   r4   r   r   r   Ú__delitem__X   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__c   r8   zCache.__iter__c                 C   r9   r-   )Úlenr#   r+   r   r   r   Ú__len__f   r8   zCache.__len__c                 C   s   || v r| | S |S r-   r   )r   r1   Údefaultr   r   r   Úgeti   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   o   s   
üz	Cache.popc                 C   s$   || v r
| | }|S | | |< }|S r-   r   rA   r   r   r   Ú
setdefaulty   s
   ÿzCache.setdefaultc                 C   ó   | j S )zThe maximum size of the cache.)r%   r+   r   r   r   r'   €   ó   zCache.maxsizec                 C   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   Ë   ó    
	r   c                   @   rb   )r   z.Most Recently Used (MRU) cache implementation.Nc                 C   rJ   r-   )r   r(   rK   rL   Ú_MRUCache__orderr&   r   r   r   r(   ó   rN   zMRUCache.__init__c                 C   rd   r-   ©Ú_MRUCache__updater_   r   r   r   r   ÷   rg   zMRUCache.__getitem__c                 C   rh   r-   rm   rP   r   r   r   r   ý   ri   zMRUCache.__setitem__c                 C   rR   r-   )rl   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:   rl   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)rl   rO   r.   r0   r   r   r   rj     s
   ÿzMRUCache.__updater-   )r   r   r   rF   r(   r   r   r   r6   r3   rn   r   r   r   r   r   ð   rk   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.)rp   r+   r   r   r   rq     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)rp   ÚlistÚ
IndexErrorr.   rZ   r   r   r0   r   r   r   r3   !  r[   zRRCache.popitem)	r   r   r   rF   Úrandomrq   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(   /  ó   
z_TimedCache._Timer.__init__c                 C   s   | j dkr	|  ¡ S | jS r   ©rw   rv   Ú_Timer__timer+   r   r   r   Ú__call__3  s   
z_TimedCache._Timer.__call__c                 C   s2   | j dkr|  ¡  | _}n| j}|  j d7  _ |S )Nr   r   rz   ©r   Útimer   r   r   Ú	__enter__9  s
   
z_TimedCache._Timer.__enter__c                 G   s   |  j d8  _ d S r   )rw   )r   Úexcr   r   r   Ú__exit__A  ó   z_TimedCache._Timer.__exit__c                 C   s   t j| jffS r-   )ru   Ú_Timerrv   r+   r   r   r   Ú
__reduce__D  ó   z_TimedCache._Timer.__reduce__c                 C   s   t | j|ƒS r-   )Úgetattrrv   )r   Únamer   r   r   Ú__getattr__G  ó   z_TimedCache._Timer.__getattr__N)	r   r   r   r(   r|   r   r�   r„   rˆ   r   r   r   r   rƒ   .  s    rƒ   Nc                 C   s   t  | ||¡ t |¡| _d S r-   )r   r(   ru   rƒ   Ú_TimedCache__timer)r   r'   rx   r    r   r   r   r(   J  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,   N  ó   
$þz_TimedCache.__repr__c                 C   r‹   r-   rŒ   )r   Ú	cache_lenr~   r   r   r   r=   S  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   X  s   
$þz_TimedCache.currsizec                 C   rC   )z%The timer function used by the cache.)rŠ   r+   r   r   r   rx   ^  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“   c  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?   h  ó   $ÿz_TimedCache.getc                 O   r”   r-   )rŠ   r   r   r•   r   r   r   r   l  r˜   z_TimedCache.popc                 O   r”   r-   )rŠ   r   rB   r•   r   r   r   rB   p  r˜   z_TimedCache.setdefault)r   r   r   rF   rƒ   r~   Ú	monotonicr(   r   r,   r=   rH   rE   rx   r“   r?   r   rB   Ú__classcell__r   r   r’   r   ru   +  s    
ru   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(   |  ry   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ž   x  s
    
rž   Nc                 C   s>   t  | |||¡ t ¡  | _}| |_|_t ¡ | _	|| _
d S r-   )ru   r(   r   rž   Ú_TTLCache__rootrœ   rX   rK   rL   Ú_TTLCache__linksÚ_TTLCache__ttl)r   r'   Úttlrx   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.   rx   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.   rx   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-   )rx   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Ÿ   rx   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   rx   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�   rx   )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}tj}||ur;||jk s?|| |jƒ ||j= |j}| ¡  |}||ur=||jk rdS dS dS dS )ú$Remove expired items from the cache.N)	rx   r¡   rX   r¢   r   r6   r›   r1   rŸ   )r   r~   r¥   r®   ÚlinksrT   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)
rx   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   u  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-   )ru   r(   rK   rL   Ú_TLRUCache__itemsÚ_TLRUCache__orderÚ_TLRUCache__ttu)r   r'   Útturx   r    r   r   r   r(     s   

zTLRUCache.__init__c                 C   r¦   r§   )rÅ   r.   rx   r›   )r   r1   Úitemr   r   r   r7     r©   zTLRUCache.__contains__c                 C   rª   r§   )Ú_TLRUCache__getitemr.   rx   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)rx   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Ë   )rx   rÅ   r   rÁ   r›   r.   )r   r1   rT   r~   rÉ   r   r   r   r6   0  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Æ   rx   r›   rÁ   r1   )r   r®   r~   r   r   r   r;   9  s   €
€þ€þzTLRUCache.__iter__c                 C   rC   )z1The local time-to-use function used by the cache.)rÇ   r+   r   r   r   rÈ   @  rD   zTLRUCache.ttuc                 C   sÀ   |du r|   ¡ }| j}| j}t|ƒt|ƒd kr'dd„ |D ƒ | _}t |¡ tj}|rZ|d js8||d j	k s\t 
|¡}|jsJ|| |jƒ ||j= |r^|d js8||d j	k r8dS dS dS dS )r¸   Né   c                 S   s   g | ]}|j s|‘qS r   )rÁ   )Ú.0rÉ   r   r   r   Ú
<listcomp>M  s    z$TLRUCache.expire.<locals>.<listcomp>r   )rx   rÅ   rÆ   r<   rÌ   Úheapifyr   r6   rÁ   r›   Úheappopr1   )r   r~   ÚitemsÚorderrT   rÉ   r   r   r   r�   E  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º   )
rx   r�   rX   r:   rÅ   rY   r.   r)   r   r   r»   r   r   r   r3   V  s   
ÿ$ùzTLRUCache.popitemc                 C   r¼   r-   )rÅ   rO   r½   r   r   r   Ú	__getitemd  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   Ú	decoratoru  sB   

zcached.<locals>.decoratorr   )rÝ   r1   rì   rø   rù   r   r÷   r   r	   o  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“   &  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“   ?  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Ì   rt   r~   Ú r   r   rò   ÚMutableMappingr   r   r   r   r   r   ru   r   r   Ú
namedtuplerÛ   Úhashkeyr	   Ú	methodkeyr
   r   r   r   r   Ú<module>   s6    f%%J tÿ 