
    h-i!S                        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fdZy)z0Extensible memoizing collections and decorators.)	Cache	FIFOCacheLFUCacheLRUCacheRRCache	TLRUCacheTTLCachecachedcachedmethodz6.2.2    N   )keysc                   "    e Zd ZdZd Zd Zd Zy)_DefaultSize c                      yNr   r   self_keys     RD:\DhanshreeandTeamAI\Github\ai_code\venv\Lib\site-packages\cachetools/__init__.py__getitem__z_DefaultSize.__getitem__           c                      y Nr   )r   r   _values      r   __setitem__z_DefaultSize.__setitem__!   s    r   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__/   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*   r,   r+   r   s    r   __repr__zCache.__repr__8   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__@   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;   valuer.   sizediffsizes         r   r   zCache.__setitem__F   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*   r+   )r   r;   r@   s      r   __delitem__zCache.__delitem__V   s.    {{s#KK4r   c                     || j                   v S r   )r*   r:   s     r   __contains__zCache.__contains__[   s    dkk!!r   c                     t        |      r   )r8   r:   s     r   r9   zCache.__missing__^   s    smr   c                 ,    t        | j                        S r   )iterr*   r5   s    r   __iter__zCache.__iter__a   s    DKK  r   c                 ,    t        | j                        S r   )lenr*   r5   s    r   __len__zCache.__len__d   s    4;;r   c                     || v r| |   S |S r   r   )r   r;   defaults      r   getz	Cache.getm   s    $;9Nr   c                 X    || v r
| |   }| |= |S || j                   u rt        |      |}|S r   )_Cache__markerr8   r   r;   rN   r?   s       r   r   z	Cache.pops   sB    $;IES	
 	 %3-Er   c                 *    || v r| |   }|S |x| |<   }|S r   r   rR   s       r   
setdefaultzCache.setdefault}   s.    $;IE  !('DIr   c                     | j                   S )zThe maximum size of the cache.)r,   r5   s    r   r.   zCache.maxsize   s     ~~r   c                     | j                   S )zThe current size of the cache.)r+   r5   s    r   currsizezCache.currsize   s     r   c                      y)z+Return the size of a cache element's value.r   r   )r?   s    r   r'   zCache.getsizeof   s     r   r   )r    r!   r"   __doc__objectrQ   r   r)   r/   r6   r   r   rC   rE   r9   rI   rL   rO   r   rT   propertyr.   rW   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 r   )r   r/   collectionsOrderedDict_FIFOCache__orderr-   s      r   r/   zFIFOCache.__init__   "    tWi0"..0r   c                      || ||       	 | j                   j                  |       y # t        $ r d | j                   |<   Y y w xY wr   )ra   move_to_endr8   r   r;   r?   cache_setitems       r   r   zFIFOCache.__setitem__   sB    dC'	%LL$$S) 	% $DLL	%s   ( AAc                 0     || |       | j                   |= y r   )ra   r   r;   cache_delitems      r   rC   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)nextrH   ra   r   StopIterationr8   r3   r    r:   s     r   r>   zFIFOCache.popitem   ^    	(tDLL)*C #''  	J=4:+>+>>?TI	J	   3 ,Ar   )	r    r!   r"   rY   r/   r   r   rC   r>   r   r   r   r   r      s/    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y)r   z1Least Frequently Used (LFU) cache implementation.c                       e Zd ZdZd Zd Zy)LFUCache._Link)countr   rm   prevc                 0    || _         t               | _        y r   )rt   setr   )r   rt   s     r   r/   zLFUCache._Link.__init__   s    DJDIr   c                 P    | j                   }| j                  }||_         ||_        y r   rm   ru   r   rm   ru   s      r   unlinkzLFUCache._Link.unlink   "    99D99DDIDIr   N)r    r!   r"   r#   r/   r{   r   r   r   _Linkrs      s    5			r   r}   Nc                     t         j                  | ||       t        j                  d      x| _        }|x|_        |_        i | _        y r&   )r   r/   r   r}   _LFUCache__rootru   rm   _LFUCache__links)r   r.   r'   roots       r   r/   zLFUCache.__init__   s<    tWi0%^^A..d $$	DIr   c                 B     || |      }|| v r| j                  |       |S r   )_LFUCache__touchr   r;   cache_getitemr?   s       r   r   zLFUCache.__getitem__   &    dC($;LLr   c                     || ||       || j                   v r| j                  |      S | j                  }|j                  }|j                  dk7  rEt
        j                  d      }|j                  |_        |x|_        |j                  _        ||_        |j                  j                  |       || j                   |<   y r   )
r   r   r   rm   rt   r   r}   ru   r   add)r   r;   r?   rf   r   links         r   r   zLFUCache.__setitem__   s    dC'$,,<<$${{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;   ri   r   s       r   rC   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.rl   N)r   rm   r8   r3   r    rH   r   r   )r   r   currr;   s       r   r>   zLFUCache.popitem   s\    {{yy4<=4:+>+>>?TI4		?#TXXc]##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   rm   rt   rK   r   r   r}   ru   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"   rY   r}   r/   r   r   r   rC   r>   r   r   r   r   r   r      sN    ;  .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 r   )r   r/   r_   r`   _LRUCache__orderr-   s      r   r/   zLRUCache.__init__   rb   r   c                 B     || |      }|| v r| j                  |       |S r   _LRUCache__touchr   s       r   r   zLRUCache.__getitem__  r   r   c                 :     || ||       | j                  |       y r   r   re   s       r   r   zLRUCache.__setitem__
  s    dC'Sr   c                 0     || |       | j                   |= y r   )r   rh   s      r   rC   zLRUCache.__delitem__  rj   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.rl   N)rm   rH   r   r   rn   r8   r3   r    r:   s     r   r>   zLRUCache.popitem  ro   rp   c                 x    	 | j                   j                  |       y# t        $ r d| j                   |<   Y yw xY w)zMark as recently usedN)r   rd   r8   r:   s     r   r   zLRUCache.__touch  s6    	%LL$$S) 	% $DLL	%s    99r   )r    r!   r"   rY   r/   r   r   r   rC   r>   r   r   r   r   r   r      sD    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y)r   z-Random Replacement (RR) cache implementation.Nc                 \    t         j                  | ||       || _        i | _        g | _        y r   )r   r/   _RRCache__choice_RRCache__index_RRCache__keys)r   r.   choicer'   s       r   r/   zRRCache.__init__&  s'    tWi0r   c                     | j                   S )z(The `choice` function used by the cache.)r   r5   s    r   r   zRRCache.choice,  s     }}r   c                      || ||       || j                   vr>t        | j                        | j                   |<   | j                  j                  |       y y r   )r   rK   r   appendre   s       r   r   zRRCache.__setitem__1  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   rK   r   )r   r;   ri   indexlasts        r   rC   zRRCache.__delitem__7  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.rl   N)r   r   r   
IndexErrorr8   r3   r    r:   s     r   r>   zRRCache.popitem@  s]    	(--,C #''  	J=4:+>+>>?TI	Js	   0 ,A)r    r!   r"   rY   randomr   r/   r[   r   r   rC   r>   r   r   r   r   r   #  sL    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   r/   z_TimedCache._Timer.__init__N  s     DLDNr   c                 X    | j                   dk(  r| j                         S | j                  S r&   r   r   _Timer__timer5   s    r   __call__z_TimedCache._Timer.__call__R  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__X  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   r5   s    r   
__reduce__z_TimedCache._Timer.__reduce__c  s    %%66r   c                 .    t        | j                  |      S r   )getattrr   )r   names     r   __getattr__z_TimedCache._Timer.__getattr__f  s    4<<..r   N)	r    r!   r"   r/   r   r   r   r   r   r   r   r   r   r   M  s     		#		 	7	/r   r   Nc                 f    t         j                  | ||       t        j                  |      | _        y r   )r   r/   r   r   _TimedCache__timer)r   r.   r   r'   s       r   r/   z_TimedCache.__init__i  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   r6   z_TimedCache.__repr__m  s)    \\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   rL   z_TimedCache.__len__r  s(    \\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   superrW   )r   r   	__class__s     r   rW   z_TimedCache.currsizew  s*    \\TKK7# \\s   3<c                     | j                   S )z%The timer function used by the cache.)r   r5   s    r   r   z_TimedCache.timer}  s     ||r   c                     | j                   5 }| j                  |       t        j                  |        d d d        y # 1 sw Y   y xY wr   )r   r   r   clearr   s     r   r   z_TimedCache.clear  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r   )r   r   rO   r   argskwargss      r   rO   z_TimedCache.get  )    \\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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   rT   r   s      r   rT   z_TimedCache.setdefault  s+    \\##D:4:6: \\r   )r    r!   r"   rY   r   r   	monotonicr/   r   r6   rL   r[   rW   r   r   rO   r   rT   __classcell__)r   s   @r   r   r   J  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;   expiresrm   ru   Nc                      || _         || _        y r   )r;   r   r   r;   r   s      r   r/   zTTLCache._Link.__init__  s    DH"DLr   c                 R    t         j                  | j                  | j                  ffS r   )r   r}   r;   r   r5   s    r   r   zTTLCache._Link.__reduce__  s    >>DHHdll#;;;r   c                 P    | j                   }| j                  }||_         ||_        y r   ry   rz   s      r   r{   zTTLCache._Link.unlink  r|   r   NN)r    r!   r"   r#   r/   r   r{   r   r   r   r}   r     s    6		#	<	r   r}   Nc                     t         j                  | |||       t        j                         x| _        }|x|_        |_        t        j                         | _	        || _
        y r   )r   r/   r   r}   _TTLCache__rootru   rm   r_   r`   _TTLCache__links_TTLCache__ttl)r   r.   ttlr   r'   r   s         r   r/   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   r8   )r   r;   r   s      r   rE   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   r8   r9   )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{   r8   r   r}   r   r   r   r   rm   ru   )r   r;   r?   rf   r   r   r   ru   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 r   )r   r   r{   r   r   r8   r   s       r   rC   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   rm   r   r   r;   )r   r   r   r   s       r   rI   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 r   r   )objs    r   <lambda>z'TTLCache.__setstate__.<locals>.<lambda>  s    #++r   )r;   )
__dict__updater   ru   rm   sortedr   valuesr   r   )r   stater   r   ru   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   r5   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   rm   r   r   rC   r   r   r   r;   r{   )	r   r   r   r   linksr   ri   r   rm   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.

        Nrl   )
r   r   rm   rH   r   r   rn   r8   r3   r    r   r   r;   s      r   r>   zTTLCache.popitem      
 ZZ4KK,4-. TXXc]+ Z ! N}tDz/B/BBCMN	 Z!   B	AB	,BB		Bc                 Z    | j                   |   }| j                   j                  |       |S r   )r   rd   r   r;   r?   s      r   	__getlinkzTTLCache.__getlink  '    S!  %r   r   )r    r!   r"   rY   r}   r   r   r/   rE   r   r   r   rC   rI   r  r[   r   r   r>   r   r   r   r   r   r     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   r/   zTLRUCache._Item.__init__"  s    DH"DL DLr   c                 4    | j                   |j                   k  S r   r   )r   others     r   __lt__zTLRUCache._Item.__lt__'  s    <<%--//r   r   )r    r!   r"   r#   r/   r  r   r   r   _Itemr    s    1		!
	0r   r  Nc                     t         j                  | |||       t        j                         | _        g | _        || _        y r   )r   r/   r_   r`   _TLRUCache__items_TLRUCache__order_TLRUCache__ttu)r   r.   ttur   r'   s        r   r/   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   r8   )r   r;   items      r   rE   zTLRUCache.__contains__0  r   r   c                     	 | j                  |      }| j                         |j                  k   }|r| j	                  |      S  || |      S # t        $ r d}Y )w xY wr   )_TLRUCache__getitemr   r   r8   r9   )r   r;   r   r   r   s        r   r   zTLRUCache.__getitem__8  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  r8   r   r  r  heapqheappushr  )r   r;   r?   rf   r   r   r   s          r   r   zTLRUCache.__setitem__D  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   r8   )r   r;   ri   r   r   s        r   rC   zTLRUCache.__delitem__T  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r   )r  r   r   r  r;   )r   r   r   s      r   rI   zTLRUCache.__iter__]  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  r5   s    r   r  zTLRUCache.ttud  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  rK   r  r%  heapifyr   rC   r   r   heappopr   r;   )r   r   itemsorderr   r   ri   r   s           r   r   zTLRUCache.expirei  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t        |       j                  z        dw xY w# 1 sw Y   yxY wr  )
r   r   rm   rH   r  r   rn   r8   r3   r    r	  s      r   r>   zTLRUCache.popitem  r
  r  c                 Z    | j                   |   }| j                   j                  |       |S r   )r  rd   r  s      r   	__getitemzTLRUCache.__getitem  r  r   r   )r    r!   r"   rY   	functoolstotal_orderingr  r   r   r/   rE   r   r   r   rC   rI   r[   r  r   r>   r"  r   r   r   r   r     s    E	0 	0 	0 ,0>>T / .3->-> 
, 5:4E4E +  .3->->  #  0,r   r   	CacheInfo)hitsmissesr.   rW   Fc                      ddl m t        t              rddlm}  |dt        d       d fd	}|S )
z_Decorator to wrap a function with a memoizing callable that saves
    results in a cache.

    r   _wrapperr   )warnz4passing `info` as positional parameter is deprecatedr+  )
stacklevelNc                     rQt        t              rfd}n-t        t        j                  j                        rfd}nd } | |      S  |       S )Nc                 H    t        | |j                  j                        S r   )
_CacheInfor.   rW   r6  r7  caches     r   	make_infoz,cached.<locals>.decorator.<locals>.make_info  s    %dFEMM5>>RRr   c                 2    t        | |d t                    S r   )r?  rK   r@  s     r   rB  z,cached.<locals>.decorator.<locals>.make_info  s    %dFD#e*EEr   c                     t        | |dd      S r&   )r?  )r6  r7  s     r   rB  z,cached.<locals>.decorator.<locals>.make_info  s    %dFAq99r   )info)
isinstancer   r_   abcMapping)funcrB  r:  rA  	conditionrE  r;   locks     r   	decoratorzcached.<locals>.decorator  sa    %'S E;??#:#:;F
: D%dIINND%dI>>r   )_cachedr:  rF  boolwarningsr;  DeprecationWarning)rA  r;   rK  rJ  rE  r;  rL  r:  s   `````  @r   r	   r	     sD    
 ")T"!B	

 	? ?* r   c                 .     ddl m  fd}|S )zoDecorator to wrap a class or instance method with a memoizing
    callable that saves results in a cache.

    r   r9  c                      |       S r   r   )methodr:  rA  rJ  r;   rK  s    r   rL  zcachedmethod.<locals>.decorator  s    sD)<<r   )_cachedmethodr:  )rA  r;   rK  rJ  rL  r:  s   ```` @r   r
   r
     s    
 (= = r   )rY   __all____version__r_   collections.abcr3  r%  r   r    r   r   rG  MutableMappingr   r   r   r   r   r   r   r   
namedtupler?  hashkeyr	   	methodkeyr
   r   r   r   <module>r]     s    6
        
 
iKOO** iX( (8J!u J!Z#%u #%L$(e $(NG;% G;TD{ DNw wt $[##:

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