o
    ýÞh+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   ó   dS ©Nr   r   ©ÚselfÚ_r   r   úS/var/www/html/premium_crap/venv/lib/python3.10/site-packages/cachetools/__init__.pyÚ__getitem__    ó   z_DefaultSize.__getitem__c                 C   s   |dksJ ‚d S r   r   )r   r   Úvaluer   r   r   Ú__setitem__#   s   z_DefaultSize.__setitem__c                 C   r   r   r   r   r   r   r   Úpop&   r   z_DefaultSize.popN)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   r   r   r   r   r   r   r      s
    r   c                   @   sª   e Zd ZdZeƒ Zeƒ Zd!dd„Zdd„ Z	dd„ Z
d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd!dd„Zefdd„Zd!dd„Zedd„ ƒZedd„ ƒZedd „ ƒZdS )"r   z?Mutable mapping to serve as a simple cache or cache base class.Nc                 C   s6   |r|| _ | j tj urtƒ | _tƒ | _d| _|| _d S ©Nr   )Ú	getsizeofr   ÚdictÚ_Cache__sizeÚ_Cache__dataÚ_Cache__currsizeÚ_Cache__maxsize©r   Úmaxsizer!   r   r   r   Ú__init__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   r2   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   r2   r5   r   r   r   Ú__delitem__X   s   zCache.__delitem__c                 C   s
   || j v S r.   )r$   r1   r   r   r   Ú__contains__]   ó   
zCache.__contains__c                 C   s   t |ƒ‚r.   )r/   r1   r   r   r   r0   `   s   zCache.__missing__c                 C   ó
   t | jƒS r.   )Úiterr$   r,   r   r   r   Ú__iter__c   r9   zCache.__iter__c                 C   r:   r.   )Úlenr$   r,   r   r   r   Ú__len__f   r9   zCache.__len__c                 C   s   || v r| | S |S r.   r   )r   r2   Údefaultr   r   r   Úgeti   s   z	Cache.getc                 C   s4   || v r| | }| |= |S || j u rt|ƒ‚|}|S r.   )Ú_Cache__markerr/   ©r   r2   r?   r   r   r   r   r   o   s   
üz	Cache.popc                 C   s$   || v r
| | }|S | | |< }|S r.   r   rB   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   rD   )zThe current size of the cache.)r%   r,   r   r   r   Úcurrsize…   rE   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__ÚobjectrA   r   r#   r)   r-   r   r   r7   r8   r0   r<   r>   r@   r   rC   Úpropertyr(   rF   Ú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.   )rN   Úmove_to_endr/   ©r   r2   r   Ú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/   Útyper   r   r1   r   r   r   r4   ¢   ó   ÿzFIFOCache.popitemr.   )	r   r   r   rG   r)   r   r   r7   r4   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   rK   r.   )r   r)   rL   ÚCounterÚ_LFUCache__counterr'   r   r   r   r)   ¯   rO   zLFUCache.__init__c                 C   s(   || |ƒ}|| v r| j |  d8  < |S r   ©r^   ©r   r2   Úcache_getitemr   r   r   r   r   ³   s   
zLFUCache.__getitem__c                 C   s"   || ||ƒ | j |  d8  < d S r   r_   rQ   r   r   r   r   ¹   s   zLFUCache.__setitem__c                 C   rS   r.   r_   rT   r   r   r   r7   ½   rV   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   rX   N)r^   Úmost_commonr3   r/   r[   r   r   )r   r2   r   r   r   r   r4   Á   s   ÿzLFUCache.popitemr.   )
r   r   r   rG   r)   r   r   r   r7   r4   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   rK   r.   )r   r)   rL   rM   Ú_LRUCache__orderr'   r   r   r   r)   Î   rO   zLRUCache.__init__c                 C   ó    || |ƒ}|| v r|   |¡ |S r.   ©Ú_LRUCache__updater`   r   r   r   r   Ò   ó   

zLRUCache.__getitem__c                 C   ó   || ||ƒ |   |¡ d S r.   rf   rQ   r   r   r   r   Ø   ó   zLRUCache.__setitem__c                 C   rS   r.   )rd   rT   r   r   r   r7   Ü   rV   zLRUCache.__delitem__c                 C   rW   )z>Remove and return the `(key, value)` pair least recently used.rX   N)rY   r;   rd   rZ   r/   r[   r   r   r1   r   r   r   r4   à   r\   zLRUCache.popitemc                 C   s2   z	| j  |¡ W d S  ty   d | j |< Y d S w r.   )rd   rP   r/   r1   r   r   r   Ú__updateé   s
   ÿzLRUCache.__updater.   )r   r   r   rG   r)   r   r   r   r7   r4   rg   r   r   r   r   r   Ë   s    
	r   c                   @   rc   )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)Úwarningsrl   ÚDeprecationWarningr   r)   rL   rM   Ú_MRUCache__order)r   r(   r!   rl   r   r   r   r)   ó   s   zMRUCache.__init__c                 C   re   r.   ©Ú_MRUCache__updater`   r   r   r   r   û   rh   zMRUCache.__getitem__c                 C   ri   r.   rr   rQ   r   r   r   r     rj   zMRUCache.__setitem__c                 C   rS   r.   )rq   rT   r   r   r   r7     rV   zMRUCache.__delitem__c                 C   rW   )z=Remove and return the `(key, value)` pair most recently used.rX   N)rY   r;   rq   rZ   r/   r[   r   r   r1   r   r   r   r4   	  r\   zMRUCache.popitemc                 C   s6   z| j j|dd� W d S  ty   d | j |< Y d S w )NF)Úlast)rq   rP   r/   r1   r   r   r   rk     s
   ÿzMRUCache.__updater.   )r   r   r   rG   r)   r   r   r   r7   r4   rs   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   rD   )z(The `choice` function used by the cache.)ru   r,   r   r   r   rv      rE   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.rX   N)ru   ÚlistÚ
IndexErrorr/   r[   r   r   r1   r   r   r   r4   %  r\   zRRCache.popitem)	r   r   r   rG   Úrandomrv   r)   rI   r4   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  ó   
z_TimedCache._Timer.__init__c                 C   s   | j dkr	|  ¡ S | jS r    ©r|   r{   Ú_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   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__E  ó   z_TimedCache._Timer.__exit__c                 C   s   t j| jffS r.   )rz   Ú_Timerr{   r,   r   r   r   Ú
__reduce__H  ó   z_TimedCache._Timer.__reduce__c                 C   s   t | j|ƒS r.   )Úgetattrr{   )r   Únamer   r   r   Ú__getattr__K  ó   z_TimedCache._Timer.__getattr__N)	r   r   r   r)   r�   r„   r†   r‰   r�   r   r   r   r   rˆ   2  s    rˆ   Nc                 C   s   t  | ||¡ t |¡| _d S r.   )r   r)   rz   rˆ   Ú_TimedCache__timer)r   r(   r}   r!   r   r   r   r)   N  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-   R  ó   
$þz_TimedCache.__repr__c                 C   r�   r.   r‘   )r   Ú	cache_lenrƒ   r   r   r   r>   W  r”   z_TimedCache.__len__c                    s<   | j �}|  |¡ tƒ jW  d   ƒ S 1 sw   Y  d S r.   )r�   r’   ÚsuperrF   r‚   ©r*   r   r   rF   \  s   
$þz_TimedCache.currsizec                 C   rD   )z%The timer function used by the cache.)r�   r,   r   r   r   r}   b  rE   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˜   g  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@   l  ó   $ÿz_TimedCache.getc                 O   r™   r.   )r�   r   r   rš   r   r   r   r   p  r�   z_TimedCache.popc                 O   r™   r.   )r�   r   rC   rš   r   r   r   rC   t  r�   z_TimedCache.setdefault)r   r   r   rG   rˆ   rƒ   Ú	monotonicr)   r   r-   r>   rI   rF   r}   r˜   r@   r   rC   Ú__classcell__r   r   r—   r   rz   /  s    
rz   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)r2   ÚexpiresrY   ÚprevNc                 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   Ú_Linkr2   r    r,   r   r   r   r‰   ƒ  r‡   zTTLCache._Link.__reduce__c                 C   s   | j }| j}||_ ||_d S r.   )rY   r¡   )r   rY   r¡   r   r   r   Úunlink†  s   
zTTLCache._Link.unlink©NN)r   r   r   r   r)   r‰   r¤   r   r   r   r   r£   |  s
    
r£   Nc                 C   s>   t  | |||¡ t ¡  | _}| |_|_t ¡ | _	|| _
d S r.   )rz   r)   r   r£   Ú_TTLCache__rootr¡   rY   rL   rM   Ú_TTLCache__linksÚ_TTLCache__ttl)r   r(   Úttlr}   r!   Úrootr   r   r   r)   Œ  s
   

zTTLCache.__init__c                 C   ó2   z| j | }W n
 ty   Y dS w |  ¡ |jk S ©NF)r§   r/   r}   r    )r   r2   Úlinkr   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   ra   r­   Úexpiredr   r   r   r   ›  ó   ÿ

zTTLCache.__getitem__c                 C   s®   | j �}|  |¡ || ||ƒ W d   ƒ n1 sw   Y  z|  |¡}W n ty8   t |¡ | j|< }Y nw | ¡  || j |_	| j
 |_}|j |_}| |_|_d S r.   )r}   r’   r°   r/   r   r£   r§   r¤   r¨   r    r¦   rY   r¡   )r   r2   r   rR   rƒ   r­   rª   r¡   r   r   r   r   §  s   
þÿzTTLCache.__setitem__c                 C   s8   || |ƒ | j  |¡}| ¡  |  ¡ |jk st|ƒ‚d S r.   )r§   r   r¤   r}   r    r/   )r   r2   rU   r­   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   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   rD   r.   ©r    )Úobjr   r   r   Ú<lambda>Ë  s    z'TTLCache.__setstate__.<locals>.<lambda>)r2   )
Ú__dict__Úupdater¦   r¡   rY   Úsortedr§   Úvaluesr’   r}   )r   Ústaterª   r­   r¡   r   r   r   Ú__setstate__Ç  s   zTTLCache.__setstate__c                 C   rD   )z,The time-to-live value of the cache's items.)r¨   r,   r   r   r   r©   Ñ  rE   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    Úappendr2   r¤   )	r   rƒ   rª   r³   Úlinksr±   rU   ra   rY   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.

        rX   N)
r}   r’   rY   r;   r§   rZ   r/   r[   r   r   ©r   rƒ   r2   r   r   r   r4   ì  s   
ÿ$ùzTTLCache.popitemc                 C   ó   | j | }| j  |¡ |S r.   )r§   rP   ©r   r2   r   r   r   r   Ú	__getlinkú  ó   
zTTLCache.__getlinkr.   )r   r   r   rG   r£   rƒ   rž   r)   r8   r   r   r   r7   r<   r¼   rI   r©   r’   r4   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©r2   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.   )rz   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Ë   r/   r}   r    )r   r2   Úitemr   r   r   r8     r®   zTLRUCache.__contains__c                 C   r¯   r¬   )Ú_TLRUCache__getitemr/   r}   r    r0   )r   r2   ra   rÏ   r±   r   r   r   r     r²   zTLRUCache.__getitem__c                 C   s°   | j �'}|  |||¡}||k s	 W d   ƒ d S |  |¡ || ||ƒ W d   ƒ n1 s-w   Y  zd|  |¡_W n	 tyC   Y nw t ||¡ | j|< }t	 
| j|¡ d S ©NT)r}   rÍ   r’   rÐ   rÇ   r/   r   rÊ   rË   ÚheapqÚheappushrÌ   )r   r2   r   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   9  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   r³   rƒ   r   r   r   r<   B  s   €
€þ€þzTLRUCache.__iter__c                 C   rD   )z1The local time-to-use function used by the cache.)rÍ   r,   r   r   r   rÎ   I  rE   zTLRUCache.ttuc                 C   sÖ   |du r|   ¡ }| j}| j}t|ƒt|ƒd kr'dd„ |D ƒ | _}t |¡ g }tj}tj}|ri|d j	s=||d j
k sit |¡}|j	s[| |j|| |jƒf¡ || |jƒ ||j= |ri|d j	s=||d j
k r=|S )r½   Nrm   c                 S   s   g | ]}|j s|‘qS r   )rÇ   )Ú.0rÏ   r   r   r   Ú
<listcomp>Y  s    z$TLRUCache.expire.<locals>.<listcomp>r   )r}   rË   rÌ   r=   rÒ   Úheapifyr   r7   r   rÇ   r    Úheappopr¾   r2   )r   rƒ   ÚitemsÚorderr±   rU   ra   rÏ   r   r   r   r’   N  s$   

ûzTLRUCache.expirec              	   C   sv   | j �.}|  |¡ z	tt| jƒƒ}W n ty"   td| jj ƒd‚w ||  	|¡fW  d  ƒ S 1 s4w   Y  dS rÀ   )
r}   r’   rY   r;   rË   rZ   r/   r*   r   r   rÁ   r   r   r   r4   f  s   
ÿ$ùzTLRUCache.popitemc                 C   rÂ   r.   )rË   rP   rÃ   r   r   r   Ú	__getitemt  rÅ   zTLRUCache.__getitemr.   )r   r   r   rG   Ú	functoolsÚtotal_orderingrÊ   rƒ   rž   r)   r8   r   r   r   r7   r<   rI   rÎ   r’   r4   rÐ   r   r   r   r   r      s    	

r   Ú	CacheInfo)ÚhitsÚmissesr(   rF   Fc                    s   ‡ ‡‡‡fdd„}|S )z_Decorator to wrap a function with a memoizing callable that saves
    results in a cache.

    c                    s€   ˆr)t ˆ tƒr‡ fdd„}nt ˆ tjjƒr‡ fdd„}ndd„ }t| ˆ ˆˆ|ƒ}nt| ˆ ˆˆd ƒ}ˆ |_ˆ|_ˆ|_t	 
|| ¡S )Nc                    s   t | |ˆ jˆ jƒS r.   )Ú
_CacheInfor(   rF   ©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Š   )Ú
isinstancer   rL   ÚabcÚMappingr   rã   Ú	cache_keyÚ
cache_lockrÛ   Úupdate_wrapper)Úfuncrä   Úwrapper©rã   Úinfor2   Úlockr   r   Ú	decorator…  s   
zcached.<locals>.decoratorr   )rã   r2   rï   rî   rð   r   rí   r   r	     s   r	   c                    s   ‡ ‡‡fdd„}|S )zoDecorator to wrap a class or instance method with a memoizing
    callable that saves results in a cache.

    c                    sj   ˆd u r‡‡‡ fdd„}‡fdd„}n‡‡‡‡ fdd„}‡‡fdd„}ˆ|_ ˆ|_ˆ|_||_t |ˆ ¡S )Nc                    s”   ˆ | ƒ}|d u rˆ| g|¢R i |¤ŽS ˆ| g|¢R i |¤Ž}z|| W S  t y,   Y nw ˆ| g|¢R i |¤Ž}z|||< W |S  tyI   Y |S w r.   )r/   r3   ©r   r›   rœ   ÚcÚkÚv)rã   r2   Ú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/   rC   r3   rñ   )rã   r2   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   r˜   Õ  s   

"ÿÿ)rã   rè   ré   Úcache_clearrÛ   rê   )rõ   rì   r˜   ©rã   r2   rï   )rõ   r   rð   ©  s   zcachedmethod.<locals>.decoratorr   )rã   r2   rï   rð   r   rù   r   r
   £  s   9r
   )rG   Ú__all__Ú__version__rL   Úcollections.abcrÛ   rÒ   ry   rƒ   Ú r   Ú_decoratorsr   r   ræ   ÚMutableMappingr   r   r   r   r   r   rz   r   r   Ú
namedtuplerà   Úhashkeyr	   Ú	methodkeyr
   r   r   r   r   Ú<module>   s6    f%)J zÿ$