
    3in.                         S SK r S SKJr  S SKJrJrJrJr  S SKrS SK	r
S SKrS SKJr  S SKJrJr  S SKJr  S SKJrJr  S SKJrJrJr  S SKJs  Js  Jr  S SKJs  Js  Jr  S SKJ r   S S	K!J"r"  \RF                  " \RH                  " S
S9SS9r%\" \%\RL                  " \%SSS9S9\" S\" \R                   " SS9\R                   " SS9S9SS9S\S\RN                  S\RP                  SS4S j5       5       r)\" \%\RL                  " \%SSS9\RT                  " 5       S9\" S\" \R                   " SS9\R                   " SS9S9S9S\S\RN                  S\RP                  S\+SS4
S  j5       5       r,\" \%\RL                  " \%S!SSSSS"9\RT                  " 5       S9\" S\" \R                   " S#S9\R                   " SS9S9\RZ                  R\                  \RZ                  R^                  \RZ                  R`                  \RZ                  Rb                  /S$9S\S\RN                  S\RP                  S\+SS4
S% j5       5       r2  S5S\S\RN                  S\RP                  S\+S&\+S'\+SS4S( jjr3  S6S)\4S*\4S\RP                  4S+ jjr5\" \%\RT                  " 5       S,9\" SSS-9S\S\RN                  S\+SS4S. j5       5       r6\" \%S/9\" SSS-9S\S\RN                  SS4S0 j5       5       r7\Rp                  Rs                  S1S29S\SS4S3 j5       r:S\SS4S4 jr;g)7    N)randint)castListAnyDict)givensettings)	ClientAPI)
Embeddings	Metadatas)NOT_CLUSTER_ONLYoverride_hypothesis_profilecreate_isolated_database)wait_for_version_increase)create_batchesT)with_hnsw_paramscoll)key      min_sizemax_size)
collection
record_seti  )max_examples   )normalfast   )deadlineparentr   clientr   r   returnc                     U R                  5       R                  S:X  a  [        R                  " S5        [	        XUSSS9  g )N'chromadb.api.async_fastapi.AsyncFastAPIDTODO @jai, come back and debug why CI runners fail with async + syncT)always_compactget_settingschroma_api_implpytestskip	_test_add)r#   r   r   s      Y/home/james-whalen/.local/lib/python3.13/site-packages/chromadb/test/property/test_add.pytest_add_minisculer0      s?    $ 	--4	5 	R	
 f*d4H    )r   r   should_compact)r!   r"   r2   c                     U R                  5       R                  S:X  a  [        R                  " S5        [	        XX#5        g )Nr&   r'   r)   r#   r   r   r2   s       r/   test_add_smallr5   6   s;    & 	--4	5 	R	
 f*=r1      )r   r   num_unique_metadatamin_metadata_sizemax_metadata_size
   )r!   r"   suppress_health_checkc                     U R                  5       R                  S:X  a  [        R                  " S5        [	        XX#SS9  g )Nr&   r'   T)batch_ann_accuracyr)   r4   s       r/   test_add_mediumr>   R   s?    @ 	--4	5 	R	
 f*QUVr1   r=   r(   c                    [        U 5        U R                  UR                  UR                  UR                  UR
                  S9n[        [        UR                  5       S   5      n[        R                  " U5      n[        U [        [        [           US   5      [        [        US   5      [        [        US   5      [        [        [           US   5      S9 H  n	UR                   " U	6   M     ["        (       d6  U(       a/  [%        US   5      S:  d  U(       a  ['        XR                  U5        [        R(                  " U[        [*        R,                  U5      5        [/        S	[%        US   5      S-  5      n
U(       a  Sn[1        S
[%        US   5      U5       Hh  n[        R2                  " U[        [*        R,                  U5      U
UR                  [5        [1        U[7        X-   [%        US   5      5      5      5      S9  Mj     g [        R2                  " U[        [*        R,                  U5      U
UR                  S9  g )N)namemetadataembedding_functionconfigurationversionids
embeddings	metadatas	documentsapirE   rF   rG   rH   r:   r   r   )	n_resultsrB   query_indices)rK   rB   )r   create_collectionr@   rA   rB   collection_configr   int	get_model
invariantswrap_allr   r   strr   r   addr   lenr   count
strategies	RecordSetmaxrangeann_accuracylistmin)r#   r   r   r2   r=   r(   r   initial_versionnormalized_record_setbatchrK   
batch_sizeis                r/   r.   r.      s    V$ ##__$$%88 22	 $ D 3 0 ;<O&//
;  cJu-.
J|$<=y*["9:tCy*["9: 	% &u-.3~ 	"&//?KT4
 4 46KLMA1%89R?AI
q#3E:;ZHA##Z))+@A##-#@#@"!S5J55Q1RST I 	%%'<=)<<		
r1   r   r   c                    [        X5      n[        U5       Vs/ s H!  n[        [        R                  " 5       5      PM#     nn[        U5       Vs/ s H  nSU 0PM
     nn[        U5       Vs/ s H  nSU 3PM
     nn[        U5       Vs/ s H  n/ SQPM	     nnU[        [        U5      UUS.n	[        [        R                  U	5      $ s  snf s  snf s  snf s  snf )Nsome_keyz	Document r   r       rE   rF   rG   rH   )	r   rZ   rS   uuiduuid4r   r   rW   rX   )
r   r   size_rE   rb   rG   rH   rF   r   s
             r/   create_large_recordsetrl      s     8&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   (CC.CC)r   r2   )r!   r   c                    [        U 5        U R                  5       R                  S:X  a  [        R                  " S5        [        SSS9nU R                  UR                  UR                  UR                  S9n[        R                  " U5      n[        [        UR                  5       S   5      n[        U [        [         ["           US   5      [        [$        US	   5      [        [&        US
   5      [        [         ["           US   5      S9 H  nUR(                  " U6   M     [*        (       d.  U(       a'  [-        US   5      S:  a  [/        XR                  USS9  [        R0                  " U[        [2        R4                  U5      5        g )Nr&   r'   i'  P  r   r@   rA   rB   rD   rE   rF   rG   rH   rI   r:      )additional_time)r   r*   r+   r,   r-   rl   rM   r@   rA   rB   rQ   rR   r   rO   rP   r   r   rS   r   r   rT   r   rU   r   rV   rW   rX   )r#   r   r2   r   r   r_   r^   r`   s           r/   test_add_largerr      s]   
 V$ 	--4	5 	R	
 (J ##__$$%88 $ D
 '//
;3 0 ;<OcJu-.
J|$<=y*["9:tCy*["9: 	% %e,-2 	"OO_c	
 T4
 4 46KLMr1   )r   c                    [        U 5        U R                  5       R                  S:X  a  [        R                  " S5        [        U R                  5       U R                  5       S-   S9nU R                  UR                  UR                  UR                  S9n[        R                  " [        5       nUR                  " S0 UD6  S S S 5        S[        WR                  5      ;   d   eg ! , (       d  f       N*= f)Nr&   r'   d   r   ro   z
batch size )r   r*   r+   r,   r-   rl   get_max_batch_sizerM   r@   rA   rB   raises	ExceptionrT   rS   value)r#   r   r   r   es        r/   test_add_large_exceedingr{     s    
 V$ 	--4	5 	R	
 (**,**,
J
 ##__$$%88 $ D 
y	!Q: 
"3qww<''' 
"	!s   2C))
C7z`This is expected to fail right now. We should change the API to sort the     ids by input order.)reasonc                 @   U R                  5       R                  S:X  a  [        R                  " S5        / SQnU R	                  SS S9nU Vs/ s H  n[
        R                  " / SQ5      PM     nnUR                  XS9  UR                  US	9S
   nXQ:X  d   eg s  snf )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                 6    U  Vs/ s H  n/ SQPM	     sn$ s  snf )Nre   ru   )inputrk   s     r/   <lambda>'test_out_of_order_ids.<locals>.<lambda>O  s    U1KU)U1K1Ks   )rB   re   )rE   rF   )rE   rE   )	r*   r+   r,   r-   rM   nparrayrT   get)r#   ooo_idsr   rk   rF   get_idss         r/   test_out_of_order_idsr   &  s     	--4	5 	R	
G8 ###K $ D <CC7abhhy17JCHHH0hh7h#E*G Ds   "Bc                 h   [        U 5        U R                  5       R                  S:X  a  [        R                  " S5        U R                  S5      nUR                  / SQ/ SQ/ SQ/ SQ/SS0SSS	0// S
QS9  UR                  5       nUS   / SQ:X  d   eUS   SS0SSS	0/:X  d   eUS   / S
Q:X  d   eg)z>Tests adding a record set with some of the fields set to None.r&   r'   r   )r   r   r   re   ar   Nrf   )r   bNrg   rE   rG   rH   )r   r*   r+   r,   r-   rM   rT   r   )r#   r   resultss      r/   test_add_partialr   W  s     V$ 	--4	5 	R	
 ##F+DHHy)48TC8,"   hhjG5>_,,,;S!HdS!H#====;#3333r1   )FF)iȯ  rn   )<rh   randomr   typingr   r   r   r   
hypothesisnumpyr   r,   hypothesis.strategiesrW   str   r	   chromadb.apir
   chromadb.api.typesr   r   chromadb.test.conftestr   r   r   !chromadb.test.property.strategiesr   property!chromadb.test.property.invariantsrQ   -chromadb.test.utils.wait_for_version_increaser   chromadb.utils.batch_utilsr   sharedcollectionscollection_st
recordsets
CollectionrX   r0   booleansboolr5   HealthChecktoo_slowdata_too_largelarge_base_examplefunction_scoped_fixturer>   r.   rO   rl   rr   r{   markxfailr   r   ru   r1   r/   <module>r      s!     ( (    " & " 4 
 7 6 6 6 S 5 		*00$GVT$$]QK 
&""4  c2 II%%I $$I 
	I	I$ $$]QM;;=
 
&""4  c2>>%%> $$> 	>
 
>>  $$ ;;= 
&""3  a0
 	''--1166	WW%%W $$W 	W
 
W2W2  % >
>
%%>
 $$>
 	>

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