o
    gn%                     @   s  d dl Z d dlmZ d dlmZmZmZmZ d dlZd dl	Z
d dlZd dlmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d dlm  m  mZ d dlm  m  mZ d dlm Z  d d	l!m"Z" ej#ej$d
dddZ%ee%ej&e%ddde' dedeejddejdddddedej(dej)de*ddf
ddZ+ee%ej&e%dddddde' dedeejd dejdddej,j-ej,j.ej,j/ej,j0gd!dedej(dej)de*ddf
d"d#Z1	$d;dedej(dej)de*d%e*ddfd&d'Z2	(	)d<d*e3d+e3dej)fd,d-Z4ee%e' d.eddd/dedej(de*ddfd0d1Z5ee%d2eddd/dedej(ddfd3d4Z6ej7j8d5d6deddfd7d8Z9deddfd9d:Z:dS )=    N)randint)castListAnyDict)givensettings)	ClientAPI)
Embeddings	Metadatas)resetNOT_CLUSTER_ONLYoverride_hypothesis_profile)wait_for_version_increase)create_batchesT)with_hnsw_paramscoll)key   i  min_sizemax_size)
collection
record_setshould_compact)max_examples   )normalfast)deadlineparentclientr   r   r   returnc                 C   s   t | ||| d S )N	_test_addr!   r   r   r    r&   V/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/test/property/test_add.pytest_add_small   s   r(         )r   r   num_unique_metadatamin_metadata_sizemax_metadata_size
   )r   r    suppress_health_checkc                 C   s   t | |||dd d S )NT)batch_ann_accuracyr#   r%   r&   r&   r'   test_add_medium1   s   #r1   Fr0   c                 C   s\  t |  | j|j|j|jd}tt| d }t	|}t
| ttt |d tt|d tt|d ttt |d dD ]}|j|  q>tsY|rYt|d dkrYt| |j| t|ttj| td	t|d d }	|rd}
td
t|d |
D ]}tj|ttj||	|jtt|t||
 t|d d q|d S tj|ttj||	|jd d S )Nnamemetadataembedding_functionversionids
embeddings	metadatas	documentsapir7   r8   r9   r:   r.   r   r   )	n_resultsr5   query_indices)r=   r5   )r   create_collectionr3   r4   r5   r   int	get_model
invariantswrap_allr   r   strr
   r   addr   lenr   count
strategies	RecordSetmaxrangeann_accuracylistmin)r!   r   r   r   r0   r   initial_versionnormalized_record_setbatchr=   
batch_sizeir&   r&   r'   r$   W   sV   




r$   ȯ  P  r   r   c                 C   sr   t | |}dd t|D }dd t|D }dd t|D }dd t|D }|tt|||d}ttj|S )Nc                 S   s   g | ]}t t qS r&   )rD   uuiduuid4.0_r&   r&   r'   
<listcomp>   s    z*create_large_recordset.<locals>.<listcomp>c                 S   s   g | ]}d | iqS )some_keyr&   rY   rS   r&   r&   r'   r[          c                 S   s   g | ]}d | qS )z	Document r&   r]   r&   r&   r'   r[      r^   c                 S      g | ]}g d qS r         r&   rX   r&   r&   r'   r[          r7   r8   r9   r:   )r   rK   r   r
   rH   rI   )r   r   sizer7   r9   r:   r8   r   r&   r&   r'   create_large_recordset   s   
rg   )r   r   )r   r   c              	   C   s   t |  tddd}| j|j|j|jd}t|}tt	|
 d }t| ttt |d tt|d tt|d ttt |d	 d
D ]}|j|  qDtsa|rat|d dkrat| |j|dd t|ttj| d S )Ni'  rU   r   r2   r6   r7   r8   r9   r:   r;   r.      )additional_time)r   rg   r?   r3   r4   r5   rB   rC   r   r@   rA   r   r   rD   r
   r   rE   r   rF   r   rG   rH   rI   )r!   r   r   r   r   rP   rO   rQ   r&   r&   r'   test_add_large   s:   


rj   )r   c                 C   s   t |  t|  |  d d}| j|j|j|jd}tt	}|j
di | W d    n1 s3w   Y  dt|jv sAJ d S )Nd   r   r2   zexceeds maximum batch sizer&   )r   rg   get_max_batch_sizer?   r3   r4   r5   pytestraises	ExceptionrE   rD   value)r!   r   r   r   er&   r&   r'   test_add_large_exceeding   s    rr   z`This is expected to fail right now. We should change the API to sort the     ids by input order.)reasonc                 C   s^   t |  g d}| jddd d}dd |D }|j||d |j|d	d
 }||ks-J d S )N)4005861001003042002930111320706550120341testc                 S   s   dd | D S )Nc                 S   r_   r`   r&   rX   r&   r&   r'   r[     rd   z;test_out_of_order_ids.<locals>.<lambda>.<locals>.<listcomp>r&   )inputr&   r&   r'   <lambda>  s    z'test_out_of_order_ids.<locals>.<lambda>)r5   c                 S   s   g | ]	}t g d qS r`   )nparrayrX   r&   r&   r'   r[     s    z)test_out_of_order_ids.<locals>.<listcomp>)r7   r8   )r7   r7   r   r?   rE   get)r!   ooo_idsr   r8   get_idsr&   r&   r'   test_out_of_order_ids   s   r   c                 C   s   t |  | d}|jg dg dg dg dgddidddigg dd	 | }|d
 g dks4J |d ddidddigksCJ |d g dksMJ dS )z>Tests adding a record set with some of the fields set to None.r   )r   r   r{   ra   ar   Nrc   )r   bNre   r7   r9   r:   r   )r!   r   resultsr&   r&   r'   test_add_partial  s   

r   )F)rT   rU   );rV   randomr   typingr   r   r   r   
hypothesisnumpyr   rm   hypothesis.strategiesrH   str   r   chromadb.apir	   chromadb.api.typesr
   r   chromadb.test.conftestr   r   r   !chromadb.test.property.strategiesr   property!chromadb.test.property.invariantsrB   -chromadb.test.utils.wait_for_version_increaser   chromadb.utils.batch_utilsr   sharedcollectionscollection_st
recordsetsbooleans
CollectionrI   boolr(   HealthChecktoo_slowdata_too_largelarge_base_examplefunction_scoped_fixturer1   r$   r@   rg   rj   rr   markxfailr   r   r&   r&   r&   r'   <module>   s    

	


B

'
'