
    Ig                         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y)    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y)
SegmentCachekeyreturnc                      y N selfr   s     f/var/www/html/answerous/venv/lib/python3.12/site-packages/chromadb/segment/impl/manager/cache/cache.pygetzSegmentCache.get
           c                      y r   r   r   s     r   popzSegmentCache.pop   r   r   valueNc                      y r   r   r   r   r   s      r   setzSegmentCache.set   r   r   c                      y 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    tyy Xg%6   tyy Xg%6   tyy  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y)
BasicCachec                     i | _         y r   cacher   s    r   __init__zBasicCache.__init__   s	    /1
r   r   r   c                 8    | j                   j                  |      S r   )r+   r   r   s     r   r   zBasicCache.get   s    zz~~c""r   c                 :    | j                   j                  |d       S r   )r+   r   r   s     r   r   zBasicCache.pop#   s    zz~~c4((r   r   Nc                 "    || j                   |<   y r   r*   r   s      r   r   zBasicCache.set'   s    

3r   c                     i | _         y 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 #tyy #Xg%6 # # )tyy )Xg%6 ) )  tyy    T      r   r(   c            
       :   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y)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                 J    || _         || _        i | _        g | _        || _        y r   )r3   r4   r+   historyr5   )r   r3   r4   r5   s       r   r,   zSegmentLRUCache.__init__4   s'     !"/1
 r   r   c                     || j                   v r7| j                   j                  |       | j                   j                  |       y | j                   j                  |       y r   )r7   removeappendr   s     r   _upsert_keyzSegmentLRUCache._upsert_key@   sD    $,,LL$LL$LL$r   r   c                 `    | j                  |       || j                  v r| j                  |   S y r   )r;   r+   r   s     r   r   zSegmentLRUCache.getG   s-    $**::c?"r   c                     || j                   v r| j                   j                  |       | j                  j                  |d       S r   )r7   r9   r+   r   r   s     r   r   zSegmentLRUCache.popO   s5    $,,LL$zz~~c4((r   r   c                 l   || j                   v ry | j                  |      }| j                   D ci c]  }|| j                  |       }}t        |j                               }d}||z   | j                  kD  rt        | j                        |kD  r| j                  |   }|| j                   v r4| j                  || j                   |          | j                   |= |||   z  }|dz  }||z   | j                  kD  rt        | j                        |kD  r|| j                   <   | j                  |       y c c}w )Nr      )	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   $**NN3'	9=D#S$..--D	D))+,
9$t}}4T\\9JU9Re,JTZZ'j$**Z*@AJJz*i
33
QJE 9$t}}4T\\9JU9R  

3 Es   D1c                      i | _         g | _        y 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   s    O CG	
!
! TYYK,-
! 8TYY$8#$=>?	
!%tyy % tyy Xg%6   )tyy )Xg%6 ) )
 tyy  T  &  r   r2   )r%   typingr   r   chromadb.typesr   	overridesr   r   r   abcr	   r
   r   r(   r2   r   r   r   <module>rO      s;       "  ! #3 $ *<j <r   