
    ug4                     l    d dl mZ d dlmZmZmZmZmZ  ed      Z ed      Z	 G d deee	f         Z
y)    )OrderedDict)AnyCallableGenericOptionalTypeVarKVc                   `    e Zd ZdZddedeeeege	f      fdZ
dedee   fdZded	eddfd
Zy)LRUCachezA simple LRU cache implementation, based on the OrderedDict class, which allows
    for a callback to be invoked when an item is evicted from the cache.Ncapacitycallbackc                 >    || _         t               | _        || _        y N)r   r   cacher   )selfr   r   s      M/var/www/openai/venv/lib/python3.12/site-packages/chromadb/utils/lru_cache.py__init__zLRUCache.__init__   s     (3
     keyreturnc                 x    || j                   vry | j                   j                  |      }|| j                   |<   |S r   )r   pop)r   r   values      r   getzLRUCache.get   s5    djj 

s#

3r   r   c                 4   || j                   v r| j                   j                  |       n_t        | j                         | j                  k(  r=| j                   j	                  d      \  }}| j
                  r| j                  ||       || j                   |<   y )NF)last)r   r   lenr   popitemr   )r   r   r   evicted_keyevicted_values        r   setzLRUCache.set   sp    $**JJNN3_-)-);););)G&K}}k=9

3r   r   )__name__
__module____qualname____doc__intr   r   r	   r
   r   r   r   r"    r   r   r   r   	   s^    L! !1a&#+9N0O !
q Xa[  q    t  r   r   N)collectionsr   typingr   r   r   r   r   r	   r
   r   r(   r   r   <module>r+      s6    # < < CLCL wq!t}  r   