
    ui                         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e          Z G d	 d
e          Z G d de          ZdS )    N)AnyCallable)Segment)override)DictOptional)ABCabstractmethodc                       e Zd Zedej        dee         fd            Zedej        dee         fd            Z	edej        deddfd            Z
ed	d            ZdS )
SegmentCachekeyreturnc                     d S N selfr   s     \/var/www/icac/venv/lib/python3.11/site-packages/chromadb/segment/impl/manager/cache/cache.pygetzSegmentCache.get
           c                     d S r   r   r   s     r   popzSegmentCache.pop   r   r   valueNc                     d S r   r   r   r   r   s      r   setzSegmentCache.set   r   r   c                     d S r   r   r   s    r   resetzSegmentCache.reset   r   r   r   N)__name__
__module____qualname__r
   uuidUUIDr   r   r   r   r   r    r   r   r   r   r   	   s        ty Xg%6    ^ ty Xg%6    ^ ty  T    ^    ^  r   r   c                       e Zd Zd Zedej        dee         fd            Z	edej        dee         fd            Z
edej        deddfd            Zed
d	            ZdS )
BasicCachec                     i | _         d S r   cacher   s    r   __init__zBasicCache.__init__   s    /1


r   r   r   c                 6    | j                             |          S r   )r+   r   r   s     r   r   zBasicCache.get   s    z~~c"""r   c                 8    | j                             |d           S r   )r+   r   r   s     r   r   zBasicCache.pop#   s    z~~c4(((r   r   Nc                     || j         |<   d S r   r*   r   s      r   r   zBasicCache.set'   s    
3r   c                     i | _         d S r   r*   r   s    r   r    zBasicCache.reset+   s    


r   r!   )r"   r#   r$   r,   r   r%   r&   r   r   r   r   r   r    r   r   r   r(   r(      s        2 2 2 #ty #Xg%6 # # # X# )ty )Xg%6 ) ) ) X)  ty    T       X     X  r   r(   c            
       6   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Zdej        fdZedej        d	ee	         fd
            Zedej        d	ee	         fd            Zedej        de	d	dfd            Ze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                 L    || _         || _        i | _        g | _        || _        d S r   )r3   r4   r+   historyr5   )r   r3   r4   r5   s       r   r,   zSegmentLRUCache.__init__4   s+     !"/1
 r   r   c                     || j         v r6| j                             |           | j                             |           d S | j                             |           d S r   )r7   removeappendr   s     r   _upsert_keyzSegmentLRUCache._upsert_key@   s]    $,L$$$L$$$$$L$$$$$r   r   c                 \    |                      |           || j        v r| j        |         S d S r   )r;   r+   r   s     r   r   zSegmentLRUCache.getG   s4    $*:c?"4r   c                 ~    || j         v r| j                             |           | j                            |d           S r   )r7   r9   r+   r   r   s     r   r   zSegmentLRUCache.popO   s;    $,L$$$z~~c4(((r   r   c                 (    | j         v rd S                      |          } fd j         D             }t          |                                          }d}||z    j        k    rt           j                  |k    ru j        |         }| j         v r4                     | j         |                     j         |= |||         z  }|dz  }||z    j        k    rt           j                  |k    u| j         |<                        |           d S )Nc                 <    i | ]}|                     |          S r   )r4   ).0r   r   s     r   
<dictcomp>z'SegmentLRUCache.set.<locals>.<dictcomp>Z   s'    DDD#S$..--DDDr   r      )	r+   r4   sumvaluesr3   lenr7   r5   r;   )r   r   r   	item_size	key_sizes
total_sizeindex
key_deletes   `       r   r   zSegmentLRUCache.setU   s*   $*FNN3''	DDDDDDD	))++,,
9$t}44T\9J9JU9R9Re,JTZ''j$*Z*@AAAJz*i
33
QJE 9$t}44T\9J9JU9R9R  
3r   c                 "    i | _         g | _        d S r   )r+   r7   r   s    r   r    zSegmentLRUCache.reseti   s    
r   r   )r"   r#   r$   __doc__intr   r%   r&   r   r   r   r,   r;   r   r   r   r   r    r   r   r   r2   r2   0   sY       O O CG	
! 
!
! TYK,-
! 8TY$8#$=>?	
! 
! 
! 
!%ty % % % % ty Xg%6    X )ty )Xg%6 ) ) ) X)
 ty  T    X&   X  r   r2   )r%   typingr   r   chromadb.typesr   	overridesr   r   r   abcr	   r
   r   r(   r2   r   r   r   <module>rR      s                    " " " " " "       ! ! ! ! ! ! ! ! # # # # # # # #    3   $       *< < < < <j < < < < <r   