
    _jI                        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mZ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( dZ)dZ*dZ+dZ,dZ-dZ. ej/         ej0        d          d          Z1 ee1 ej2        e1dd                     ed e ej        d           ej        d                    d          ded ej3        d!ej4        d"dfd#                        Z5e ee1 ej2        e1de*           ej6                    $           ed e ej        d%           ej        d&                    '          ded ej3        d!ej4        d(e7d"df
d)                                    Z8e ee1 ej2        e1e+e,d*dd*+           ej6                    $           ed e ej        d,           ej        d                    ej9        j:        ej9        j;        ej9        j<        ej9        j=        g-          ded ej3        d!ej4        d(e7d"df
d.                                    Z>	 	 dCded ej3        d!ej4        d(e7d0e7d1e7d"dfd2Z?	 	 dDd5e@d6e@d"ej4        fd7ZAe ee1 ej6                    8           edd9          ded ej3        d(e7d"dfd:                                    ZB ee1;           edd9          ded ej3        d"dfd<                        ZCejD        E                    d=>          ded"dfd?            ZFded"dfd@ZGejD        H                    edA>          ded"dfdB            ZIdS )E    N)randint)castListAnyDict)givensettings)	ClientAPI)
Embeddings	Metadatas)DEFAULT_DATABASE)DEFAULT_MCMR_DATABASEMULTI_REGION_ENABLEDNOT_CLUSTER_ONLYdatabase_nameoverride_hypothesis_profilecreate_isolated_databasemulti_region_test)wait_for_version_increase)create_batches
         ,  i  i:  T)with_hnsw_paramscoll)key      min_sizemax_size)
collection
record_setd   )max_examples(   )normalfast   )deadlineparentr&   clientr#   r$   returnc                     |                                  j        dk    rt          j        d           t	          | ||dt
                      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_addr   )r-   r#   r$   s      \/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/chromadb/test/property/test_add.pytest_add_minisculer9   %   sa    $ 	-4	5 	5 	R	
 	
 	
 fj*dG[C[\\\\\\    )r#   r$   should_compact2      )r+   r,   r;   c                     |                                  j        dk    rt          j        d           t	          | |||           d S )Nr0   r1   r3   r4   r5   r6   r7   r-   r#   r$   r;   s       r8   test_add_smallrA   C   sX    , 	-4	5 	5 	R	
 	
 	
 fj*n=====r:      )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 )Nr0   r1   T)batch_ann_accuracyr?   r@   s       r8   test_add_mediumrJ   b   s_    B 	-4	5 	5 	R	
 	
 	
 fj*nQUVVVVVVr:   FrI   r2   c                     t          |            |                     |j        |j        |j        |j                  }t          t          |                                d                   }t          j
        |          }t           o|}	|}
d}d}t          t          t          |d                   dz            }t          d|            t!          | t          t"          t$                   |d                   t          t&          |d                   t          t(          |d	                   t          t"          t$                   |d
                             D ]}t          dt          |d                               |j        |  |	rt          d           |t          |d                   z  }||k    rSt          d|            t          d|            t          d| d|            t-          | |j        |
          }
d}d}t          sB|r@|s>t          |d                   dk    r%t          d           t-          | |j        |
          }
t          j        |t          t0          j        |                     t          dt          |d                   dz            }|rd}t5          dt          |d                   |          D ]w}t          j        |t          t0          j        |          ||j        t9          t5          |t;          ||z   t          |d                                                            xd S t          j        |t          t0          j        |          ||j                   d S )N)namemetadataembedding_functionconfigurationversionr   Fidsr   z.starting min_records_between_compaction_waits=
embeddings	metadatas	documentsapirQ   rR   rS   rT   addingzshould wait for compactionz records_since_compaction_wait = z'min_records_between_compaction_waits = zwaiting z >= Tzfinal wait for compactionr   r<   )	n_resultsrN   query_indices)rX   rN   )r   create_collectionrL   rM   rN   collection_configr   int	get_model
invariantswrap_allr   max$MIN_RECORDS_BETWEEN_COMPACTION_WAITSlenprintr   r   strr   r   addr   count
strategies	RecordSetrangeann_accuracylistmin)r-   r#   r$   r;   rI   r2   r   initial_versionnormalized_record_setshould_wait_for_compactioncurrent_versionrecords_since_compaction_waithas_waited_for_compaction$min_records_between_compaction_waitsbatchrX   
batch_sizeis                     r8   r7   r7      s    V$$$ ##_$%8 2	 $  D 3 0 0 ;<<O&/
;;%5!5!H.%O$%! %+.,c2G2N.O.OSU.U, ,( 

a;_
a
abbb  c1%899
$9,$GHHy"7"DEEtCy"7"DEE   1 1 	hE!H&&&%% 	1.///)Sq]]:),0TTTX9VXXYYYf@dffgggj!>jjDhjjkkk";JO_# # 12-,0)
 	
	
 *	
 %e,--11)***3JO_
 
 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     		 		 	%'<==)<		
 	
 	
 	
 	
 	
r:   ȯ  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  )rd   uuiduuid4.0_s     r8   
<listcomp>z*create_large_recordset.<locals>.<listcomp>   s&    
2
2
23tz||
2
2
2r:   c                     g | ]}d | iS )some_keyr{   r   rv   s     r8   r   z*create_large_recordset.<locals>.<listcomp>   s    ;;;!*f%;;;r:   c                     g | ]}d | S )z	Document r{   r   s     r8   r   z*create_large_recordset.<locals>.<listcomp>   s    666QQ666r:   c                     g | ]}g d S r   r*   rF   r{   r~   s     r8   r   z*create_large_recordset.<locals>.<listcomp>   s    111)))111r:   rQ   rR   rS   rT   )r   ri   rg   rh   r   r   )r!   r"   sizerQ   rS   rT   rR   r$   s           r8   create_large_recordsetr      s     8X&&D
2
2eDkk
2
2
2C;;uT{{;;;I66%++666I11U4[[111J%
J//	  J r:   )r#   r;   )r+   r&   c                    t          |            |                                 j        dk    rt          j        d           t          t          t                    }|                     |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|r1t1          |d                   dk    rt3          | |j	        |d           t          j        |t          t6          j        |                     d S )Nr0   r1   r    rL   rM   rN   rP   rQ   rR   rS   rT   rU   r   r   )additional_time)r   r3   r4   r5   r6   r   LARGE_MIN_RECORDSLARGE_MAX_RECORDSrZ   rL   rM   rN   r^   r_   r   r\   r]   r   r   rd   r   r   re   r   rb   r   rf   rg   rh   )r-   r#   r;   r$   r   rn   rm   rt   s           r8   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Mr:   )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 )Nr0   r1   r%   r    r   z
batch sizer{   )r   r3   r4   r5   r6   r   get_max_batch_sizerZ   rL   rM   rN   raises	Exceptionre   rd   value)r-   r#   r$   r   es        r8   test_add_large_exceedingr   3  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 )Nr0   r1   )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 r   r{   r~   s     r8   r   z;test_out_of_order_ids.<locals>.<lambda>.<locals>.<listcomp>~  s    )C)C)C))))C)C)Cr:   r{   )inputs    r8   <lambda>z'test_out_of_order_ids.<locals>.<lambda>~  s    )C)CU)C)C)C r:   )rN   c                 :    g | ]}t          j        g d           S r   )nparrayr~   s     r8   r   z)test_out_of_order_ids.<locals>.<listcomp>  s&    CCCabhyyy11CCCr:   )rQ   rR   )rQ   rQ   )r3   r4   r5   r6   rZ   re   get)r-   ooo_idsr   rR   get_idss        r8   test_out_of_order_idsr   T  s     	-4	5 	5 	R	
 	
 	
  G8 ##CC $  D DC7CCCJHHZH000hh7h##E*Ggr:   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.r0   r1   r   )r   r   r   r   ar   NrF   )r   bNr   rQ   rS   rT   )r   r3   r4   r5   r6   rZ   re   r   )r-   r   resultss      r8   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3r:   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)rL   )
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  rF   techartsc                     g | ]}d | S )doc_r{   )r   ids     r8   r   z(test_search_group_by.<locals>.<listcomp>  s    ++++++r:   r      )querylimitr   )keysk)r   	aggregaterQ   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   rZ   r   r   re   searchrankgroup_bySCOREr   rb   set)r-   r   r   r   r   r   r   rQ   rR   rS   rT   r   results1result1_ids	expected1results2result2_ids	expected2results3result3_ids	expected3s                        r8   test_search_group_byr    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((((((r:   )FF)rw   rx   )Jr|   randomr   typingr   r   r   r   
hypothesisnumpyr   r5   hypothesis.strategiesrg   str   r	   chromadb.apir
   chromadb.api.typesr   r   chromadb.configr   chromadb.test.conftestr   r   r   r   r   r   r   !chromadb.test.property.strategiesr   property!chromadb.test.property.invariantsr^   -chromadb.test.utils.wait_for_version_increaser   chromadb.utils.batch_utilsr   ra   SMALL_MAX_RECORDSMEDIUM_MIN_RECORDSMEDIUM_MAX_RECORDSr   r   sharedcollectionscollection_st
recordsets
Collectionrh   r9   booleansboolrA   HealthChecktoo_slowdata_too_largelarge_base_examplefunction_scoped_fixturerJ   r7   r\   r   r   r   markxfailr   r   skipifr  r{   r:   r8   <module>r#     sw          ( ( ( ( ( ( ( ( ( ( ( (          " " " " " " & & & & & & & & " " " " " " 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 b111     ]]%] $] 
	] ] ] 	 ]$ $z$,=   2;==   
&&"z"333 Z b111    >>%> $> 	>
 
> > >   >  $z$##   2;==   
&&"z"222 Z a000  
 	'-16	  WW%W $W 	W
 
W W W   4W2  % W
 W
W
%W
 $W
 	W

 W
 W
 
W
 W
 W
 W
z      & ->>>	4a(((.N.N%.N .N 
	.N .N .N )( ?> .Nb -   	4a(((((%( 
( ( ( )( ! (>    +) + + + +	 +\4Y 44 4 4 4 4> :   Q) Q)t Q) Q) Q)	 Q) Q) Q)r:   