
    ZiB                        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 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j$         ej%        d          d          Z& ee& ej'        e&dd                     ed e ej        d           ej        d                    d          dedej(        dej)        ddfd                        Z* ee& ej'        e&dd           ej+                               ed e ej        d           ej        d                              dedej(        dej)        d e,ddf
d!                        Z-e ee& ej'        e&d"dddd#           ej+                               ed e ej        d$           ej        d                    ej.        j/        ej.        j0        ej.        j1        ej.        j2        g%          dedej(        dej)        d e,ddf
d&                                    Z3	 	 d;dedej(        dej)        d e,d(e,d)e,ddfd*Z4	 	 d<d-e5d.e5dej)        fd/Z6 ee& ej+                    0           edd1          dedej(        d e,ddfd2                        Z7 ee&3           edd1          dedej(        ddfd4                        Z8ej9        :                    d56          deddfd7            Z;deddfd8Z<ej9        =                    ed96          deddfd:            Z>dS )=    N)randint)castListAnyDict)givensettings)	ClientAPI)
Embeddings	Metadatas)multi_region_test)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                     |                                  j        dk    rt          j        d           t	          | ||dd           d S )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      \/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/test/property/test_add.pytest_add_minisculer1      s]    $ 	-4	5 	5 	R	
 	
 	
 fj*d4HHHHHH    )r   r   should_compact)r"   r#   r3   c                     |                                  j        dk    rt          j        d           t	          | |||           d S )Nr'   r(   r*   r$   r   r   r3   s       r0   test_add_smallr6   8   sX    & 	-4	5 	5 	R	
 	
 	
 fj*n=====r2      )r   r   num_unique_metadatamin_metadata_sizemax_metadata_size
   )r"   r#   suppress_health_checkc                     |                                  j        dk    rt          j        d           t	          | |||d           d S )Nr'   r(   T)batch_ann_accuracyr*   r5   s       r0   test_add_mediumr?   T   s_    B 	-4	5 	5 	R	
 	
 	
 fj*nQUVVVVVVr2   Fr>   r)   c                    t          |            |                     |j        |j        |j        |j                  }t          t          |                                d                   }t          j
        |          }t          | t          t          t                   |d                   t          t          |d                   t          t          |d                   t          t          t                   |d                             D ]}	 |j        |	  t"          s3|r1t%          |d                   dk    s|rt'          | |j        |           t          j        |t          t*          j        |                     t/          d	t%          |d                   dz            }
|rd}t1          d
t%          |d                   |          D ]w}t          j        |t          t*          j        |          |
|j        t5          t1          |t7          ||z   t%          |d                                                            xd S t          j        |t          t*          j        |          |
|j                   d S )N)namemetadataembedding_functionconfigurationversionids
embeddings	metadatas	documentsapirF   rG   rH   rI   r;   r   r   )	n_resultsrC   query_indices)rL   rC   )r   create_collectionrA   rB   rC   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   r3   r>   r)   r   initial_versionnormalized_record_setbatchrL   
batch_sizeis                r0   r/   r/      s    V$$$ ##_$%8 2	 $  D 3 0 0 ;<<O&/
;;  cJu-..
J|$<==y*["9::tCy*["9::     	% LL &u-..33~3 	"&*/?KKKT4
 46KLLMMMA1%899R?AAI 

q#3E:;;ZHH 		 		A#Z)+@AA##-#@"!SZ5J55Q1R1RSSTT     		 		 	%'<==)<		
 	
 	
 	
 	
 	
r2   ȯ  P  r   r   c                 D   t          | |          }d t          |          D             }d t          |          D             }d t          |          D             }d t          |          D             }t          j        |t	          t
          |          ||          }|S )Nc                 N    g | ]"}t          t          j                              #S  )rT   uuiduuid4.0_s     r0   
<listcomp>z*create_large_recordset.<locals>.<listcomp>   s&    
2
2
23tz||
2
2
2r2   c                     g | ]}d | iS )some_keyrh   rl   rc   s     r0   rn   z*create_large_recordset.<locals>.<listcomp>   s    ;;;!*f%;;;r2   c                     g | ]}d | S )z	Document rh   rq   s     r0   rn   z*create_large_recordset.<locals>.<listcomp>   s    666QQ666r2   c                     g | ]}g d S r   r!      rh   rk   s     r0   rn   z*create_large_recordset.<locals>.<listcomp>   s    111)))111r2   rF   rG   rH   rI   )r   r[   rX   rY   r   r   )r   r   sizerF   rH   rI   rG   r   s           r0   create_large_recordsetry      s     8X&&D
2
2eDkk
2
2
2C;;uT{{;;;I66%++666I11U4[[111J%
J//	  J r2   )r   r3   )r"   r   c                 |   t          |            |                                 j        dk    rt          j        d           t          dd          }|                     |j        |j        |j	                  }t          j        |          }t          t          |                                d                   }t          | t          t           t"                   |d                   t          t$          |d	                   t          t&          |d
                   t          t           t"                   |d                             D ]} |j        |  t*          s3|r1t-          |d                   dk    rt/          | |j        |d           t          j        |t          t2          j        |                     d S )Nr'   r(   i'  re   r   rA   rB   rC   rE   rF   rG   rH   rI   rJ   r;      )additional_time)r   r+   r,   r-   r.   ry   rN   rA   rB   rC   rR   rS   r   rP   rQ   r   r   rT   r   r   rU   r   rV   r   rW   rX   rY   )r$   r   r3   r   r   r`   r_   ra   s           r0   test_add_larger~      s   
 V$$$ 	-4	5 	5 	R	
 	
 	
 (  J ##_$%8 $  D
 '/
;;3 0 0 ;<<OcJu-..
J|$<==y*["9::tCy*["9::     	% 

 %e,--22 	"JO_c	
 	
 	
 	
 T4
 46KLLMMMMMr2   )r   c                    t          |            |                                 j        dk    rt          j        d           t          |                                 |                                 dz             }|                     |j        |j	        |j
                  }t          j        t                    5 } |j        di | d d d            n# 1 swxY w Y   dt          |j                  v sJ d S )Nr'   r(   d   r   r{   z
batch sizerh   )r   r+   r,   r-   r.   ry   get_max_batch_sizerN   rA   rB   rC   raises	ExceptionrU   rT   value)r$   r   r   r   es        r0   test_add_large_exceedingr   	  sP   
 V$$$ 	-4	5 	5 	R	
 	
 	
 (**,,**,,
  J
 ##_$%8 $  D 
y	!	! Q:              3qw<<''''''s   9CCCz`This is expected to fail right now. We should change the API to sort the     ids by input order.)reasonc                 .   |                                  j        dk    rt          j        d           g d}|                     dd           }d |D             }|                    ||           |                    |	          d
         }||k    sJ 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                     d | D             S )Nc                     g | ]}g d S rt   rh   rk   s     r0   rn   z;test_out_of_order_ids.<locals>.<lambda>.<locals>.<listcomp>S  s    )C)C)C))))C)C)Cr2   rh   )inputs    r0   <lambda>z'test_out_of_order_ids.<locals>.<lambda>S  s    )C)CU)C)C)C r2   )rC   c                 :    g | ]}t          j        g d           S rt   )nparrayrk   s     r0   rn   z)test_out_of_order_ids.<locals>.<listcomp>U  s&    CCCabhyyy11CCCr2   )rF   rG   )rF   rF   )r+   r,   r-   r.   rN   rU   get)r$   ooo_idsr   rG   get_idss        r0   test_out_of_order_idsr   )  s     	-4	5 	5 	R	
 	
 	
  G8 ##CC $  D DC7CCCJHHZH000hh7h##E*Ggr2   c                    t          |            |                                 j        dk    rt          j        d           |                     d          }|                    g dg dg dg dgddiddd	igg d
           |                                }|d         g dk    sJ |d         ddiddd	igk    sJ |d         g d
k    sJ dS )z>Tests adding a record set with some of the fields set to None.r'   r(   r   )r   r   r   ru   ar   Nrv   )r   bNrw   rF   rH   rI   )r   r+   r,   r-   r.   rN   rU   r   )r$   r   resultss      r0   test_add_partialr   [  s$    V$$$ 	-4	5 	5 	R	
 	
 	
 ##F++DHHOOIIyyy)))48TC8,"""     hhjjG5>___,,,,;S!HdS!H#=====;#3#3#3333333r2   z-GroupBy is only supported in distributed modec                    ddl m}m}m} ddlm} ddlm} t          |            | 	                    d          }g d}t          t          g dg d	g d
g dg dg dg dg dg dg dg dg dg          }ddddddddddddddddddddddddddddddddddddddddddddddddg}	d |D             }
|                    |||	|
           g d}|                     |                                 ||d                                          | |d!           ||j        d"          #                                        d                    }|d$         J |d$         d         }t%          |          d&k    sJ h d'}t'          |          |k    sJ |                     |                                 ||d                                          | |d!           |d(          g ||j        d"          #                                        d                    }|d$         J |d$         d         }t%          |          d&k    sJ h d)}t'          |          |k    sJ |                     |                                 ||d                                          | |d!           | |d*          |j        gd"          #                                        d                    }|d$         J |d$         d         }t%          |          d&k    sJ h d+}t'          |          |k    sJ d%S ),zGTest GroupBy with single key, multiple keys, and multiple ranking keys.r   )GroupByMinKKey)Search)Knntest_group_by)rA   )
sci_2023_1
sci_2023_2
sci_2024_1
sci_2024_2tech_2023_1tech_2023_2tech_2024_1tech_2024_2arts_2023_1arts_2023_2arts_2024_1arts_2024_2)      ?        r   r   )?皙?r   r   )皙?皙?r   r   )ffffff?333333?r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   sciencei  r   )categoryyearpriorityr!   i  rv   techartsc                     g | ]}d | S )doc_rh   )rl   ids     r0   rn   z(test_search_group_by.<locals>.<listcomp>  s    ++++++r2   rw      )querylimitr   )keysk)r   	aggregaterF   N   >   r   r   r   r   r   r   r   >   r   r   r   r   r   r   r   >   r   r   r   r   r   r   )&chromadb.execution.expression.operatorr   r   r   "chromadb.execution.expression.planr   chromadb.execution.expressionr   r   rN   r   r   rU   searchrankgroup_bySCOREr   rV   set)r$   r   r   r   r   r   r   rF   rG   rH   rI   r   results1result1_ids	expected1results2result2_ids	expected2results3result3_ids	expected3s                        r0   test_search_group_byr   z  s    JIIIIIIIII999999111111V$$$###99D  C  !                                   	
 J* !<<!<<!<<!<<Tq99Tq99Tq99Tq99Tq99Tq99Tq99Tq99I ,+s+++IHH	     !  E {{	ccR(((	)	)	''ss:$$CIQR:S:S:STTT	U	U	r	 H E?&&&5/!$K{q      I {y(((( {{	ccR(((	)	)	Gc*ooss6{{3$CI333  

 

 
r
 
H E?&&&5/!$K{q      I {y(((( {{	ccR(((	)	)	GS__$SS__ci$@AFFF  

 

 
r
 
H E?&&&5/!$K{q      I {y((((((r2   )FF)rd   re   )?ri   randomr   typingr   r   r   r   
hypothesisnumpyr   r-   hypothesis.strategiesrX   str   r	   chromadb.apir
   chromadb.api.typesr   r   chromadb.test.conftestr   r   r   r   !chromadb.test.property.strategiesr   property!chromadb.test.property.invariantsrR   -chromadb.test.utils.wait_for_version_increaser   chromadb.utils.batch_utilsr   sharedcollectionscollection_st
recordsets
CollectionrY   r1   booleansboolr6   HealthChecktoo_slowdata_too_largelarge_base_examplefunction_scoped_fixturer?   r/   rP   ry   r~   r   markxfailr   r   skipifr   rh   r2   r0   <module>r     s          ( ( ( ( ( ( ( ( ( ( ( (          " " " " " " & & & & & & & & " " " " " " 4 4 4 4 4 4 4 4 4 4 4 4 4 4         
 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 S S S S S S 5 5 5 5 5 5 	0*0$GGGVTTT $z$]QKKK   
&&"z"444 Z c222     II%I $I 
	I I I 	 I$ $z$]QMMM2;==  
 
&&"z"444 Z c222    >>%> $> 	>
 
> > >  >  $z$   2;==   
&&"z"333 Z a000  
 	'-16	  WW%W $W 	W
 
W W W   4W2  % >
 >
>
%>
 $>
 	>

 >
 >
 
>
 >
 >
 >
H      & ->>>	4a(((,N,N#-#8,NJN,N	,N ,N ,N )( ?>,N^ -   	4a(((((#-#8(	( ( ( )( ! (<    +) + + + +	 +\4Y 44 4 4 4 4> :   Q) Q)t Q) Q) Q)	 Q) Q) Q)r2   