
    eiB                        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d e ej                   d       ej                   d            d      dedejN                  dejP                  ddfd              Z) ee% ejL                  e%dd       ejT                                ed e ej                   d       ej                   d                  dedejN                  dejP                  de+ddf
d               Z, ee% ejL                  e%d!dddd"       ejT                                ed e ej                   d#       ej                   d            ejZ                  j\                  ejZ                  j^                  ejZ                  j`                  ejZ                  jb                  g$      dedejN                  dejP                  de+ddf
d%              Z2	 	 d7dedejN                  dejP                  de+d&e+d'e+ddfd(Z3	 	 d8d)e4d*e4dejP                  fd+Z5 ee% ejT                         ,       edd-      dedejN                  de+ddfd.              Z6 ee%/       edd-      dedejN                  ddfd0              Z7ejp                  js                  d12      deddfd3       Z:deddfd4Z;ejp                  jy                  ed52      deddfd6       Z=y)9    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                     | j                         j                  dk(  rt        j                  d       t	        | ||dd       y )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      i/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/chromadb/test/property/test_add.pytest_add_minisculer0      sA    $ 	--4	5 	R	
 fj*d4H    )r   r   should_compact)r!   r"   r2   c                     | j                         j                  dk(  rt        j                  d       t	        | |||       y )Nr&   r'   r)   r#   r   r   r2   s       r/   test_add_smallr5   6   s?    & 	--4	5 	R	
 fj*n=r1      )r   r   num_unique_metadatamin_metadata_sizemax_metadata_size
   )r!   r"   suppress_health_checkc                     | j                         j                  dk(  rt        j                  d       t	        | |||d       y )Nr&   r'   T)batch_ann_accuracyr)   r4   s       r/   test_add_mediumr>   R   sC    @ 	--4	5 	R	
 fj*nQUVr1   r=   r(   c                 n   t        |        | j                  |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  s|rt'        | |j                  |       t        j(                  |t        t*        j,                  |             t/        d	t%        |d         dz        }
|rd}t1        d
t%        |d         |      D ]j  }t        j2                  |t        t*        j,                  |      |
|j                  t5        t1        |t7        ||z   t%        |d                                  l y t        j2                  |t        t*        j,                  |      |
|j                         y )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H 		A##Z))+@A##-#@#@"!SZ5J55Q1RST		 	%%'<=)<<		
r1   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       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     8X&D&+Dk
23tzz|
2C
2/4T{;!*%;I;*/+6Q9QC6I6%*4[1)1J1:z2	(J 
$$j11 3;61s   $B?C(C	C)r   r2   )r!   r   c                    t        |        | j                         j                  dk(  rt        j                  d       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        j0                  |t        t2        j4                  |             y )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      sc   
 V$ 	--4	5 	R	
 (J ##__$$%88 $ D
 '//
;3 0 ;<OcJu-.
J|$<=y*["9:tCy*["9:  	% %e,-2 	"JOO_c	
 T4
 4 46KLMr1   )r   c                    t        |        | j                         j                  dk(  rt        j                  d       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)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   5C**C3z`This is expected to fail right now. We should change the API to sort the     ids by input order.)reasonc                 H   | j                         j                  dk(  rt        j                  d       g d}| j	                  dd       }|D cg c]  }t        j                  g d       }}|j                  ||       |j                  |	      d
   }||k(  sJ y c c}w )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                 0    | D cg c]  }g d c}S c c}w )Nre   ru   )inputrk   s     r/   <lambda>z'test_out_of_order_ids.<locals>.<lambda>P  s    U)C))C )Cs   )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 ##C $ D <CCabhhy1CJCHHZH0hh7h#E*Gg Ds   Bc                 d   t        |        | j                         j                  dk(  rt        j                  d       | 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   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   X  s     V$ 	--4	5 	R	
 ##F+DHHy)48TC8,"   hhjG5>_,,,;S!HdS!H#====;#3333r1   z-GroupBy is only supported in distributed modec                    ddl m}m}m} ddlm} ddlm} t        |        | j                  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 
cg c]  }
d|
 	 }}
|j                  |||	|       g d}|j                   |       j                   ||d             j                   | |d!       ||j                   d"      #            j#                  d            }|d$   J |d$   d   }t%        |      d&k(  sJ h d'}t'        |      |k(  sJ |j                   |       j                   ||d             j                   | |d!       |d(      g ||j                   d"      #            j#                  d            }|d$   J |d$   d   }t%        |      d&k(  sJ h d)}t'        |      |k(  sJ |j                   |       j                   ||d             j                   | |d!       | |d*      |j                   gd"      #            j#                  d            }|d$   J |d$   d   }t%        |      d&k(  sJ h d+}t'        |      |k(  sJ y%c c}
w ),zGTest GroupBy with single key, multiple keys, and multiple ranking keys.r   )GroupByMinKKey)Search)Knntest_group_by)r@   )
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artsdoc_rg      )querylimitr   )keysk)r   	aggregaterE   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   rM   r   r   rT   searchrankgroup_bySCOREr   rU   set)r#   r   r   r   r   r   r   rE   rF   rG   idrH   r   results1result1_ids	expected1results2result2_ids	expected2results3result3_ids	expected3s                         r/   test_search_group_byr   w  s2    JI91V$###9DC  !           	
J* !<!<!<!<Tq9Tq9Tq9Tq9Tq9Tq9Tq9Tq9I (++4t+I+HH	   !E {{	cR(	)	's:$CIIQR:ST	U	r	H E?&&&5/!$K{q   I {y((( {{	cR(	)	*os6{3CII3

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

 
r
H E?&&&5/!$K{q   I {y(((k ,s   .K )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   skipifr   ru   r1   r/   <module>r      s~     ( (    " & " 4 
 7 6 6 6 S 5 		0*00$GVT$z$$]QK 
&"z""4 Z  c2 II%%I $$I 
	I	I$ $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2  % >
>
%%>
 $$>
 	>

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