o
    1Xxi#                     @   s  d dl Z 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
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*j.gd!dedej&dej'de(ddf
d"d#Z/	$d;dedej&dej'de(d%e(ddfd&d'Z0	(	)d<d*e1d+e1dej'fd,d-Z2ee#e% d.eddd/dedej&de(ddfd0d1Z3ee#d2eddd/dedej&ddfd3d4Z4e	j5j6d5d6deddfd7d8Z7deddfd9d:Z8d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&   ^/home/air/biblejyuku/back/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}| d }t|}|jd	i | t	s5|r5t
|d dkr5t| |j| t|ttj| tdt
|d d }|rzd}	tdt
|d |	D ]}
tj|ttj|||jtt|
t|
|	 t
|d d qXd S tj|ttj|||jd d S )
Nnamemetadataembedding_functionversionidsr.   r   r   )	n_resultsr5   query_indices)r8   r5   r&   )r   create_collectionr3   r4   r5   	get_model
invariantswrap_alladdr   lenr   countr   
strategies	RecordSetmaxrangeann_accuracylistmin)r!   r   r   r   r0   r   initial_versionnormalized_record_setr8   
batch_sizeir&   r&   r'   r$   W   sH   



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&   )struuiduuid4.0_r&   r&   r'   
<listcomp>   s    z*create_large_recordset.<locals>.<listcomp>c                 S   s   g | ]}d | iqS )some_keyr&   rR   rK   r&   r&   r'   rT          c                 S   s   g | ]}d | qS )z	Document r&   rV   r&   r&   r'   rT      rW   c                 S      g | ]}g d qS r         r&   rQ   r&   r&   r'   rT          r7   
embeddings	metadatas	documents)r   rD   r   r
   rA   rB   )r   r   sizer7   r`   ra   r_   r   r&   r&   r'   create_large_recordset   s   
rc   )r   r   )r   r   c              	   C   s   t |  t|  |  t|  t   d}| j|j|j|jd}t	
|}| d }t| ttt |d tt|d tt|d ttt |d dD ]}|j|  qOtsl|rlt|d d	krlt| |j|d
d t	|ttj| d S )Nr   r2   r6   r7   r_   r`   ra   )apir7   r_   r`   ra   r.      )additional_time)r   rc   get_max_batch_sizeintrandomr:   r3   r4   r5   r<   r=   r;   r   r   r   rN   r
   r   r>   r   r?   r   r@   rA   rB   )r!   r   r   r   r   rI   rH   batchr&   r&   r'   test_add_large   s>   


rk   )r   c                 C   s   t |  t|  |  t|  t   d}| j|j|j|jd}t	
t}|jdi | W d    n1 s;w   Y  dt|jv sIJ d S )Nr   r2   zexceeds maximum batch sizer&   )r   rc   rg   rh   ri   r:   r3   r4   r5   pytestraises	Exceptionr>   rN   value)r!   r   r   r   er&   r&   r'   test_add_large_exceeding   s    rq   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   rX   rY   r&   rQ   r&   r&   r'   rT   	  r]   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   rX   rY   r&   rQ   r&   r&   r'   rT     r]   z)test_out_of_order_ids.<locals>.<listcomp>)r7   r_   )r7   r7   r   r:   r>   get)r!   ooo_idsr   r_   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   rz   rZ   ar   Nr\   )r   bNr^   r7   r`   ra   r   )r!   r   resultsr&   r&   r'   test_add_partial  s   
r   )F)rL   rM   )9ri   rO   r   typingr   r   r   r   
hypothesisrl   hypothesis.strategiesrA   str   r   chromadb.apir	   chromadb.api.typesr
   r   chromadb.test.conftestr   r   r   !chromadb.test.property.strategiesr   property!chromadb.test.property.invariantsr<   -chromadb.test.utils.wait_for_version_increaser   chromadb.utils.batch_utilsr   sharedcollectionscollection_st
recordsetsbooleans
CollectionrB   boolr(   HealthChecktoo_slowdata_too_largelarge_base_examplefunction_scoped_fixturer1   r$   rh   rc   rk   rq   markxfailr   r   r&   r&   r&   r'   <module>   s    

	


;

(
'