o
    gY                     @   s   d dl Z d dlZd dlm  m  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 dZ G dd deZ!ede!j"dej#deddfddZ$dS )    N)patch)	BundleRuleBasedStateMachinerule
initializemultipleprecondition	invariantrun_state_machine_as_testMultipleResults)DictList)VectorReader)SegmentManager)SegmentScope)SysDB)Systemd   c                   @   sV   e Zd ZU eed< eej ed< defddZdejdeej fddZ	dd
dZ
d	S )LastUsenstorec                 C   s   || _ g | _d S N)r   r   )selfr    r   b/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/test/property/test_segment_manager.py__init__#   s   
zLastUse.__init__idreturnc                 C   sf   || j v r| j | | j | | j S | j | t| j | jkr0| j d t| j | jks"| j S Nr   )r   removeappendlenr   pop)r   r   r   r   r   add'   s   
zLastUse.addNc                 C   s
   g | _ d S r   )r   r   r   r   r   reset1   s   
zLastUse.resetr   N)__name__
__module____qualname__int__annotations__r   uuidUUIDr   r#   r%   r   r   r   r   r      s   
 
r   c                       s  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dZe dd	d
Ze edd dddZe dddZeee dedd dejdeej fddZeeddejddfddZededefddZ  ZS )SegmentManagerStateMachinecollectionscollection_size_storesegment_collectionsystemc                    sR   t    |t| _| j  | j  tdd| _d| _	|t
| _|| _d S )N(   )r   r   )superr   requirer   segment_managerstartreset_stater   last_usecollection_created_counterr   sysdbr2   )r   r2   	__class__r   r   r   ;   s   



z#SegmentManagerStateMachine.__init__r   Nc                 C   sb   d}d}t | jjD ]$}|| j| 7 }|tkr|dkr d S || jjtj j	v s*J |d7 }q
d S )Nr      )
reversedr9   r   r0   memory_limitr6   segment_cacher   VECTORcache)r   	cache_sumindexr   r   r   r   (last_queried_segments_should_be_in_cacheE   s   
zCSegmentManagerStateMachine.last_queried_segments_should_be_in_cachec                 C   s   | j jjdu S )NT)r2   settingsis_persistentr$   r   r   r   <lambda>Q   s    z#SegmentManagerStateMachine.<lambda>c                    sJ    fdd j jtj jD }t| }t|dkr!|tks#J d S d S )Nc                    s   i | ]}| j | qS r   )r0   ).0r   r$   r   r   
<dictcomp>S   s    
zWSegmentManagerStateMachine.cache_should_not_be_bigger_than_settings.<locals>.<dictcomp>r>   )	r6   rA   r   rB   rC   sumvaluesr!   r@   )r   segment_sizes
total_sizer   r$   r   (cache_should_not_be_bigger_than_settingsP   s   
zCSegmentManagerStateMachine.cache_should_not_be_bigger_than_settingsc                 C   s(   | j   | j   d| _| j  d S r   )r6   r8   r7   r:   r9   r%   r$   r   r   r   r   [   s   

z%SegmentManagerStateMachine.initialize)targetcollc                 C   s
   | j dkS )N2   )r:   r$   r   r   r   rI   c      
 rR   c                 C   s\   | j |}|D ]}| j| |j| j|d < q|  jd7  _tdt	| j
|j< t|S )Nr   r>   r   )r6   #prepare_segments_for_new_collectionr;   create_segmentr   r1   r:   randomrandintr@   r0   r   )r   rR   segmentssegmentr   r   r   rU   b   s   z>SegmentManagerStateMachine.prepare_segments_for_new_collection)rR   c                 C   s0   | j j|jtd}| j|j |d usJ d S )N)collection_idtype)r6   get_segmentr   r   r9   r#   )r   rR   rZ   r   r   r   r]   p   s
   z&SegmentManagerStateMachine.get_segment	directoryc                 C   s(   |  d }tjt| }tj| S )N/)splitr"   r.   r1   r,   r-   r0   )r^   path_idr[   r   r   r   mock_directory_sizex   s
   
z.SegmentManagerStateMachine.mock_directory_sizer&   )r'   r(   r)   r   
strategies
Collectionr+   r/   r0   r   r,   r-   r*   r1   r   r   r	   rF   r   rP   r   r   r   rU   r]   staticmethodstrrb   __classcell__r   r   r<   r   r.   5   s0   
 


	
r.   z6chromadb.segment.impl.manager.local.get_directory_sizecaplogr2   r   c                    s$   t  j_d j_t fdd d S )NLRUc                      s
   t  dS )Nr2   )r.   r   rj   r   r   rI      rT   z&test_segment_manager.<locals>.<lambda>)r@   rG   chroma_memory_limit_byteschroma_segment_cache_policyr
   )rh   r2   r   rj   r   test_segment_manager   s   rm   )%r,   pytest!chromadb.test.property.strategiestestpropertyrc   unittest.mockr   rW   hypothesis.statefulr   r   r   r   r   r   r	   r
   r   typingr   r   chromadb.segmentr   r   chromadb.typesr   chromadb.db.systemr   chromadb.configr   r@   r   r.   rb   LogCaptureFixturerm   r   r   r   r   <module>   s(    ,L