o
    *Th4                     @   sT   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 deee	f Z
dS )    )OrderedDict)AnyCallableGenericOptionalTypeVarKVc                   @   s`   e Zd ZdZddedeeeege	f  fddZ
dedee fd	d
ZdededdfddZdS )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                 C   s   || _ t | _|| _d S N)r   r   cacher   )selfr   r    r   Y/home/air/segue/gemini/back/venv/lib/python3.10/site-packages/chromadb/utils/lru_cache.py__init__   s   
zLRUCache.__init__keyreturnc                 C   s(   || j vrd S | j |}|| j |< |S r   )r   pop)r   r   valuer   r   r   get   s
   

zLRUCache.getr   c                 C   sZ   || j v r| j | nt| j | jkr&| j jdd\}}| jr&| || || j |< d S )NF)last)r   r   lenr   popitemr   )r   r   r   evicted_keyevicted_valuer   r   r   set   s   
zLRUCache.setr   )__name__
__module____qualname____doc__intr   r   r   r	   r   r   r   r   r   r   r   r   r
   	   s
    $r
   N)collectionsr   typingr   r   r   r   r   r   r	   r
   r   r   r   r   <module>   s
    