
    ugn%                        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c mc mZ d dlmc mc mZ d dlm Z  d d	l!m"Z"  ejF                   ejH                  d
      d      Z% ee% ejL                  e%dd       ejN                                ed e ej                   d       ej                   d                  dedejP                  dejR                  de*ddf
d              Z+ ee% ejL                  e%ddddd       ejN                                ed e ej                   d       ej                   d            ejX                  jZ                  ejX                  j\                  ejX                  j^                  ejX                  j`                  g       dedejP                  dejR                  de*ddf
d!              Z1	 d0dedejP                  dejR                  de*d"e*ddfd#Z2	 	 d1d$e3d%e3dejR                  fd&Z4 ee% ejN                         '       edd(      dedejP                  de*ddfd)              Z5 ee%*       edd(      dedejP                  ddfd+              Z6ejn                  jq                  d,-      deddfd.       Z9deddfd/Z:y)2    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                      t        | |||       y )N	_test_addr"   r   r   r   s       T/var/www/openai/venv/lib/python3.12/site-packages/chromadb/test/property/test_add.pytest_add_smallr)      s    $ fj*n=          )r   r   num_unique_metadatamin_metadata_sizemax_metadata_size
   )r    r!   suppress_health_checkc                 $    t        | |||d       y )NT)batch_ann_accuracyr%   r'   s       r(   test_add_mediumr4   1   s    F fj*nQUVr*   r3   c                 T   t        |        | j                  |j                  |j                  |j                        }t        t        |j                         d         }t        j                  |      }t        | t        t        t           |d         t        t        |d         t        t        |d         t        t        t           |d               D ]  } |j                  |   t         s*|r(t#        |d         dkD  rt%        | |j                  |       t        j&                  |t        t(        j*                  |             t-        d	t#        |d         dz        }	|rd}
t/        d
t#        |d         |
      D ]j  }t        j0                  |t        t(        j*                  |      |	|j                  t3        t/        |t5        ||
z   t#        |d                                  l y t        j0                  |t        t(        j*                  |      |	|j                         y )Nnamemetadataembedding_functionversionids
embeddings	metadatas	documentsapir;   r<   r=   r>   r0   r   r   )	n_resultsr9   query_indices)rA   r9   )r   create_collectionr7   r8   r9   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   r3   r   initial_versionnormalized_record_setbatchrA   
batch_sizeis               r(   r&   r&   W   s    
&M ##__$$%88 $ D
 3 0 ;<O&//
;  cJu-.
J|$<=y*["9:tCy*["9: 	% %e,-2 	"&*//?KT4
 4 46KLMA1%89R?AI
q#3E:;ZHA##Z))+@A##-#@#@"!SZ5J55Q1RST I 	%%'<=)<<		
r*   r   r   c                    t        | |      }t        |      D cg c]  }t        t        j                               ! }}t        |      D cg c]  }d| i	 }}t        |      D cg c]  }d| 	 }}t        |      D cg c]  }g d }}|t        t        |      ||d}	t        t        j                  |	      S c c}w c c}w c c}w c c}w )Nsome_keyz	Document r         r;   r<   r=   r>   )	r   rO   rH   uuiduuid4r   r   rL   rM   )
r   r   size_r;   rW   r=   r>   r<   r   s
             r(   create_large_recordsetrb      s     8X&D&+Dk
2k3tzz|kC
2/4T{;{!*%{I;*/+6+Q9QC+I6%*4[1[)[J1:z2	(J 
$$j11 3;61s   $B?C(C	C)r   r   )r    r   c                    t        |        t        dd      }| j                  |j                  |j                  |j
                        }t        j                  |      }t        t        |j                         d         }t        | t        t        t           |d         t        t        |d         t        t        |d         t        t        t           |d	         
      D ]  } |j                   |   t"        s,|r*t%        |d         dkD  rt'        | |j                  |d       t        j(                  |t        t*        j,                  |             y )Ni'  P  r   r6   r:   r;   r<   r=   r>   r?   r0      )additional_time)r   rb   rC   r7   r8   r9   rF   rG   r   rD   rE   r   r   rH   r   r   rI   r   rJ   r   rK   rL   rM   )r"   r   r   r   r   rT   rS   rU   s           r(   test_add_largerg      s.   
 
&M'J ##__$$%88 $ D
 '//
;3 0 ;<OcJu-.
J|$<=y*["9:tCy*["9: 	% %e,-2 	"JOO_c	
 T4
 4 46KLMr*   )r   c                    t        |        t        | j                         | j                         dz         }| j                  |j                  |j
                  |j                        }t        j                  t              5 } |j                  di | d d d        dt        j                        v sJ y # 1 sw Y   #xY w)Nd   r   r6   zexceeds maximum batch size )r   rb   get_max_batch_sizerC   r7   r8   r9   pytestraises	ExceptionrI   rH   value)r"   r   r   r   es        r(   test_add_large_exceedingrq      s    
 
&M'**,**,
J
 ##__$$%88 $ D 
y	!Q: 
"'3qww<777 
"	!s   B88Cz`This is expected to fail right now. We should change the API to sort the     ids by input order.)reasonc                     t        |        g d}| j                  dd       }|D cg c]  }t        j                  g d       }}|j	                  ||       |j                  |      d   }||k(  sJ y c c}w )	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                 0    | D cg c]  }g d c}S c c}w )NrZ   rj   )inputra   s     r(   <lambda>z'test_out_of_order_ids.<locals>.<lambda>  s    U1KU)U1K1Ks   )r9   rZ   )r;   r<   )r;   r;   )r   rC   nparrayrI   get)r"   ooo_idsr   ra   r<   get_idss         r(   test_out_of_order_idsr      s    
 
&MG8 ###K $ D <CC7abhhy17JCHHZH0hh7h#E*Gg Ds   A8c                     t        |        | j                  d      }|j                  g dg dg dg dgddidddigg d	       |j                         }|d
   g dk(  sJ |d   ddidddigk(  sJ |d   g dk(  sJ y)z>Tests adding a record set with some of the fields set to None.r   )r   r   r{   rZ   ar   Nr\   )r   bNr]   r;   r=   r>   )r   rC   rI   r   )r"   r   resultss      r(   test_add_partialr     s    	&M##F+DHHy)48TC8,"   hhjG5>_,,,;S!HdS!H#====;#3333r*   )F)iȯ  rd   );r^   randomr   typingr   r   r   r   
hypothesisnumpyr   rl   hypothesis.strategiesrL   str   r	   chromadb.apir
   chromadb.api.typesr   r   chromadb.test.conftestr   r   r   !chromadb.test.property.strategiesr   property!chromadb.test.property.invariantsrF   -chromadb.test.utils.wait_for_version_increaser   chromadb.utils.batch_utilsr   sharedcollectionscollection_st
recordsetsbooleans
CollectionrM   boolr)   HealthChecktoo_slowdata_too_largelarge_base_examplefunction_scoped_fixturer4   r&   rD   rb   rg   rq   markxfailr   r   rj   r*   r(   <module>r      s     ( (    " & " 4 
 7 6 6 6 S 5 		0*00$GVT $z$$]QM2;;=
 
&"z""4 Z  c2>>%%> $$> 	>
 
>> $z$$ 2;;= 
&"z""3 Z  a0
 	''--1166	
W
W%%
W $$
W 	
W
 

W2
W$  %<
<
%%<
 $$<
 	<

 <
 
<
D 222 2& ->	4a($N$N#-#8#8$NJN$N	$N ) ?$NN - 	4a(88#-#8#88	8 ) !8,   $) $ $	$N4Y 44 4r*   