
    ugY                     :   d dl Z d dlZd dlmc mc mZ d dlmZ d dlZd dl	m
Z
mZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d
Z G d d      Z  G d de      Z! ede!jD                        dejF                  deddfd       Z$y)    N)patch)	BundleRuleBasedStateMachinerule
initializemultipleprecondition	invariantrun_state_machine_as_testMultipleResults)DictList)VectorReader)SegmentManager)SegmentScope)SysDB)Systemd   c                       e Zd ZU eed<   eej                     ed<   defdZdej                  deej                     fdZ	d	dZ
y)
LastUsenstorec                      || _         g | _        y N)r   r   )selfr   s     `/var/www/openai/venv/lib/python3.12/site-packages/chromadb/test/property/test_segment_manager.py__init__zLastUse.__init__#   s    
    idreturnc                    || j                   v rB| j                   j                  |       | j                   j                  |       | j                   S | j                   j                  |       t        | j                         | j                  kD  r>| j                   j                  d       t        | j                         | j                  kD  r>| j                   S Nr   )r   removeappendlenr   pop)r   r   s     r   addzLastUse.add'   s    JJb!JJb!
 zz JJb!djj/DFF*

q! djj/DFF*zzr   Nc                     g | _         y r   )r   r   s    r   resetzLastUse.reset1   s	    
r   r    N)__name__
__module____qualname__int__annotations__r   uuidUUIDr   r'   r*    r   r   r   r      sE    
F		?# dii DO r   r   c                       e Zd ZU eej
                     ed<    ed      Zi Ze	e
j                  ef   ed<   i Ze	e
j                  e
j                  f   ed<   def fdZ e       dd       Z e        ed	       dd
              Z e       dd       Z ee ej                                ed       dej
                  deej
                     fd              Z ee      dej
                  ddfd       Zededefd       Z xZS )SegmentManagerStateMachinecollectionscollection_size_storesegment_collectionsystemc                 0   t         |           |j                  t              | _        | j                  j                          | j                  j                          t        d      | _        d| _	        |j                  t              | _        || _        y )N(   )r   r   )superr   requirer   segment_managerstartreset_stater   last_usecollection_created_counterr   sysdbr9   )r   r9   	__class__s     r   r   z#SegmentManagerStateMachine.__init__;   sm    %~~n=""$((*"*+'^^E*
r   r    Nc                    d}d}t        | j                  j                        D ]^  }|| j                  |   z  }|t        k\  r|dk7  r y || j
                  j                  t        j                     j                  v sJ |dz  }` y )Nr      )
reversedrA   r   r7   memory_limitr>   segment_cacher   VECTORcache)r   	cache_sumindexr   s       r   (last_queried_segments_should_be_in_cachezCSegmentManagerStateMachine.last_queried_segments_should_be_in_cacheE   s    	4==../B33B77IL(UaZ--;;L<O<OPVVVVVQJE 0r   c                 F    | j                   j                  j                  du S )NT)r9   settingsis_persistentr)   s    r   <lambda>z#SegmentManagerStateMachine.<lambda>Q   s    t{{33AATIr   c                    | j                   j                  t        j                     j                  D ci c]  }|| j
                  |    }}t        |j                               }t        |      dk7  r|t        k  sJ y y c c}w )NrF   )
r>   rI   r   rJ   rK   r7   sumvaluesr%   rH   )r   r   segment_sizes
total_sizes       r   (cache_should_not_be_bigger_than_settingszCSegmentManagerStateMachine.cache_should_not_be_bigger_than_settingsP   s    
 **889L9LMSS
S **2..S 	 
 --/0
}"--- #
s   Bc                     | j                   j                          | j                   j                          d| _        | j                  j                          y r"   )r>   r@   r?   rB   rA   r*   r)   s    r   r   z%SegmentManagerStateMachine.initialize[   s>    ((*""$*+'r   )targetcollc                      | j                   dk  S )N2   )rB   r)   s    r   rR   z#SegmentManagerStateMachine.<lambda>c   s    t>>"Dr   r[   c                 V   | j                   j                  |      }|D ]9  }| j                  j                  |       |j                  | j
                  |d   <   ; | xj                  dz  c_        t        j                  dt              | j                  |j                  <   t        |      S )Nr   rF   r   )r>   #prepare_segments_for_new_collectionrC   create_segmentr   r8   rB   randomrandintrH   r7   r   )r   r[   segmentssegments       r   r_   z>SegmentManagerStateMachine.prepare_segments_for_new_collectionb   s     ''KKDQGJJ%%g.59WWD##GDM2   	''1,'.4nnQ.M""477+~r   )r[   c                     | j                   j                  |j                  t              }| j                  j                  |j                         |J y )N)collection_idtype)r>   get_segmentr   r   rA   r'   )r   r[   rd   s      r   rh   z&SegmentManagerStateMachine.get_segmentp   sJ    &&22'' 3 
 	$''""""r   	directoryc                     | j                  d      j                         }t        j                  t	        j
                  |         }t        j                  |   S )N/)splitr&   r5   r8   r1   r2   r7   )ri   path_idrf   s      r   mock_directory_sizez.SegmentManagerStateMachine.mock_directory_sizex   sH    //#&**,2EEIIg
 *??NNr   r+   )r,   r-   r.   r   
strategies
Collectionr0   r6   r7   r   r1   r2   r/   r8   r   r   r
   rN   r	   rX   r   r   r   r_   rh   staticmethodstrrn   __classcell__)rD   s   @r   r5   r5   5   sZ   
--..'K244		3/457TYY		127v  [  [IJ. K . \  
#9:#9#9#;<DE
))
	..	/
 F =
 
{#
 5 5 #$ # # Os Os O Or   r5   z6chromadb.segment.impl.manager.local.get_directory_sizecaplogr9   r    c                 n    t         j                  _        dj                  _        t	        fd       y )NLRUc                      t               S )Nr9   )r5   rx   s   r   rR   z&test_segment_manager.<locals>.<lambda>   s    &@&Or   )rH   rP   chroma_memory_limit_byteschroma_segment_cache_policyr   )rt   r9   s    `r   test_segment_managerr{      s&    
 1=FOO-27FOO/OPr   )%r1   pytest!chromadb.test.property.strategiestestpropertyro   unittest.mockr   ra   hypothesis.statefulr   r   r   r   r   r	   r
   r   r   typingr   r   chromadb.segmentr   r   chromadb.typesr   chromadb.db.systemr   chromadb.configr   rH   r   r5   rn   LogCaptureFixturer{   r3   r   r   <module>r      s      6 6  
 
 
  ) + ' $ "  ,IO!6 IOX <22Q!9!9 Q6 Qd Q	Qr   