o
    gk                     @   s   d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZ G dd deZG d	d
 d
eZG dd deZdS )    N)AnyCallable)Segment)override)DictOptional)ABCabstractmethodc                   @   sn   e Zd Zedejdee fddZedejdee fddZ	edejdeddfd	d
Z
edddZdS )SegmentCachekeyreturnc                 C      d S N selfr   r   r   `/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/segment/impl/manager/cache/cache.pyget      zSegmentCache.getc                 C   r   r   r   r   r   r   r   pop   r   zSegmentCache.popvalueNc                 C   r   r   r   r   r   r   r   r   r   set   r   zSegmentCache.setc                 C   r   r   r   r   r   r   r   reset   r   zSegmentCache.resetr   N)__name__
__module____qualname__r	   uuidUUIDr   r   r   r   r   r   r   r   r   r   r
   
   s    r
   c                   @   sv   e Zd Zdd Zedejdee fddZ	edejdee fddZ
edejd	edd
fddZedddZd
S )
BasicCachec                 C   s   i | _ t | _d S r   )cache	threadingRLocklockr   r   r   r   __init__   s   zBasicCache.__init__r   r   c                 C   s6   | j  | j|W  d    S 1 sw   Y  d S r   )r%   r"   r   r   r   r   r   r   !   s   
$zBasicCache.getc                 C   s8   | j  | j|d W  d    S 1 sw   Y  d S r   )r%   r"   r   r   r   r   r   r   &   s   $zBasicCache.popr   Nc                 C   s6   | j  || j|< W d    d S 1 sw   Y  d S r   r%   r"   r   r   r   r   r   +   s   "zBasicCache.setc                 C   s2   | j  i | _W d    d S 1 sw   Y  d S r   r'   r   r   r   r   r   0   s   "zBasicCache.resetr   )r   r   r   r&   r   r   r    r   r   r   r   r   r   r   r   r   r   r!      s    r!   c                
   @   s   e Zd ZdZ	ddedeejgef deeeje	ge
f  fddZdejfd	d
Zedejdee	 fddZedejdee	 fddZedejde	ddfddZedd ZdS )SegmentLRUCachezA simple LRU cache implementation that handles objects with dynamic sizes.
    The size of each object is determined by a user-provided size function.Ncapacity	size_funccallbackc                 C   s,   || _ || _i | _g | _|| _t | _d S r   )r)   r*   r"   historyr+   r#   r$   r%   )r   r)   r*   r+   r   r   r   r&   :   s   zSegmentLRUCache.__init__r   c                 C   s6   || j v r| j | | j | d S | j | d S r   )r,   removeappendr   r   r   r   _upsert_keyG   s   
zSegmentLRUCache._upsert_keyr   c                 C   sZ   | j   | | || jv r| j| W  d    S 	 W d    d S 1 s&w   Y  d S r   )r%   r/   r"   r   r   r   r   r   N   s   

$zSegmentLRUCache.getc                 C   sN   | j  || jv r| j| | j|d W  d    S 1 s w   Y  d S r   )r%   r,   r-   r"   r   r   r   r   r   r   W   s
   
$zSegmentLRUCache.popr   c                    s   j u | jv r	 W d    d S  |} fdd jD }t| }d}||  jkrft j|krf j| }| jv rT | j|   j|= ||| 8 }|d7 }||  jkrft j|ks7| j|<  	| W d    d S 1 s{w   Y  d S )Nc                    s   i | ]}|  |qS r   )r*   ).0r   r   r   r   
<dictcomp>d   s    z'SegmentLRUCache.set.<locals>.<dictcomp>r      )
r%   r"   r*   sumvaluesr)   lenr,   r+   r/   )r   r   r   	item_size	key_sizes
total_sizeindex
key_deleter   r   r   r   ^   s&   




"zSegmentLRUCache.setc                 C   s8   | j  i | _g | _W d    d S 1 sw   Y  d S r   )r%   r"   r,   r   r   r   r   r   s   s   "zSegmentLRUCache.resetr   )r   r   r   __doc__intr   r   r    r   r   r   r&   r/   r   r   r   r   r   r   r   r   r   r(   6   s&    
r(   )r#   r   typingr   r   chromadb.typesr   	overridesr   r   r   abcr   r	   r
   r!   r(   r   r   r   r   <module>   s    