
    kCi5S                        S r SrSrSSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
   " S S5      r " S	 S
\R                  R                  5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\R,                  " S/ SQ5      r\
R0                  SSS4S jr\
R4                  SS4S jrg)z0Extensible memoizing collections and decorators.)	Cache	FIFOCacheLFUCacheLRUCacheRRCache	TLRUCacheTTLCachecachedcachedmethodz6.2.4    N   )keysc                   *    \ rS rSrSrS rS rS rSrg)_DefaultSize    c                     gNr   r   self_keys     O/var/www/html/land-ocr/venv/lib/python3.13/site-packages/cachetools/__init__.py__getitem___DefaultSize.__getitem__           c                     g Nr   )r   r   _values      r   __setitem___DefaultSize.__setitem__!   s    r   c                     gr   r   r   s     r   pop_DefaultSize.pop$   r   r   N)	__name__
__module____qualname____firstlineno__	__slots__r   r   r"   __static_attributes__r   r   r   r   r      s    Ir   r   c                       \ rS rSrSr\" 5       r\" 5       rSS jr	S r
S rS rS rS	 rS
 rS rS rSS jr\4S jrSS jr\S 5       r\S 5       r\S 5       rSrg)r   (   z?Mutable mapping to serve as a simple cache or cache base class.Nc                     U(       a  X l         U R                   [        R                   La  [        5       U l        [        5       U l        SU l        Xl        g Nr   )	getsizeofr   dict_Cache__size_Cache__data_Cache__currsize_Cache__maxsizer   maxsizer.   s      r   __init__Cache.__init__/   s8    &N>>0&DKf r   c                     [        U 5      R                  < S[        U R                  5      < SU R                  < SU R
                  < S3$ )N(z
, maxsize=z, currsize=))typer$   reprr1   r3   r2   r   s    r   __repr__Cache.__repr__8   s3    JNNOO	
 	
r   c                 d     U R                   U   $ ! [         a    U R                  U5      s $ f = fr   )r1   KeyError__missing__r   keys     r   r   Cache.__getitem__@   s6    	);;s## 	)##C((	)s    //c                    U R                   nU R                  U5      nXC:  a  [        S5      eXR                  ;  d  U R                  U   U:  a8  U R
                  U-   U:  a%  U R                  5         U R
                  U-   U:  a  M%  XR                  ;   a  X@R                  U   -
  nOUnX R                  U'   X@R                  U'   U =R
                  U-  sl        g )Nzvalue too large)r3   r.   
ValueErrorr1   r0   r2   popitem)r   rD   valuer5   sizediffsizes         r   r   Cache.__setitem__F   s    ..~~e$>.//kk!T[[%5%<//D(72 //D(72++kk#..HH CC8#r   c                 ~    U R                   R                  U5      nU R                  U	 U =R                  U-  sl        g r   )r0   r"   r1   r2   )r   rD   rJ   s      r   __delitem__Cache.__delitem__V   s.    {{s#KK4r   c                     XR                   ;   $ r   )r1   rC   s     r   __contains__Cache.__contains__[   s    kk!!r   c                     [        U5      er   )rA   rC   s     r   rB   Cache.__missing__^   s    smr   c                 ,    [        U R                  5      $ r   )iterr1   r=   s    r   __iter__Cache.__iter__a   s    DKK  r   c                 ,    [        U R                  5      $ r   )lenr1   r=   s    r   __len__Cache.__len__d   s    4;;r   c                     X;   a  X   $ U$ r   r   )r   rD   defaults      r   get	Cache.getm   s    ;9Nr   c                 V    X;   a  X   nX	 U$ X R                   L a  [        U5      eUnU$ r   )_Cache__markerrA   r   rD   r^   rI   s       r   r"   	Cache.pops   s:    ;IE	
 	 %3-Er   c                 (    X;   a  X   nU$ U=X'   nU$ r   r   rc   s       r   
setdefaultCache.setdefault}   s(    ;IE  !('DIr   c                     U R                   $ )zThe maximum size of the cache.)r3   r=   s    r   r5   Cache.maxsize   s     ~~r   c                     U R                   $ )zThe current size of the cache.)r2   r=   s    r   currsizeCache.currsize   s     r   c                     g)z+Return the size of a cache element's value.r   r   )rI   s    r   r.   Cache.getsizeof   s     r   )
__currsize__data	__maxsize__sizer.   r   )r$   r%   r&   r'   __doc__objectrb   r   r0   r6   r>   r   r   rN   rQ   rB   rW   r[   r_   r"   rf   propertyr5   rk   staticmethodr.   r)   r   r   r   r   r   (   s    IxH^F!
)$  
"!   (       r   r   c                   h    \ rS rSrSrS	S jr\R                  4S jr\R                  4S jrS r	Sr
g)
r      z/First In First Out (FIFO) cache implementation.Nc                 d    [         R                  XU5        [        R                  " 5       U l        g r   )r   r6   collectionsOrderedDict_FIFOCache__orderr4   s      r   r6   FIFOCache.__init__        ti0"..0r   c                     U" XU5        XR                   ;   a  U R                   R                  U5        g S U R                   U'   g r   )r|   move_to_endr   rD   rI   cache_setitems       r   r   FIFOCache.__setitem__   s6    d',,LL$$S) $DLLr   c                 .    U" X5        U R                   U	 g r   )r|   r   rD   cache_delitems      r   rN   FIFOCache.__delitem__       d LLr   c                      [        [        U R                  5      5      nXR                  U5      4$ ! [         a#    [        S[        U 5      R                  -  5      Sef = f)z9Remove and return the `(key, value)` pair first inserted.%s is emptyN)nextrV   r|   r"   StopIterationrA   r;   r$   rC   s     r   rH   FIFOCache.popitem   \    	(tDLL)*C #''  	J=4:+>+>>?TI	J	   2 -A__orderr   )r$   r%   r&   r'   rs   r6   r   r   rN   rH   r)   r   r   r   r   r      s/    91 5:4E4E % .3->-> (r   r   c                       \ rS rSrSr " S S5      rSS jr\R                  4S jr\R                  4S jr	\R                  4S	 jr
S
 rS rSrg)r      z1Least Frequently Used (LFU) cache implementation.c                   $    \ rS rSrSrS rS rSrg)LFUCache._Link   )countr   r   prevc                 .    Xl         [        5       U l        g r   )r   setr   )r   r   s     r   r6   LFUCache._Link.__init__   s    JDIr   c                 L    U R                   nU R                  nXl         X!l        g r   r   r   r   r   r   s      r   unlinkLFUCache._Link.unlink       99D99DIIr   )r   r   N)r$   r%   r&   r'   r(   r6   r   r)   r   r   r   _Linkr      s    5			r   r   Nc                     [         R                  XU5        [        R                  S5      =U l        nU=Ul        Ul        0 U l        g r-   )r   r6   r   r   _LFUCache__rootr   r   _LFUCache__links)r   r5   r.   roots       r   r6   LFUCache.__init__   s:    ti0%^^A..d $$	DIr   c                 B    U" X5      nX;   a  U R                  U5        U$ r   )_LFUCache__touchr   rD   cache_getitemrI   s       r   r   LFUCache.__getitem__   "    d(;LLr   c                    U" XU5        XR                   ;   a  U R                  U5        g U R                  nUR                  nUR                  S:w  aD  [
        R                  S5      nUR                  Ul        U=Ul        UR                  l        XEl        UR                  R                  U5        XPR                   U'   g r   )
r   r   r   r   r   r   r   r   r   add)r   rD   rI   r   r   links         r   r   LFUCache.__setitem__   s    d',,LL{{yy::?>>!$D		DI)--DI		I		c Sr   c                     U" X5        U R                   R                  U5      nUR                  R                  U5        UR                  (       d  UR	                  5         g g r   )r   r"   r   remover   r   rD   r   r   s       r   rN   LFUCache.__delitem__   sE    d ||$		yyKKM r   c                     U R                   nUR                  nX!L a"  [        S[        U 5      R                  -  5      Se[        [        UR                  5      5      nX0R                  U5      4$ )z@Remove and return the `(key, value)` pair least frequently used.r   N)r   r   rA   r;   r$   rV   r   r"   )r   r   currrD   s       r   rH   LFUCache.popitem   sX    {{yy<=4:+>+>>?TI4		?#XXc]##r   c                 >   U R                   U   nUR                  nUR                  UR                  S-   :w  a  [        UR                  5      S:X  a  U=R                  S-  sl        g[
        R                  UR                  S-   5      nUR                  Ul        U=Ul        UR                  l        X#l        UR                  R                  U5        UR                  R                  U5        UR                  (       d  UR                  5         X0R                   U'   g)zIncrement use countr   N)r   r   r   rZ   r   r   r   r   r   r   r   )r   rD   r   r   s       r   __touchLFUCache.__touch   s    ||C yy::a'499~"

a
>>$**q.1D		DI)--DI		I		c		yyKKM Sr   )__links__rootr   )r$   r%   r&   r'   rs   r   r6   r   r   r   rN   rH   r   r)   r   r   r   r   r      sN    ;  .3->->  5:4E4E ! .3->-> $!r   r   c                       \ rS rSrSrSS jr\R                  4S jr\R                  4S jr\R                  4S jr	S r
S	 rS
rg)r      z/Least Recently Used (LRU) cache implementation.Nc                 d    [         R                  XU5        [        R                  " 5       U l        g r   )r   r6   rz   r{   _LRUCache__orderr4   s      r   r6   LRUCache.__init__  r~   r   c                 B    U" X5      nX;   a  U R                  U5        U$ r   _LRUCache__touchr   s       r   r   LRUCache.__getitem__  r   r   c                 8    U" XU5        U R                  U5        g r   r   r   s       r   r   LRUCache.__setitem__  s    d'Sr   c                 .    U" X5        U R                   U	 g r   )r   r   s      r   rN   LRUCache.__delitem__  r   r   c                      [        [        U R                  5      5      nXR                  U5      4$ ! [         a#    [        S[        U 5      R                  -  5      Sef = f)z>Remove and return the `(key, value)` pair least recently used.r   N)r   rV   r   r"   r   rA   r;   r$   rC   s     r   rH   LRUCache.popitem  r   r   c                 z     U R                   R                  U5        g! [         a    SU R                   U'    gf = f)zMark as recently usedN)r   r   rA   rC   s     r   r   LRUCache.__touch  s6    	%LL$$S) 	% $DLL	%s    ::r   r   )r$   r%   r&   r'   rs   r6   r   r   r   rN   rH   r   r)   r   r   r   r   r      sD    91 .3->->  5:4E4E  .3->-> (%r   r   c                       \ rS rSrSr\R                  S4S jr\S 5       r\	R                  4S jr
\	R                  4S jrS rS	rg)
r   i$  z-Random Replacement (RR) cache implementation.Nc                 X    [         R                  XU5        X l        0 U l        / U l        g r   )r   r6   _RRCache__choice_RRCache__index_RRCache__keys)r   r5   choicer.   s       r   r6   RRCache.__init__'  s#    ti0r   c                     U R                   $ )z(The `choice` function used by the cache.)r   r=   s    r   r   RRCache.choice-  s     }}r   c                     U" XU5        XR                   ;  a>  [        U R                  5      U R                   U'   U R                  R                  U5        g g r   )r   rZ   r   appendr   s       r   r   RRCache.__setitem__2  sD    d'll" #DKK 0DLLKKs# #r   c                    U" X5        U R                   R                  U5      nU[        U R                  5      S-
  :w  a+  U R                  S   nX@R                  U'   X0R                   U'   U R                  R                  5         g )Nr   )r   r"   rZ   r   )r   rD   r   indexlasts        r   rN   RRCache.__delitem__8  sg    d   %C$q((;;r?D!%KK!&LLr   c                      U R                  U R                  5      nXR                  U5      4$ ! [         a#    [	        S[        U 5      R                  -  5      Sef = f)z/Remove and return a random `(key, value)` pair.r   N)r   r   r"   
IndexErrorrA   r;   r$   rC   s     r   rH   RRCache.popitemA  s[    	(--,C #''  	J=4:+>+>>?TI	Js	   / -A)__choice__index__keys)r$   r%   r&   r'   rs   randomr   r6   ru   r   r   rN   rH   r)   r   r   r   r   r   $  sL    7'-}}    5:4E4E $ .3->-> (r   r   c                      ^  \ rS rSrSr " S S5      r\R                  S4S jr\	R                  4S jr
\	R                  4S jr\U 4S	 j5       r\S
 5       rS rS rS rS rSrU =r$ )_TimedCacheiK  z0Base class for time aware cache implementations.c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
_TimedCache._TimeriN  c                     Xl         SU l        g r-   )_Timer__timer_Timer__nesting)r   timers     r   r6   _TimedCache._Timer.__init__O  s     LDNr   c                 Z    U R                   S:X  a  U R                  5       $ U R                  $ r-   r   r   _Timer__timer=   s    r   __call___TimedCache._Timer.__call__S  s$    ~~"||~%{{"r   c                     U R                   S:X  a  U R                  5       =U l        nOU R                  nU =R                   S-  sl         U$ )Nr   r   r   r   times     r   	__enter___TimedCache._Timer.__enter__Y  s<    ~~"%)\\^3d{{NNaNKr   c                 .    U =R                   S-  sl         g r   )r   )r   excs     r   __exit___TimedCache._Timer.__exit__a  s    NNaNr   c                 <    [         R                  U R                  44$ r   )r   _Timerr   r=   s    r   
__reduce___TimedCache._Timer.__reduce__d  s    %%66r   c                 .    [        U R                  U5      $ r   )getattrr   )r   names     r   __getattr___TimedCache._Timer.__getattr__g  s    4<<..r   )	__nesting__time__timerN)r$   r%   r&   r'   r6   r   r   r   r   r  r)   r   r   r   r   r   N  s     		#		 	7	/r   r   Nc                 d    [         R                  XU5        [        R                  U5      U l        g r   )r   r6   r   r   _TimedCache__timer)r   r5   r   r.   s       r   r6   _TimedCache.__init__j  s"    ti0"))%0r   c                     U R                    nU R                  U5        U" U 5      sS S S 5        $ ! , (       d  f       g = fr   r  expire)r   
cache_reprr   s      r   r>   _TimedCache.__repr__n  s)    \\TKKd# \\   0
>c                     U R                    nU R                  U5        U" U 5      sS S S 5        $ ! , (       d  f       g = fr   r  )r   	cache_lenr   s      r   r[   _TimedCache.__len__s  s(    \\TKKT? \\r  c                    > U R                    nU R                  U5        [        TU ]  sS S S 5        $ ! , (       d  f       g = fr   )r  r  superrk   )r   r   	__class__s     r   rk   _TimedCache.currsizex  s*    \\TKK7# \\s	   3
Ac                     U R                   $ )z%The timer function used by the cache.)r  r=   s    r   r   _TimedCache.timer~  s     ||r   c                     U R                    nU R                  U5        [        R                  U 5        S S S 5        g ! , (       d  f       g = fr   )r  r  r   clearr   s     r   r  _TimedCache.clear  s-    \\TKKKK \\s	   '=
Ac                     U R                      [        R                  " U /UQ70 UD6sS S S 5        $ ! , (       d  f       g = fr   )r  r   r_   r   argskwargss      r   r_   _TimedCache.get  )    \\99T3D3F3 \\   1
?c                     U R                      [        R                  " U /UQ70 UD6sS S S 5        $ ! , (       d  f       g = fr   )r  r   r"   r   s      r   r"   _TimedCache.pop  r$  r%  c                     U R                      [        R                  " U /UQ70 UD6sS S S 5        $ ! , (       d  f       g = fr   )r  r   rf   r   s      r   rf   _TimedCache.setdefault  s+    \\##D:4:6: \\r%  )r	  )r$   r%   r&   r'   rs   r   r   	monotonicr6   r   r>   r[   ru   rk   r   r  r_   r"   rf   r)   __classcell__)r  s   @r   r   r   K  s}    :/ /8 '+nn 1 #(.. $
 !& #
 $ $
  
44; ;r   r   c                       \ rS rSrSr " S S5      r\R                  S4S jrS r	\
R                  4S jr\
R                  4S	 jr\
R                  4S
 jrS rS r\S 5       rSS jrS rS rSrg)r   i  z@LRU Cache implementation with per-item time-to-live (TTL) value.c                   .    \ rS rSrSrSS jrS rS rSrg)	TTLCache._Linki  )rD   expiresr   r   Nc                     Xl         X l        g r   )rD   r/  r   rD   r/  s      r   r6   TTLCache._Link.__init__  s    H"Lr   c                 R    [         R                  U R                  U R                  44$ r   )r   r   rD   r/  r=   s    r   r   TTLCache._Link.__reduce__  s    >>DHHdll#;;;r   c                 L    U R                   nU R                  nXl         X!l        g r   r   r   s      r   r   TTLCache._Link.unlink  r   r   )r/  rD   NN)	r$   r%   r&   r'   r(   r6   r   r   r)   r   r   r   r   r.    s    6		#	<	r   r   Nc                     [         R                  XX45        [        R                  5       =U l        nU=Ul        Ul        [        R                  " 5       U l	        X l
        g r   )r   r6   r   r   _TTLCache__rootr   r   rz   r{   _TTLCache__links_TTLCache__ttl)r   r5   ttlr   r.   r   s         r   r6   TTLCache.__init__  sH    TE=%^^--d $$	DI"..0
r   c                 |     U R                   U   nU R                  5       UR                  :  $ ! [         a     gf = fNF)r:  r   r/  rA   )r   rD   r   s      r   rQ   TTLCache.__contains__  @    	/<<$D ::<$,,..  		   . 
;;c                      U R                  U5      nU R                  5       UR                  :  + nU(       a  U R	                  U5      $ U" X5      $ ! [         a    Sn N.f = fr?  )_TTLCache__getlinkr   r/  rA   rB   )r   rD   r   r   expireds        r   r   TTLCache.__getitem__  `    	8>>#&D  ::<$,,7G##C(( ++  	G	   A A A c                    U R                    nU R                  U5        U" XU5        S S S 5         U R                  U5      nUR                  5         WU R                  -   Ul	        U R                  =Ul        nUR                  =Ul        nU=Ul        Ul        g ! , (       d  f       Ny= f! [         a'    [
        R                  U5      =U R                  U'   n Nf = fr   )r   r  rD  r   rA   r   r   r:  r;  r/  r9  r   r   )r   rD   rI   r   r   r   r   r   s           r   r   TTLCache.__setitem__  s    ZZ4KK$U+ 	>>#&D KKMdjj(;;&	D99$	D $$	DI Z
  	;'/~~c'::DLL	;s   BB, 
B),.CCc                     U" X5        U R                   R                  U5      nUR                  5         U R                  5       UR                  :  d  [        U5      eg r   )r:  r"   r   r   r/  rA   r   s       r   rN   TTLCache.__delitem__  sH    d ||$

t||+3- ,r   c              #      #    U R                   nUR                  nX!LaE  U R                   nX2R                  :  a  UR                  v   S S S 5        UR                  nX!La  MD  g g ! , (       d  f       N"= f7fr   )r9  r   r   r/  rD   )r   r   r   r   s       r   rW   TTLCache.__iter__  sV     {{yyt,,&((N  99D s"   )A6A%	A6#A6%
A3/A6c                 N   U R                   R                  U5        U R                  nU=Ul        Ul        [        U R                  R                  5       S S9 H*  nX#l        UR                  =Ul        nU=Ul        Ul        M,     U R                  U R                  5       5        g )Nc                     U R                   $ r   r/  )objs    r   <lambda>'TTLCache.__setstate__.<locals>.<lambda>  s    #++r   )rD   )
__dict__updater9  r   r   sortedr:  valuesr  r   )r   stater   r   r   s        r   __setstate__TTLCache.__setstate__  s    U#{{ $$	DI4<<..06MNDI#yy(DI$((DI	 O 	DJJL!r   c                     U R                   $ )z,The time-to-live value of the cache's items.)r;  r=   s    r   r<  TTLCache.ttl       zzr   c                    Uc  U R                  5       nU R                  nUR                  nU R                  n/ n[        R
                  n[        R                  nX2La  XR                  :  d~  UR                  UR                  U" XR                  5      45        U" XR                  5        XCR                  	 UR                  nUR                  5         UnX2La  XR                  :  d  M~  U$ )aRemove expired items from the cache and return an iterable of the
expired `(key, value)` pairs.

)r   r9  r   r:  r   rN   r   r/  r   rD   r   )	r   r   r   r   linksrE  r   r   r   s	            r   r  TTLCache.expire  s    
 <::<D{{yy))))||(;NNDHHmD((&CDE$)hh99DKKMD ||(; r   c                 4   U R                    nU R                  U5         [        [        U R                  5      5      nX R                  U5      4sSSS5        $ ! [         a#    [        S[        U 5      R                  -  5      Sef = f! , (       d  f       g= fz]Remove and return the `(key, value)` pair least recently used that
has not already expired.

Nr   )
r   r  r   rV   r:  r"   r   rA   r;   r$   r   r   rD   s      r   rH   TTLCache.popitem      
 ZZ4KK,4-. XXc]+ Z ! N}tDz/B/BBCMN	 Z!   B	AB	-BB		
Bc                 Z    U R                   U   nU R                   R                  U5        U$ r   )r:  r   r   rD   rI   s      r   	__getlinkTTLCache.__getlink  '    S!  %r   )r   r   __ttlr   )r$   r%   r&   r'   rs   r   r   r*  r6   rQ   r   r   r   rN   rW   rZ  ru   r<  r  rH   rD  r)   r   r   r   r   r     s    J   ,0>>T / .3->-> 
, 5:4E4E % .3->->  "  ,,r   r   c                       \ rS rSrSr\R                   " S S5      5       r\R                  S4S jr
S r\R                  4S jr\R                  4S	 jr\R                  4S
 jrS r\S 5       rSS jrS rS rSrg)r   i  z;Time aware Least Recently Used (TLRU) cache implementation.c                   (    \ rS rSrSrSS jrS rSrg)TLRUCache._Itemi  rD   r/  removedNc                 *    Xl         X l        SU l        g r?  rr  r1  s      r   r6   TLRUCache._Item.__init__#  s    H"L DLr   c                 4    U R                   UR                   :  $ r   rQ  )r   others     r   __lt__TLRUCache._Item.__lt__(  s    <<%--//r   )r/  rD   rs  r7  )r$   r%   r&   r'   r(   r6   rx  r)   r   r   r   _Itemrq    s    1		!
	0r   rz  Nc                 ~    [         R                  XX45        [        R                  " 5       U l        / U l        X l        g r   )r   r6   rz   r{   _TLRUCache__items_TLRUCache__order_TLRUCache__ttu)r   r5   ttur   r.   s        r   r6   TLRUCache.__init__+  s.    TE="..0
r   c                 |     U R                   U   nU R                  5       UR                  :  $ ! [         a     gf = fr?  )r|  r   r/  rA   )r   rD   items      r   rQ   TLRUCache.__contains__1  rA  rB  c                      U R                  U5      nU R                  5       UR                  :  + nU(       a  U R	                  U5      $ U" X5      $ ! [         a    Sn N.f = fr?  )_TLRUCache__getitemr   r/  rA   rB   )r   rD   r   r  rE  s        r   r   TLRUCache.__getitem__9  rG  rH  c                    U R                    nU R                  XU5      nXE:  d
   S S S 5        g U R                  U5        U" XU5        S S S 5         SU R                  U5      l        [        R                  UW5      =U R                  U'   n[        R                  " U R                  U5        g ! , (       d  f       Nl= f! [
         a     Ndf = fNT)r   r~  r  r  rs  rA   r   rz  r|  heapqheappushr}  )r   rD   rI   r   r   r/  r  s          r   r   TLRUCache.__setitem__E  s    ZZ4jjT2GN Z KK$U+ 	*.DNN3' $-??3#@@SDt||T* Z  		s"   B/B/C  /
B= 
CCc                     U R                    nU" X5        S S S 5        U R                  R                  U5      nSUl        WUR                  :  d  [        U5      eg ! , (       d  f       NL= fr  )r   r|  r"   rs  r/  rA   )r   rD   r   r   r  s        r   rN   TLRUCache.__delitem__U  sX    ZZ4$$  ||$t||#3- $ Zs   	A
A*c              #      #    U R                    HF  nU R                   nX!R                  :  a  UR                  (       d  UR                  v   S S S 5        MH     g ! , (       d  f       MZ  = f7fr   )r}  r   r/  rs  rD   )r   r   r   s      r   rW   TLRUCache.__iter__^  sA     LLDt,,&t||((N  !s   A,/AA,
A)	$A,c                     U R                   $ )z1The local time-to-use function used by the cache.)r~  r=   s    r   r  TLRUCache.ttue  r^  r   c                    Uc  U R                  5       nU R                  nU R                  n[        U5      [        U5      S-  :  aB  U Vs/ s H  oDR                  (       a  M  UPM     sn=U l        n[
        R                  " U5        / n[        R                  n[        R                  nU(       a  US   R                  (       d  XS   R                  :  d  [
        R                  " U5      nUR                  (       dK  UR                  UR                  U" XR                  5      45        U" XR                  5        X$R                  	 U(       a*  US   R                  (       a  M  XS   R                  :  d  M  U$ s  snf )r`     r   )r   r|  r}  rZ   rs  r  heapifyr   rN   r   r/  heappopr   rD   )r   r   itemsorderr  rE  r   r   s           r   r  TLRUCache.expirej  s   
 <::<Du:E
Q&5:#OUT,,DU#OODL5MM% ))))q))$q9I9I2I=='D<<-hh*GHIdHH-((O q)))$q9I9I2I  $Ps   E=#E=c                 4   U R                    nU R                  U5         [        [        U R                  5      5      nX R                  U5      4sSSS5        $ ! [         a#    [        S[        U 5      R                  -  5      Sef = f! , (       d  f       g= frd  )
r   r  r   rV   r|  r"   r   rA   r;   r$   re  s      r   rH   TLRUCache.popitem  rg  rh  c                 Z    U R                   U   nU R                   R                  U5        U$ r   )r|  r   rj  s      r   	__getitemTLRUCache.__getitem  rm  r   )__itemsr   __ttur   )r$   r%   r&   r'   rs   	functoolstotal_orderingrz  r   r*  r6   rQ   r   r   r   rN   rW   ru   r  r  rH   r  r)   r   r   r   r   r     s    E	0 	0 	0 ,0>>T / .3->-> 
, 5:4E4E +  .3->->  #  0,r   r   	CacheInfo)hitsmissesr5   rk   Fc                    ^ ^^^^^ SSK Jm  [        T[        5      (       a  SSKJn  U" S[        SS9  TmSmUU UUUU4S	 jnU$ )
zWDecorator to wrap a function with a memoizing callable that saves
results in a cache.

r   _wrapperr   )warnz4passing `info` as positional parameter is deprecatedr  )
stacklevelNc           	         > T(       aZ  [        T[        5      (       a  U4S jnO3[        T[        R                  R                  5      (       a  U4S jnOS nT" U TTTTUS9$ T" U TTTT5      $ )Nc                 F   > [        XTR                  TR                  5      $ r   )
_CacheInfor5   rk   r  r  caches     r   	make_info,cached.<locals>.decorator.<locals>.make_info  s    %dEMM5>>RRr   c                 0   > [        XS [        T5      5      $ r   )r  rZ   r  s     r   r  r    s    %dD#e*EEr   c                     [        XSS5      $ r-   )r  )r  r  s     r   r  r    s    %dAq99r   )info)
isinstancer   rz   abcMapping)funcr  r  r  	conditionr  rD   locks     r   	decoratorcached.<locals>.decorator  sg    %''S E;??#:#:;;F
: D%dIINND%dI>>r   )_cachedr  r  boolwarningsr  DeprecationWarning)r  rD   r  r  r  r  r  r  s   `````  @r   r	   r	     sG    
 ")T""!B	

 	? ?* r   c                 0   ^ ^^^^ SSK Jm  UU UUU4S jnU$ )zgDecorator to wrap a class or instance method with a memoizing
callable that saves results in a cache.

r   r  c                    > T" U TTTT5      $ r   r   )methodr  r  r  rD   r  s    r   r  cachedmethod.<locals>.decorator  s    sD)<<r   )_cachedmethodr  )r  rD   r  r  r  r  s   ```` @r   r
   r
     s    
 (= = r   )rs   __all____version__rz   collections.abcr  r  r   r    r   r   r  MutableMappingr   r   r   r   r   r   r   r   
namedtupler  hashkeyr	   	methodkeyr
   r   r   r   <module>r     s    6
        
 
iKOO** iX( (8K!u K!\#%u #%L$(e $(NG;% G;TD{ DNw wt ##:

 llE 'T !NN 
r   