o
    3Ih*                     @   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*   |   jdkrtd t| ||| d S )N'chromadb.api.async_fastapi.AsyncFastAPIDTODO @jai, come back and debug why CI runners fail with async + syncget_settingschroma_api_implpytestskip	_test_addr!   r   r   r    r,   _/home/air/sanwanet/gpt-api/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.   |   jdkrtd t| |||dd d S )Nr#   r$   T)batch_ann_accuracyr%   r+   r,   r,   r-   test_add_medium8   s    r7   Fr6   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apir=   r>   r?   r@   r4   r   r   )	n_resultsr;   query_indices)rC   r;   )r   create_collectionr9   r:   r;   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   r6   r   initial_versionnormalized_record_setbatchrC   
batch_sizeir,   r,   r-   r*   e   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,   )rJ   uuiduuid4.0_r,   r,   r-   
<listcomp>   s    z*create_large_recordset.<locals>.<listcomp>c                 S   s   g | ]}d | iqS )some_keyr,   r_   rY   r,   r,   r-   ra          c                 S   s   g | ]}d | qS )z	Document r,   rc   r,   r,   r-   ra      rd   c                 S      g | ]}g d qS r         r,   r^   r,   r,   r-   ra          r=   r>   r?   r@   )r   rQ   r   r
   rN   rO   )r   r   sizer=   r?   r@   r>   r   r,   r,   r-   create_large_recordset   s   
rm   )r   r   )r   r   c              	   C   s   |   jdkrtd 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|  qPtsm|rmt|d dkrmt| |j|dd t
|ttj| d S )Nr#   r$   i'  r[   r   r8   r<   r=   r>   r?   r@   rA   r4      )additional_time)r&   r'   r(   r)   r   rm   rE   r9   r:   r;   rH   rI   r   rF   rG   r   r   rJ   r
   r   rK   r   rL   r   rM   rN   rO   )r!   r   r   r   r   rV   rU   rW   r,   r,   r-   test_add_large   sF   


rp   )r   c                 C   s   |   jdkrtd t|  t|  |  d d}| j|j|j	|j
d}tt}|jdi | W d    n1 s?w   Y  dt|jv sMJ d S )Nr#   r$   d   r   r8   z
batch sizer,   )r&   r'   r(   r)   r   rm   get_max_batch_sizerE   r9   r:   r;   raises	ExceptionrK   rJ   value)r!   r   r   r   er,   r,   r-   test_add_large_exceeding   s,   rw   z`This is expected to fail right now. We should change the API to sort the     ids by input order.)reasonc                 C   sv   |   jdkrtd t|  g d}| jddd d}dd	 |D }|j||d
 |j|dd }||ks9J d S )Nr#   r$   )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   re   rf   r,   r^   r,   r,   r-   ra   2  rj   z;test_out_of_order_ids.<locals>.<lambda>.<locals>.<listcomp>r,   )inputr,   r,   r-   <lambda>2  s    z'test_out_of_order_ids.<locals>.<lambda>)r;   c                 S   s   g | ]	}t g d qS rf   )nparrayr^   r,   r,   r-   ra   4  s    z)test_out_of_order_ids.<locals>.<listcomp>)r=   r>   )r=   r=   r&   r'   r(   r)   r   rE   rK   get)r!   ooo_idsr   r>   get_idsr,   r,   r-   test_out_of_order_ids  s   r   c                 C   s   |   jdkrtd 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s@J |d ddiddd	igksOJ |d g d
ksYJ dS )z>Tests adding a record set with some of the fields set to None.r#   r$   r   )r   r   r   rg   ar   Nri   )r   bNrk   r=   r?   r@   r   )r!   r   resultsr,   r,   r-   test_add_partial:  s$   

r   )F)rZ   r[   );r\   randomr   typingr   r   r   r   
hypothesisnumpyr   r(   hypothesis.strategiesrN   str   r   chromadb.apir	   chromadb.api.typesr
   r   chromadb.test.conftestr   r   r   !chromadb.test.property.strategiesr   property!chromadb.test.property.invariantsrH   -chromadb.test.utils.wait_for_version_increaser   chromadb.utils.batch_utilsr   sharedcollectionscollection_st
recordsetsbooleans
CollectionrO   boolr.   HealthChecktoo_slowdata_too_largelarge_base_examplefunction_scoped_fixturer7   r*   rF   rm   rp   rw   markxfailr   r   r,   r,   r,   r-   <module>   s    




B

.
.