
    &gc                        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          Z G d	 d
ej        j                  Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z ej        dg d          Ze
j        ddfdZe
j        dfdZdS ) z0Extensible memoizing collections and decorators.)
Cache	FIFOCacheLFUCacheLRUCacheMRUCacheRRCache	TLRUCacheTTLCachecachedcachedmethodz5.5.1    N   )keysc                   $    e Zd ZdZd Zd Zd ZdS )_DefaultSize c                     dS Nr   r   self_s     E/var/www/api/venv/lib/python3.11/site-packages/cachetools/__init__.py__getitem__z_DefaultSize.__getitem__       q    c                     |dk    sJ d S r   r   )r   r   values      r   __setitem__z_DefaultSize.__setitem__"   s    zzzzzzr   c                     dS r   r   r   s     r   popz_DefaultSize.pop%   r   r   N)__name__
__module____qualname__	__slots__r   r   r   r   r   r   r   r      sF        I        r   r   c                       e Zd ZdZ e            Z e            ZddZd Z	d Z
d Zd Zd Zd	 Zd
 Zd ZddZefdZddZed             Zed             Zed             ZdS )r   z?Mutable mapping to serve as a simple cache or cache base class.Nc                     |r|| _         | j         t          j         urt                      | _        t                      | _        d| _        || _        d S Nr   )	getsizeofr   dict_Cache__size_Cache__data_Cache__currsize_Cache__maxsizer   maxsizer'   s      r   __init__zCache.__init__0   sH     	'&DN>00&&DKff r   c                 j    | j         j        dt          | j                  d| j        d| j        dS )N(z
, maxsize=z, currsize=))	__class__r    reprr*   r,   r+   r   s    r   __repr__zCache.__repr__9   s?    N###NNNOOO	
 	
r   c                 h    	 | j         |         S # t          $ r |                     |          cY S w xY wN)r*   KeyError__missing__r   keys     r   r   zCache.__getitem__A   sI    	);s## 	) 	) 	)##C(((((	)s    11c                 |   | j         }|                     |          }||k    rt          d          || j        vs| j        |         |k     r0| j        |z   |k    r"|                                  | j        |z   |k    "|| j        v r|| j        |         z
  }n|}|| j        |<   || j        |<   | xj        |z  c_        d S )Nzvalue too large)r,   r'   
ValueErrorr*   r)   r+   popitem)r   r<   r   r.   sizediffsizes         r   r   zCache.__setitem__G   s    .~~e$$'>>.///dk!!T[%5%<%</D(722 /D(722$+dk#..HHH CC8#r   c                 j    | j                             |          }| j        |= | xj        |z  c_        d S r8   )r)   r   r*   r+   )r   r<   r@   s      r   __delitem__zCache.__delitem__W   s3    {s##K4r   c                     || j         v S r8   )r*   r;   s     r   __contains__zCache.__contains__\   s    dk!!r   c                      t          |          r8   )r9   r;   s     r   r:   zCache.__missing___   s    smmr   c                 *    t          | j                  S r8   )iterr*   r5   s    r   __iter__zCache.__iter__b   s    DK   r   c                 *    t          | j                  S r8   )lenr*   r5   s    r   __len__zCache.__len__e   s    4;r   c                     || v r| |         S |S r8   r   )r   r<   defaults      r   getz	Cache.geth   s    $;;9Nr   c                 Z    || v r| |         }| |= n|| j         u rt          |          |}|S r8   )_Cache__markerr9   r   r<   rN   r   s       r   r   z	Cache.popn   s@    $;;IES		%%3--Er   c                 .    || v r	| |         }n|x| |<   }|S r8   r   rR   s       r   
setdefaultzCache.setdefaultx   s)    $;;IEE ''DIr   c                     | j         S )zThe maximum size of the cache.)r,   r5   s    r   r.   zCache.maxsize   s     ~r   c                     | j         S )zThe current size of the cache.)r+   r5   s    r   currsizezCache.currsize   s     r   c                     dS )z+Return the size of a cache element's value.r   r   )r   s    r   r'   zCache.getsizeof   s	     qr   r8   )r    r!   r"   __doc__objectrQ   r   r)   r/   r6   r   r   rC   rE   r:   rI   rL   rO   r   rT   propertyr.   rW   staticmethodr'   r   r   r   r   r   )   sN       IIvxxH\^^F! ! ! !
 
 
) ) )$ $ $      
" " "  ! ! !          (          X   X   \  r   r   c                   H    e Zd ZdZddZej        fdZej        fdZd ZdS )r   z/First In First Out (FIFO) cache implementation.Nc                 n    t                               | ||           t          j                    | _        d S r8   )r   r/   collectionsOrderedDict_FIFOCache__orderr-   s      r   r/   zFIFOCache.__init__   ,    tWi000".00r   c                      || ||           	 | j                             |           d S # t          $ r d | j         |<   Y d S w xY wr8   )ra   move_to_endr9   r   r<   r   cache_setitems       r   r   zFIFOCache.__setitem__   sg    dC'''	%L$$S))))) 	% 	% 	% $DL	%s   + AAc                 .     || |           | j         |= d S r8   )ra   r   r<   cache_delitems      r   rC   zFIFOCache.__delitem__   $    dC   Lr   c                     	 t          t          | j                            }||                     |          fS # t          $ r& t          dt          |           j        z            dw xY w)z9Remove and return the `(key, value)` pair first inserted.%s is emptyN)nextrH   ra   r   StopIterationr9   typer    r;   s     r   r?   zFIFOCache.popitem   t    	(tDL))**C #''  	J 	J 	J=4::+>>??TI	J	   !: 0A*r8   )	r    r!   r"   rY   r/   r   r   rC   r?   r   r   r   r   r      su        991 1 1 1 5:4E % % % % .3->    ( ( ( ( (r   r   c                   \    e Zd ZdZddZej        fdZej        fdZej        fdZd Z	dS )	r   z1Least Frequently Used (LFU) cache implementation.Nc                 n    t                               | ||           t          j                    | _        d S r8   )r   r/   r_   Counter_LFUCache__counterr-   s      r   r/   zLFUCache.__init__   s,    tWi000$,..r   c                 P     || |          }|| v r| j         |xx         dz  cc<   |S r   ru   r   r<   cache_getitemr   s       r   r   zLFUCache.__getitem__   s?    dC(($;;N31$r   c                 J     || ||           | j         |xx         dz  cc<   d S r   rw   re   s       r   r   zLFUCache.__setitem__   s:    dC'''sq r   c                 .     || |           | j         |= d S r8   rw   rh   s      r   rC   zLFUCache.__delitem__   s$    dC   N3r   c                     	 | j                             d          \  \  }}||                     |          fS # t          $ r& t	          dt          |           j        z            dw xY w)z@Remove and return the `(key, value)` pair least frequently used.r   rl   N)ru   most_commonr   r>   r9   ro   r    )r   r<   r   s      r   r?   zLFUCache.popitem   sx    	(.44Q77KXc1 #''  	J 	J 	J=4::+>>??TI	Js	   8 0A(r8   )
r    r!   r"   rY   r/   r   r   r   rC   r?   r   r   r   r   r      s        ;;/ / / / .3->     5:4E ! ! ! ! .3->        ( ( ( ( (r   r   c                   b    e Zd ZdZd	dZej        fdZej        fdZej        fdZd Z	d Z
dS )
r   z/Least Recently Used (LRU) cache implementation.Nc                 n    t                               | ||           t          j                    | _        d S r8   )r   r/   r_   r`   _LRUCache__orderr-   s      r   r/   zLRUCache.__init__   rb   r   c                 P     || |          }|| v r|                      |           |S r8   _LRUCache__updaterx   s       r   r   zLRUCache.__getitem__   3    dC(($;;MM#r   c                 J     || ||           |                      |           d S r8   r   re   s       r   r   zLRUCache.__setitem__   .    dC'''cr   c                 .     || |           | j         |= d S r8   )r   rh   s      r   rC   zLRUCache.__delitem__   rj   r   c                     	 t          t          | j                            }||                     |          fS # t          $ r& t          dt          |           j        z            dw xY w)z>Remove and return the `(key, value)` pair least recently used.rl   N)rm   rH   r   r   rn   r9   ro   r    r;   s     r   r?   zLRUCache.popitem   rp   rq   c                 r    	 | j                             |           d S # t          $ r d | j         |<   Y d S w xY wr8   )r   rd   r9   r;   s     r   __updatezLRUCache.__update   sS    	%L$$S))))) 	% 	% 	% $DL	%s    66r8   )r    r!   r"   rY   r/   r   r   r   rC   r?   r   r   r   r   r   r      s        991 1 1 1 .3->     5:4E     .3->    ( ( (% % % % %r   r   c                   b    e Zd ZdZd	dZej        fdZej        fdZej        fdZd Z	d Z
dS )
r   z.Most Recently Used (MRU) cache implementation.Nc                     ddl m}  |dt          d           t                              | ||           t          j                    | _        d S )Nr   )warnzMRUCache is deprecated   )
stacklevel)warningsr   DeprecationWarningr   r/   r_   r`   _MRUCache__order)r   r.   r'   r   s       r   r/   zMRUCache.__init__   sW    !!!!!!%'9aHHHHtWi000".00r   c                 P     || |          }|| v r|                      |           |S r8   _MRUCache__updaterx   s       r   r   zMRUCache.__getitem__   r   r   c                 J     || ||           |                      |           d S r8   r   re   s       r   r   zMRUCache.__setitem__   r   r   c                 .     || |           | j         |= d S r8   )r   rh   s      r   rC   zMRUCache.__delitem__  rj   r   c                     	 t          t          | j                            }||                     |          fS # t          $ r& t          dt          |           j        z            dw xY w)z=Remove and return the `(key, value)` pair most recently used.rl   N)rm   rH   r   r   rn   r9   ro   r    r;   s     r   r?   zMRUCache.popitem  rp   rq   c                 v    	 | j                             |d           d S # t          $ r d | j         |<   Y d S w xY w)NF)last)r   rd   r9   r;   s     r   r   zMRUCache.__update  sX    	%L$$Su$55555 	% 	% 	% $DL	%s     88r8   )r    r!   r"   rY   r/   r   r   r   rC   r?   r   r   r   r   r   r      s        881 1 1 1 .3->     5:4E     .3->    ( ( (% % % % %r   r   c                   D    e Zd ZdZej        dfdZed             Zd ZdS )r   z-Random Replacement (RR) cache implementation.Nc                 L    t                               | ||           || _        d S r8   )r   r/   _RRCache__choice)r   r.   choicer'   s       r   r/   zRRCache.__init__  s#    tWi000r   c                     | j         S )z(The `choice` function used by the cache.)r   r5   s    r   r   zRRCache.choice  s     }r   c                     	 |                      t          |                     }||                     |          fS # t          $ r& t	          dt          |           j        z            dw xY w)z/Remove and return a random `(key, value)` pair.rl   N)r   listr   
IndexErrorr9   ro   r    r;   s     r   r?   zRRCache.popitem$  st    	(--T

++C #''  	J 	J 	J=4::+>>??TI	Js	   "; 0A+)	r    r!   r"   rY   randomr   r/   r[   r?   r   r   r   r   r     s_        77'-}       X( ( ( ( (r   r   c                        e Zd ZdZ G d d          Zej        dfdZej	        fdZ	ej
        fdZ
e fd            Zed	             Zd
 Zd Zd Zd Z xZS )_TimedCachez0Base class for time aware cache implementations.c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )_TimedCache._Timerc                 "    || _         d| _        d S r&   )_Timer__timer_Timer__nesting)r   timers     r   r/   z_TimedCache._Timer.__init__2  s     DLDNNNr   c                 N    | j         dk    r|                                 S | j        S r&   r   r   _Timer__timer5   s    r   __call__z_TimedCache._Timer.__call__6  s%    ~""||~~%{"r   c                     | j         dk    r|                                 x| _        }n| j        }| xj         dz  c_         |S )Nr   r   r   r   times     r   	__enter__z_TimedCache._Timer.__enter__<  sA    ~""%)\\^^3dd{NNaNNKr   c                 &    | xj         dz  c_         d S r   )r   )r   excs     r   __exit__z_TimedCache._Timer.__exit__D  s    NNaNNNNr   c                 *    t           j        | j        ffS r8   )r   _Timerr   r5   s    r   
__reduce__z_TimedCache._Timer.__reduce__G  s    %66r   c                 ,    t          | j        |          S r8   )getattrr   )r   names     r   __getattr__z_TimedCache._Timer.__getattr__J  s    4<...r   N)	r    r!   r"   r/   r   r   r   r   r   r   r   r   r   r   1  sn        	 	 		# 	# 	#	 	 		  	  	 	7 	7 	7	/ 	/ 	/ 	/ 	/r   r   Nc                 |    t                               | ||           t                              |          | _        d S r8   )r   r/   r   r   _TimedCache__timer)r   r.   r   r'   s       r   r/   z_TimedCache.__init__M  s1    tWi000"))%00r   c                     | j         5 }|                     |            ||           cd d d            S # 1 swxY w Y   d S r8   r   expire)r   
cache_reprr   s      r   r6   z_TimedCache.__repr__Q  s    \ 	$TKK:d##	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$    599c                     | j         5 }|                     |            ||           cd d d            S # 1 swxY w Y   d S r8   r   )r   	cache_lenr   s      r   rL   z_TimedCache.__len__V  s    \ 	#TKK9T??	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#r   c                     | j         5 }|                     |           t                      j        cd d d            S # 1 swxY w Y   d S r8   )r   r   superrW   )r   r   r3   s     r   rW   z_TimedCache.currsize[  s    \ 	$TKK77#	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   (>AAc                     | j         S )z%The timer function used by the cache.)r   r5   s    r   r   z_TimedCache.timera  s     |r   c                     | j         5 }|                     |           t                              |            d d d            d S # 1 swxY w Y   d S r8   )r   r   r   clearr   s     r   r   z_TimedCache.clearf  s    \ 	TKKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   0AA	A	c                 n    | j         5  t          j        | g|R i |cd d d            S # 1 swxY w Y   d S r8   )r   r   rO   r   argskwargss      r   rO   z_TimedCache.getk      \ 	4 	49T3D333F33	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4   *..c                 n    | j         5  t          j        | g|R i |cd d d            S # 1 swxY w Y   d S r8   )r   r   r   r   s      r   r   z_TimedCache.popo  r   r   c                 n    | j         5  t          j        | g|R i |cd d d            S # 1 swxY w Y   d S r8   )r   r   rT   r   s      r   rT   z_TimedCache.setdefaults  s    \ 	; 	;#D:4:::6::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;r   )r    r!   r"   rY   r   r   	monotonicr/   r   r6   rL   r[   rW   r   r   rO   r   rT   __classcell__)r3   s   @r   r   r   .  s       ::/ / / / / / / /8 '+n 1 1 1 1 #(. $ $ $ $
 !& # # # #
 $ $ $ $ X$
   X  
4 4 44 4 4; ; ; ; ; ; ;r   r   c                       e Zd ZdZ G d d          Zej        dfdZd Ze	j
        fdZ
e	j        fdZe	j        fd	Zd
 Zd Zed             ZddZd Zd ZdS )r	   z@LRU Cache implementation with per-item time-to-live (TTL) value.c                   &    e Zd ZdZddZd Zd ZdS )TTLCache._Link)r<   expiresrm   prevNc                 "    || _         || _        d S r8   )r<   r   r   r<   r   s      r   r/   zTTLCache._Link.__init__~  s    DH"DLLLr   c                 6    t           j        | j        | j        ffS r8   )r	   _Linkr<   r   r5   s    r   r   zTTLCache._Link.__reduce__  s    >DHdl#;;;r   c                 >    | j         }| j        }||_         ||_        d S r8   )rm   r   )r   rm   r   s      r   unlinkzTTLCache._Link.unlink  s"    9D9DDIDIIIr   NN)r    r!   r"   r#   r/   r   r   r   r   r   r   r   {  sK        6		# 	# 	# 	#	< 	< 	<	 	 	 	 	r   r   Nc                     t                               | |||           t                                          x| _        }|x|_        |_        t          j                    | _	        || _
        d S r8   )r   r/   r	   r   _TTLCache__rootr   rm   r_   r`   _TTLCache__links_TTLCache__ttl)r   r.   ttlr   r'   roots         r   r/   zTTLCache.__init__  s[    T7E9===%^^---d $$	DI".00


r   c                 z    	 | j         |         }|                                 |j        k     S # t          $ r Y dS w xY wNF)r   r   r   r9   )r   r<   links      r   rE   zTTLCache.__contains__  N    	/<$D ::<<$,..  	 	 	55	   , 
::c                     	 |                      |          }|                                 |j        k      }n# t          $ r d}Y nw xY w|r|                     |          S  || |          S r   )_TTLCache__getlinkr   r   r9   r:   )r   r<   ry   r   expireds        r   r   zTTLCache.__getitem__      	8>>#&&D  ::<<$,67GG  	 	 	GGG	  	,##C((( =s+++   6 AAc                    | j         5 }|                     |            || ||           d d d            n# 1 swxY w Y   	 |                     |          }|                                 n4# t          $ r' t
                              |          x| j        |<   }Y nw xY w|| j        z   |_	        | j
        x|_        }|j        x|_        }|x|_        |_        d S r8   )r   r   r   r   r9   r	   r   r   r   r   r   rm   r   )r   r<   r   rf   r   r   r   r   s           r   r   zTTLCache.__setitem__  s%   Z 	,4KKM$U+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,	>>#&&D KKMMMM  	; 	; 	;'/~~c':'::DL	; dj(;&	D9$	D $$	DIIIs   #7;;A- -.BBc                      || |           | j                             |          }|                                 |                                 |j        k     st          |          d S r8   )r   r   r   r   r   r9   )r   r<   ri   r   s       r   rC   zTTLCache.__delitem__  s_    dC   |$$

t|++3-- ,+r   c              #      K   | j         }|j        }||ur@| j        5 }||j        k     r	|j        V  d d d            n# 1 swxY w Y   |j        }||u>d S d S r8   )r   rm   r   r   r<   )r   r   currr   s       r   rI   zTTLCache.__iter__  s      {y$ #t$,&&(NNN# # # # # # # # # # # # # # # 9D $s   =AAc                 P   | j                             |           | j        }|x|_        |_        t          | j                                        d           D ]%}||_        |j        x|_        }|x|_        |_        &|                     | 	                                           d S )Nc                     | j         S r8   r   )objs    r   <lambda>z'TTLCache.__setstate__.<locals>.<lambda>  s    #+ r   )r<   )
__dict__updater   r   rm   sortedr   valuesr   r   )r   stater   r   r   s        r   __setstate__zTTLCache.__setstate__  s    U###{ $$	DI4<..006M6MNNN 	) 	)DDI#y(DI$((DI		DJJLL!!!!!r   c                     | j         S )z,The time-to-live value of the cache's items.)r   r5   s    r   r   zTTLCache.ttl       zr   c                    ||                                  }| j        }|j        }| j        }g }t          j        }t          j        }||ur{||j        k     sp|                    |j	         || |j	                  f            || |j	                   ||j	        = |j        }|
                                 |}||ur||j        k     p|S )qRemove expired items from the cache and return an iterable of the
        expired `(key, value)` pairs.

        )r   r   rm   r   r   rC   r   r   appendr<   r   )	r   r   r   r   linksr   ri   ry   rm   s	            r   r   zTTLCache.expire  s    
 <::<<D{y))$t|(;(;NNDHmmD$(&C&CDEEEM$)))dh9DKKMMMD $t|(;(; r   c                 F   | j         5 }|                     |           	 t          t          | j                            }||                     |          fcddd           S # t          $ r& t          dt          |           j	        z            dw xY w# 1 swxY w Y   dS zmRemove and return the `(key, value)` pair least recently used that
        has not already expired.

        Nrl   )
r   r   rm   rH   r   r   rn   r9   ro   r    r   r   r<   s      r   r?   zTTLCache.popitem  s    
 Z 	,4KK,4--.. TXXc]]+	, 	, 	, 	, 	, 	, 	, 	, ! N N N}tDzz/BBCCMN		, 	, 	, 	, 	, 	, 	, 	, 	, 	,s(   B!A# B#0BBBBc                 T    | j         |         }| j                             |           |S r8   )r   rd   r   r<   r   s      r   	__getlinkzTTLCache.__getlink  )    S!  %%%r   r8   )r    r!   r"   rY   r   r   r   r/   rE   r   r   r   rC   rI   r   r[   r   r   r?   r   r   r   r   r	   r	   x  s-       JJ         ,0>T    / / / .3-> 
, 
, 
, 
, 5:4E % % % % .3->          " " "   X   ,, , ,    r   r	   c                       e Zd ZdZej         G d d                      Zej        dfdZ	d Z
ej        fdZej        fdZej        fd	Zd
 Zed             ZddZd Zd ZdS )r   z;Time aware Least Recently Used (TLRU) cache implementation.c                        e Zd ZdZddZd ZdS )TLRUCache._Itemr<   r   removedNc                 0    || _         || _        d| _        d S r   r  r   s      r   r/   zTLRUCache._Item.__init__  s    DH"DL DLLLr   c                 "    | j         |j         k     S r8   r   )r   others     r   __lt__zTLRUCache._Item.__lt__  s    <%-//r   r   )r    r!   r"   r#   r/   r  r   r   r   _Itemr    s<        1		! 	! 	! 	!
	0 	0 	0 	0 	0r   r  Nc                     t                               | |||           t          j                    | _        g | _        || _        d S r8   )r   r/   r_   r`   _TLRUCache__items_TLRUCache__order_TLRUCache__ttu)r   r.   ttur   r'   s        r   r/   zTLRUCache.__init__  s>    T7E9===".00


r   c                 z    	 | j         |         }|                                 |j        k     S # t          $ r Y dS w xY wr   )r  r   r   r9   )r   r<   items      r   rE   zTLRUCache.__contains__  r   r   c                     	 |                      |          }|                                 |j        k      }n# t          $ r d}Y nw xY w|r|                     |          S  || |          S r   )_TLRUCache__getitemr   r   r9   r:   )r   r<   ry   r  r   s        r   r   zTLRUCache.__getitem__  r   r   c                    | j         5 }|                     |||          }||k     s	 d d d            d S |                     |            || ||           d d d            n# 1 swxY w Y   	 d|                     |          _        n# t
          $ r Y nw xY wt                              ||          x| j        |<   }t          j
        | j        |           d S NT)r   r  r   r   r  r9   r   r  r  heapqheappushr  )r   r<   r   rf   r   r   r  s          r   r   zTLRUCache.__setitem__(  sB   Z 	,4jjeT22G7NN	, 	, 	, 	, 	, 	, 	, 	, KKM$U+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,	*.DNN3'' 	 	 	D	#,??3#@#@@SDt|T*****s(   A""A""A&)A&.B	 	
BBc                     | j         5 } || |           d d d            n# 1 swxY w Y   | j                            |          }d|_        ||j        k     st          |          d S r"  )r   r  r   r  r   r9   )r   r<   ri   r   r  s        r   rC   zTLRUCache.__delitem__8  s    Z 	%4M$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% |$$t|##3-- $#s   !%%c              #      K   | j         D ]<}| j        5 }||j        k     r|j        s	|j        V  d d d            n# 1 swxY w Y   =d S r8   )r  r   r   r  r<   )r   r   r   s      r   rI   zTLRUCache.__iter__A  s      L 	# 	#D #t$,&&t|&(NNN# # # # # # # # # # # # # # #	# 	#s   ;?	?	c                     | j         S )z1The local time-to-use function used by the cache.)r  r5   s    r   r  zTLRUCache.ttuH  r  r   c                 T   ||                                  }| j        }| j        }t          |          t          |          dz  k    r'd |D             x| _        }t	          j        |           g }t          j        }t          j        }|r|d         j	        s||d         j
        k     st	          j        |          }|j	        sD|                    |j         || |j                  f            || |j                   ||j        = |r|d         j	        n||d         j
        k     |S )r  Nr   c                      g | ]}|j         	|S r   )r  ).0r  s     r   
<listcomp>z$TLRUCache.expire.<locals>.<listcomp>X  s    #O#O#OT$,#OD#O#O#Or   r   )r   r  r  rK   r#  heapifyr   rC   r   r  r   heappopr  r<   )r   r   itemsorderr   ri   ry   r  s           r   r   zTLRUCache.expireM  s2   
 <::<<Du::E

Q&&#O#OU#O#O#OODL5M%   )) 	$q) 	$$q9I2I2I=''D< $--dh*G*GHIIIdDH---$(O  	$q) 	$$q9I2I2I r   c                 6   | j         5 }|                     |           	 t          t          | j                            }||                     |          fcddd           S # t          $ r t          d| j        j	        z            dw xY w# 1 swxY w Y   dS r  )
r   r   rm   rH   r  r   rn   r9   r3   r    r	  s      r   r?   zTLRUCache.popiteme  s    
 Z 	,4KK,4--.. TXXc]]+	, 	, 	, 	, 	, 	, 	, 	, ! R R R}t~/FFGGTQR		, 	, 	, 	, 	, 	, 	, 	, 	, 	,s(   B!A# B#(BBBBc                 T    | j         |         }| j                             |           |S r8   )r  rd   r  s      r   	__getitemzTLRUCache.__getitems  r  r   r8   )r    r!   r"   rY   	functoolstotal_orderingr  r   r   r/   rE   r   r   r   rC   rI   r[   r  r   r?   r   r   r   r   r   r     s,       EE	0 	0 	0 	0 	0 	0 	0 	0 ,0>T    / / / .3-> 
, 
, 
, 
, 5:4E + + + +  .3->        # # #   X   0, , ,    r   r   	CacheInfo)hitsmissesr.   rW   Fc                       fd}|S )z_Decorator to wrap a function with a memoizing callable that saves
    results in a cache.

    c                     rdxt          t                    rfdn-t          t          j        j                  rfdnfd fd}fd}}nX
 	fd}fd}}nC 	
fd	}
fd
}
fd}n*	 fd}d }n
 	fd}fd}n 	
fd}
fd}d }|_        	|_        
|_        ||_        ||_	        t          j        |           S )Nr   c                  <    t           j         j                  S r8   )
_CacheInfor.   rW   cacher6  r7  s   r   getinfoz*cached.<locals>.decorator.<locals>.getinfo  s    %dFEM5>RRRr   c                  B    t          d t                               S r8   )r;  rK   r<  s   r   r>  z*cached.<locals>.decorator.<locals>.getinfo  s    %dFD#e**EEEr   c                  (    t           dd          S r&   )r;  r6  r7  s   r   r>  z*cached.<locals>.decorator.<locals>.getinfo  s    %dFAq999r   c                      dz   | i |S r   r   )r   r   funcr7  s     r   wrapperz*cached.<locals>.decorator.<locals>.wrapper  s!    aKF40000r   c                      dx d S r&   r   rA  s   r   cache_clearz.cached.<locals>.decorator.<locals>.cache_clear  s    $%%D666r   c                       | i |}	 |         }dz  |S # t           $ r 	dz  	Y nw xY w | i |}	 ||<   n# t          $ r Y nw xY w|S r   r9   r>   )
r   r   kresultvr=  rC  r6  r<   r7  s
        r   rD  z*cached.<locals>.decorator.<locals>.wrapper  s    T,V,,A$!&q	%# $ $ $!$d-f--A#$a%   Hs    ,,> 
A
Ac                  8                                       dxd S r&   r   r<  s   r   rF  z.cached.<locals>.decorator.<locals>.cache_clear  s    KKMMM$%%D666r   c                  b    | i |}	 	5  |         }dz  |cd d d            S # 1 swxY w Y   n/# t           $ r" 	5  
dz  
d d d            n# 1 swxY w Y   Y nw xY w | i |}	 	5                      ||          cd d d            S # 1 swxY w Y   d S # t          $ r |cY S w xY wr   r9   rT   r>   )r   r   rI  rJ  rK  r=  rC  r6  r<   lockr7  s        r   rD  z*cached.<locals>.decorator.<locals>.wrapper  s   T,V,,A(! * *%*1XF AID#)* * * * * * * * * * * * * * * * * $ ( ( (! ( ("aKF( ( ( ( ( ( ( ( ( ( ( ( ( ( (( d-f--A!! : :#(#3#3Aq#9#9: : : : : : : : : : : : : : : : : :% ! ! ! !s   5 )5 -5 -5 A!AA!A	A!A	A! A!-B /BB BB BB B.-B.c                  n    5                                     dxd d d            d S # 1 swxY w Y   d S r&   rM  )r=  r6  rP  r7  s   r   rF  z.cached.<locals>.decorator.<locals>.cache_clear  s     * *())v* * * * * * * * * * * * * * * * * *s   *..c                  P    5                cd d d            S # 1 swxY w Y   d S r8   r   )r>  rP  s   r   
cache_infoz-cached.<locals>.decorator.<locals>.cache_info  sv     ) )&wyy) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   
c                       | i |S r8   r   )r   r   rC  s     r   rD  z*cached.<locals>.decorator.<locals>.wrapper  s    40000r   c                      d S r8   r   r   r   r   rF  z.cached.<locals>.decorator.<locals>.cache_clear  s    Dr   c                       | i |}	 |         S # t           $ r Y nw xY w | i |}	 ||<   n# t          $ r Y nw xY w|S r8   rH  )r   r   rI  rK  r=  rC  r<   s       r   rD  z*cached.<locals>.decorator.<locals>.wrapper  s    T,V,,A$Qx#   d-f--A#$a%   Hs    
  2 
??c                  0                                       d S r8   rM  )r=  s   r   rF  z.cached.<locals>.decorator.<locals>.cache_clear  s    KKMMMMMr   c                      | i |}	 5  |         cd d d            S # 1 swxY w Y   n# t           $ r Y nw xY w | i |}	 5                      ||          cd d d            S # 1 swxY w Y   d S # t          $ r |cY S w xY wr8   rO  )r   r   rI  rK  r=  rC  r<   rP  s       r   rD  z*cached.<locals>.decorator.<locals>.wrapper  sb   T,V,,A! , ,#(8, , , , , , , , , , , , , , , , ,#   d-f--A!! : :#(#3#3Aq#9#9: : : : : : : : : : : : : : : : : :% ! ! ! !sZ   . ". &. &. 
;;A9 	A,A9 ,A00A9 3A04A9 9BBc                  f    5                                     d d d            d S # 1 swxY w Y   d S r8   rM  )r=  rP  s   r   rF  z.cached.<locals>.decorator.<locals>.cache_clear  sz     & && & & & & & & & & & & & & & & & & &s   &**)
isinstancer   r_   abcMappingr=  	cache_key
cache_lockrF  rS  r3  update_wrapper)rC  rD  rF  rS  r>  r6  r7  r=  infor<   rP  s   `   @@@r   	decoratorzcached.<locals>.decorator  s    J	D6%'' :S S S S S S S S E;?#:;; 
:F F F F F F F F: : : : : : }1 1 1 1 1 1
& & & & & & %

         & & & & & & &
 %

! ! ! ! ! ! ! ! ! !&* * * * * * * *) ) ) ) ) ) )
 }1 1 1 1 1          " " " " " "
! ! ! ! ! ! ! !& & & & & & J!)''666r   r   )r=  r<   rP  r`  ra  s   ```` r   r
   r
   ~  s?    S7 S7 S7 S7 S7 S7 S7 S7j r   c                       fd}|S )zoDecorator to wrap a class or instance method with a memoizing
    callable that saves results in a cache.

    c                       fd}fd}n fd}fd}|_         |_        |_        ||_        t	          j        |           S )Nc                      |           }| | g|R i |S  | g|R i |}	 ||         S # t           $ r Y nw xY w | g|R i |}	 |||<   n# t          $ r Y nw xY w|S r8   rH  )	r   r   r   crI  rK  r=  r<   methods	         r   rD  z0cachedmethod.<locals>.decorator.<locals>.wrapper%  s    E$KK9!6$8888888C.t...v..Q4K   DF41$111&11AaDD!   Ds   0 
==A 
A A c                 N     |           }||                                  d S d S r8   rM  )r   re  r=  s     r   r   z.cachedmethod.<locals>.decorator.<locals>.clear5  s-    E$KK=GGIIIII !=r   c                 |    |           }| 	| g|R i |S  | g|R i |}	  |           5  ||         cd d d            S # 1 swxY w Y   n# t           $ r Y nw xY w 	| g|R i |}	  |           5  |                    ||          cd d d            S # 1 swxY w Y   d S # t          $ r |cY S w xY wr8   rO  )
r   r   r   re  rI  rK  r=  r<   rP  rf  s
         r   rD  z0cachedmethod.<locals>.decorator.<locals>.wrapper<  s   E$KK9!6$8888888C.t...v..d $ $ t$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $   DF41$111&11d 2 2 ||Aq112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2!   HHHsi   A AA AA AA 
A! A!1B, <BB, B##B, &B#'B, ,B;:B;c                      |           }|: |           5  |                                  d d d            d S # 1 swxY w Y   d S d S r8   rM  )r   re  r=  rP  s     r   r   z.cachedmethod.<locals>.decorator.<locals>.clearN  s    E$KK=d " "			" " " " " " " " " " " " " " " " " " !=s   <A A )r=  r]  r^  rF  r3  r_  )rf  rD  r   r=  r<   rP  s   `  r   ra  zcachedmethod.<locals>.decorator"  s    <                   $" " " " " " !#'888r   r   )r=  r<   rP  ra  s   ``` r   r   r     s1    79 79 79 79 79 79 79r r   )rY   __all____version__r_   collections.abcr3  r#  r   r    r   r   r[  MutableMappingr   r   r   r   r   r   r   r	   r   
namedtupler;  hashkeyr
   	methodkeyr   r   r   r   <module>rr     s   6 6                      
 
 
 
 
 
 
 
c c c c cKO* c c cL( ( ( ( ( ( ( (8( ( ( ( (u ( ( (>"% "% "% "% "%u "% "% "%J&% &% &% &% &%u &% &% &%R( ( ( ( (e ( ( (,G; G; G; G; G;% G; G; G;TD D D D D{ D D DNw w w w w w w wt $[#::: 

 lE [ [ [ [| !N ? ? ? ? ? ?r   