
    ugk                         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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     ^/var/www/openai/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                 D    i | _         t        j                         | _        y r   )cache	threadingRLocklockr   s    r   __init__zBasicCache.__init__   s    /1
OO%	r   r   r   c                 |    | j                   5  | j                  j                  |      cd d d        S # 1 sw Y   y xY wr   )r-   r*   r   r   s     r   r   zBasicCache.get!   s#    YY::>>#& YYs   2;c                 ~    | j                   5  | j                  j                  |d       cd d d        S # 1 sw Y   y xY wr   )r-   r*   r   r   s     r   r   zBasicCache.pop&   s%    YY::>>#t, YYs   3<r   Nc                 d    | j                   5  || j                  |<   d d d        y # 1 sw Y   y xY wr   r-   r*   r   s      r   r   zBasicCache.set+   s     YY#DJJsO YYs   &/c                 T    | j                   5  i | _        d d d        y # 1 sw Y   y xY wr   r2   r   s    r   r    zBasicCache.reset0   s    YYDJ YYs   'r!   )r"   r#   r$   r.   r   r%   r&   r   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	 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                 |    || _         || _        i | _        g | _        || _        t        j                         | _        y r   )r6   r7   r*   historyr8   r+   r,   r-   )r   r6   r7   r8   s       r   r.   zSegmentLRUCache.__init__:   s5     !"/1
 OO%	r   r   c                     || j                   v r7| j                   j                  |       | j                   j                  |       y | j                   j                  |       y r   )r:   removeappendr   s     r   _upsert_keyzSegmentLRUCache._upsert_keyG   sD    $,,LL$LL$LL$r   r   c                     | j                   5  | j                  |       || j                  v r| j                  |   cd d d        S 	 d d d        y # 1 sw Y   y xY wr   )r-   r>   r*   r   s     r   r   zSegmentLRUCache.getN   sD    YYS!djj zz# Y
  YYs   .AAAc                     | j                   5  || j                  v r| j                  j                  |       | j                  j	                  |d       cd d d        S # 1 sw Y   y xY wr   )r-   r:   r<   r*   r   r   s     r   r   zSegmentLRUCache.popW   sC    YYdll"##C(::>>#t, YYs   AAA%r   c                    | j                   5  || j                  v r
	 d d d        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                  |       d d d        y c c}w # 1 sw Y   y xY w)Nr      )
r-   r*   r7   sumvaluesr6   lenr:   r8   r>   )r   r   r   	item_size	key_sizes
total_sizeindex
key_deletes           r   r   zSegmentLRUCache.set^   s:   YYdjj  Y s+I=AZZHZcdnnS11ZIHY--/0JEy(4==8S=NQV=V!\\%0
+MM*djj.DE

:.)J"77J
 y(4==8S=NQV=V $DJJsOS!# Y I	 Ys)   EEECE& EEEc                 b    | j                   5  i | _        g | _        d d d        y # 1 sw Y   y xY wr   )r-   r*   r:   r   s    r   r    zSegmentLRUCache.resets   s!    YYDJDL YYs   %.r   )r"   r#   r$   __doc__intr   r%   r&   r   r   r   r.   r>   r   r   r   r   r    r   r   r   r5   r5   6   s    O CG	&& TYYK,-& 8TYY$8#$=>?	&%tyy % tyy Xg%6   -tyy -Xg%6 - - "tyy " "T " "(  r   r5   )r+   r%   typingr   r   chromadb.typesr   	overridesr   r   r   abcr	   r
   r   r(   r5   r   r   r   <module>rR      s@        "  ! #3 $ 4Aj Ar   