
    KiBZ                        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 ej,                  dg d      Ze
j0                  dddfdZe
j4                  dddfdZy)z0Extensible memoizing collections and decorators.)	Cache	FIFOCacheLFUCacheLRUCacheRRCache	TLRUCacheTTLCachecachedcachedmethodz7.0.5    N   )keysc                   ,    e Zd ZdZdZd Zd Zd Zd Zy)_DefaultSizezAA minimal "fake" dict that returns a constant size 1 for any key. c                      yNr   r   self_keys     _/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/cachetools/__init__.py__getitem__z_DefaultSize.__getitem__#           c                      y Nr   )r   r   _values      r   __setitem__z_DefaultSize.__setitem__&       r   c                      yr   r   r   s     r   popz_DefaultSize.pop)   r   r   c                      y r   r   r   s    r   clearz_DefaultSize.clear,   r   r   N)	__name__
__module____qualname____doc__	__slots__r   r   r    r#   r   r   r   r   r      s    K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d Zed        Zed        Zed        Zy)r   z?Mutable mapping to serve as a simple cache or cache base class.Nc                     |r|| _         | j                   t        j                   urt               | _        t               | _        d| _        || _        y Nr   )	getsizeofr   dict_Cache__size_Cache__data_Cache__currsize_Cache__maxsizer   maxsizer,   s      r   __init__zCache.__init__7   s<    &DN>>0&DKf r   c                     t        |       j                  dt        | j                        d| j                  d| j
                  dS )N(z
, maxsize=z, currsize=))typer$   reprr/   r1   r0   r"   s    r   __repr__zCache.__repr__@   s3    JNNOO	
 	
r   c                 b    	 | j                   |   S # t        $ r | j                  |      cY S w xY wr   )r/   KeyError__missing__r   keys     r   r   zCache.__getitem__H   s6    	);;s## 	)##C((	)s    ..c                    | j                   }| j                  |      }||kD  rt        d      || j                  vs| j                  |   |k  r5| j
                  |z   |kD  r#| j                          | j
                  |z   |kD  r#|| j                  v r|| j                  |   z
  }n|}|| j                  |<   || j                  |<   | xj
                  |z  c_        y )Nzvalue too large)r1   r,   
ValueErrorr/   r.   r0   popitem)r   r?   valuer3   sizediffsizes         r   r   zCache.__setitem__N   s    ..~~e$'>.//dkk!T[[%5%<//D(72 //D(72$++dkk#..HH CC8#r   c                 ~    | j                   j                  |      }| j                  |= | xj                  |z  c_        y r   )r.   r    r/   r0   )r   r?   rD   s      r   __delitem__zCache.__delitem__^   s.    {{s#KK4r   c                     || j                   v S r   )r/   r>   s     r   __contains__zCache.__contains__c   s    dkk!!r   c                     t        |      r   )r<   r>   s     r   r=   zCache.__missing__f   s    smr   c                 ,    t        | j                        S r   )iterr/   r"   s    r   __iter__zCache.__iter__i   s    DKK  r   c                 ,    t        | j                        S r   )lenr/   r"   s    r   __len__zCache.__len__l   s    4;;r   c                     || v r| |   S |S r   r   )r   r?   defaults      r   getz	Cache.getu   s    $;9Nr   c                 X    || v r
| |   }| |= |S || j                   u rt        |      |}|S r   )_Cache__markerr<   r   r?   rR   rC   s       r   r    z	Cache.pop{   sB    $;IES	
 	 %3-Er   c                 *    || v r| |   }|S |x| |<   }|S r   r   rV   s       r   
setdefaultzCache.setdefault   s.    $;IE  !('DIr   c                 z    | j                   j                          | j                  j                          d| _        y r+   )r/   r#   r.   r0   r"   s    r   r#   zCache.clear   s)    r   c                     | j                   S )zThe maximum size of the cache.)r1   r"   s    r   r3   zCache.maxsize   s     ~~r   c                     | j                   S )zThe current size of the cache.)r0   r"   s    r   currsizezCache.currsize   s     r   c                      y)z+Return the size of a cache element's value.r   r   )rC   s    r   r,   zCache.getsizeof   s     r   r   )r$   r%   r&   r'   objectrU   r   r.   r4   r:   r   r   rG   rI   r=   rM   rP   rS   r    rX   r#   propertyr3   r\   staticmethodr,   r   r   r   r   r   0   s    IxH^F!
)$  
"!   ( 
      r   r   c                   `    e Zd ZdZddZej                  fdZej                  fdZd Zd Z	y)	r   z/First In First Out (FIFO) cache implementation.Nc                 d    t         j                  | ||       t        j                         | _        y r   )r   r4   collectionsOrderedDict_FIFOCache__orderr2   s      r   r4   zFIFOCache.__init__   "    tWi0"..0r   c                      || ||       || j                   v r| j                   j                  |       y d | j                   |<   y r   )re   move_to_endr   r?   rC   cache_setitems       r   r   zFIFOCache.__setitem__   s:    dC'$,,LL$$S) $DLLr   c                 0     || |       | j                   |= y r   )re   r   r?   cache_delitems      r   rG   zFIFOCache.__delitem__       dC LLr   c                     	 t        t        | j                              }|| 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)nextrL   re   r    StopIterationr<   r8   r$   r>   s     r   rB   zFIFOCache.popitem   ^    	(tDLL)*C #''  	J=4:+>+>>?TI	J	   3 ,Ac                 b    t         j                  |        | j                  j                          y r   )r   r#   re   r"   s    r   r#   zFIFOCache.clear       Dr   r   )
r$   r%   r&   r'   r4   r   r   rG   rB   r#   r   r   r   r   r      s4    91 5:4E4E % .3->-> (r   r   c                       e Zd ZdZ G d 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 Zy)r   z1Least Frequently Used (LFU) cache implementation.c                       e Zd ZdZd Zd Zy)LFUCache._Link)countr   rq   prevc                 0    || _         t               | _        y r   )rz   setr   )r   rz   s     r   r4   zLFUCache._Link.__init__   s    DJDIr   c                 P    | j                   }| j                  }||_         ||_        y r   rq   r{   r   rq   r{   s      r   unlinkzLFUCache._Link.unlink   "    99D99DDIDIr   N)r$   r%   r&   r(   r4   r   r   r   r   _Linkry      s    5			r   r   Nc                     t         j                  | ||       t        j                  d      x| _        }|x|_        |_        i | _        y r+   )r   r4   r   r   _LFUCache__rootr{   rq   _LFUCache__links)r   r3   r,   roots       r   r4   zLFUCache.__init__   s<    tWi0%^^A..d $$	DIr   c                 B     || |      }|| v r| j                  |       |S r   )_LFUCache__touchr   r?   cache_getitemrC   s       r   r   zLFUCache.__getitem__   &    dC($;LLr   c                     || ||       || j                   v r| j                  |       y | j                  }|j                  }|j                  dk7  rEt
        j                  d      }|j                  |_        |x|_        |j                  _        ||_        |j                  j                  |       || j                   |<   y r   )
r   r   r   rq   rz   r   r   r{   r   add)r   r?   rC   rj   r   links         r   r   zLFUCache.__setitem__   s    dC'$,,LL{{yy::?>>!$D		DI)--DI		DI		c Sr   c                      || |       | j                   j                  |      }|j                  j                  |       |j                  s|j	                          y y r   )r   r    r   remover   r   r?   rm   r   s       r   rG   zLFUCache.__delitem__   sG    dC ||$		yyKKM r   c                     | j                   }|j                  }||u r"t        dt        |       j                  z        dt        t        |j                              }|| j                  |      fS )z@Remove and return the `(key, value)` pair least frequently used.rp   N)r   rq   r<   r8   r$   rL   r   r    )r   r   currr?   s       r   rB   zLFUCache.popitem   s\    {{yy4<=4:+>+>>?TI4		?#TXXc]##r   c                     t         j                  |        | j                  }|x|_        |_        | j
                  j                          y r   )r   r#   r   r{   rq   r   r   r   s     r   r#   zLFUCache.clear  s5    D{{ $$	DIr   c                 4   | j                   |   }|j                  }|j                  |j                  dz   k7  rt        |j                        dk(  r|xj                  dz  c_        yt
        j                  |j                  dz         }|j                  |_        |x|_        |j                  _        ||_        |j                  j                  |       |j                  j                  |       |j                  s|j                          || j                   |<   y)zIncrement use countr   N)r   rq   rz   rO   r   r   r   r{   r   r   r   )r   r?   r   r   s       r   __touchzLFUCache.__touch  s    ||C yy::a'499~"

a
>>$**q.1D		DI)--DI		DI		c		yyKKM Sr   r   )r$   r%   r&   r'   r   r4   r   r   r   rG   rB   r#   r   r   r   r   r   r      sS    ;  .3->->  5:4E4E ! .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 Z
d	 Zy)r   z/Least Recently Used (LRU) cache implementation.Nc                 d    t         j                  | ||       t        j                         | _        y r   )r   r4   rc   rd   _LRUCache__orderr2   s      r   r4   zLRUCache.__init__  rf   r   c                 B     || |      }|| v r| j                  |       |S r   _LRUCache__touchr   s       r   r   zLRUCache.__getitem__"  r   r   c                 :     || ||       | j                  |       y r   r   ri   s       r   r   zLRUCache.__setitem__(  s    dC'Sr   c                 0     || |       | j                   |= y r   )r   rl   s      r   rG   zLRUCache.__delitem__,  rn   r   c                     	 t        t        | j                              }|| 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.rp   N)rq   rL   r   r    rr   r<   r8   r$   r>   s     r   rB   zLRUCache.popitem0  rs   rt   c                 b    t         j                  |        | j                  j                          y r   )r   r#   r   r"   s    r   r#   zLRUCache.clear9  rv   r   c                 x    	 | j                   j                  |       y# t        $ r d| j                   |<   Y yw xY w)zMark as recently usedN)r   rh   r<   r>   s     r   r   zLRUCache.__touch=  s6    	%LL$$S) 	% $DLL	%s    99r   )r$   r%   r&   r'   r4   r   r   r   rG   rB   r#   r   r   r   r   r   r     sI    91 .3->->  5:4E4E  .3->-> (%r   r   c                       e Zd ZdZej
                  dfdZed        Zej                  fdZ	ej                  fdZ
d Zd Zy)	r   z-Random Replacement (RR) cache implementation.Nc                 \    t         j                  | ||       || _        i | _        g | _        y r   )r   r4   _RRCache__choice_RRCache__index_RRCache__keys)r   r3   choicer,   s       r   r4   zRRCache.__init__H  s'    tWi0r   c                     | j                   S )z(The `choice` function used by the cache.)r   r"   s    r   r   zRRCache.choiceN  s     }}r   c                      || ||       || j                   vr>t        | j                        | j                   |<   | j                  j                  |       y y r   )r   rO   r   appendri   s       r   r   zRRCache.__setitem__S  sH    dC'dll" #DKK 0DLLKKs# #r   c                     || |       | j                   j                  |      }|t        | j                        dz
  k7  r-| j                  d   }|| j                  |<   || j                   |<   | j                  j                          y )Nr   )r   r    rO   r   )r   r?   rm   indexlasts        r   rG   zRRCache.__delitem__Y  sm    dC   %C$q((;;r?D!%DKK!&DLLr   c                     	 | j                  | j                        }|| j                  |      fS # t        $ r# t	        dt        |       j                  z        dw xY w)z/Remove and return a random `(key, value)` pair.rp   N)r   r   r    
IndexErrorr<   r8   r$   r>   s     r   rB   zRRCache.popitemb  s]    	(--,C #''  	J=4:+>+>>?TI	Js	   0 ,Ac                     t         j                  |        | j                  j                          | j                  d d = y r   )r   r#   r   r   r"   s    r   r#   zRRCache.cleark  s)    DKKNr   )r$   r%   r&   r'   randomr   r4   r_   r   r   rG   rB   r#   r   r   r   r   r   E  sQ    7'-}}    5:4E4E $ .3->-> (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                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)_TimedCache._Timerc                      || _         d| _        y r+   )_Timer__timer_Timer__nesting)r   timers     r   r4   z_TimedCache._Timer.__init__u  s     DLDNr   c                 X    | j                   dk(  r| j                         S | j                  S r+   r   r   _Timer__timer"   s    r   __call__z_TimedCache._Timer.__call__y  s$    ~~"||~%{{"r   c                     | j                   dk(  r| j                         x| _        }n| j                  }| xj                   dz  c_         |S )Nr   r   r   )r   times     r   	__enter__z_TimedCache._Timer.__enter__  s<    ~~"%)\\^3d{{NNaNKr   c                 .    | xj                   dz  c_         y r   )r   )r   excs     r   __exit__z_TimedCache._Timer.__exit__  s    NNaNr   c                 <    t         j                  | j                  ffS r   )r   _Timerr   r"   s    r   
__reduce__z_TimedCache._Timer.__reduce__  s    %%66r   c                 .    t        | j                  |      S r   )getattrr   )r   names     r   __getattr__z_TimedCache._Timer.__getattr__  s    4<<..r   N)	r$   r%   r&   r4   r   r   r   r   r   r   r   r   r   r   t  s     		#		 	7	/r   r   Nc                 f    t         j                  | ||       t        j                  |      | _        y r   )r   r4   r   r   _TimedCache__timer)r   r3   r   r,   s       r   r4   z_TimedCache.__init__  s$    tWi0"))%0r   c                 x    | j                   5 }| j                  |        ||       cd d d        S # 1 sw Y   y xY wr   r   expire)r   
cache_reprr   s      r   r:   z_TimedCache.__repr__  s4    \\ 	$TKKd#	$ 	$ 	$   09c                 x    | j                   5 }| j                  |        ||       cd d d        S # 1 sw Y   y xY wr   r   )r   	cache_lenr   s      r   rP   z_TimedCache.__len__  s3    \\ 	#TKKT?	# 	# 	#r   c                 ~    | j                   5 }| j                  |       t        |   cd d d        S # 1 sw Y   y xY wr   )r   r   superr\   )r   r   	__class__s     r   r\   z_TimedCache.currsize  s5    \\ 	$TKK7#	$ 	$ 	$s   3<c                     | j                   S )z%The timer function used by the cache.)r   r"   s    r   r   z_TimedCache.timer  s     ||r   c                 x    | j                   5  t        j                  | g|i |cd d d        S # 1 sw Y   y xY wr   )r   r   rS   r   argskwargss      r   rS   z_TimedCache.get  4    \\ 	499T3D3F3	4 	4 	4r   c                 x    | j                   5  t        j                  | g|i |cd d d        S # 1 sw Y   y xY wr   )r   r   r    r   s      r   r    z_TimedCache.pop  r   r   c                 x    | j                   5  t        j                  | g|i |cd d d        S # 1 sw Y   y xY wr   )r   r   rX   r   s      r   rX   z_TimedCache.setdefault  s6    \\ 	;##D:4:6:	; 	; 	;r   c                 .    t         j                  |        y r   )r   r#   r"   s    r   r#   z_TimedCache.clear  s     	Dr   )r$   r%   r&   r'   r   r   	monotonicr4   r   r:   rP   r_   r\   r   rS   r    rX   r#   __classcell__)r   s   @r   r   r   q  sx    :/ /8 '+nn 1 #(.. $
 !& #
 $ $
  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 Zy)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y)TTLCache._Link)r?   expiresrq   r{   Nc                      || _         || _        y r   )r?   r   r   r?   r   s      r   r4   zTTLCache._Link.__init__  s    DH"DLr   c                 R    t         j                  | j                  | j                  ffS r   )r   r   r?   r   r"   s    r   r   zTTLCache._Link.__reduce__  s    >>DHHdll#;;;r   c                 P    | j                   }| j                  }||_         ||_        y r   r   r   s      r   r   zTTLCache._Link.unlink  r   r   NN)r$   r%   r&   r(   r4   r   r   r   r   r   r   r     s    6		#	<	r   r   Nc                     t         j                  | |||       t        j                         x| _        }|x|_        |_        t        j                         | _	        || _
        y r   )r   r4   r   r   _TTLCache__rootr{   rq   rc   rd   _TTLCache__links_TTLCache__ttl)r   r3   ttlr   r,   r   s         r   r4   zTTLCache.__init__  sN    T7E9=%^^--d $$	DI"..0
r   c                 z    	 | j                   |   }| j                         |j                  k  S # t        $ r Y yw xY wNF)r   r   r   r<   )r   r?   r   s      r   rI   zTTLCache.__contains__  @    	/<<$D ::<$,,..  		   . 	::c                     	 | j                  |      }| j                         |j                  k   }|r| j	                  |      S  || |      S # t        $ r d}Y )w xY wr   )_TTLCache__getlinkr   r   r<   r=   )r   r?   r   r   expireds        r   r   zTTLCache.__getitem__  e    	8>>#&D  ::<$,,67G##C(( s++  	G	   A AAc                    | j                   5 }| j                  |        || ||       d d d        	 | j                  |      }|j                          | j                  z   |_	        | j                  x|_        }|j                  x|_        }|x|_        |_        y # 1 sw Y   txY w# t        $ r' t
        j                  |      x| j                  |<   }Y w xY wr   )r   r   r   r   r<   r   r   r   r   r   r   rq   r{   )r   r?   rC   rj   r   r   r   r{   s           r   r   zTTLCache.__setitem__  s    ZZ 	,4KK$U+	,	>>#&D KKMdjj(;;&	D99$	D $$	DI	, 	,
  	;'/~~c'::DLL	;s   BB( B%(-CCc                      || |       | j                   j                  |      }|j                          | j                         |j                  k  st        |      y r   )r   r    r   r   r   r<   r   s       r   rG   zTTLCache.__delitem__  sJ    dC ||$

t||+3- ,r   c              #      K   | j                   }|j                  }||urD| j                  5 }||j                  k  r|j                   d d d        |j                  }||urCy y # 1 sw Y   xY wwr   )r   rq   r   r   r?   )r   r   r   r   s       r   rM   zTTLCache.__iter__   sg     {{yy$ #t$,,&((N# 99D $# #s"   )A0A$	A0"A0$A-)A0c                 R   | j                   j                  |       | j                  }|x|_        |_        t        | j                  j                         d       D ]*  }||_        |j                  x|_        }|x|_        |_        , | j                  | j                                y )Nc                     | j                   S r   r   )objs    r   <lambda>z'TTLCache.__setstate__.<locals>.<lambda>  s
    #++ r   )r?   )
__dict__updater   r{   rq   sortedr   valuesr   r   )r   stater   r   r{   s        r   __setstate__zTTLCache.__setstate__
  s    U#{{ $$	DI4<<..06MN 	)DDI#yy(DI$((DI		) 	DJJL!r   c                     | j                   S )z,The time-to-live value of the cache's items.)r   r"   s    r   r   zTTLCache.ttl       zzr   c                    || j                         }| j                  }|j                  }| j                  }g }t        j
                  }t        j                  }||ur||j                  k  s|j                  |j                   || |j                        f        || |j                         ||j                  = |j                  }|j                          |}||ur||j                  k  s|S )qRemove expired items from the cache and return an iterable of the
        expired `(key, value)` pairs.

        )r   r   rq   r   r   rG   r   r   r   r?   r   )	r   r   r   r   linksr   rm   r   rq   s	            r   r   zTTLCache.expire  s    
 <::<D{{yy))))$t||(;NNDHHmD$((&CDE$)dhh99DKKMD $t||(; r   c                 *   | j                   5 }| j                  |       	 t        t        | j                              }|| j                  |      fcddd       S # t        $ r# t        dt        |       j                  z        dw xY w# 1 sw Y   yxY wzmRemove and return the `(key, value)` pair least recently used that
        has not already expired.

        Nrp   )
r   r   rq   rL   r   r    rr   r<   r8   r$   r   r   r?   s      r   rB   zTTLCache.popitem/      
 ZZ 	,4KK,4-. TXXc]+	, 	, ! N}tDz/B/BBCMN		, 	,!   B	AB	,BB		Bc                     t         j                  |        | j                  }|x|_        |_        | j
                  j                          y r   )r   r#   r   r{   rq   r   r   s     r   r#   zTTLCache.clear=  s7    ${{ $$	DIr   c                 Z    | j                   |   }| j                   j                  |       |S r   )r   rh   r   r?   rC   s      r   	__getlinkzTTLCache.__getlinkC  '    S!  %r   r   )r$   r%   r&   r'   r   r   r   r4   rI   r   r   r   rG   rM   r	  r_   r   r   rB   r#   r   r   r   r   r   r     s    J   ,0>>T / .3->-> 
, 5:4E4E % .3->->  "  ,,r   r   c                       e Zd 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 Zy)r   z;Time aware Least Recently Used (TLRU) cache implementation.   c                       e Zd ZdZddZd Zy)TLRUCache._Itemr?   r   removedNc                 .    || _         || _        d| _        y r   r  r   s      r   r4   zTLRUCache._Item.__init__R  s    DH"DL DLr   c                 4    | j                   |j                   k  S r   r  )r   others     r   __lt__zTLRUCache._Item.__lt__W  s    <<%--//r   r   )r$   r%   r&   r(   r4   r"  r   r   r   _Itemr  N  s    1		!
	0r   r#  Nc                     t         j                  | |||       t        j                         | _        g | _        || _        y r   )r   r4   rc   rd   _TLRUCache__items_TLRUCache__order_TLRUCache__ttu)r   r3   ttur   r,   s        r   r4   zTLRUCache.__init__Z  s4    T7E9="..0
r   c                 z    	 | j                   |   }| j                         |j                  k  S # t        $ r Y yw xY wr   )r%  r   r   r<   )r   r?   items      r   rI   zTLRUCache.__contains__`  r   r   c                     	 | j                  |      }| j                         |j                  k   }|r| j	                  |      S  || |      S # t        $ r d}Y )w xY wr   )_TLRUCache__getitemr   r   r<   r=   )r   r?   r   r*  r   s        r   r   zTLRUCache.__getitem__h  r   r   c                    | j                   5 }| j                  |||      }||k  s
	 d d d        y | j                  |        || ||       d d d        	 d| j                  |      _        t        j                  |      x| j                  |<   }t        j                  | j                  |       y # 1 sw Y   fxY w# t
        $ r Y ]w xY wNT)r   r'  r   r,  r  r<   r   r#  r%  heapqheappushr&  )r   r?   rC   rj   r   r   r*  s          r   r   zTLRUCache.__setitem__t  s    ZZ 	,4jjeT2G7N	, 	, KK$U+	,	*.DNN3' $-??3#@@SDt||T*	, 	,  		s"   B0B0B< 0B9<	CCc                     | j                   5 } || |       d d d        | j                  j                  |      }d|_        |j                  k  st        |      y # 1 sw Y   FxY wr.  )r   r%  r    r  r   r<   )r   r?   rm   r   r*  s        r   rG   zTLRUCache.__delitem__  sb    ZZ 	%4$$	% ||$t||#3- $	% 	%s   
AA%c              #      K   | j                   D ]@  }| j                  5 }||j                  k  r|j                  s|j                   d d d        B y # 1 sw Y   MxY wwr   )r&  r   r   r  r?   )r   r   r   s      r   rM   zTLRUCache.__iter__  sV     LL 	#D #t$,,&t||((N# #	## #s   A*AAA	Ac                     | j                   S )z1The local time-to-use function used by the cache.)r'  r"   s    r   r(  zTLRUCache.ttu  r  r   c                    || j                         }| j                  }| j                  }t        |      t        |      | j                  z  kD  r9|D cg c]  }|j
                  r| c}x| _        }t        j                  |       g }t        j                  }t        j                  }|r|d   j
                  s||d   j                  k  st        j                  |      }|j
                  sN|j                  |j                   || |j                        f        || |j                         ||j                  = |r#|d   j
                  r||d   j                  k  s|S c c}w )r  r   )r   r%  r&  rO   _TLRUCache__HEAP_CLEANUP_FACTORr  r/  heapifyr   rG   r   r   heappopr   r?   )r   r   itemsorderr*  r   rm   r   s           r   r   zTLRUCache.expire  s"   
 <::<Du:E
T%?%???5:#OT$,,D#OODL5MM% ))))q))$q9I9I2I=='D<<-dhh*GHIdDHH-$((O q))$q9I9I2I  $Ps   E#%E#c                 *   | j                   5 }| j                  |       	 t        t        | j                              }|| j                  |      fcddd       S # t        $ r# t        dt        |       j                  z        dw xY w# 1 sw Y   yxY wr  )
r   r   rq   rL   r%  r    rr   r<   r8   r$   r  s      r   rB   zTLRUCache.popitem  r  r  c                     t         j                  |        | j                  j                          | j                  d d = y r   )r   r#   r%  r&  r"   s    r   r#   zTLRUCache.clear  s+    $LLOr   c                 Z    | j                   |   }| j                   j                  |       |S r   )r%  rh   r  s      r   	__getitemzTLRUCache.__getitem  r  r   r   )r$   r%   r&   r'   r5  	functoolstotal_orderingr#  r   r   r4   rI   r   r   r   rG   rM   r_   r(  r   rB   r#   r,  r   r   r   r   r   I  s    E	0 	0 	0 ,0>>T / .3->-> 
, 5:4E4E +  .3->->  #  0,
r   r   	CacheInfo)hitsmissesr3   r\   Fc                 2     ddl m  fd}|S )z_Decorator to wrap a function with a memoizing callable that saves
    results in a cache.

    r   _wrapperc                     rQt        t              rfd}n-t        t        j                  j                        rfd}nd } | |      S  |       S )Nc                 H    t        | |j                  j                        S r   )
_CacheInfor3   r\   rA  rB  caches     r   	make_infoz,cached.<locals>.decorator.<locals>.make_info  s    %dFEMM5>>RRr   c                 2    t        | |d t                    S r   )rH  rO   rI  s     r   rK  z,cached.<locals>.decorator.<locals>.make_info  s    %dFD#e*EEr   c                     t        | |dd      S r+   )rH  )rA  rB  s     r   rK  z,cached.<locals>.decorator.<locals>.make_info  s    %dFAq99r   info)
isinstancer   rc   abcMapping)funcrK  rE  rJ  	conditionrO  r?   locks     r   	decoratorzcached.<locals>.decorator  sa    %'S E;??#:#:;F
: D%dIINND%dI>>r   )_cachedrE  rJ  r?   rU  rT  rO  rV  rE  s   ````` @r   r	   r	     s    
 "? ?* r   c                 2     ddl m  fd}|S )z]Decorator to wrap a method with a memoizing callable that saves
    results in a cache.

    r   rD  c                 B    rd } | |      S  |       S )Nc                     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)
rP  r   rH  r3   r\   rc   rQ  rR  rO   	TypeError)rJ  rA  rB  s      r   rK  z2cachedmethod.<locals>.decorator.<locals>.make_info  sZ    eU+%dFEMM5>>RR{'>'>?%dFD#e*EE#$OPPr   rN  r   )methodrK  rE  rJ  rT  rO  r?   rU  s     r   rV  zcachedmethod.<locals>.decorator  s6    Q FE3iiPPFE3i@@r   )_cachedmethodrE  rX  s   ````` @r   r
   r
     s    
 (A A r   )r'   __all____version__rc   collections.abcr>  r/  r   r    r   r   rQ  MutableMappingr   r   r   r   r   r   r   r   
namedtuplerH  hashkeyr	   	methodkeyr
   r   r   r   <module>rg     s    6
         $tKOO** tn @Q!u Q!h'%u '%T)e )XH% HVJ{ JZ~ ~B $[##:

 llE > !NNE r   