
     h+U                        d Z dZdZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZ  G d d	      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j2                  dg d      Ze
j6                  ddfdZe
j:                  dfd Zy)!z0Extensible memoizing collections and decorators.)
Cache	FIFOCacheLFUCacheLRUCacheMRUCacheRRCache	TLRUCacheTTLCachecachedcachedmethodz5.5.2    N   )keys)_cached_wrapperc                   "    e Zd ZdZd Zd Zd Zy)_DefaultSize c                      yNr   r   self_s     S/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/cachetools/__init__.py__getitem__z_DefaultSize.__getitem__            c                     |dk(  sJ y r   r   )r   r   values      r   __setitem__z_DefaultSize.__setitem__#   s    zzr   c                      yr   r   r   s     r   popz_DefaultSize.pop&   r   r   N)__name__
__module____qualname__	__slots__r   r   r    r   r   r   r   r      s    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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__1   s<    &DN>>0&DKf r   c                     | 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__:   s3    NN##NNOO	
 	
r   c                 b    	 | j                   |   S # t        $ r | j                  |      cY S w xY wN)r+   KeyError__missing__r   keys     r   r   zCache.__getitem__B   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)r-   r(   
ValueErrorr+   r*   r,   popitem)r   r=   r   r/   sizediffsizes         r   r   zCache.__setitem__H   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 r9   )r*   r    r+   r,   )r   r=   rA   s      r   __delitem__zCache.__delitem__X   s.    {{s#KK4r   c                     || j                   v S r9   )r+   r<   s     r   __contains__zCache.__contains__]   s    dkk!!r   c                     t        |      r9   )r:   r<   s     r   r;   zCache.__missing__`   s    smr   c                 ,    t        | j                        S r9   )iterr+   r6   s    r   __iter__zCache.__iter__c   s    DKK  r   c                 ,    t        | j                        S r9   )lenr+   r6   s    r   __len__zCache.__len__f   s    4;;r   c                     || v r| |   S |S r9   r   )r   r=   defaults      r   getz	Cache.geti   s    $;9Nr   c                 X    || v r
| |   }| |= |S || j                   u rt        |      |}|S r9   )_Cache__markerr:   r   r=   rO   r   s       r   r    z	Cache.popo   sB    $;IES	
 	 %3-Er   c                 *    || v r| |   }|S |x| |<   }|S r9   r   rS   s       r   
setdefaultzCache.setdefaulty   s.    $;IE  !('DIr   c                     | j                   S )zThe maximum size of the cache.)r-   r6   s    r   r/   zCache.maxsize   s     ~~r   c                     | j                   S )zThe current size of the cache.)r,   r6   s    r   currsizezCache.currsize   s     r   c                      y)z+Return the size of a cache element's value.r   r   )r   s    r   r(   zCache.getsizeof   s     r   r9   )r!   r"   r#   __doc__objectrR   r   r*   r0   r7   r   r   rD   rF   r;   rJ   rM   rP   r    rU   propertyr/   rX   staticmethodr(   r   r   r   r   r   *   s    IxH^F!
)$  
"!   (       r   r   c                   Z    e Zd ZdZddZej                  fdZej                  fdZd Zy)r   z/First In First Out (FIFO) cache implementation.Nc                 d    t         j                  | ||       t        j                         | _        y r9   )r   r0   collectionsOrderedDict_FIFOCache__orderr.   s      r   r0   zFIFOCache.__init__   "    tWi0"..0r   c                      || ||       	 | j                   j                  |       y # t        $ r d | j                   |<   Y y w xY wr9   )rb   move_to_endr:   r   r=   r   cache_setitems       r   r   zFIFOCache.__setitem__   sB    dC'	%LL$$S) 	% $DLL	%s   ( AAc                 0     || |       | j                   |= y r9   )rb   r   r=   cache_delitems      r   rD   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)nextrI   rb   r    StopIterationr:   typer!   r<   s     r   r@   zFIFOCache.popitem   ^    	(tDLL)*C #''  	J=4:+>+>>?TI	J	   3 ,Ar9   )	r!   r"   r#   rZ   r0   r   r   rD   r@   r   r   r   r   r      s/    91 5:4E4E % .3->-> (r   r   c                   x    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	y)	r   z1Least Frequently Used (LFU) cache implementation.Nc                 d    t         j                  | ||       t        j                         | _        y r9   )r   r0   r`   Counter_LFUCache__counterr.   s      r   r0   zLFUCache.__init__   s"    tWi0$,,.r   c                 N     || |      }|| v r| j                   |xx   dz  cc<   |S r   rv   r   r=   cache_getitemr   s       r   r   zLFUCache.__getitem__   s.    dC($;NN31$r   c                 F     || ||       | j                   |xx   dz  cc<   y r   rx   rf   s       r   r   zLFUCache.__setitem__   s"    dC'sq r   c                 0     || |       | j                   |= y r9   rx   ri   s      r   rD   zLFUCache.__delitem__   s    dC NN3r   c                     	 | j                   j                  d      \  \  }}|| j                  |      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   rm   N)rv   most_commonr    r?   r:   rp   r!   )r   r=   r   s      r   r@   zLFUCache.popitem   se    	(..44Q7KXc1 #''  	J=4:+>+>>?TI	Js	    5 ,A!r9   )
r!   r"   r#   rZ   r0   r   r   r   rD   r@   r   r   r   r   r      s?    ;/ .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
y)
r   z/Least Recently Used (LRU) cache implementation.Nc                 d    t         j                  | ||       t        j                         | _        y r9   )r   r0   r`   ra   _LRUCache__orderr.   s      r   r0   zLRUCache.__init__   rc   r   c                 B     || |      }|| v r| j                  |       |S r9   _LRUCache__updatery   s       r   r   zLRUCache.__getitem__   &    dC($;MM#r   c                 :     || ||       | j                  |       y r9   r   rf   s       r   r   zLRUCache.__setitem__       dC'cr   c                 0     || |       | j                   |= y r9   )r   ri   s      r   rD   zLRUCache.__delitem__   rk   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.rm   N)rn   rI   r   r    ro   r:   rp   r!   r<   s     r   r@   zLRUCache.popitem   rq   rr   c                 x    	 | j                   j                  |       y # t        $ r d | j                   |<   Y y w xY wr9   )r   re   r:   r<   s     r   __updatezLRUCache.__update   s6    	%LL$$S) 	% $DLL	%s    99r9   )r!   r"   r#   rZ   r0   r   r   r   rD   r@   r   r   r   r   r   r      sD    91 .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
y)
r   z.Most Recently Used (MRU) cache implementation.Nc                     ddl m}  |dt        d       t        j	                  | ||       t        j                         | _        y )Nr   )warnzMRUCache is deprecated   )
stacklevel)warningsr   DeprecationWarningr   r0   r`   ra   _MRUCache__order)r   r/   r(   r   s       r   r0   zMRUCache.__init__   s3    !%'9aHtWi0"..0r   c                 B     || |      }|| v r| j                  |       |S r9   _MRUCache__updatery   s       r   r   zMRUCache.__getitem__   r   r   c                 :     || ||       | j                  |       y r9   r   rf   s       r   r   zMRUCache.__setitem__  r   r   c                 0     || |       | j                   |= y r9   )r   ri   s      r   rD   zMRUCache.__delitem__  rk   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 most recently used.rm   N)rn   rI   r   r    ro   r:   rp   r!   r<   s     r   r@   zMRUCache.popitem	  rq   rr   c                 |    	 | j                   j                  |d       y # t        $ r d | j                   |<   Y y w xY w)NF)last)r   re   r:   r<   s     r   r   zMRUCache.__update  s;    	%LL$$Su$5 	% $DLL	%s     ;;r9   )r!   r"   r#   rZ   r0   r   r   r   rD   r@   r   r   r   r   r   r      sD    81 .3->->  5:4E4E  .3->-> (%r   r   c                   F    e Zd ZdZej
                  dfdZed        Zd Zy)r   z-Random Replacement (RR) cache implementation.Nc                 @    t         j                  | ||       || _        y r9   )r   r0   _RRCache__choice)r   r/   choicer(   s       r   r0   zRRCache.__init__  s    tWi0r   c                     | j                   S )z(The `choice` function used by the cache.)r   r6   s    r   r   zRRCache.choice   s     }}r   c                     	 | j                  t        |             }|| j                  |      fS # t        $ r# t	        dt        |       j                  z        dw xY w)z/Remove and return a random `(key, value)` pair.rm   N)r   listr    
IndexErrorr:   rp   r!   r<   s     r   r@   zRRCache.popitem%  s]    	(--T
+C #''  	J=4:+>+>>?TI	Js	   / ,A)	r!   r"   r#   rZ   randomr   r0   r\   r@   r   r   r   r   r     s,    7'-}}   (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   r0   z_TimedCache._Timer.__init__3  s     DLDNr   c                 X    | j                   dk(  r| j                         S | j                  S r'   r   r   _Timer__timer6   s    r   __call__z_TimedCache._Timer.__call__7  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__E  s    NNaNr   c                 <    t         j                  | j                  ffS r9   )r   _Timerr   r6   s    r   
__reduce__z_TimedCache._Timer.__reduce__H  s    %%66r   c                 .    t        | j                  |      S r9   )getattrr   )r   names     r   __getattr__z_TimedCache._Timer.__getattr__K  s    4<<..r   N)	r!   r"   r#   r0   r   r   r   r   r   r   r   r   r   r   2  s     		#		 	7	/r   r   Nc                 f    t         j                  | ||       t        j                  |      | _        y r9   )r   r0   r   r   _TimedCache__timer)r   r/   r   r(   s       r   r0   z_TimedCache.__init__N  s$    tWi0"))%0r   c                 x    | j                   5 }| j                  |        ||       cd d d        S # 1 sw Y   y xY wr9   r   expire)r   
cache_reprr   s      r   r7   z_TimedCache.__repr__R  s)    \\TKKd# \\   09c                 x    | j                   5 }| j                  |        ||       cd d d        S # 1 sw Y   y xY wr9   r   )r   	cache_lenr   s      r   rM   z_TimedCache.__len__W  s(    \\TKKT? \\r   c                 ~    | j                   5 }| j                  |       t        |   cd d d        S # 1 sw Y   y xY wr9   )r   r   superrX   )r   r   r4   s     r   rX   z_TimedCache.currsize\  s*    \\TKK7# \\s   3<c                     | j                   S )z%The timer function used by the cache.)r   r6   s    r   r   z_TimedCache.timerb  s     ||r   c                     | j                   5 }| j                  |       t        j                  |        d d d        y # 1 sw Y   y xY wr9   )r   r   r   clearr   s     r   r   z_TimedCache.clearg  s-    \\TKKKK \\s	   '=Ac                 x    | j                   5  t        j                  | g|i |cd d d        S # 1 sw Y   y xY wr9   )r   r   rP   r   argskwargss      r   rP   z_TimedCache.getl  )    \\99T3D3F3 \\r   c                 x    | j                   5  t        j                  | g|i |cd d d        S # 1 sw Y   y xY wr9   )r   r   r    r   s      r   r    z_TimedCache.popp  r   r   c                 x    | j                   5  t        j                  | g|i |cd d d        S # 1 sw Y   y xY wr9   )r   r   rU   r   s      r   rU   z_TimedCache.setdefaultt  s+    \\##D:4:6: \\r   )r!   r"   r#   rZ   r   r   	monotonicr0   r   r7   rM   r\   rX   r   r   rP   r    rU   __classcell__)r4   s   @r   r   r   /  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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=   expiresrn   prevNc                      || _         || _        y r9   )r=   r   r   r=   r   s      r   r0   zTTLCache._Link.__init__  s    DH"DLr   c                 R    t         j                  | j                  | j                  ffS r9   )r	   _Linkr=   r   r6   s    r   r   zTTLCache._Link.__reduce__  s    >>DHHdll#;;;r   c                 P    | j                   }| j                  }||_         ||_        y r9   )rn   r   )r   rn   r   s      r   unlinkzTTLCache._Link.unlink  s"    99D99DDIDIr   NN)r!   r"   r#   r$   r0   r   r   r   r   r   r   r   |  s    6		#	<	r   r   Nc                     t         j                  | |||       t        j                         x| _        }|x|_        |_        t        j                         | _	        || _
        y r9   )r   r0   r	   r   _TTLCache__rootr   rn   r`   ra   _TTLCache__links_TTLCache__ttl)r   r/   ttlr   r(   roots         r   r0   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=   links      r   rF   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=   rz   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r9   )r   r   r   r   r:   r	   r   r   r   r   r   rn   r   )r   r=   r   rg   r   r   r   r   s           r   r   zTTLCache.__setitem__  s    ZZ4KK$U+ 	>>#&D KKMdjj(;;&	D99$	D $$	DI Z
  	;'/~~c'::DLL	;s   BB( B%(-CCc                      || |       | j                   j                  |      }|j                          | j                         |j                  k  st        |      y r9   )r   r    r   r   r   r:   )r   r=   rj   r   s       r   rD   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r9   )r   rn   r   r   r=   )r   r   currr   s       r   rJ   zTTLCache.__iter__  s]     {{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 r9   r   )objs    r   <lambda>z'TTLCache.__setstate__.<locals>.<lambda>  s    #++r   )r=   )
__dict__updater   r   rn   sortedr   valuesr   r   )r   stater   r   r   s        r   __setstate__zTTLCache.__setstate__  s    U#{{ $$	DI4<<..06MNDDI#yy(DI$((DI	 O 	DJJL!r   c                     | j                   S )z,The time-to-live value of the cache's items.)r   r6   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   rn   r   r   rD   r   r   appendr=   r   )	r   r   r   r   linksr   rj   rz   rn   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.

        Nrm   )
r   r   rn   rI   r   r    ro   r:   rp   r!   r   r   r=   s      r   r@   zTTLCache.popitem  s    
 ZZ4KK,4-. TXXc]+ Z ! N}tDz/B/BBCMN	 Zs!   B	AB	,BB		Bc                 Z    | j                   |   }| j                   j                  |       |S r9   )r   re   r   r=   r   s      r   	__getlinkzTTLCache.__getlink  '    S!  %r   r9   )r!   r"   r#   rZ   r   r   r   r0   rF   r   r   r   rD   rJ   r   r\   r   r   r@   r   r   r   r   r	   r	   y  s    J   ,0>>T / .3->-> 
, 5:4E4E % .3->->  "  ,,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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   r0   zTLRUCache._Item.__init__  s    DH"DL DLr   c                 4    | j                   |j                   k  S r9   r   )r   others     r   __lt__zTLRUCache._Item.__lt__  s    <<%--//r   r   )r!   r"   r#   r$   r0   r  r   r   r   _Itemr    s    1		!
	0r   r  Nc                     t         j                  | |||       t        j                         | _        g | _        || _        y r9   )r   r0   r`   ra   _TLRUCache__items_TLRUCache__order_TLRUCache__ttu)r   r/   ttur   r(   s        r   r0   zTLRUCache.__init__  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   rF   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=   rz   r  r   s        r   r   zTLRUCache.__getitem__  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=   r   rg   r   r   r  s          r   r   zTLRUCache.__setitem__)  s    ZZ4jjeT2G7N Z KK$U+ 	*.DNN3' $-??3#@@SDt||T* Z  		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=   rj   r   r  s        r   rD   zTLRUCache.__delitem__9  sZ    ZZ4$$  ||$t||#3- $ Zs   
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r9   )r  r   r   r  r=   )r   r   r   s      r   rJ   zTLRUCache.__iter__B  sD     LLDt$,,&t||((N  !s   A*AAA	Ac                     | j                   S )z1The local time-to-use function used by the cache.)r  r6   s    r   r  zTLRUCache.ttuI  r  r   c                    || j                         }| j                  }| j                  }t        |      t        |      d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  r  rL   r  r#  heapifyr   rD   r   r   heappopr  r=   )r   r   itemsorderr  r   rj   rz   s           r   r   zTLRUCache.expireN  s   
 <::<Du:E
Q&5:#OUT$,,DU#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| j                  j                  z        dw xY w# 1 sw Y   yxY wr  )
r   r   rn   rI   r  r    ro   r:   r4   r!   r	  s      r   r@   zTLRUCache.popitemf  s    
 ZZ4KK,4-. TXXc]+ Z ! R}t~~/F/FFGTQR	 Zs!   B
AB
-BB

Bc                 Z    | j                   |   }| j                   j                  |       |S r9   )r  re   r  s      r   	__getitemzTLRUCache.__getitemt  r  r   r9   )r!   r"   r#   rZ   	functoolstotal_orderingr  r   r   r0   rF   r   r   r   rD   rJ   r\   r  r   r@   r   r   r   r   r   r      s    E	0 	0 	0 ,0>>T / .3->-> 
, 5:4E4E +  .3->->  #  0,r   r   	CacheInfo)hitsmissesr/   rX   Fc                       fd}|S )z_Decorator to wrap a function with a memoizing callable that saves
    results in a cache.

    c                 "   rSt        t              rfd}n-t        t        j                  j                        rfd}nd }t        | |      }nt        | d       }|_        |_        |_        t        j                  ||       S )Nc                 H    t        | |j                  j                        S r9   )
_CacheInfor/   rX   r3  r4  caches     r   	make_infoz,cached.<locals>.decorator.<locals>.make_info  s    %dFEMM5>>RRr   c                 2    t        | |d t                    S r9   )r8  rL   r9  s     r   r;  z,cached.<locals>.decorator.<locals>.make_info  s    %dFD#e*EEr   c                     t        | |dd      S r'   )r8  )r3  r4  s     r   r;  z,cached.<locals>.decorator.<locals>.make_info  s    %dFAq99r   )
isinstancer   r`   abcMappingr   r:  	cache_key
cache_lockr0  update_wrapper)funcr;  wrapperr:  infor=   locks      r   	decoratorzcached.<locals>.decorator  s    %'S E;??#:#:;F
: &dE3iHG%dE3dCG!''66r   r   )r:  r=   rG  rF  rH  s   ```` r   r
   r
     s    76 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|i |S  | g|i |}	 ||   S # t         $ r Y nw xY w | g|i |}	 |||<   |S # t        $ r Y |S w xY wr9   )r:   r?   )	r   r   r   ckvr:  r=   methods	         r   rE  z0cachedmethod.<locals>.decorator.<locals>.wrapper  s    $K9!$8888.t.v.Q4K 41$1&1AaD  " s   * 	66A 	AAc                 <     |       }||j                          y y r9   r   )r   rL  r:  s     r   r   z.cachedmethod.<locals>.decorator.<locals>.clear  s    $K=GGI !r   c                 L    |       }| 	| g|i |S  | g|i |}	  |       5  ||   cd d d        S # 1 sw Y   nxY wn# t         $ r Y nw xY w 	| g|i |}	  |       5  |j                  ||      cd d d        S # 1 sw Y   y xY w# t        $ r |cY S w xY wr9   )r:   rU   r?   )
r   r   r   rL  rM  rN  r:  r=   rG  rO  s
         r   rE  z0cachedmethod.<locals>.decorator.<locals>.wrapper  s    $K9!$8888.t.v.d t $ 41$1&1d ||Aq1 $! HsU   A	 <	A	 AA	 		AA%B -B	?	B 	BB B B#"B#c                 v     |       }|" |       5  |j                          d d d        y y # 1 sw Y   y xY wr9   rQ  )r   rL  r:  rG  s     r   r   z.cachedmethod.<locals>.decorator.<locals>.clear  s3    $K=d	 $ !#s   /8)r:  rA  rB  cache_clearr0  rC  )rO  rE  r   r:  r=   rG  s   `  r   rH  zcachedmethod.<locals>.decorator  sP    < $" !#''88r   r   )r:  r=   rG  rH  s   ``` r   r   r     s    79r r   )rZ   __all____version__r`   collections.abcr0  r#  r   r    r   _decoratorsr   r   r?  MutableMappingr   r   r   r   r   r   r   r	   r   
namedtupler8  hashkeyr
   	methodkeyr   r   r   r   <module>r^     s    6         (
 
cKOO** cL( (8(u (>"%u "%J&%u &%R(e (,G;% G;TD{ DNw wt $[##:

 llE !H !NN ?r   