
    J                        S r SSKJr  SSKrSSKJr  SSKJr  SSKJ	r	  SSK
Jr  SS	KJr  SS
KJr  SrSr\" \R&                  " S S 5      S5      (       a  \R&                  rOS r\R*                  S4S jr\R*                  S4S jrg)z0Extensible memoizing collections and decorators.    )absolute_importN   )keys)Cache)LFUCache)LRUCache)RRCache)TTLCache)r   r   r   r	   r
   cachedcachedmethodz3.1.1c                     U " 5       $ N )fs    &lib/third_party/cachetools/__init__.py<lambda>r      s    ac    c                      g)N*   r   r   r   r   r   r      s    2r   __wrapped__c                 >    [         R                  " X5        Xl        U $ r   )	functoolsupdate_wrapperr   )wrapperwrappeds     r   _update_wrapperr      s    W.!Nr   c                    ^ ^^ U UU4S jnU$ )zXDecorator to wrap a function with a memoizing callable that saves

results in a cache.

c                 \   >^  Tc  U 4S jnOTc	  UU U4S jnO	UU UU4S jn[        UT 5      $ )Nc                     > T" U 0 UD6$ r   r   )argskwargsfuncs     r   r   *cached.<locals>.decorator.<locals>.wrapper'   s    T$V$$r   c                     > T" U 0 UD6n TU   $ ! [          a     Of = fT" U 0 UD6n UTU'   U$ ! [         a     U$ f = fr   KeyError
ValueError)r    r!   kvcacher"   keys       r   r   r#   +   so      	q/ 	
	$!&!	%(   	
	s    
0 
>>c                     > T" U 0 UD6n T   TU   sS S S 5        $ ! , (       d  f       O= f! [          a     Of = fT" U 0 UD6n T   UTU'   S S S 5        U$ ! , (       d  f       U$ = f! [         a     U$ f = fr   r%   )r    r!   r(   r)   r*   r"   r+   locks       r   r   r#   9   s      	8 tt 	
	$!&!	E!H  	 t   	
	sP   - 	- 
*- - 
::A* AA* 
A'"A* 'A* *
A87A8r   )r"   r   r*   r+   r-   s   ` r   	decoratorcached.<locals>.decorator$   s5    }%	   7D))r   r   r*   r+   r-   r/   s   ``` r   r   r      s    $*L 
r   c                    ^ ^^ U UU4S jnU$ )zhDecorator to wrap a class or instance method with a memoizing

callable that saves results in a cache.

c                 H   >^  Tc	  UUU 4S jnO	UUUU 4S jn[        UT 5      $ )Nc                    > T" U 5      nUc  T" U /UQ70 UD6$ T" U0 UD6n X4   $ ! [          a     Of = fT" U /UQ70 UD6n XSU'   U$ ! [         a     U$ f = fr   r%   )	selfr    r!   cr(   r)   r*   r+   methods	         r   r   0cachedmethod.<locals>.decorator.<locals>.wrapperW   s    $K9.t.v.
.  	+ 	
	4)$)&)	A$   	
	s   & 
33A	 	
AAc                 @  > T" U 5      nUc  T	" U /UQ70 UD6$ T" U0 UD6n T" U 5         X4   sS S S 5        $ ! , (       d  f       O= f! [          a     Of = fT	" U /UQ70 UD6n T" U 5         XSU'   S S S 5        U$ ! , (       d  f       U$ = f! [         a     U$ f = fr   r%   )
r5   r    r!   r6   r(   r)   r*   r+   r-   r7   s
         r   r   r8   h   s    $K9.t.v.
.  	Dz4 zz 	
	4)$)&)	DzaD  	 z   	
	s[   A	 8	A	 
AA	 A	 	
AA&B .A=3B =
BB B 
BBr.   )r7   r   r*   r+   r-   s   ` r   r/   cachedmethod.<locals>.decoratorT   s+    | " $ 7F++r   r   r1   s   ``` r   r   r   M   s    &,P 
r   )__doc__
__future__r   r    r   r*   r   lfur   lrur   rrr	   ttlr
   __all____version__hasattrr   r   hashkeyr   r   r   r   r   <module>rF      sy    6 &        
9##M:>NN,,/ ll -` !LLt /r   