
    Zi             
          d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlmZ d dl	Z	d dl
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mZmZmZ d dlmZ d dlmZmZmZ d dlmZ ej        d	             Z ej        d
             Z!ej        d             Z"dde#fdZ$dde%de#fdZ&ej'        (                    de!g          d             Z)ej'        (                    de!g          d             Z*ej'        (                    de!g          d             Z+ej'        (                    de!g          d             Z,d Z-d Z.d Z/d Z0d Z1g dg dgddgdZ2d  Z3d! Z4d" Z5g dg dgddgdZ6d# Z7d$ Z8d% Z9d& Z:d' Z;d( Z<d) Z=d* Z>d+ Z?d, Z@d- ZAd. ZBd/ ZCd0 ZDd1 ZEd2 ZFd3 ZGd4 ZHd5 ZId6 ZJd7 ZKd8 ZLd9 ZMd: ZNd; ZOg dg dgd<d=gd>d?d@dAdBdCigdDZPdE ZQdF ZRdG ZSdH ZTdI ZUdJ ZVg dg dgd<d=gdKdLdMiidKg dNigdDZWdO ZXdP ZYdQ ZZdR Z[g dg dgd<d=gd>d?d@dAdCdSdTdUgdDZ\dV Z]dW Z^dX Z_dY Z`dZ Zad[ Zbd\ Zcg d]g d^gd<d=gdZdd_g d]g d^giZeg dg dgd`daZfdb Zgdc Zhdd Zig dg dgdedfgd<d=gd>d?d@dAdCdSdTdUgdgZjdh Zkdi Zldj Zmg dg dg dkg dlgg dmd>d?d@dndodCdSdTdndpdqdrdsdndpdtdudvdndpgg dwdxZndy Zodz Zpg d{g dgd<d=gd>d?d@dAdBdCigd|d}gdxZqd~ Zrd Zsd Ztd Zud Zvd Zwd Zxd Zyd Zzd Z{d Z|d Z}d Z~d Zd Zg d{g dg dgg dd>d?d@dAdBdCiddsigg ddxZg dg dgd<dgd>dd@dAdBdtigddgdxZd Zd Zd Zd Zd Zej'                            dqej                            d                    d             Zej'                            dqej                            d                    d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZddZddZ G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d¦          ZdS )    N)datetime	timedelta)Any)FastAPI)DocumentEmbeddingFunctionQueryResultTYPE_KEYSPARSE_VECTOR_TYPE_VALUE)Settings)ChromaErrorNotFoundErrorInvalidArgumentError)DefaultEmbeddingFunctionc                  (    t          j                    S N)tempfilemkdtemp     S/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/test/test_api.pypersist_dirr   !   s    r   c              #      K   t          j        t          ddddddd|                     }|V  |                                 t          j                            |           rt          j        | d           d S d S Nchromadb.api.segment.SegmentAPIz chromadb.db.impl.sqlite.SqliteDB7chromadb.segment.impl.manager.local.LocalSegmentManagerT)chroma_api_implchroma_sysdb_implchroma_producer_implchroma_consumer_implchroma_segment_manager_implallow_resetis_persistentpersist_directory)ignore_errors	chromadbClientr   clear_system_cacheospathexistsshutilrmtreer   clients     r   local_persist_apir1   &         _=@!C!C(a)		
 		
 		
 F LLL
	w~~k"" 7k6666667 7r   c              #      K   t          j        t          ddddddd|                     }|V  |                                 t          j                            |           rt          j        | d           d S d S r   r&   r/   s     r   local_persist_api_cache_bustr4   ;   r2   r   ư>returnc                 .    t          | |z
            |k     S r   )absab	tolerances      r   approx_equalr=   O   s    q1u::	!!r   r<   c                     t          |           t          |          k    rdS t          fdt          | |          D                       S )NFc                 8    g | ]\  }}t          ||          S r   )r=   ).0r:   r;   r<   s      r   
<listcomp>z'vector_approx_equal.<locals>.<listcomp>V   s)    DDD$!QQ9--DDDr   )lenallzipr9   s     `r   vector_approx_equalrE   S   sJ    
1vvQuDDDD#a))DDDEEEr   api_fixturec                 ,   |                     d          }|                                 |                    d          }|                    dd           |                     d          }|                    d          }g d}|                    ddg d	          }|                                D ]a}||v s|d
k    rt          ||                   dk    sJ (|dk    r)t          ||                   t          |          k    sJ W||         J bd S )Nr1   testid1helloids	documentsr4   
embeddingsrM   	metadatas	distances   query_texts	n_resultsincluderL   included)	getfixturevalueresetcreate_collectionaddget_collectionquerykeysrB   set)rF   requestr0   
collectionapi2includesnnkeys           r   test_persist_index_loadingrf   Y   s7   $$%899F
LLNNN))&11JNNuN000""#ABBD$$V,,JDDDH			EEE 
 
 
B
 wwyy # #8OOr#w<<1$$$$$Jr#w<<3x==00000c7????# #r   c                     G d dt           t                             }|                    d          }|                                 |                    d |                      }|                    dd           |                    d	          }|                    d |                      }g d
}|                    dd|          }|                                D ]a}||v s|dk    rt          ||                   dk    sJ (|dk    r)t          ||                   t          |          k    sJ W||         J bd S )Nc                   z     e Zd Zd Zdededdf fdZdefdZdeeef         ddfd	Z	deeef         fd
Z
 xZS )=test_persist_index_loading_embedding_function.<locals>.TestEFc                 N    d t          t          |                    D             S )Nc                 :    g | ]}t          j        g d           S rR         nparrayr@   _s     r   rA   zZtest_persist_index_loading_embedding_function.<locals>.TestEF.__call__.<locals>.<listcomp>v   &    CCCABHYYY''CCCr   rangerB   selfinputs     r   __call__zFtest_persist_index_loading_embedding_function.<locals>.TestEF.__call__u   $    CCs5zz1B1BCCCCr   argskwargsr6   Nc                 :     t                      j        |i | d S r   super__init__ry   r}   r~   	__class__s      r   r   zFtest_persist_index_loading_embedding_function.<locals>.TestEF.__init__x   %    EGGd-f-----r   c                     dS NrH   r   ry   s    r   namezBtest_persist_index_loading_embedding_function.<locals>.TestEF.name{       6r   configc                     d S r   r   ry   r   s     r   build_from_configzOtest_persist_index_loading_embedding_function.<locals>.TestEF.build_from_config~       Dr   c                     i S r   r   r   s    r   
get_configzHtest_persist_index_loading_embedding_function.<locals>.TestEF.get_config       Ir   __name__
__module____qualname__r{   r   r   strr   dictr   r   __classcell__r   s   @r   TestEFri   t           	D 	D 	D	.# 	. 	. 	. 	. 	. 	. 	. 	.	# 	 	 	 		DcN 	t 	 	 	 		S#X 	 	 	 	 	 	 	 	r   r   r1   rH   embedding_functionrI   rJ   rK   r4   rN   rR   rS   rL   rW   )r   r   rX   rY   rZ   r[   r\   r]   r^   rB   r_   )	rF   r`   r   r0   ra   client2rc   rd   re   s	            r   -test_persist_index_loading_embedding_functionr   r   sy       "8,     $$%899F
LLNNN))&VVXX)NNJNNuN000%%&DEEG''6688'LLJDDDH			 
 
 
B
 wwyy # #8OOr#w<<1$$$$$Jr#w<<3x==00000c7????# #r   c                 H    G d dt           t                             }|                    d          }|                                 |                    d |                      }|                    dd           |                    d	          }|                    d |                      }g d
}|                    dd|          }|                                D ]a}||v s|dk    rt          ||                   dk    sJ (|dk    r)t          ||                   t          |          k    sJ W||         J b|d         dggk    sJ |d         d         d         
                                g dk    sJ |d         dggk    sJ |d         dggk    sJ d S )Nc                   z     e Zd Zd Zdededdf fdZdefdZdeeef         ddfd	Z	deeef         fd
Z
 xZS )Ctest_persist_index_get_or_create_embedding_function.<locals>.TestEFc                 N    d t          t          |                    D             S )Nc                 :    g | ]}t          j        g d           S rl   rp   rs   s     r   rA   z`test_persist_index_get_or_create_embedding_function.<locals>.TestEF.__call__.<locals>.<listcomp>   ru   r   rv   rx   s     r   r{   zLtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.__call__   r|   r   r}   r~   r6   Nc                 :     t                      j        |i | d S r   r   r   s      r   r   zLtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.__init__   r   r   c                     dS r   r   r   s    r   r   zHtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.name   r   r   r   c                     d S r   r   r   s     r   r   zUtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.build_from_config   r   r   c                     i S r   r   r   s    r   r   zNtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.get_config   r   r   r   r   s   @r   r   r      r   r   r   r1   rH   r   rI   rJ   rK   r4   rN   rR   rS   rL   rW   rO   r   rm   rM   rQ   )r   r   rX   rY   get_or_create_collectionr[   r]   r^   rB   r_   tolist)	rF   r`   r   apira   rb   rc   rd   re   s	            r   3test_persist_index_get_or_create_embedding_functionr      s       "8,     
!
!"5
6
6CIIKKK--f-RRJNNuN000""#ABBD..v&&((.SSJDDDH			 
 
 
B wwyy # #8OOr#w<<1$$$$$Jr#w<<3x==00000c7????e9%	!!!!lAq!((**iii7777k?yk))))k?se######r   c                    |                     | j                  }|                                 |                    d          } |j        di t
           |                                dk    sJ |                     | j                  }|                    d          }|                                dk    sJ |                    d           |                     | j                  }|	                                g k    sJ d S N	testspacern   r   )
rX   r   rY   rZ   r[   batch_recordscountr\   delete_collectionlist_collections)rF   r`   r0   ra   s       r   test_persistr      s    $$[%9::F
LLNNN))+66JJN##]###""""$$[%9::F&&{33J""""
[)))$$[%9::F""$$******r   c                     |                                  }t          |t                    sJ |dz  }t          j        |          }|t          j                    t          d          z
  k    sJ d S )Ni ʚ;
   )seconds)	heartbeat
isinstanceintr   fromtimestampnowr   )r0   heartbeat_nsheartbeat_sr   s       r   test_heartbeatr      sp    ##%%LlC(((((%'K&{33Ix|~~	"(=(=(========r   c                 >    |                                  }|dk    sJ d S )Nr   )get_max_batch_size)r0   
batch_sizes     r   test_max_batch_sizer      s$    **,,J>>>>>>r   c                     t          | t                    st          j        d           |                                  |                                 }|du sJ d S )NNot a FastAPI instanceT)r   r   pytestskiprY   supports_base64_encoding)r0   r   s     r   test_supports_base64_encodingr      s[    fg&& .,---
LLNNN%>>@@#t++++++r   c                     t          | t                    st          j        d           |                                  ddi| _        |                                 du sJ |                                 dk    sJ d S )Nr   max_batch_sized   F)r   r   r   r   rY   pre_flight_checksr   r   )r0   s    r   $test_supports_base64_encoding_legacyr      s    fg&& .,---
LLNNN 	# F **,,5555$$&&#------r   c                 ~   t          | t                    st          j        d           t	          j        | j         d          }|j        dk    sJ |                                J d|                                	                                v sJ d|                                	                                v sJ d S )Nr   z/pre-flight-checks   r   r   )
r   r   r   r   httpxget_api_urlstatus_codejsonr^   )r0   resps     r   test_pre_flight_checksr     s    fg&& .,---9;;;<<Ds""""99;;"""tyy{{//111111%)9)9););;;;;;;r   皙?ffffff@皙	@333333?Q@r   zhttps://example.com/1zhttps://example.com/2rO   rL   c                     |                                   |                     d          } |j        di t           |                                dk    sJ d S r   )rY   rZ   r[   r   r   r0   ra   s     r   test_addr     s]    
LLNNN))+66JJN##]###""""""r   c                    |                                   |                     d          }|                     d           t          j        t
          d          5   |j        di t           d d d            d S # 1 swxY w Y   d S NrH   Collection .* does not existmatchr   )rY   rZ   r   r   raisesr   r[   r   r   s     r   2test_collection_add_with_invalid_collection_throwsr   "  s    
LLNNN))&11J
V$$$	},K	L	L	L ( (
'''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (   A::A>A>c                    |                                   |                     d          } |j        di t           |                                dk    sJ t          j        t                    5  |                     d          }d d d            n# 1 swxY w Y   |                     d          }|                                dk    sJ d S r   )	rY   rZ   r[   r   r   r   r   	Exceptionr   r   s     r   test_get_or_creater   +  s   
LLNNN))+66JJN##]###""""	y	!	! ; ;--k::
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 00==J""""""s   /BBBc                     |                                   |                     d          } |j        di t           |                                dk    sJ d S r   )rY   rZ   r[   minimal_recordsr   r   s     r   test_add_minimalr   B  s]    
LLNNN))+66JJN%%_%%%""""""r   c                    |                                   |                     d          } |j        di t           g d}|                    |          }|                                D ]a}||v s|dk    rt          ||                   dk    sJ (|dk    r)t          ||                   t          |          k    sJ W||         J bd S )Nr   rO   rM   rP   rV   rL   rn   rW   r   )rY   rZ   r[   r   r   r^   rB   r_   )r0   ra   rc   recordsre   s        r   test_get_from_dbr   L  s    
LLNNN))+66JJN##]###777HnnXn..G||~~ ( (8OOws|$$)))))Jws|$$H555553<''''( (r   c                    |                                   |                     d          }|                     d           t          j        t
          d          5  |                                 d d d            d S # 1 swxY w Y   d S NrH   r   r   )rY   rZ   r   r   r   r   r   r   s     r   2test_collection_get_with_invalid_collection_throwsr   [  s    
LLNNN))&11J
V$$$	},K	L	L	L                      A<<B B c                 &   |                                   |                     d          } |j        di t           |                                dk    sJ |                                   t          |                                           dk    sJ d S )Nr   rn   r   r   )rY   rZ   r[   r   r   rB   r   r   s     r   test_reset_dbr   d  s    
LLNNN))+66JJN##]###""""
LLNNNv&&(())Q......r   c                    |                                   |                     d          } |j        d
i t           g d}|                    g dd|          }|                                D ]a}||v s|dk    rt          ||                   dk    sJ (|dk    r)t          ||                   t          |          k    sJ W||         J b|                    g dgd|          }|                                D ]a}||v s|dk    rt          ||                   dk    sJ (|dk    r)t          ||                   t          |          k    sJ W||         J b|                    g dg dgd|          }|                                D ]a}||v s|dk    rt          ||                   d	k    sJ (|dk    r)t          ||                   t          |          k    sJ W||         J bd S )Nr   rN   r   rR   query_embeddingsrU   rV   rL   rW   )皙?r         @rn   r   )rY   rZ   r[   r   r]   r^   rB   r_   r0   ra   rc   rd   re   s        r   test_get_nearest_neighborsr  o  sb   
LLNNN))+66JJN##]###DDDH			( 
 
 
B
 wwyy # #8OOr#w<<1$$$$$Jr#w<<3x==00000c7????			)//* 
 
 
B
 wwyy # #8OOr#w<<1$$$$$Jr#w<<3x==00000c7????			)//???; 
 
 
B
 wwyy # #8OOr#w<<1$$$$$Jr#w<<3x==00000c7????# #r   c                 <   |                                   |                     d          } |j        di t           |                                dk    sJ t          j        t                    5  |                                 d d d            d S # 1 swxY w Y   d S r   )	rY   rZ   r[   r   r   r   r   r   deleter   s     r   test_deleter    s    
LLNNN))+66JJN##]###""""	y	!	!                   s   /BBBc                     |                                   |                     d          } |j        di t           |                                dk    sJ |                    t          d                   J d S )Nr   rn   rL   rL   r   )rY   rZ   r[   r   r   r  r   s     r   test_delete_returns_noner	    s    
LLNNN))+66JJN##]###""""u!566>>>>>r   c                     |                                   |                     d          } |j        di t           |                                dk    sJ |                    g dgd           d S )Nr   rn   r   rR   r   rU   r   )rY   rZ   r[   r   r   r]   r   s     r   test_delete_with_indexr    s}    
LLNNN))+66JJN##]###""""&71EEEEEr   c                    |                                   |                     d          }|                     d           t          j        t
          d          5  |                    dg           d d d            d S # 1 swxY w Y   d S )NrH   r   r   rI   r  )rY   rZ   r   r   r   r   r  r   s     r   5test_collection_delete_with_invalid_collection_throwsr    s    
LLNNN))&11J
V$$$	},K	L	L	L ' 'ug&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '   A??BBc                     |                                   |                     d          }|                                dk    sJ  |j        di t           |                                dk    sJ d S )Nr   r   rn   r   )rY   rZ   r   r[   r   r   s     r   
test_countr    sz    
LLNNN))+66J""""JN##]###""""""r   c                    |                                   |                     d          }|                     d           t          j        t
          d          5  |                                 d d d            d S # 1 swxY w Y   d S r   )rY   rZ   r   r   r   r   r   r   s     r   4test_collection_count_with_invalid_collection_throwsr    s    
LLNNN))&11J
V$$$	},K	L	L	L                   r   c                     |                                   |                     d          }|                    d           |j        dk    sJ d S Nr   
testspace2r   )rY   rZ   modifyr   r   s     r   test_modifyr    sT    
LLNNN))+66J<((( ?l******r   c                    |                                   |                     d          }|                     d           t          j        t
          d          5  |                    d           d d d            d S # 1 swxY w Y   d S )NrH   r   r   test2r  )rY   rZ   r   r   r   r   r  r   s     r   5test_collection_modify_with_invalid_collection_throwsr    s    
LLNNN))&11J
V$$$	},K	L	L	L ( (w'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   A>>BBc                    |                                   |                     d           |                     d          }t          j        t                    5  |                    d           d d d            d S # 1 swxY w Y   d S r  rY   rZ   r   r   r   r  )r0   c2s     r   "test_modify_error_on_existing_namer     s    
LLNNN
[)))		!	!,	/	/B	y	!	! $ $
		{	###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   A<<B B c                     |                                   |                     d          }t          j        t          d          5  |                    ddi           d d d            d S # 1 swxY w Y   d S )Nr   znot supportedr   
hnsw:spacecosinemetadatar  )r0   caplogra   s      r   test_modify_warn_on_DF_changer'    s    
LLNNN))+66J	y	8	8	8 = =L(#;<<<= = = = = = = = = = = = = = = = = =s   A++A/2A/c                    |                                   ddd}|                     d|          }|j        J |j        d         dk    sJ |j        d         dk    sJ |                     d          }|j        J |j        d         dk    sJ |j        d         dk    sJ |                    ddd	           |j        d         dk    sJ |j        d
         dk    sJ d|j        vsJ |                     d          }|j        J |j        d         dk    sJ |j        d
         dk    sJ d|j        vsJ |                     d          }|j        J |j        d         dk    sJ |j        d
         dk    sJ |                     d          }|j        J |                                 }|D ]Q}|j        dk    r0|j        J |j        d         dk    sJ |j        d
         dk    sJ =|j        dk    r	|j        J Rd S )NrR   rn   )r:   r;   r   r$  r:   r;   ro   )r:   cr)  r  )rY   rZ   r%  r\   r  r   r   r   )r0   
metadata_ara   collectionss       r   test_metadata_crur,    s   
LLNNNq!!J))+
)KKJ***s#q((((s#q(((( &&{33J***s#q((((s#q(((( QQ//000s#q((((s#q((((j))))) &&{33J***s#q((((s#q((((j))))) 00==J***s#q((((s#q(((( 00>>J&&& ))++K! / /
?k))&222&s+q0000&s+q00000_,,&.../ /r   c                    |                                   |                     d          } |j        d	i t           |                                dk    sJ g d}|                    g dgd|          }|                                D ]a}||v s|dk    rt          ||                   dk    sJ (|dk    r)t          ||                   t          |          k    sJ W||         J bd S )
Nr   rn   rN   r   rR   r   rL   rW   r   )	rY   rZ   r[   r   r   r]   r^   rB   r_   r  s        r   test_increment_index_onr.  '  s   
LLNNN))+66JJN##]###""""DDDH			)//* 
 
 
B
 wwyy # #8OOr#w<<1$$$$$Jr#w<<3x==00000c7????# #r   c                 *   |                                   |                     d           |                     d          }|j        dk    sJ t	          j        t                    5  |                     d          }d d d            d S # 1 swxY w Y   d S )Nr   r  )rY   rZ   r\   r   r   r   r   r   s     r   test_add_a_collectionr0  =  s    
LLNNN
[))) &&{33J?k)))) 
y	!	! 9 9**<88
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   %BBBc                     |                                   t          j        t                    5 }|                     d           d d d            n# 1 swxY w Y   |j        j        J d S )Nr  )rY   r   r   r   r\   valuetrace_id)http_clienterrors     r   test_error_includes_trace_idr6  J  s    	{	#	# 1u""<0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ;+++++s   AAAc                     |                                   |                     d           |                     d           |                                 }t          |          dk    sJ d S )Nr   r  rn   rY   rZ   r   rB   r0   r+  s     r   test_list_collectionsr:  S  si    
LLNNN
[)))
\*** ))++K{q      r   c                 N   |                                   |                     d           |                     d           |                                 }t          |          dk    sJ |                                   |                                 }t          |          dk    sJ d S )Nr   r  rn   r   r8  r9  s     r   
test_resetr<  ]  s    
LLNNN
[)))
\*** ))++K{q    
LLNNN))++K{q      r   c                    |                                   |                     d          } |j        di t           |                                dk    sJ |                                }t          |           |                                D ]c}|dv s|dk    rt          ||                   dk    sJ (|dk    r+t          ||                   t          g d          k    sJ Y||         J dd S )Nr   rn   r   rL   rW   rO   rP   rM   r   )
rY   rZ   r[   r   r   peekprintr^   rB   r_   )r0   ra   r?  re   s       r   	test_peekrA  k  s   
LLNNN))+66JJN##]###"""" ??D	$KKKyy{{ % %:::cUlltCy>>Q&&&&&JtCy>>S)Q)Q)Q%R%RRRRRR9$$$$% %r   c                    |                                   |                     d          }|                     d           t          j        t
          d          5  |                                 d d d            d S # 1 swxY w Y   d S r   )rY   rZ   r   r   r   r   r?  r   s     r   3test_collection_peek_with_invalid_collection_throwsrC  }  s    
LLNNN))&11J
V$$$	},K	L	L	L                   r   c                    |                                   |                     d          }|                     d           t          j        t
          d          5  |                    dg           d d d            d S # 1 swxY w Y   d S )NrH   r   r   )rT   )rY   rZ   r   r   r   r   r]   r   s     r   4test_collection_query_with_invalid_collection_throwsrE    s    
LLNNN))&11J
V$$$	},K	L	L	L / /fX.../ / / / / / / / / / / / / / / / / /r  c                    |                                   |                     d          }|                     d           t          j        t
          d          5  |                    dgdg           d d d            d S # 1 swxY w Y   d S )NrH   r   r   rI   rK   )rY   rZ   r   r   r   r   updater   s     r   5test_collection_update_with_invalid_collection_throwsrH    s    
LLNNN))&11J
V$$$	},K	L	L	L ; ;ug&:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   BBBrI   id2rR   onejt?	int_valuestring_valuefloat_valuerM  rn   rO   rL   rP   c                    |                                   |                     d          } |j        di t           |                    ddg          }|d         d         d         dk    sJ |d         d         d	         d
k    sJ |d         d         d         dk    sJ t          |d         d         d         t                    sJ t          |d         d         d	         t                    sJ d S )Ntest_intrI   rI  r  rP   r   rM  rR   rO  rK  rn   r   )rY   rZ   r[   metadata_recordsr   r   r   floatr0   ra   itemss      r   test_metadata_add_get_int_floatrW    s   
LLNNN))*55JJN&&%&&&NNu~N..Ea -2222a /58888a -2222eK(+K8#>>>>>eK(+M:EBBBBBBBr   c                     |                                   |                     d          } |j        d
i t           |                    g dgd          }|d         J |d         d         d         d         dk    sJ |d         d         d         d         d	k    sJ t          |d         d         d         d         t                    sJ t          |d         d         d         d         t                    sJ d S )NrR  r   rR   r  rP   r   rM  rO  rK  r   )rY   rZ   r[   rS  r]   r   r   rT  rU  s      r   !test_metadata_add_query_int_floatrY    s   
LLNNN))*55JJN&&%&&&#)))//*a *  E )))a #K0A5555a #M2e;;;;eK(+A.{;SAAAAAeK(+A.}=uEEEEEEEr   c                    |                                   |                     d          } |j        d	i t           |                    ddi          }|d         d         d         dk    sJ |d         d         d         dk    sJ d S )
NrR  rN  rJ  whererP   r   rM  rR   r   rY   rZ   r[   rS  r   rU  s      r   test_metadata_get_where_stringr^    s    
LLNNN))*55JJN&&%&&&NN.%!8N99Ea -2222a 0E999999r   c                    |                                   |                     d          } |j        d	i t           |                    ddi          }|d         d         d         dk    sJ |d         d         d         dk    sJ d S )
NrR  rM  rR   r[  rP   r   rN  rJ  r   r]  rU  s      r   test_metadata_get_where_intr`    s    
LLNNN))*55JJN&&%&&&NN+q!1N22Ea -2222a 0E999999r   c                 H   |                                   |                     d          } |j        di t           |                    ddi          }|d         d         d         dk    sJ |d         d         d	         d
k    sJ |d         d         d         dk    sJ d S )NrR  rO  rK  r[  rP   r   rM  rR   rN  rJ  r   r]  rU  s      r   test_metadata_get_where_floatrb    s    
LLNNN))*55JJN&&%&&&NN-!7N88Ea -2222a 0E9999a /5888888r   c                    |                                   |                     d          } |j        di t           |                    dgddddg           |                    dg          }|d	         d
         d         dk    sJ |d	         d
         d         dk    sJ |d	         d
         d         dk    sJ d S )NrR  rI   rn   twojt @rL  rL   rP   r  rP   r   rM  rN  rO  r   )rY   rZ   r[   rS  rG  r   rU  s      r   "test_metadata_update_get_int_floatrg    s    
LLNNN))*55JJN&&%&&&G!"E%PPQ     NNwN''Ea -2222a 0E9999a /5888888r   r2  nested5rm   c                     |                                   |                     d          }t          j        t          d          5   |j        di t           d d d            d S # 1 swxY w Y   d S )Ntest_metadata_validationr%  r   r   )rY   rZ   r   r   
ValueErrorr[   bad_metadata_recordsr   s     r   test_metadata_validation_addrn    s    
LLNNN))*DEEJ	z	4	4	4 / /
..-.../ / / / / / / / / / / / / / / / / /s   A%%A),A)c                    |                                   |                     d          } |j        d	i t           t	          j        t          d          5  |                    dgdddii           d d d            d S # 1 swxY w Y   d S )
Nrk  r%  r   rI   r2  rh  ri  rf  r   )rY   rZ   r[   rS  r   r   rl  rG  r   s     r   test_metadata_validation_updaterp    s    
LLNNN))*DEEJJN&&%&&&	z	4	4	4 M Mug'Hc?1KLLLM M M M M M M M M M M M M M M M M Ms   BBBc                     |                                   |                     d          }t          j        t          d          5  |                    dddii           d d d            d S # 1 swxY w Y   d S )Ntest_where_validationr\  r   r2  rh  ri  r[  )rY   rZ   r   r   rl  r   r   s     r   test_where_validation_getrs    s    
LLNNN))*ABBJ	z	1	1	1 9 9g#78889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   A--A14A1c                     |                                   |                     d          }t          j        t          d          5  |                    g ddddii           d d d            d S # 1 swxY w Y   d S )	Nrr  r\  r   r   r   r   r2  rh  ri  )r   r\  )rY   rZ   r   r   rl  r]   r   s     r   test_where_validation_queryrv    s    
LLNNN))*ABBJ	z	1	1	1 W W)))GhPS_;UVVVW W W W W W W W W W W W W W W W W Ws   A00A47A4re  rd  )rM  rO  rN  c                     |                                   |                     d          } |j        di t           |                    dddii          }t          |d                   dk    sJ d S )	Ntest_where_ltrM  $ltrn   r[  rP   rR   r   rY   rZ   r[   operator_recordsr   rB   rU  s      r   rx  rx    s{    
LLNNN))/::JJN&&%&&&NN+qz!:N;;Eu[!""a''''''r   c                     |                                   |                     d          } |j        di t           |                    dddii          }t          |d                   dk    sJ d S )	Ntest_where_lterM  $lte       @r[  rP   rn   r   rz  rU  s      r   r}  r}  %  s|    
LLNNN))*:;;JJN&&%&&&NN+}!=N>>Eu[!""a''''''r   c                     |                                   |                     d          } |j        di t           |                    dddii          }t          |d                   dk    sJ d S )	Nr}  rO  $gtgffffffr[  rP   rn   r   rz  rU  s      r   test_where_gtr  -  s|    
LLNNN))*:;;JJN&&%&&&NN-%!?N@@Eu[!""a''''''r   c                     |                                   |                     d          } |j        di t           |                    dddii          }t          |d                   dk    sJ d S )	Nr}  rO  $gtere  r[  rP   rR   r   rz  rU  s      r   test_where_gter  5  s|    
LLNNN))*:;;JJN&&%&&&NN-&%!ANBBEu[!""a''''''r   c                     |                                   |                     d          } |j        di t           |                    dddii          }t          |d                   dk    sJ d S )	Nr}  rN  $nerd  r[  rP   rR   r   rz  rU  s      r   test_where_ne_stringr  =  s|    
LLNNN))*:;;JJN&&%&&&NN.5%.!ANBBEu[!""a''''''r   c                 P   |                                   |                     d          } |j        d
i t           |                    dddii          }t          |d                   dk    sJ |                    ddd	ii          }t          |d                   dk    sJ d S )Nr}  rM  r  rR   r[  rP   rO  $eqre  r   rz  rU  s      r   test_where_ne_eq_numberr  E  s    
LLNNN))*:;;JJN&&%&&&NN+qz!:N;;Eu[!""a''''NN-%!@NAAEu[!""a''''''r   c                    |                                   |                     d          } |j        di t           t	          j        t                    5  |                    dddii           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    dddii           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    dddd	i           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    d
dddiii           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    ddidddiid           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    ddddiidddiigi           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    ddddiigi           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    dg i           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    ddi           d d d            d S # 1 swxY w Y   d S )Ntest_where_valid_operatorsrM  z$invalidrn   r[  ry  2rR   )ry  r  $andr  )rM  $orr  	$containsrH   r   )rY   rZ   r[   r{  r   r   rl  r   r   s     r   r  r  O  s[   
LLNNN))*FGGJJN&&%&&&	z	"	" = =kJ?;<<<= = = = = = = = = = = = = = = 
z	"	" : :kE3<8999: : : : : : : : : : : : : : : 
z	"	" B Bk1Q+?+?@AAAB B B B B B B B B B B B B B B 
z	"	" B Bf{UAJ&?@AAAB B B B B B B B B B B B B B B 
z	"	" 
 
!&
K%3LMM 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
z	"	" 
 
K%4{UAJ6OPQ 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
z	"	" C Ce{UAJ&?%@ABBBC C C C C C C C C C C C C C C 
z	"	" * *eR[)))* * * * * * * * * * * * * * *
 
z	"	" 4 4k623334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s   A<<B B  CCC+DDD7E  E$'E$ F00F47F4#HH
H'III5JJ!J>K$$K(+K()r   r   r   r  )r   r   r   r  r   r   r  c                 2   |                                   |                     d          } |j        di t           t	          j        t                    5 } |j        di t           d d d            n# 1 swxY w Y   dt          |j	                  v sJ d S )Ntest_dimensionality_validation	dimensionr   )
rY   rZ   r[   r   r   r   r   bad_dimensionality_recordsr   r2  r0   ra   es      r   "test_dimensionality_validation_addr    s    
LLNNN))*JKKJJN%%_%%%	y	!	! 5Q
4434445 5 5 5 5 5 5 5 5 5 5 5 5 5 5#ag,,&&&&&&   A44A8;A8c                 2   |                                   |                     d          } |j        di t           t	          j        t                    5 } |j        di t           d d d            n# 1 swxY w Y   dt          |j
                  v sJ d S )N$test_dimensionality_validation_queryr  r   )rY   rZ   r[   r   r   r   r   r]   bad_dimensionality_queryr   r2  r  s      r   r  r    s    
LLNNN))*PQQJJN%%_%%%	y	!	! 5Q
4434445 5 5 5 5 5 5 5 5 5 5 5 5 5 5#ag,,&&&&&&r  c                    |                                   |                     d          } |j        di t           t	          j        t          d          5  |                    dddii           d d d            n# 1 swxY w Y   t	          j        t          d          5  |                    g dd	di
           d d d            n# 1 swxY w Y   t	          j        t          d          5  |                    d	g i           d d d            n# 1 swxY w Y   t	          j        t          d          5  |                    d	ddii           d d d            n# 1 swxY w Y   t	          j        t          d          5  |                    dddii           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    dddii           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    dddiddigi           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    dd	digi           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    dg i           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    ddd	digid	digi           d d d            d S # 1 swxY w Y   d S )Nr  zwhere documentr   ry  z$nestedrn   where_documentru  r  )r   r  textrJ   $not_containsr  z$unsupporteddocr  r   )	rY   rZ   r[   r{  r   r   rl  r   r]   r   s     r   #test_query_document_valid_operatorsr    s   
LLNNN))*FGGJJN&&%&&&	z)9	:	:	: ? ?uy!n&=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 
z)9	:	:	: V V)))[RSDTUUUV V V V V V V V V V V V V V V 
z)9	:	:	: 9 9{B&78889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 
z)9	:	:	: H H{VW4E&FGGGH H H H H H H H H H H H H H H 
z)9	:	:	: L L8I&JKKKL L L L L L L L L L L L L L L 
z	"	" I Iv/F&GHHHI I I I I I I I I I I I I I I 
z	"	" 
 
!^U$;ne=T#UV 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
z	"	" G GuU/C.D&EFFFG G G G G G G G G G G G G G G 
z	"	" 3 3ubk2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 
z	"	" 
 
;"6!78;:NO 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A>>BB$CCC2DDD=E$$E(+E(
F11F58F5G<<H H  III/JJJ;K  K$'K$"L33L7:L7zthis is doc1 and it's great!zdoc2 is also great!)rO   rM   rL   rP   c                    |                                   |                     d          } |j        di t           |                    ddi          }t          |d                   dk    sJ |                    ddi          }t          |d                   dk    sJ |                    dd	i          }t          |d                   d
k    sJ d S )Ntest_get_where_documentr  doc1r  rP   rR   greatrn   badr   r   )rY   rZ   r[   contains_recordsr   rB   rU  s      r   r  r    s    
LLNNN))*CDDJJN&&%&&&NN;*?N@@Eu[!""a''''NN;*@NAAEu[!""a''''NN;*>N??Eu[!""a''''''r   c                 >   |                                   |                     d          } |j        di t           |                    g dddid          }t          |d         d                   dk    sJ |                    g d	dd
id          }t          |d         d                   dk    sJ t          j        t                    5 }|                    g d	ddid          }dt          |j
                  v sJ 	 d d d            d S # 1 swxY w Y   d S )Ntest_query_where_documentrR   r   r   r  r  rR   )r   r  rU   rP   r   ru  r  rn   r  
datapointsr   )rY   rZ   r[   r  r]   rB   r   r   r   r   r2  )r0   ra   rV  r  s       r   r  r    s   
LLNNN))*EFFJJN&&%&&&"K3HTU   E u[!!$%%****"K3IUV   E u[!!$%%****	y	!	! ,Q  &YYU7KWX ! 
 
 s17||+++++	, , , , , , , , , , , , , , , , , ,s   5DDDc                    |                                   |                     d          } |j        d	i t           |                    ddi           |                                dk    sJ |                    ddi           |                                dk    sJ |                    ddi           |                                dk    sJ d S )
Ntest_delete_where_documentr  r  r  rR   r  r  r   r   )rY   rZ   r[   r  r  r   r   s     r   r  r    s    
LLNNN))*FGGJJN&&%&&&k6%:;;;""""k5%9:::""""k7%;<<<""""""r   )g?g      @r   )gffffff?gGz@r   )rI   rI  id3id4r  )rM  rN  rO  is)rM  rO  rN  r  ro   g/$@three   gjt@four)z this document is first and greatz!this document is second and greatz this document is third and greatz!this document is fourth and great)rO   rL   rP   rM   c           	      6   |                                   |                     d          } |j        di t           |                    dddddiiddd	iigid
digi          }t          |d                   dk    sJ |                    dddddiidddiigiddddiidddiigigi          }t          |d                   dk    sJ |                    dddddiidddiigiddddiidddiigigi          }t          |d                   dk    sJ d S )Ntest_logical_operatorsr  r  rM  r  ro   rO  ry  gffffff?r  r  r[  rP   r  rN  r  r  r  rn   rR   rd  rJ  r   rY   rZ   r[   logical_operator_recordsr   rB   rU  s      r   test_where_logical_operatorsr    s   
LLNNN))*BCCJJN..-...NN+{3meS\5RSTu
   E u[!""a''''NN$uaj1'%)9: $uaj1'%9
   E$ u[!""a''''NN$uaj1'%8 $uaj1'%8
   E$ u[!""a''''''r   c                    |                                   |                     d          } |j        di t           |                    dddiddigi          }t          |d                   dk    sJ |                    d	ddidd
igi          }t          |d                   dk    sJ |                    d	ddidd
igidddii          }t          |d                   dk    sJ d S )Ntest_document_logical_operatorsr  r  firstr  r  rP   rR   r  secondrn   rM  r  )r  r\  r   r  rU  s      r   %test_where_document_logical_operatorsr  T  sQ   
LLNNN))*KLLJJN..-...NNg&e$
   E u[!""a''''NNg&h'
   E u[!""a''''NNg&h'
 %
  
 
E u[!""a''''''r   ru  this document is firstthis document is secondc                 X   |                                   |                     d          } |j        di t           g d}|                    g d|d          }|d         J |d         d         d         d	k    sJ |d
         d         d         d         dk    sJ t          |d                   t          |          k    sJ g d}|                    g d|d          }|d
         J |d         d         d         d	k    sJ t          |d                   t          |          k    sJ |                    g dg dgg d          }|d         J |d
         J |d         J |d         J |d         d         d         d	k    sJ |d         d         d         dk    sJ d S )Ntest_query_includerP   rM   rQ   ru  rR   r   rV   rU   rO   rL   r   rI   rP   rM  rW   )rO   rM   rQ   )rR   rn   r   rn   rM   rQ   rI  r   )rY   rZ   r[   r   r]   r_   r0   ra   rV   rV  s       r   r  r    s&   
LLNNN))*>??JJNW555G"   E
 &&&<?1&&&&a #K0A5555uZ !!S\\1111666G"   E
 %%%<?1&&&&uZ !!S\\1111#))[[[1   E
 %%%%%%&&&%%%<?1&&&&<?1&&&&&&r   c                 |   |                                   |                     d          } |j        di t           ddg}|                    |ddi          }|d         J |d         d	         d
k    sJ |d         d	         d         dk    sJ |d         d	         dk    sJ t          |d                   t          |          k    sJ ddg}|                    |          }|d         J |d         d	         d
k    sJ t          |d         d         d	         d          sJ t          |d                   t          |          k    sJ |                    g           }|d         J |d         J |d         J |d         d	         d
k    sJ |d         g k    sJ t          j        t          d          5  |                    ddg          }d d d            n# 1 swxY w Y   t          j        t          d          5  |                    d           }d d d            d S # 1 swxY w Y   d S )Ntest_get_includerP   rM   rM  rR   )rV   r\  rO   rL   r   rI   r  rW   r   r   rV   r   	undefinedr   )
rY   rZ   r[   r   r   r_   r=   r   r   rl  r  s       r   r  r    s   
LLNNN))*<==JJNWK(GNN7;2BNCCE&&&<?e####a -2222a $<<<<<uZ !!S\\1111[)GNN7N++E%%%<?e####l+A.q1377777uZ !!S\\1111NN2N&&E%%%%%%&&&<?e####""""	z	3	3	3 C C['ABBC C C C C C C C C C C C C C C 
z	3	3	3 - -t,,- - - - - - - - - - - - - - - - - -s$   G''G+.G+H11H58H5c                    |                                   |                     d          } |j        di t           |                    g dg dd          }|d         d         d         dk    sJ |d         d         d	         d
k    sJ d S )Ntest_query_orderr   r  rn   r  rM   r   r  rR   r  r   rY   rZ   r[   r   r]   rU  s      r   r  r    s    
LLNNN))*<==JJNW)))777   E a #'@@@@@a #'???????r   c                    |                                   |                     d          }t          j        t                    5 }|                    g ddgi g           d d d            n# 1 swxY w Y   dt          |j                  v sJ t          j        t                    5 }|                    d           d d d            n# 1 swxY w Y   dt          |j                  v sJ t          j        t                    5 }|	                    ddg           d d d            n# 1 swxY w Y   dt          |j                  v sJ d S )	Ntest_invalid_idru  rR   rP  IDr  validr   )
rY   rZ   r   r   rl  r[   r   r2  r   r  r  s      r   r  r    s   
LLNNN))*;<<J	z	"	" Fa)))!EEEF F F F F F F F F F F F F F F3qw<< 
z	"	" a1              3qw<< 
z	"	" ,awl+++, , , , , , , , , , , , , , ,3qw<<s6   A,,A03A0(CCCD,,D03D0c                    d}|                                   |                     d          } |j        di t           |                    g dd          }|d         d         d         d	k    sJ |                                   |                     dd
ddd          } |j        di t           |                    g dd          }|d         d         d         d|z
  k    sJ |d         d         d         d|z   k     sJ |                                   |                     dddi          } |j        di t           |                    g dd          }|d         d         d         dk     sJ d S )Ng-q=test_index_paramsr  )333333?gQ?g?rR   r  rQ   r   r  r#        )r"  zhnsw:construction_efzhnsw:Mr   r%  r"  ipr   r  )r0   EPSra   rV  s       r   r  r    s   
C
LLNNN))/B)CCJJNW)))   E a #a'''' LLNNN))  ("PQRR *  J JNW)))   E a #a#g----a #a#g---- LLNNN)) L$+? *  J JNW)))   E a #b((((((r   c                     |                                   t          j        t                    5  |                     dddi          } |j        di t           d d d            d S # 1 swxY w Y   d S )Nr  r"  foobarr  r   )rY   r   r   r   rZ   r[   r   r   s     r   test_invalid_index_paramsr     s    
LLNNN	+	,	, " "--$h/G . 
 

 	
!!!!!	" " " " " " " " " " " " " " " " " "s   ,A''A+.A+c                 V   |                     d          } |                                  |                     dddi          }|                    dd           |                     d	          }|                    d          }|j        d         dk    sJ g d
}|                    dd|          }|                                D ]a}||v s|dk    rt          ||                   dk    sJ (|dk    r)t          ||                   t          |          k    sJ W||         J bd S )Nr1   rH   r"  r  r$  rI   rJ   rK   r4   rN   rR   rS   rL   rW   )
rX   rY   rZ   r[   r\   r%  r]   r^   rB   r_   )r0   r`   ra   rb   rc   rd   re   s          r   !test_persist_index_loading_paramsr  *  se   $$%899F
LLNNN))% *  J NNuN000""#ABBD$$ J |,4444DDDH			 
 
 
B
 wwyy # #8OOr#w<<1$$$$$Jr#w<<3x==00000c7????# #r   c           	         |                                   |                     d          }t          j                            dd                              t          j                                                  }|                    |d t          t          |                    D                        |                                t          |          k    sJ d S )Nr   i     c                     g | ]}d | S )zhttp://example.com/r   r@   is     r   rA   z"test_add_large.<locals>.<listcomp>R  s!    JJJ1&1&&JJJr   r   )rY   rZ   rq   randomrandastypefloat32r   r[   rw   rB   r   )r0   ra   large_recordss      r   test_add_larger  H  s    
LLNNN))+66J INN4--44RZ@@GGIIMNN JJc-6H6H0I0IJJJ    
 ]!3!3333333r   c                     |                                   |                                 }dd l}|                    d|          sJ d S )Nr   z\d+\.\d+\.\d+)rY   get_versionrer   )r0   versionr  s      r   test_get_versionr  Y  sL    
LLNNN  ""G III88$g.......r   c                 B   |                                   |                     d          } |j        di t           t	          |                                           dk    sJ |                     d           t	          |                                           dk    sJ d S )Ntest_delete_collectionrR   r   r   )rY   rZ   r[   r   rB   r   r   r   s     r   r  r  d  s    
LLNNN))*BCCJJNWv&&(())Q....
5666v&&(())Q......r   c                      t                      } d t          d          D             } | |          }t          |          dk    sJ d S )Nc                     g | ]}d S )zthis is a testr   rs   s     r   rA   z*test_default_embedding.<locals>.<listcomp>q  s    000000r   @   )r   rw   rB   )r   docsrO   s      r   test_default_embeddingr  o  sT    13300eBii000D##D))Jz??b      r   c                    t           j                            dd                              t           j                                                  }t           j                            dd                              t           j                                                  }d t          t          |                    D             }d t          t          |                    D             }|                                  | 	                    d          }|
                    ||           | 	                    d          }|
                    ||           t          |                                           dk    sJ |                                t          |          k    sJ |                                t          |          k    sJ |                    |d	         d
          }|                    |d	         d
          }t          |d                   d	k    sJ t          |d                   d	k    sJ t          |d         d	                   d	k    sJ t          |d         d	                   d	k    sJ |d         d	         d	         |d	         k    sJ |d         d	         d	         |d	         k    sJ d S )Nr   r  c                     g | ]}d | S )zhttp://example.com/1/r   r  s     r   rA   z-test_multiple_collections.<locals>.<listcomp>y  !    IIIA'A''IIIr   c                     g | ]}d | S )zhttp://example.com/2/r   r  s     r   rA   z-test_multiple_collections.<locals>.<listcomp>z  r  r   coll1r   coll2rn   r   rR   r  rL   )rq   r  r  r  r  r   rw   rB   rY   rZ   r[   r   r   r]   )	r0   embeddings1embeddings2ids1ids2r  r  results1results2s	            r   test_multiple_collectionsr  v  sn   )..S))00<<CCEEK)..S))00<<CCEEKIIs;7G7G1H1HIIIDIIs;7G7G1H1HIIID
LLNNN$$W--E	II$I///$$W--E	II$I///v&&(())Q....;;==C,,,,,,;;==C,,,,,,{{KNa{HHH{{KNa{HHH x!####x!####xq!""Q&&&&xq!""Q&&&&E?1a DG++++E?1a DG++++++r   c                    |                                   |                     d          } |j        di t           t          d         d         gg dgdgddigd} |j        di | |                    |d	         d
g d          }t          |d         d                   d
k    sJ |d         d         d         |d         d         k    sJ |d         d         d         |d         d         k    sJ |d         d         d         d         dk    sJ t          |d	         d         d         |d	         d                   sJ d S )Ntest_update_queryrL   r   r   皙?333333?zupdated documentfoobar)rL   rO   rM   rP   rO   rR   r   r   rM   rP   r   )rY   rZ   r[   r   rG  r]   rB   rE   )r0   ra   updated_recordsresultss       r   r  r    s   
LLNNN))*=>>JJNW q!"&'()en%	 O J((((( (6888   G
 wu~a !!Q&&&&5>!Q?5#9!#<<<<<;"1%)Ea)HHHHH;"1%e,5555a #_\%B1%E      r   c                    |                                   |                     d          } |j        d
i t           g d}|                    g dgd|          }|                                D ]g}||v s|dk    r"t          ||         d                   dk    sJ .|d	k    r)t          ||                   t          |          k    sJ ]||         J hd S )Nr   rN   r   r  r   rL   r   rn   rW   r   )rY   rZ   r[   r   r]   r^   rB   r_   )r0   ra   rc   r  re   s        r   <test_get_nearest_neighbors_where_n_results_more_than_elementr    s   
LLNNN))+66JJNWDDDH)//*   G
 ||~~ ( ((??cUllws|A''1,,,,,Jws|$$H555553<''''( (r   c                 \   |                                   |                     d          } |j        d	i t           t	          j        t                    5 }|                    g dgdg d           d d d            n# 1 swxY w Y   dt          |j	                  v sJ |j
        t          k    sJ t	          j        t                    5 }|                    g dgdg d           d d d            n# 1 swxY w Y   dt          |j	                  v sJ |j
        t          k    sJ d S )
Nr   r   rN   r   z<Number of requested results -1, cannot be negative, or zero.rJ  r   r   )rY   rZ   r[   r   r   r   	TypeErrorr]   r   r2  typerl  )r0   ra   excs      r   test_invalid_n_results_paramr    s   
LLNNN))+66JJNW	y	!	! 
S-oo.III 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 JS	N N     8y    	z	"	" 
c-oo.III 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 C	NN""""8z!!!!!!s$   A??BBC77C;>C;)g@gQ	@g@rI   rI  r  rN  )r  r  zthis document is third)      @r  r   )r   g(\@g@r  
one_of_onez this document is even more firstzthis document is new and fourthc                 D   |                                   |                     d          } |j        di t           |                                dk    sJ  |j        di t           |                                dk    sJ |                    g dt          d         d                   }t          |d         d         t          d         d                   sJ |d	         d         t          d	         d         k    sJ |d
         d         t          d
         d         k    sJ |	                    |d         dg d          }t          |d         d         d         t          d         d                   sJ |d	         d         d         t          d	         d         k    sJ |d
         d         d         t          d
         d         k    sJ |
                    t          d         d                    |                    t          d         d         g dgddig           |                                dk    sJ |                    g ddg          }t          |d         d         g d          sJ |d	         d         ddik    sJ |d
         d         J d S )NrH   ro   r  r>  rL   r   )rV   rL   rO   rP   rM   rR   r   rn   r  )r   Gz?gGz@rN  za new string valuerL   rO   rP   r  r   )rY   rZ   r[   initial_recordsr   upsertnew_recordsr   rE   r]   r  )r0   ra   
get_resultquery_results       r   test_upsertr    s   
LLNNN))&11JJN%%_%%%""""J$$$$$""""888k%>PQR>S    J < #[%>q%A     k"1%[)A!)DDDDDk"1%[)A!)DDDDD###L1888 $  L
 \"1%a(+l*CA*F     $Q'*k+.Fq.IIIII$Q'*k+.Fq.IIIII/%03444E"1%%%%&"$89:    
 """"888ug    J z,7:<M<M<MNNNNNk"1%.:N)OOOOOk"1%-----r   c                    |                                   |                     d          }|                     d           t          j        t
          d          5   |j        di t           d d d            d S # 1 swxY w Y   d S r   )rY   rZ   r   r   r   r   r  r  r   s     r   5test_collection_upsert_with_invalid_collection_throwsr!  )  s    
LLNNN))&11J
V$$$	},K	L	L	L - -
,,O,,,- - - - - - - - - - - - - - - - - -r   c                    |                                   |                     d          }g dg dgddgd}t          j        t                    5 } |j        di | d d d            n# 1 swxY w Y   dt          |j                  v sJ t          j        t                    5 }|                    g dgd	
           d d d            n# 1 swxY w Y   dt          |j                  v sJ dgdgdggdgdgdgggddgd}t          j        t                    5 } |j	        di | d d d            n# 1 swxY w Y   dt          |j                  v sJ g dgg dggddgd}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 )Ntest_invalid_embeddings)0r$  r$  )z1.2z2.243.2rI   rI  r   	embedding)z1.1z2.3r%  rR   r  r   r   r   r   r   r   r   )rY   rZ   r   r   rl  r[   r   r2  r]   rG  r  )r0   ra   invalid_recordsr  s       r   r#  r#  5  s!   
LLNNN))*CDDJ '(>(>(>?u~ O 
z	"	" *a
)))))* * * * * * * * * * * * * * *#ag,,&&&& 
z	"	" 
a3334 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 #ag,,&&&& aS1##(>?u~ O 
z	"	" -a
,,O,,,- - - - - - - - - - - - - - -#ag,,&&&& ((+;+;+;*<=u~ O 
z	"	" -a
,,O,,,- - - - - - - - - - - - - - -#ag,,&&&&&&sH   A**A.1A.&CCCD88D<?D<FF!$F!c                 2   |                                   |                     d          } |j        di t           t	          j        t                    5 } |j        di t           d d d            n# 1 swxY w Y   dt          |j
                  v sJ d S )N$test_dimensionality_update_exceptionr  r   )rY   rZ   r[   r   r   r   r   rG  r  r   r2  r  s      r   $test_dimensionality_exception_updater*  `      
LLNNN))*PQQJJN%%_%%%	y	!	! 8Q
7767778 8 8 8 8 8 8 8 8 8 8 8 8 8 8#ag,,&&&&&&r  c                 2   |                                   |                     d          } |j        di t           t	          j        t                    5 } |j        di t           d d d            n# 1 swxY w Y   dt          |j
                  v sJ d S )N$test_dimensionality_upsert_exceptionr  r   )rY   rZ   r[   r   r   r   r   r  r  r   r2  r  s      r   $test_dimensionality_exception_upsertr.  m  r+  r  win32)reruns	conditionc                     t           j                            d          rt          j        d           |                                  d S )NCHROMA_INTEGRATION_TEST_ONLY"Skipping test for integration test)r*   environr   r   r   r   )
client_ssls    r   test_ssl_self_signedr7  x  sB    	z~~455 :8999r   c                    t           j                            d          rt          j        d           |                                  | j        j        j        }t          j	        t                    5 }t          j        d|           d d d            n# 1 swxY w Y   t          j        t          |j                  |j        |j        j                  }|                                  dd                    |          v sJ d S )Nr3  r4  T)sslportCERTIFICATE_VERIFY_FAILED )r*   r5  r   r   r   r   _server	_settingschroma_server_http_portr   rl  r'   
HttpClient	tracebackformat_exceptionr  r2  __traceback__r)   join)r6  _portr  stack_traces       r   'test_ssl_self_signed_without_ssl_verifyrG    s!   	z~~455 :8999(@E	z	"	" 2a511112 2 2 2 2 2 2 2 2 2 2 2 2 2 2,QWqw 5 K !!###&"''+*>*>>>>>>>s   2BBBc                   	 |                                   |                     d          }d}d}t          j                            dd                              t          j                                                  }d t          |          D             }|	                    ||           d t          d|d          D             	t          j                            |                              t          j                                                  }|
                    |	|g 	          }d
 |d         D             }t          	fd|D                       sJ d S )Ntest_query_id_filtering_smallr   r  c                     g | ]}| S r   r   r  s     r   rA   z9test_query_id_filtering_small_dataset.<locals>.<listcomp>      
.
.
.aa6
.
.
.r   r   c                     g | ]}| S r   r   r  s     r   rA   z9test_query_id_filtering_small_dataset.<locals>.<listcomp>      ;;;AA;;;r   r   r   r   rL   rU   rV   c                     g | ]	}|D ]}|
S r   r   r@   sublistitems      r   rA   z9test_query_id_filtering_small_dataset.<locals>.<listcomp>  %    OOOwOOtOOOOr   rL   c              3       K   | ]}|v V  	d S r   r   r@   id	query_idss     r   	<genexpr>z8test_query_id_filtering_small_dataset.<locals>.<genexpr>  '      ::2rY::::::r   rY   rZ   rq   r  r  r  r  r   rw   r[   r]   rC   )
r0   ra   num_vectorsdimsmall_recordsrL   query_embeddingr  all_returned_idsrW  s
            @r   %test_query_id_filtering_small_datasetr`    s\   
LLNNN))*IJJJK
CINN3,,33BJ??FFHHM
.
.5--
.
.
.CNN     
 <;q+r!:!:;;;IinnS))00<<CCEEO(	   G POGENOOO::::)9::::::::::r   c                 |   |                                   |                     d          }d}dt          j                            |                              t          j                                                  }d t          |          D             }|	                    ||           d t          d|d          D             t          j                                                          t          j                                                  }|
                    ||g 	          }d
 |d         D             }t          fd|D                       sJ fdt          d          D             }|
                    |dg 	          }	|	d         D ]}
t          fd|
D                       sJ  d S )Ntest_query_id_filtering_medium  r  c                     g | ]}| S r   r   r  s     r   rA   z:test_query_id_filtering_medium_dataset.<locals>.<listcomp>  rK  r   r   c                     g | ]}| S r   r   r  s     r   rA   z:test_query_id_filtering_medium_dataset.<locals>.<listcomp>  rM  r   r   r   rN  c                     g | ]	}|D ]}|
S r   r   rP  s      r   rA   z:test_query_id_filtering_medium_dataset.<locals>.<listcomp>  rS  r   rL   c              3       K   | ]}|v V  	d S r   r   rU  s     r   rX  z9test_query_id_filtering_medium_dataset.<locals>.<genexpr>  rY  r   c                     g | ]P}t           j                                                          t           j                                                  QS r   )rq   r  r  r  r  r   )r@   rt   r\  s     r   rA   z:test_query_id_filtering_medium_dataset.<locals>.<listcomp>  sP       <=	s""2:..5577  r   ro   c              3       K   | ]}|v V  	d S r   r   rU  s     r   rX  z9test_query_id_filtering_medium_dataset.<locals>.<genexpr>  s'      88r2?888888r   rZ  )r0   ra   r[  medium_recordsrL   r^  r  r_  multi_query_embeddingsmulti_results
result_setr\  rW  s              @@r   &test_query_id_filtering_medium_datasetrn    s   
LLNNN))*JKKJK
CY^^K55<<RZHHOOQQN
.
.5--
.
.
.CNN!    
 <;q+r!:!:;;;IinnS))00<<CCEEO(	   G POGENOOO::::)9::::::::   AFq   $$/	 %  M $E* 9 9
8888Z8888888889 9r   c                    |                                   |                     d          }d}d}t          j                            ||                              t          j                                                  }d t          |          D             }d t          |          D             }|	                    |||           d t          dd	          D             }|
                    |
           d t          d	d          D             }|dz   }	d t          ||	          D             }
t          j                            t          |          t          |
          z   |                              t          j                                                  }d t          t          |                    D             }|                    |||
z   |           d t          dd          D             d t          dd          D             z   d t          |dz   |dz             D             z   dg}t          j                            |                              t          j                                                  }|                    ||	|          }d |d         D             }t          fd|D                       sJ t          |d                   D ]>\  }}t          |          D ])\  }}||v s||
v r|d         |         |         d         sJ *?|d         }|                    ||d|          }|d         d         d         d         sJ |d         }t!          j        t$                    5 }|                    ||d|           d d d            n# 1 swxY w Y   dt'          |j                  v sJ d S ) Ntest_query_id_filtering_e2er  r   c                     g | ]}| S r   r   r  s     r   rA   z/test_query_id_filtering_e2e.<locals>.<listcomp>  rK  r   c                     g | ]}d |iS )indexr   r  s     r   rA   z/test_query_id_filtering_e2e.<locals>.<listcomp>  s    :::!'1:::r   rP  c                     g | ]}| S r   r   r  s     r   rA   z/test_query_id_filtering_e2e.<locals>.<listcomp>  s    333V333r   r      r  c                     g | ]}| S r   r   r  s     r   rA   z/test_query_id_filtering_e2e.<locals>.<listcomp>  s    <<<f<<<r   2   r  c                     g | ]}| S r   r   r  s     r   rA   z/test_query_id_filtering_e2e.<locals>.<listcomp>  s    MMMAAMMMr   c                     g | ]}|d dS )T)rs  upsertedr   r  s     r   rA   z/test_query_id_filtering_e2e.<locals>.<listcomp>  s-       +,!&&  r   c                     g | ]}| S r   r   r  s     r   rA   z/test_query_id_filtering_e2e.<locals>.<listcomp>  s    &&&AA&&&r   r  c                     g | ]}| S r   r   r  s     r   rA   z/test_query_id_filtering_e2e.<locals>.<listcomp>  s    
)
)
)aa6
)
)
)r   #   -   c                     g | ]}| S r   r   r  s     r   rA   z/test_query_id_filtering_e2e.<locals>.<listcomp>  s'     
 
 
qF
 
 
r      rP   rN  c                     g | ]	}|D ]}|
S r   r   rP  s      r   rA   z/test_query_id_filtering_e2e.<locals>.<listcomp>  rS  r   rL   c              3       K   | ]}|v V  	d S r   r   )r@   rV  valid_query_idss     r   rX  z.test_query_id_filtering_e2e.<locals>.<genexpr>  s(      @@r_$@@@@@@r   rz  r   rR   zError finding id)rY   rZ   rq   r  r  r  r  r   rw   r[   r  rB   r  r]   rC   	enumerater   r   r   r   r2  )r0   ra   r\  r[  rO   rL   rP   ids_to_deleteids_to_upsert_existingnew_num_vectorsids_to_upsert_newupsert_embeddingsupsert_metadatasrc   r^  r  r_  result_indexid_list
item_indexitem_idupserted_id
deleted_idr5  r  s                           @r   rp  rp    sy   
LLNNN))*GHHJ
CKS1188DDKKMMJ
.
.5--
.
.
.C::u['9'9:::INN     43U2r]]333M-((( =<eBmm<<<!B&OMM{O)L)LMMM 		s122S9J5K5KKSQQ	
			 
 05c:K6L6L0M0M   $"%66"     	'&q"&&&
)
)5R==
)
)
)	*
 
!+/;3CDD
 
 
	
  }HinnS))00<<CCEEO(!	   G POGENOOO@@@@/?@@@@@@@@!*75>!:!: R Rg#,W#5#5 	R 	RJ000G?P4P4P{+L9*EjQQQQ	R
 )+K(	   G ;"1%j1111q!J	y	!	! 
U,	 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 U[!1!1111111s   ?N%%N),N)c                  N   ddl m}   | g dg d            | g g            t          j        t          d          5   | dd	d
g           ddd           n# 1 swxY w Y   t          j        t          d          5   | ddgd           ddd           n# 1 swxY w Y   t          j        t          d          5   | g dd	d
g           ddd           n# 1 swxY w Y   t          j        t          d          5   | g dg d           ddd           n# 1 swxY w Y   t          j        t          d          5   | g dg d           ddd           n# 1 swxY w Y   t          j        t          d          5   | g dg d           ddd           n# 1 swxY w Y   t          j        t          d          5   | g dg d           ddd           n# 1 swxY w Y    | g dg d            | g dg d            | g dg d           t          j        t          d          5   | ddgd	dg           ddd           n# 1 swxY w Y   t          j        t          d          5   | ddgd	d
g           ddd           n# 1 swxY w Y    | dgdg            | ddgddg           t          j        t          d          5   | g d g d           ddd           n# 1 swxY w Y   t          j        t          d          5   | g d!g d"           ddd           n# 1 swxY w Y   t          j        t          d          5   | g d#g d$           ddd           dS # 1 swxY w Y   dS )%z.Test SparseVector validation in __post_init__.r   SparseVectorr   rn   r  r         ??indicesvaluesz*Expected SparseVector indices to be a listr   
not_a_listr   r  Nz)Expected SparseVector values to be a listrR   ,indices and values must have the same lengthr   rR   rn   z%SparseVector indices must be integers)r   not_intrn   r  )SparseVector indices must be non-negativer   r  rn   #SparseVector values must be numbers)r   
not_numberr  )              ?r  rm   )rR         @ro   )r   rc  i'  *   Q	@TF2indices must be sorted in strictly ascending order)r   rn   rR   )r   rR   rR   rn   )r   r  r  皙?)r  ro   rR   )r  r  r   )chromadb.base_typesr  r   r   rl  r  s    r   test_validate_sparse_vectorr  *  s
   000000 L???;;;; LB'''' 
z)U	V	V	V > >\3*====> > > > > > > > > > > > > > > 
z)T	U	U	U : :aVL9999: : : : : : : : : : : : : : : 
H
 
 
 ; ; 	YYYSz::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 
z)P	Q	Q	Q H H...GGGGH H H H H H H H H H H H H H H 
z)T	U	U	U A AZZZ@@@@A A A A A A A A A A A A A A A 
z)N	O	O	O I IYYY/G/G/GHHHHI I I I I I I I I I I I I I I 
z)P	Q	Q	Q F F______EEEEF F F F F F F F F F F F F F F L9995555 L;;;7777 L+++OOODDDD 
z)N	O	O	O 9 9aVS$K88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 
z)P	Q	Q	Q ; ;aYSz::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; L"tf---- L!Qu6666 
N
 
 
 @ @ 	YYY????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 
N
 
 
 H H 	\\\2F2F2FGGGGH H H H H H H H H H H H H H H 
N
 
 
 @ @ 	YYY????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s    AA #A BB"%B"C""C&)C&D&&D*-D*E**E.1E.F..F25F2G22G69G6I))I-0I-J--J14J13LLL7MMM;NN!Nc                     ddl m}  ddlm}  |g dg d          } |g dg d          }d	|d
d}d|dd} | |            | |           d |g g           d} | |           t	          j        t          d          5  d |ddgdg          d}ddd           n# 1 swxY w Y   ddddgid}t	          j        t          d          5   | |           ddd           n# 1 swxY w Y   t	          j        t          d          5  d |g dg d          d}	ddd           n# 1 swxY w Y   t	          j        t          d          5  d  |ddgdd!g          d}
ddd           n# 1 swxY w Y   d" |ddgddg           |g d#g d$          d%d&} | |           d'g d(g d)dd*}t	          j        t          d          5   | |           ddd           n# 1 swxY w Y    |t          t          d+                    d, t          d+          D                       }d-|d.} | |           dS )/z<Test that sparse vectors are properly validated in metadata.r   )validate_metadatar  r  r  r  rR   ro   r  )r  r  r  z
document 1r  )r  sparse_embeddingscorez
document 2皙?zempty sparse)r  
sparse_vecr  r   invalidrR   r   )r  r  Nzmissing indicesr  r  zRExpected metadata value to be a str, int, float, bool, SparseVector, list, or Noner  znegative indexr  r  r  znon-numeric valuenot_a_numberzmultiple sparse vectors)rn   ro   r  )r  r  r  r  )r  sparse_1sparse_2regular_fieldsome_configr  r  r  r  )r   sparse_vectorrc  c                 2    g | ]}t          |          d z  S )gMbP?)rT  r  s     r   rA   z=test_sparse_vector_in_metadata_validation.<locals>.<listcomp>  s#    666Qa5 666r   zlarge sparse)r  large_sparse_vec)	chromadb.api.typesr  r  r  r   r   rl  listrw   )r  r  sparse_vector_1sparse_vector_2
metadata_1
metadata_2metadata_emptyinvalid_metadatainvalid_metadata_2invalid_metadata_3invalid_metadata_4metadata_multiplemetadata_nestedlarge_sparsemetadata_larges                  r   )test_sparse_vector_in_metadata_validationr  |  s   444444000000 #l999___MMMO"l999___MMMO + J + J
 j!!!j!!! "l2b999 N n%%% 
H
 
 
 
 
  ,aVSE J J J
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 "%Sz2  
b
 
 
 . . 	,---	. . . . . . . . . . . . . . . 
z)T	U	U	U 
 
$ ,"

???! ! !
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
z)N	O	O	O 
 
' ,A^'<! ! !
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 * L!Qc
CCC L???KKK	  '(((  %.YY///JJ O 
b
 
 
 + + 	/***	+ + + + + + + + + + + + + + +  <U4[[!!66%++666  L -,OONn%%%%%sZ   B''B+.B+C..C25C2D55D9<D9E<<F F G66G:=G:c                  \   ddl m} m} ddlm} dt
          t          dg ddg did	} | |          }t          |d
         |          sJ |d
         j        g dk    sJ |d
         j	        g dk    sJ  ||            |g dg d          }d|d	} | |          }|d
         |u sJ  ||           dt
          t          dg ddg did	}t          j        t          d          5   | |           ddd           n# 1 swxY w Y   dt
          t          dg ddg did	}	t          j        t          d          5   | |	           ddd           n# 1 swxY w Y   dt
          t          dg ddg did	}
t          j        t          d          5   | |
           ddd           n# 1 swxY w Y   dt
          t          dddgdg did	}t          j        t          d          5   | |           ddd           n# 1 swxY w Y   dddid} | |          }t          |d          t                    sJ |d          d         dk    sJ d!t
          t          dg dg id	} | |          }t          |d
         |          sJ |d
         j        g k    sJ |d
         j	        g k    sJ t
          t          ddd"gdd#d$git
          t          ddd%gdd&d'gid(d)} | |          }t          |d*         |          sJ t          |d+         |          sJ |d         d(k    sJ dS ),zNTest that dict-format sparse vectors are normalized to SparseVector instances.r   )normalize_metadatar  r  ztest documentr  r  r  r  r  sparser  r  )r        ?r  r  unsorted)r  r   rn   )r  r  r  r  r   N
duplicates)r   rn   rn   negative)r  r   rn   zindices must be non-negativemismatchrn   r  regularre   r2  )r  r   r   emptyrR   r  r  ro   r        @r  )sparse1sparse2r  r  r  )r  r  r  r  r  r
   r   r   r  r  r   r   rl  r   )r  r  r  metadata_dict_format
normalizedsparse_instancemetadata_instance_formatnormalized2metadata_unsortedmetadata_duplicatesmetadata_negativemetadata_mismatchmetadata_regular_dictnormalized3r  normalized4r  normalized5s                     r   ,test_sparse_vector_dict_format_normalizationr    s   HHHHHHHH000000  .yyyooo
  $#$899Jj*L99999h'9994444h&///9999 j!!! #l999___MMMO!    %$%=>>Kx O3333k""" .yyyooo
  
N
 
 
 . . 	,---. . . . . . . . . . . . . . . .yyyooo
  
N
 
 
 0 0 	.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .zzzooo
  
z)G	H	H	H . .,---. . . . . . . . . . . . . . .
 .1vooo
  
H
 
 
 . . 	,---. . . . . . . . . . . . . . . '"  %$%:;;Kk(+T22222x '72222 5y"hPRS N %$^44Kk(+\:::::x (B....x '2----
 .1vsCj
 .1vsCj

   %$%677Kk),l;;;;;k),l;;;;;y!R''''''sH   ,DDDEE"EF22F69F61H		HHc                     ddl m} m}  | dddgi            | dg di            | dd	d
gi            | dg di            | ddgddd           t          j        t
          d          5   | dg i           ddd           n# 1 swxY w Y   t          j        t
          d          5   | dddgi           ddd           n# 1 swxY w Y   t          j        t
          d          5   | dddgi           ddd           n# 1 swxY w Y   t          j        t
          d          5   | dddgi           ddd           n# 1 swxY w Y   t          j        t
          d          5   | ddggi           ddd           n# 1 swxY w Y    |dddgi            |dg di            |ddi           t          j        t
          d          5   |dg i           ddd           dS # 1 swxY w Y   dS )z6Test that list metadata values are properly validated.r   r  validate_update_metadatatagsactioncomedyscoresrm   ratingsr  r   flags)TFTr:   r;   r  rH   )r  r   r   z	non-emptyr   Nz	same typerR   valsr  Tyeszstr, int, float, or boolrh  )r  r  r  r   r   rl  r  s     r   test_list_metadata_validationr  [  s!   NNNNNNNN v(34555x+,,,y3*-...w 3 3 34555 SzAvFFGGG 
z	5	5	5 ( (62,'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
z	5	5	5 . .6C8,---. . . . . . . . . . . . . . . 
z	5	5	5 . .6As8,---. . . . . . . . . . . . . . . 
z	5	5	5 3 36D%=12223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 
z)C	D	D	D 2 26XJ<01112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 fx&:;<<<h			2333 fd^,,, 
z	5	5	5 / /  &".../ / / / / / / / / / / / / / / / / /sl   1BBB1CCC3DDD5EEE7FFF$G??HHc                     ddl m}   | dddii            | dddii            | ddd	ii            | d
ddii            | dddii            | dddii           t          j        t                    5   | ddddgii           ddd           n# 1 swxY w Y   t          j        t                    5   | ddddiii           ddd           n# 1 swxY w Y    | ddddiidddiigi           dS )zMTest that $contains/$not_contains are accepted in where clauses for metadata.r   validate_wherer  r  r  r  r  r  r  r  Tr  draftr:   r;   Nrh  r  yearr    )r  r  r   r   rl  r  s    r   test_where_contains_validationr    s   111111 NF[(34555NH{B/0111NIS12333NGk401222 NF_g67888NH23444 
z	"	" < <sCj 9:;;;< < < < < < < < < < < < < < < 
z	"	" B Bx.> ?@AAAB B B B B B B B B B B B B B B N	6K23fudm5LMN    s$   :BBB<CC!Cc                 V    |                                  }|j        dk    o
|j        dk    S )zvReturn True when the client is backed by the Python local segment API
    (which does not yet support array metadata).r   r   )get_settingsr   r!   )r0   settingss     r   _is_python_local_segmentr    s;     ""$$H $EE 	E0DEr   c           	         t          |           rt          j        d           |                                  |                     d          }|                    g dg dg dg dgddgd	d
dgdd
ddgdd
g           |                    dg          }t          |d                   dk    sJ t          |d         d         d                   ddgk    sJ |d         d         d         d	k    sJ |                    dddii          }t          d |d         D                       }|d	dgk    sJ |                    dddii          }t          |d                   dk    sJ |d         d         d         dk    sJ |                    dddii          }t          |d                   dk    sJ |d         d         d         dk    sJ |                    dddii          }t          |d                   dk    sJ dS )zNEnd-to-end test: write array metadata, read it back, and query with $contains.8Python local segment does not support array metadata yettest_array_metadata_e2er  r  r   rR   r   )r   r   rR   r  r  r  )r  r  dramai  thrilleri  r  rI   r  rP   rR   r   r  r  r  r[  c                     g | ]
}|d          S )r  r   )r@   ms     r   rA   z+test_array_metadata_e2e.<locals>.<listcomp>  s    888!F)888r   r  romanceN)	r  r   r   rY   rZ   r[   r   rB   sorted)r0   ra   rV  rL   s       r   r  r    s   '' PNOOO
LLNNN))*CDDJNN!!!IIyyy)))4)488Y--
+T::
     NNwN''Eu[!""a''''%$Q'/00Xx4HHHHHa (D0000 NN&;*A!BNCCE
88U;%7888
9
9C4, NN&;*@!ANBBEu[!""a''''a (D0000 NN&?H*E!FNGGEu[!""a''''a (D0000 NN&;	*B!CNDDEu[!""a''''''r   c                    t          |           rt          j        d           |                                  |                     d          }|                    ddgg dg dgdg didd	d
gig           |                    dddii          }t          |d                   dk    sJ |d         d         dk    sJ |                    ddd
ii          }t          |d                   dk    sJ |d         d         dk    sJ |                    dddii          }t          |d                   dk    sJ |d         d         dk    sJ dS )z(End-to-end: $contains on integer arrays.r  test_int_array_e2erI   rI  r  r  r  )r   r  ru  (   rw  r  r  r  r[  rL   rR   r   r  r   N)r  r   r   rY   rZ   r[   r   rB   rU  s      r   $test_array_metadata_int_contains_e2er    s   '' PNOOO
LLNNN))*>??JNNENIIyyy)|||$Bx 
     NN([",=!>N??EuU|!!!!<?e####NN([",=!>N??EuU|!!!!<?e####NN(_b,A!BNCCEuU|!!!!<?e######r   c                    t          |           rt          j        d           |                                  |                     d          }|                    dgg dgdddgig           |                    dd	dii
          }t          |d                   dk    sJ |                    dgddgig           |                    dd	dii
          }t          |d                   dk    sJ |                    dd	dii
          }t          |d                   dk    sJ |                    dg          }|d         d         d         dgk    sJ dS )z8End-to-end: updating array metadata replaces old values.r  test_array_update_e2erI   r  r  old_aold_br  r  r[  rL   rR   new_xrf  r   r  rP   N)	r  r   r   rY   rZ   r[   r   rB   rG  rU  s      r   test_array_metadata_update_e2er    s   '' PNOOO
LLNNN))*ABBJNNGII;Wg./0     NN&;*@!ANBBEuU|!!!! GWI&'     NN&;*@!ANBBEuU|!!!! NN&;*@!ANBBEuU|!!!! NNwN''Ea (WI555555r   c                    t          |           rt          j        d           |                                  |                     d          }|                    dgg dgddddgd	g
           |                    dg          }|d         d         }|d         dk    sJ |d         dk    sJ t          |d                   ddgk    sJ |                    dddii          }t          |d                   dk    sJ |                    dddii          }t          |d                   dk    sJ |                    ddddiidddiigi          }t          |d                   dk    sJ dS )z8End-to-end: records with both scalar and array metadata.r  test_mixed_e2erI   r  Alicer  adminuser)r   r  r  r  r  rP   r   r   r  r  r  r[  rL   rR   r  r  r  r  N)	r  r   r   rY   rZ   r[   r   r	  rB   )r0   ra   rV  mds       r   )test_array_metadata_mixed_with_scalar_e2er  	  s   '' PNOOO
LLNNN))*:;;JNNGII;#b7F:KLLM     NNwN''E	{	A	Bf:    g;""V*'6!22222 NN'E2;!7N88EuU|!!!! NN&;*@!ANBBEuU|!!!! NN62,'+w/0
   E uU|!!!!!!r   c                 z   t          |           rt          j        d           |                                  |                     d          }|                    dgg dgddig           |                    dgddd	gig
           |                    dddii          }t          |d                   dk    s
J d            |                    dddii          }t          |d                   dk    sJ |                    dg          }t          |d         d         d                   dd	gk    sJ dS )zREnd-to-end: changing a metadata field from scalar to array removes the old scalar.r  test_scalar_to_arrayrI   r  r  
old_scalarr  new_anew_brf  r  r[  rL   r   z+Stale scalar value should have been removedr  rR   r  rP   N)
r  r   r   rY   rZ   r[   rG  r   rB   r	  rU  s      r   -test_metadata_type_change_scalar_to_array_e2er   <	  sz   '' PNOOO
LLNNN))*@AAJ NNGII;L)*    
 GWg./0     NN&5,*?!@NAAEuU|!!!#P!!! NN&;*@!ANBBEuU|!!!! NNwN''E%$Q'/00Wg4FFFFFFFr   c                 \   t          |           rt          j        d           |                                  |                     d          }|                    dgg dgdddgig           |                    dgdd	ig
           |                    dddii          }t          |d                   dk    s
J d            |                    ddd	ii          }t          |d                   dk    sJ |                    dg          }|d         d         d         d	k    sJ dS )zVEnd-to-end: changing a metadata field from array to scalar removes the old array rows.r  test_array_to_scalarrI   r  r  r  r  r  
new_scalarrf  r  r[  rL   r   z)Stale array rows should have been removedr  rR   r  rP   N	r  r   r   rY   rZ   r[   rG  r   rB   rU  s      r   -test_metadata_type_change_array_to_scalar_e2er%  \	  sm   '' PNOOO
LLNNN))*@AAJ NNGII;Wg./0    
 GL)*     NN&;*@!ANBBEuU|!!!#N!!! NN&5,*?!@NAAEuU|!!!! NNwN''Ea (L888888r   c                    t          |           rt          j        d           |                                  |                     d          }|                    dgg dgddig           |                    dgg dgddd	gig           |                    dd
dii          }t          |d                   dk    s
J d            |                    dddii          }t          |d                   dk    sJ |                    dg          }t          |d         d         d                   dd	gk    sJ dS )zFEnd-to-end: upsert (not update) correctly cleans up when type changes.r  test_upsert_type_changerI   r  r  
scalar_valr  arr_aarr_br  r[  rL   r   z*Stale scalar from upsert should be removedr  rR   r  rP   N)	r  r   r   rY   rZ   r  r   rB   r	  rU  s      r   (test_metadata_type_change_via_upsert_e2er+  |	  s   '' PNOOO
LLNNN))*CDDJ GII;L)*    
 GII;Wg./0     NN&5,*?!@NAAEuU|!!!#O!!! NN&;*@!ANBBEuU|!!!!NNwN''E%$Q'/00Wg4FFFFFFFr   c                 
   t          |           rt          j        d           |                                  |                     d          }|                    dgg dgddig           |                    dgddgig	           |                    dgdd
ig	           |                    dddii          }t          |d                   dk    s
J d            |                    dddii          }t          |d                   dk    s
J d            |                    ddd
ii          }t          |d                   dk    sJ |                    dg          }|d         d         d         d
k    sJ dS )z;End-to-end: scalar -> array -> scalar leaves no stale data.r  test_rapid_fliprI   r  r  originalr  mid_arf  final_scalarr  r[  rL   r   zOriginal scalar should be goner  z!Intermediate array should be gonerR   r  rP   Nr$  rU  s      r   !test_metadata_rapid_type_flip_e2er1  	  s   '' PNOOO
LLNNN))*;<<JNNGII;J'(    
 GWI&'     GN+,     NN&5**=!>N??EuU|!!!#C!!! NN&;*@!ANBBEuU|!!!#F!!! NN&5.*A!BNCCEuU|!!!!NNwN''Ea (N::::::r   c                    t          |           rt          j        d           |                                  |                     d          }|                    dgg dgdddgdg	           |                    dgd
dgddg           |                    dddii          }t          |d                   dk    s
J d            |                    ddd
ii          }t          |d                   dk    sJ |                    dddii          }t          |d                   dk    s
J d            |                    dddii          }t          |d                   dk    sJ dS )zNEnd-to-end: one update changes 'color' scalar->array AND 'tags' array->scalar.r  test_mixed_type_changerI   r  redr  r  )colorr  r  bluegreenr#  rf  r5  r  r[  rL   r   zOld color scalar should be goner  rR   r  zOld tags array should be goneNr$  rU  s      r   1test_metadata_mixed_simultaneous_type_changes_e2er8  	  s   '' PNOOO
LLNNN))*BCCJNNGII;"Wg,>??@    
 G$g.EEF     NN'E5>!:N;;EuU|!!!#D!!! NN'K+@!ANBBEuU|!!!! NN&;*@!ANBBEuU|!!!#B!!! NN&5,*?!@NAAEuU|!!!!!!r   c                    t          |           rt          j        d           |                                  |                     d          }|                    dgg dgdddg           |                    dgd	d
dgig           |                    dgd	dig           |                    dg          }t          |d                   dk    sJ d	|d         d         vsJ d|d         d                      |d         d         d         dk    sJ |                    d	ddii          }t          |d                   dk    sJ |                    d	dd
ii          }t          |d                   dk    sJ dS )zBEnd-to-end: add scalar, update to array, then delete key entirely.r  test_delete_after_type_changerI   r  r(  r  )r  keepr  r  r)  r*  rf  Nr  rL   rR   rP   r   z tags key should be deleted, got r;  r  r[  r  r$  rU  s      r   *test_metadata_delete_after_type_change_e2er<  	  s   '' PNOOO
LLNNN))*IJJJNNGII;(%889    
 GWg./0     GD>"     NNwN''EuU|!!!!eK(++++A%*<Q*?AA 	,++a (E1111 NN&5,*?!@NAAEuU|!!!!NN&;*@!ANBBEuU|!!!!!!r   c                  v   ddl m} m} ddlm}  | g dddt
          t          dddgd	d
dgidd |ddgddg          dddigg d          }t          |d         d         d         |          sJ t          |d         d         d         |          sJ d|d         d         vsJ  ||           |d         d         d         j        ddgk    sJ |d         d         d         j	        d
dgk    sJ |d         d         d         j        ddgk    sJ |d         d         d         j	        ddgk    sJ dS )zITest that dict-format sparse vectors work in normalize_insert_record_set.r   )normalize_insert_record_setvalidate_insert_record_setr  r  doc2doc3Ntest1r  rn   r  r  r  r  r  rR   ro   r  r  r  r  test3)zdoc onezdoc twoz	doc three)rL   rO   rP   rM   rP   r  )
r  r>  r?  r  r  r
   r   r   r  r  )r>  r?  r  
record_sets       r   ,test_sparse_vector_dict_format_in_record_setrF  
  s           100000 -,$$$  61vsCj   &,1vsCjIII  W
 655%  J, j-a0:LIIIIIj-a0:LIIIII:k2155555 z*** k"1%h/7Aq6AAAAk"1%h/63*DDDDk"1%h/7Aq6AAAAk"1%h/63*DDDDDDr   c            
         ddl m}   | g dgg dgddgddgd	d
gggddiddiddiggg dgg dgd          }|                                }t          |          dk    sJ t          |d                   dk    sJ |d         d         d         dk    sJ |d         d         d         dk    sJ |d         d         d         ddgk    sJ |d         d         d         ddik    sJ |d         d         d         dk    sJ |d         D ] }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ ! | ddgg dgdd gg d!gd"dgdgdgggd#did#d$igd"gd%d&gg dgddgddggd          }|                                }t          |          d$k    sJ t          |d                   d$k    sJ t          |d                   dk    sJ |d         d         ddd#did%d'k    sJ |d         d         dd d#d$id&d'k    sJ |d         d         d(d)dgdd*k    sJ |d         d         d+d,dgd-d*k    sJ |d         d$         d.d/dgd0d*k    sJ  | g g g g g g d          }|                                }|g k    sJ  | g dgg d1gd"ddid"ddiggg d2gg d3gd          }|                                }t          |          dk    sJ t          |d                   dk    sJ |d         d         dddidd4k    sJ |d         d         d5d6d7k    sJ |d         d$         d8ddid0d4k    sJ  | dd5ggd"d"d"d"g gd          }|                                }t          |          dk    sJ t          |d                   d$k    sJ |d         d         ddik    sJ |d         d         dd5ik    sJ  | d9ggd:ggd9d;iggd<d=gggd>ggd?ggd@          }|dA         d9ggk    sJ |                    dB          d:ggk    sJ dC|v sJ t          |          dDk    sJ |                                }t          |d                   dk    sJ |d         d         d         d9k    sJ t          dE           d"S )FzTTest the SearchResult.rows() method for converting column-major to row-major format.r   )SearchResultr  r@  r  r  r  r        @g      @re   r:   r;   r)  )r  r  ffffff?)documentr  r%  )rL   rM   rO   rP   r  selectrR   ro   rV  rI   rK  r  r&  r%  r  r  a1a2)b1b2b3doc_a1doc_a2)doc_b1doc_b2doc_b3Nxrn   r  r  )rV  rK  r%  r  rO  rT  )rV  rK  r&  r  rP  rU  r  rQ  rV  rJ  )NrA  N)r  NrJ  )rK  r%  r  )rV  r%  r  rI  rA  )rV  rK  r  rH   ztest docTr   r  r  rC   )rL   rM   rP   rO   r  rL  rL   rM   rP      z%All SearchResult.rows() tests passed!)r  rH  rowsrB   r   r@  )rH  resultrY  rows       r   test_search_result_rowsr\  4
  s   ////// \)))*2223 #Jc
S#J?@!3<%s|DE&'8889	
 	
	 	F ;;==Dt99>>>>tAw<<1 71:du$$$$71:j!V++++71:k"sCj000071:j!eS\111171:g#%%%% Aw  s{{{{S    c!!!!S    #~~~~~ \4L"4"4"45#X.0N0N0NOu%  8c1X.5Sz???3"G,{G.DE
	
 
	
 F ;;==Dt99>>>>tAw<<1tAw<<1 71:!H	      71:!H	      71:U	      71:U	      71:U	      \	
 	
	 	F ;;==D2:::: \)))*.../8TC845'''(8889	
 	
	 	F ;;==Dt99>>>>tAw<<1 71:C8cJJJJJJ 71:6:::::: 71:C8cJJJJJJ \EN#d	
 	
	 	F ;;==Dt99>>>>tAw<<171:$&&&&71:$&&&& \H:%,"D>*+ #J<.vhwi	
 	
	 	F %=fXJ&&&&::k""
|n4444&    v;;! ;;==DtAw<<171:dv%%%%	
122222r   c                  	   ddl } ddlm}m}m}  | |ddgd           |dd	gd
d          g          }|                                }dddiddddidddidddgddddigididddidddiddd	gd
dddigidigigi}||k    sJ  | |ddgd           |dd	gd
d          gddgd          }|                                }dddiddddidddidddgddddigididddidddiddd	gd
dddigidigigi}	||	k    sJ  | |ddgd           |dd	gd
d           |d          g          }
|
                                }d|v sJ d|d         d         v sJ |d         d         d         }t          |          dk    sJ  | j        t          d          5   | |ddgd           |dd	gd          gdg           }|                                 ddd           n# 1 swxY w Y    | j        t          d!          5   | |ddgd           |dd	gd          gdd"g           }|                                 ddd           n# 1 swxY w Y    | j        t          d#          5   |g           }|                                 ddd           n# 1 swxY w Y    | j        t          d$          5   | |d          gd%&          }|                                 ddd           n# 1 swxY w Y    | j        t          d$          5   | |d          gd&          }|                                 ddd           n# 1 swxY w Y    | |ddgd           |dd	gd
d          gd'dgdd(          }|                                }dddidddd)idddidddgddddigididdd*idddiddd	gd
dddigidigigi}||k    sJ  | |ddgd           |dd	gd          gd+          }|                                }dddidddd,idddidddgddddigididdd,idddiddd	gddddigidigigi}||k    sJ  | j        t          d-          5   | |ddgd           |dd	gd          gd.d.gd/          }|                                 ddd           n# 1 swxY w Y   t          d0           dS )1z9Test the Rrf (Reciprocal Rank Fusion) to_dict conversion.r   N)RrfKnnValr   r  T)r]   return_rankr  r  r  )r]   re   ra  $mul$valr  $sum$divr  <   $knn
#embedding   r]   re   limitra  leftrightr  r   )ranksweightskrI  rR   ro   z/Number of weights .* must match number of ranksr   )ro  rp  z All weights must be non-negativeg      zRRF requires at least one rankzk must be positiver  )rq  r  )ro  rp  	normalizerq  g      ?g      ?)ro  rr  r  zSum of weights must be positiver  )ro  rp  rr  zAll RRF tests passed!)
r   &chromadb.execution.expression.operatorr^  r_  r`  to_dictrB   r   rl  r@  )r   r^  r_  r`  rrfrZ  expectedrrf_weightedresult_weightedexpected_weighted	rrf_threeresult_threetermsrrf_badrrf_negative	rrf_empty	rrf_neg_k
rrf_zero_krrf_normalizedresult_normalizedexpected_normalizedrrf_normalize_defaultsresult_defaultsexpected_defaultsrrf_zero_weightss                            r   test_rrf_to_dictr  
  sF
    MMMDDDDDDDDDD #CsCjd333CsCj&8dKKK	
 C [[]]F 	RL%+SM &%+RL(.693Z3?57;?	1* 1*%&
)"&! !& %+SM &%+RL(.693Z3E57;?	1* 1*%&
)"&! !'%'*
,H\ X 3CsCjd333CsCj&8dKKK
 c

  L #**,,O 	RL%+SM &%+SM(.693Z3?57;?	1* 1*%&
)"&! !& %+SM &%+SM(.693Z3E57;?	1* 1*%&
)"&! !'%'*
,\ ///// CsCjd333CsCj&8dKKKCHH	
 I $$&&L \!!!!\&)!,,,,, #F+Eu::???? 
K
 
 
 
 
 #3*$7773*$777 E
 
 
 	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
z)K	L	L	L  s3*$7773*$777 $K
 
 
 	               
z)I	J	J	J  CGG	              
 
z)=	>	>	>  CS
b)))	              
 
z)=	>	>	>  S##c((q)))
               SCsCjd333CsCj&8dKKK
 c

  N '..00 	RL%+TN &%+SM(.693Z3?57;?	1* 1*%&
)"&! !& %+TN &%+SM(.693Z3E57;?	1* 1*%&
)"&! !'%'*
,\  33333 !SCsCjd333CsCjd333
    -4466O 	RL%+SM &%+RL(.693Z3?57;?	1* 1*%&
)"&! !& %+SM &%+RL(.693Z3?57;?	1* 1*%&
)"&! !'%'*
,\ ///// 
z)J	K	K	K 	# 	#33*$7773*$777 #J
 
 
 	  """	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 

!"""""sn   *?G55G9<G9A I##I'*I' J11J58J5,LLL-,M%%M),M)ASSSc            	      l   ddl } ddlm}m}m}m}m}  | |d           ||j        d                    }|                                dgdd	gddidk    sJ  | |d
           |d          g ||j         |d          gd                    }|                                d
dgdd	dgddidk    sJ  | |d          g ||j        gd                    }|	                    |                                                                          |                                k    sJ  |            }|                                i k    sJ |	                    i                                           i k    sJ  | j
        t          d          5  |	                    ddd	gddii           ddd           n# 1 swxY w Y    | j
        t          d          5  |	                    ddgi           ddd           n# 1 swxY w Y    | j
        t          d          5  |	                    g dd	gddid           ddd           n# 1 swxY w Y    | j
        t          d          5  |	                    dd	gddi           ddd           dS # 1 swxY w Y   dS )z?Test GroupBy, MinK, and MaxK serialization and deserialization.r   N)GroupByMinKMaxKKey	Aggregatecategoryro   r^   rq  r^   	aggregate$min_k#scorer  priorityr  z$max_kzrequires 'keys' fieldr   r  requires 'aggregate' fieldr^   zkeys cannot be emptyzUnknown aggregate operatorz$unknown)r   rs  r  r  r  r  r  SCORErt  	from_dictr   rl  )	r   r  r  r  r  r  group_byr.  empty_group_bys	            r   test_group_by_serializationr  $  s   MMM              wCC
OOtta7P7P7PQQQH(! < <=" "     wc&kk33z??+$SYJ8A>>>  H $(J)?a H HI" "     wSS__-CI;RS9T9T9TUUUHX--//0088::h>N>N>P>PPPPP WYYN!!##r))))R  ((**b0000 
z)@	A	A	A S S;XJQ3O3O(PQRRRS S S S S S S S S S S S S S S 
z)E	F	F	F 2 26J<01112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
z)?	@	@	@ 
 
x8*11M1M&NOO	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
z)E	F	F	F H HZ8*1)E)EFGGGH H H H H H H H H H H H H H H H H HsH    G

GG,HHH3II"%I" J))J-0J-c                   H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )TestSearchDictSupportz%Test Search class dict input support.c                     ddl m} ddlm}  |ddi          }|j        J t          |j        |          sJ  |dddid	d
diigi          }|j        J dS )z-Test Search accepts dict for where parameter.r   SearchWherestatusactiver[  Nr  r  r  r  )"chromadb.execution.expression.planr  rs  r  _wherer   )ry   r  r  searchs       r   test_search_with_dict_wherez1TestSearchDictSupport.test_search_with_dict_where]  s    ======@@@@@@ x2333}(((&-///// v8(<wPS>U'VWXXX}(((((r   c                     ddl m} ddlm}  |ddddgii          }|j        J t          |j        |          sJ  |d
di          }|j        J d	S )z,Test Search accepts dict for rank parameter.r   r  Rankrg  r]   r   r  rankNrc  r  )r  r  rs  r  _rankr   )ry   r  r  r  s       r   test_search_with_dict_rankz0TestSearchDictSupport.test_search_with_dict_rankk  s    ======?????? fwc
&;<===|'''&,----- fc]+++|'''''r   c                     ddl m}  |ddd          }|j        j        dk    sJ |j        j        dk    sJ  |d          }|j        j        dk    sJ |j        j        dk    sJ dS )z5Test Search accepts dict and int for limit parameter.r   r  r   r  rk  offsetrk  N)r  r  _limitrk  r  ry   r  r  s      r   test_search_with_dict_limitz1TestSearchDictSupport.test_search_with_dict_limity  s    ====== a88999}"b((((}#q(((( b!!!}"b((((}#q((((((r   c                     ddl m}  |dddgi          }|j        J  |ddg          }|j        J  |dd	h          }|j        J dS )
z=Test Search accepts dict, list, and set for select parameter.r   r  r^   	#documentr  rL  N	#metadatarh  )r  r  _selectr  s      r   test_search_with_dict_selectz2TestSearchDictSupport.test_search_with_dict_select  s    ====== h(?@AAA~))) [9:::~))) \:;;;~)))))r   c                     ddl m} ddlm}  | |d          dk    dddd	giid
dg          }|j        J |j        J |j        j        d
k    sJ |j        J dS )z2Test Search with mixed expression and dict inputs.r   r  r  r  r  rg  r]   r   r  r   r  r\  r  rk  rL  N)	r  r  rs  r  r  r  r  rk  r  )ry   r  r  r  s       r   test_search_mixed_inputsz.TestSearchDictSupport.test_search_mixed_inputs  s    ======>>>>>>#h--8+7S#J/0=	
 
 
 }(((|'''}"b((((~)))))r   c                     ddl m}  |                                ddi                              ddi          }|j        J |j        J dS )z)Test Search builder methods accept dicts.r   r  r  r  rc  r  N)r  r  r\  r  r  r  r  s      r   &test_search_builder_methods_with_dictsz<TestSearchDictSupport.test_search_builder_methods_with_dicts  sd    ======8 455::FC=II}(((|'''''r   c                    ddl }ddlm}  |j        t          d          5   |d           ddd           n# 1 swxY w Y    |j        t          d          5   |d	
           ddd           n# 1 swxY w Y    |j        t          d          5   |d           ddd           n# 1 swxY w Y    |j        t          d          5   |d           ddd           dS # 1 swxY w Y   dS )z(Test Search rejects invalid input types.r   Nr  zwhere must ber   r  r[  zrank must ber  r  zlimit must be10r  zselect must be{   r  )r   r  r  r   r  )ry   r   r  s      r   test_search_invalid_inputsz0TestSearchDictSupport.test_search_invalid_inputs  s/   ======V]9O<<< 	$ 	$F####	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ V]9N;;; 	 	F	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 V]9O<<< 	 	F	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 V]9,<=== 	 	F#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sC   ;??A66A:=A:B11B58B5C--C14C1c                 D   ddl }ddlm} ddlm}m}m}  |dgddgdd	id
          }t          |j        |          sJ  | |d           ||j	        d	          
          } ||          j        |u sJ  |            
                    |          j        j        J  |j        t          d          5   |d           ddd           n# 1 swxY w Y    |j        t          d          5   |ddgi           ddd           dS # 1 swxY w Y   dS )zATest Search accepts group_by as dict, object, and builder method.r   Nr  )r  r  r  r  r  r  ro   r  r  r  zgroup_by must ber   r  r  r^   )r   r  r  rs  r  r  r  r   	_group_byr  r  r  r   r  rl  )ry   r   r  r  r  r  r  r  s           r   test_search_with_group_byz/TestSearchDictSupport.test_search_with_group_by  s   ======MMMMMMMMMM #&(!(D(DE 
 
 
 &*G44444 7J44SYRS;T;T;TUUUvx(((2h>>>>vxx  **4>JJJ V]9,>??? 	' 	'FI&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'V]:-IJJJ 	4 	4FVj\23333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s$   =CCC8DDDc           	         ddl m} ddlm}m}m}m}  |                                 |ddg                                        d          }|	                                d         i k    sJ  |            
                     | |d	           ||j        d
                              }|	                                d         }|d         d	gk    sJ |d         ddgd
dik    sJ dS )z*Test Search serializes group_by correctly.r   r  )r  r  r  r_  r   r  r]   r   r  r  ro   r  r  r^   r  r  r  N)r  r  rs  r  r  r  r_  r  rk  rt  r  r  )ry   r  r  r  r  r_  r  rZ  s           r   "test_search_group_by_serializationz8TestSearchDictSupport.test_search_group_by_serialization  s0   ======RRRRRRRRRRRR ss#s44455;;B??~~
+r1111 ""GZDDci14M4M4MNNN
 
 !!*-f~*----k"x8*11M1M&NNNNNNNr   N)r   r   r   __doc__r  r  r  r  r  r  r  r  r  r   r   r   r  r  Z  s        //) ) )( ( () ) )* * * * * * ( ( (  "4 4 44O O O O Or   r  c                   `    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZdS )TestWhereFromDictz"Test Where.from_dict() conversion.c                     ddl m}m} |                    ddi          }t	          ||          sJ |                    dddii          }t	          ||          sJ dS )z Test simple equality conversion.r   )r  Eqr  r  r  N)rs  r  r  r  r   )ry   r  r  r\  s       r   test_simple_equalityz&TestWhereFromDict.test_simple_equality  s    DDDDDDDD 8 455%$$$$$ E8+< =>>%$$$$$$$r   c                    ddl m}m}m}m}m}m} |                    dddii          }t          ||          sJ |                    dddii          }t          ||          sJ |                    dd	dii          }t          ||          sJ |                    dd
dii          }t          ||          sJ |                    dddii          }t          ||          sJ dS )z%Test comparison operator conversions.r   )r  NeGtGteLtLter  r  inactiver  r  r  r  ry  r  r~  N)	rs  r  r  r  r  r  r  r  r   )ry   r  r  r  r  r  r  r\  s           r   test_comparison_operatorsz+TestWhereFromDict.test_comparison_operators  s3   VVVVVVVVVVVVVVVV E:+> ?@@%$$$$$ 5#, 788%$$$$$ 63- 899%%%%%% 5#, 788%$$$$$ 63- 899%%%%%%%%r   c                     ddl m}m}m} |                    ddddgii          }t          ||          sJ |                    dddd	gii          }t          ||          sJ d
S )z%Test membership operator conversions.r   )r  InNinr  $inr  pendingz$nindeletedarchivedN)rs  r  r  r  r  r   )ry   r  r  r  r\  s        r   test_membership_operatorsz+TestWhereFromDict.test_membership_operators  s    IIIIIIIIII EHi3H+I JKK%$$$$$ FY
4K+L MNN%%%%%%%%r   c                 z   ddl m}m}m}m}m} |                    dddii          }t          ||          sJ |                    dddii          }t          ||          sJ |                    ddd	ii          }t          ||          sJ |                    dd
dii          }t          ||          sJ dS )z!Test string operator conversions.r   )r  ContainsNotContainsRegexNotRegexr  r  rJ   r  spamz$regexz^test.*z
$not_regexz\d+N)rs  r  r  r  r  r  r  r   )ry   r  r  r  r  r  r\  s          r   test_string_operatorsz'TestWhereFromDict.test_string_operators  s   	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 +w)? @AA%***** /6)B CDD%----- (I)> ?@@%''''' ,)? @AA%*******r   c                    ddl m}m}m} |                    dddii          }t          ||          sJ |                                dddiik    sJ |                    dddii          }t          ||          sJ |                                dddiik    sJ |                    ddd	ii          }t          ||          sJ |                                ddd	iik    sJ |                    d
ddii          }t          ||          sJ |                                d
ddiik    sJ |                    dddii          }t          ||          sJ |                                dddiik    sJ |                    dddii          }t          ||          sJ |                                dddiik    sJ dS )zNTest $contains/$not_contains with all scalar types for metadata array queries.r   )r  r  r  r  r  r  r  r  r  r  r  Tr  r  N)rs  r  r  r  r  r   rt  )ry   r  r  r  r\  s        r   test_array_contains_operatorsz/TestWhereFromDict.test_array_contains_operators9  s(   WWWWWWWWWW +x)@ ABB%*****}}6K+B"CCCCC K+< =>>%*****}}8k2->"????? [#,> ?@@%*****}}9{C.@"AAAAA ;*= >??%*****}}7[$,?"@@@@@ /7)C DEE%-----}}6OW+E"FFFFFOQ+? @AA%-----}}8oq-A"BBBBBBBr   c                 D   ddl }ddlm}  |j        t          d          5  |                    dddd	gii           ddd           n# 1 swxY w Y    |j        t          d
          5  |                    ddddiii           ddd           dS # 1 swxY w Y   dS )z:Test $contains/$not_contains reject invalid operand types.r   Nr  z\$contains requiresr   r  r  rR   rn   z\$not_contains requiresr  rh  T)r   rs  r  r   r  r  ry   r   r  s      r   $test_array_contains_invalid_operandsz6TestWhereFromDict.test_array_contains_invalid_operandsZ  s]   @@@@@@V]9,BCCC 	= 	=OOVkAq6%:;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= V]9,FGGG 	K 	KOOVo$7G%HIJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks#   A

AA,BBBc                    ddl m}m}  |d                              d           |d                              d           |d                              d           |d	                              d
           |d                              d          g}|D ]P}|                                }|                    |          }|                                |k    sJ d|             QdS )z5Test $contains round-trips through to_dict/from_dict.r   )r  r  r  r  r  r  r  r  r  Tr  zRound-trip failed for N)rs  r  r  containsnot_containsrt  r  )ry   r  r  casesr.  drestoreds          r   test_array_contains_round_tripz0TestWhereFromDict.test_array_contains_round_tripe  s   EEEEEEEE CKK  **CMM""2&&C	NN##C((CLL!!$''CKK$$W--
  	I 	IH  ""Aq))H##%%***,HQ,H,H****	I 	Ir   c                     ddl m}m}m}  |d                              d           |d          dk    z  }t          ||          sJ |                                }|                    |          }|                                |k    sJ dS )z:Test $contains combined with other operators via $and/$or.r   r  Andr  r  r  r  r  N)rs  r  r  r  r  r   rt  r  )ry   r  r  r  r\  r  r  s          r    test_array_contains_in_compositez2TestWhereFromDict.test_array_contains_in_compositeu  s    JJJJJJJJJJV%%h//CCKK$4FG%%%%%%MMOO??1%%!!Q&&&&&&r   c                    ddl }ddlm} |j                            d          }|                                dddiik    sJ |j                            d          }|                                dddiik    sJ dD ]} |j        t          d	
          5  |j                            |           ddd           n# 1 swxY w Y    |j        t          d
          5  |j                            |           ddd           n# 1 swxY w Y    |d                              d                                          dddiik    sJ  |d                              d                                          dddiik    sJ dS )z9Key.DOCUMENT.contains/not_contains must receive a string.r   Nr  rJ   r  r  r  )r  r  TFz)\$contains on #document requires a stringr   z-\$not_contains on #document requires a stringr  r  r  T)	r   rs  r  DOCUMENTr  rt  r  r   r  )ry   r   r  expr	bad_values        r   &test_document_contains_requires_stringz8TestWhereFromDict.test_document_contains_requires_string  sM   >>>>>> |$$W--||~~+W/E!FFFFF|((11||~~+/I!JJJJJ 1 		5 		5I!M   1 1 %%i0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 !Q   5 5 )))4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 s8}}%%b))1133;PRBS7TTTTTs7||((..6688ot,=
 
 
 
 
 
 
s$   B==C	C	DD
	D
	c                     ddl m}m}m} |                    dddidddiigi          }t          ||          sJ |                    d	ddidd
igi          }t          ||          sJ dS )z"Test logical operator conversions.r   )r  r  Orr  r  r  r  r  r  r  r  N)rs  r  r  r  r  r   )ry   r  r  r  r\  s        r   r  z(TestWhereFromDict.test_logical_operators  s    IIIIIIIIII x*Wucl,CDE
 
 %%%%%% (H)=)?T(U VWW%$$$$$$$r   c                     ddl m}m} |                    ddddiddigidd	d
iigi          }t	          ||          sJ dS )zTest nested logical operations.r   )r  r  r  r  r  r  r  r  r  r  N)rs  r  r  r  r   )ry   r  r  r\  s       r   test_nested_logical_operatorsz/TestWhereFromDict.test_nested_logical_operators  s{    EEEEEEEEh1Hi3HIJvsm,
 
 %%%%%%%%r   c                 p    ddl m}m} |                    ddddgii          }t	          ||          sJ dS )zTest special key handling.r   )r  r  z#idr  rI   rI  N)rs  r  r  r  r   )ry   r  r  r\  s       r   test_special_keysz#TestWhereFromDict.test_special_keys  sW    DDDDDDDD (? @AA%$$$$$$$r   c                    ddl }ddlm}  |j        t          d          5  |                    d           ddd           n# 1 swxY w Y    |j        t          d          5  |                    i            ddd           n# 1 swxY w Y    |j        t          d          5  |                    d	g i           ddd           dS # 1 swxY w Y   dS )
zTest invalid Where dict inputs.r   Nr  Expected dictr   
not a dictcannot be emptyzrequires at least one conditionr  )r   rs  r  r   r  r  rl  r  s      r   test_invalid_where_dictsz*TestWhereFromDict.test_invalid_where_dicts  s   @@@@@@V]9O<<< 	* 	*OOL)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* V]:->??? 	  	 OOB	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  V]:-NOOO 	* 	*OOVRL)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s5   AAA&BBB*CCCN)r   r   r   r  r  r  r  r  r  r  r  r  r   r  r  r  r  r   r   r   r  r    s        ,,
% 
% 
%& & &0
& 
& 
&+ + +4C C CB	K 	K 	KI I I ' ' '
 
 
<% % %& & &% % %* * * * *r   r  c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestRankFromDictz!Test Rank.from_dict() conversion.c                     ddl m}m} |                    ddi          }t	          ||          sJ |j        dk    sJ dS )zTest Val conversion.r   )r  r`  rc  r  N)rs  r  r`  r  r   r2  )ry   r  r`  r  s       r   test_val_conversionz$TestRankFromDict.test_val_conversion  s^    DDDDDDDD~~vsm,,$$$$$$zS      r   c                    ddl }ddlm}m} |                    ddddgii          }t          ||          sJ t          |j        |j                  r) |j        |j         |j	        ddg                    sJ n|j        ddgk    sJ |j
        dk    sJ |j        d	k    sJ |                    dddgd
dddi          }|j
        d
k    sJ |j        dk    sJ |j        sJ dS )zTest KNN conversion.r   N)r  r_  rg  r]   r   r  rh  ri  r     Trj  )numpyrs  r  r_  r  r   r]   ndarrayallcloserr   re   rk  ra  )ry   rq   r  r_  r  s        r   test_knn_conversionz$TestRankFromDict.test_knn_conversion  sT   DDDDDDDD ~~v#s'<=>>$$$$$$dj"*-- 	,2;tz828S#J+?+?@@@@@@:#s++++x<''''zR ~~!3Z- #'	 	
 	
 x-----zS    r   c                    ddl m}m}m}m}m} |                    dddiddigi          }t          ||          sJ |                    dddiddid	i          }t          ||          sJ |                    d
ddiddigi          }t          ||          sJ |                    dddiddid	i          }t          ||          sJ dS )z%Test arithmetic operator conversions.r   )r  SumSubMulDivrd  rc  r  r  z$subr  rl  rb  r  re  N)rs  r  r  r  r  r  r  r   )ry   r  r  r  r  r  r  s          r   test_arithmetic_operatorsz*TestRankFromDict.test_arithmetic_operators  s&   SSSSSSSSSSSSSS ~~v}'EFGG$$$$$$ ~~vQT'V'VWXX$$$$$$ ~~v}'EFGG$$$$$$ ~~vQT'V'VWXX$$$$$$$$r   c                     ddl m}m}m}m} |                    dddii          }t          ||          sJ |                    dddii          }t          ||          sJ |                    ddd	ii          }t          ||          sJ d
S )zTest math function conversions.r   )r  AbsExpLogz$absrc  g      z$expr  z$logr  N)rs  r  r  r  r  r  r   )ry   r  r  r  r  r  s         r   test_math_functionsz$TestRankFromDict.test_math_functions  s    NNNNNNNNNNNN ~~v~677$$$$$$ ~~v}566$$$$$$ ~~v}566$$$$$$$$r   c                     ddl m}m}m} |                    dddiddigi          }t          ||          sJ |                    dddiddigi          }t          ||          sJ dS )	zTest min/max conversions.r   )r  MaxMinz$maxrc  r  r  z$minN)rs  r  r"  r#  r  r   )ry   r  r"  r#  r  s        r   test_aggregation_functionsz+TestRankFromDict.test_aggregation_functions  s    IIIIIIIIII ~~v}'EFGG$$$$$$ ~~v}'EFGG$$$$$$$$r   c                     ddl m}m} |                    ddddddgiid	d
igidd	did	digigi          }t	          ||          sJ dS )z%Test complex nested rank expressions.r   )r  r  rd  rb  rg  r]   r   r  rc  r  r  N)rs  r  r  r  r   )ry   r  r  r  s       r   test_complex_rank_expressionz-TestRankFromDict.test_complex_rank_expression+  s    DDDDDDDD~~v#s'<=}MNvsmfc];<
 
 $$$$$$$$r   c                 L   ddl }ddlm}  |j        t          d          5  |                    d           ddd           n# 1 swxY w Y    |j        t          d          5  |                    i            ddd           n# 1 swxY w Y    |j        t          d          5  |                    d	d
dgid           ddd           n# 1 swxY w Y    |j        t          d          5  |                    ddi           ddd           dS # 1 swxY w Y   dS )zTest invalid Rank dict inputs.r   Nr  r  r   r	  r
  zexactly one operatorr  r]   r   )rc  rg  zrequires a numberrc  znot a number)r   rs  r  r   r  r  rl  )ry   r   r  s      r   test_invalid_rank_dictsz(TestRankFromDict.test_invalid_rank_dicts9  sR   ??????V]9O<<< 	) 	)NN<(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) V]:->??? 	 	NN2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 V]:-CDDD 	D 	DNNC'C51ABBCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D V]9,?@@@ 	5 	5NNFN3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5sG   AAA&BBB*CCC4DD DN)r   r   r   r  r  r  r  r   r$  r&  r(  r   r   r   r  r    s        ++! ! !     @% % %(% % % 
% 
% 
%% % %5 5 5 5 5r   r  c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	TestLimitFromDictz"Test Limit.from_dict() conversion.c                 t    ddl m} |                    ddi          }|j        dk    sJ |j        dk    sJ dS )zTest limit without offset.r   Limitrk  r  Nrs  r-  r  rk  r  ry   r-  rk  s      r   test_limit_onlyz!TestLimitFromDict.test_limit_onlyN  sU    @@@@@@"..{b    |q      r   c                 l    ddl m} |                    ddi          }|j        dk    sJ |j        J dS )zTest offset without limit.r   r,  r  r   N)rs  r-  r  r  rk  r/  s      r   test_offset_onlyz"TestLimitFromDict.test_offset_onlyV  sP    @@@@@@2//|r!!!!{"""""r   c                 v    ddl m} |                    ddd          }|j        dk    sJ |j        dk    sJ dS )zTest both limit and offset.r   r,  r  r   r  Nr.  r/  s      r   test_limit_and_offsetz'TestLimitFromDict.test_limit_and_offset^  sY    @@@@@@" ; ;<<{b    |r!!!!!!r   c                    ddl }ddlm}  |j        t          d          5  |                    ddi           ddd           n# 1 swxY w Y    |j        t          d          5  |                    ddi           ddd           n# 1 swxY w Y    |j        t          d          5  |                    d	di           ddd           dS # 1 swxY w Y   dS )
zTest Limit validation.r   Nr,  zmust be positiver   rk  r  zmust be non-negativer  r   rs  r-  r   rl  r  ry   r   r-  s      r   test_validationz!TestLimitFromDict.test_validationf  s   @@@@@@ V]:-?@@@ 	+ 	+OOWbM***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ V]:-?@@@ 	* 	*OOWaL)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* V]:-CDDD 	, 	,OOXrN+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s5   AA
A
(BBB.CCCc                    ddl }ddlm}  |j        t          d          5  |                    d           ddd           n# 1 swxY w Y    |j        t          d          5  |                    dd	i           ddd           n# 1 swxY w Y    |j        t          d          5  |                    d
di           ddd           dS # 1 swxY w Y   dS )zTest type validation.r   Nr,  r  r   r	  zmust be an integerrk  20r  g      %@)r   rs  r-  r   r  r  r7  s      r   test_invalid_typesz$TestLimitFromDict.test_invalid_typesw  s   @@@@@@V]9O<<< 	* 	*OOL)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* V]9,@AAA 	- 	-OOWdO,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- V]9,@AAA 	. 	.OOXt,---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s5   AAA&B

BB,CCCc                     ddl }ddlm}  |j        t          d          5  |                    ddd           ddd           dS # 1 swxY w Y   dS )	"Test rejection of unexpected keys.r   Nr,  Unexpected keysr   r   re   )rk  r  r6  r7  s      r   test_unexpected_keysz&TestLimitFromDict.test_unexpected_keys  s    @@@@@@V]:->??? 	= 	=OObU;;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=   AAAN)
r   r   r   r  r0  r2  r4  r8  r;  r?  r   r   r   r*  r*  K  st        ,,! ! !# # #" " ", , ,". . .= = = = =r   r*  c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	TestSelectFromDictz#Test Select.from_dict() conversion.c                     ddl m}m} |                    dg di          }|j        |j        v sJ |j        |j        v sJ |j        |j        v sJ |j        |j        v sJ dS )zTest special key conversion.r   Selectr  r^   )r  rh  r  r  N)	rs  rE  r  r  r  r^   	EMBEDDINGMETADATAr  ry   rE  r  rL  s       r   r  z$TestSelectFromDict.test_special_keys  s    FFFFFFFF!!GGGH
 
 |v{****}++++|v{****yFK''''''r   c                     ddl m}m} |                    dg di          } |d          |j        v sJ  |d          |j        v sJ  |d          |j        v sJ dS )	z!Test regular metadata field keys.r   rD  r^   )titleauthordaterJ  rK  rL  N)rs  rE  r  r  r^   rH  s       r   test_metadata_keysz%TestSelectFromDict.test_metadata_keys  s    FFFFFFFF!!6+F+F+F"GHHs7||v{****s8}}++++s6{{fk))))))r   c                     ddl m}m} |                    dg di          }|j        |j        v sJ  |d          |j        v sJ |j        |j        v sJ dS )z&Test mix of special and metadata keys.r   rD  r^   )r  rJ  r  rJ  N)rs  rE  r  r  r  r^   r  rH  s       r   test_mixed_keysz"TestSelectFromDict.test_mixed_keys  s    FFFFFFFF!!6+K+K+K"LMM|v{****s7||v{****yFK''''''r   c                 t    ddl m} |                    dg i          }t          |j                  dk    sJ dS )zTest empty keys list.r   rE  r^   N)rs  rE  r  rB   r^   )ry   rE  rL  s      r   test_empty_keysz"TestSelectFromDict.test_empty_keys  sL    AAAAAA!!62,//6;1$$$$$$r   c                    ddl }ddlm}  |j        t          d          5  |                    d           ddd           n# 1 swxY w Y    |j        t          d          5  |                    dd	i           ddd           n# 1 swxY w Y    |j        t          d
          5  |                    ddgi           ddd           dS # 1 swxY w Y   dS )zTest Select validation.r   NrQ  r  r   r	  zmust be a list/tuple/setr^   z
not a listzmust be a stringr  )r   rs  rE  r   r  r  ry   r   rE  s      r   r8  z"TestSelectFromDict.test_validation  s   AAAAAAV]9O<<< 	+ 	+\***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ V]9,FGGG 	5 	5fl3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 V]9,>??? 	. 	.fse_---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s5   AAA&B

BB,CCCc                     ddl }ddlm}  |j        t          d          5  |                    g dd           ddd           dS # 1 swxY w Y   dS )r=  r   NrQ  r>  r   re   )r^   r  )r   rs  rE  r   rl  r  rT  s      r   r?  z'TestSelectFromDict.test_unexpected_keys  s    AAAAAAV]:->??? 	= 	=bU;;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=r@  N)
r   r   r   r  r  rM  rO  rR  r8  r?  r   r   r   rB  rB    st        --
( 
( 
(* * *( ( (% % %. . .= = = = =r   rB  c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	TestRoundTripConversionz9Test that to_dict() and from_dict() round-trip correctly.c                     ddl m}m}m}  | |d          dk     |d          dk    g          }|                                }|                    |          }|                                |k    sJ dS )z!Test Where round-trip conversion.r   r  r  r  r  r  N)rs  r  r  r  rt  r  )ry   r  r  r  r.  	dict_formr  s          r   test_where_round_tripz-TestRoundTripConversion.test_where_round_trip  s    JJJJJJJJJJ3H133w<<#3EFGG$$&&	??9--!!Y......r   c                   	 ddl 	ddlm}m}m}  |ddg          dz   |d          dz  z   }|                                }|                    |          }|                                }	fd	 ||          sJ dS )
z Test Rank round-trip conversion.r   N)r  r_  r`  r   r  r  r  r  c                 Z   t          | t                    rt          |t                    rd| v rd|v r| d         |d         }}d|v rd|v r| j        |d         j                  } j        |d         j                  } j        ||          sdS |D ]*}|dk    r"||         |                    |          k    r dS +dS t          |                                           t          |                                          k    rdS | D ]} | |         ||                   s dS dS t          | t                    r`t          |t                    rKt          |           t          |          k    rdS t          fdt          | |          D                       S | |k    S )Nrg  r]   dtypeFTc              3   6   K   | ]\  }} ||          V  d S r   r   )r@   r:   r;   compare_dictss      r   rX  zVTestRoundTripConversion.test_rank_round_trip.<locals>.compare_dicts.<locals>.<genexpr>   s3      GG41a==A..GGGGGGr   )r   r   rr   r  r  r   r_   r^   r  rB   rC   rD   )	d1d2knn1knn2q1q2re   r`  rq   s	          r   r`  zCTestRoundTripConversion.test_rank_round_trip.<locals>.compare_dicts  s   "d##  
2t(<(<  R<<FbLL!#FRZ$D$7d??%RXd7m2:FFF%RXd7m2:FFF*r{2r22 )#(5#' - -C"g~~$s)txx}}2L2L',uu#t rwwyy>>S^^33 5 % %C(=C"S':: %$uu%tB%%  *R*>*>  r77c"gg%% 5GGGG3r2;;GGGGGGRxr   )r  rs  r  r_  r`  rt  r  )
ry   r  r_  r`  r.  rY  r  restored_dictr`  rq   s
           @@r   test_rank_round_tripz,TestRoundTripConversion.test_rank_round_trip  s    IIIIIIIIII3c3Z(((3.SC?$$&&	>>),, ((**	  	  	  	  	  	 > }]I6666666r   c                     ddl m}  |dd          }|                                }|                    |          }|                                |k    sJ dS )z!Test Limit round-trip conversion.r   r,  r  r   r  N)rs  r-  rt  r  )ry   r-  r.  rY  r  s        r   test_limit_round_tripz-TestRoundTripConversion.test_limit_round_trip  sm    @@@@@@5r"---$$&&	??9--!!Y......r   c                 ,   ddl m}m}  ||j         |d          |j        h          }|                                }|                    |          }t          |                                d                   t          |d                   k    sJ dS )z"Test Select round-trip conversion.r   rD  rJ  r^   r^   N)rs  rE  r  r  r  rt  r  r_   )ry   rE  r  r.  rY  r  s         r   test_select_round_tripz.TestRoundTripConversion.test_select_round_trip  s    FFFFFFFF6cc'llCIFGGG$$&&	##I..8##%%f-..#i6G2H2HHHHHHHr   c                   
 ddl ddlm} ddlm}m}m}m}  | |d          dk     |ddg	           |d
           ||j        h                    }|	                                } ||d         r|d         nd|d         r|d         nd|d         |d                   }|	                                }	
fd
 
|	|          sJ dS )z+Test Search round-trip through dict inputs.r   Nr  )r  r_  r-  rE  r  r  r   r  r  r   r  rl  r  filterr  rk  rL  c                    t          | t                    rt          |t                    rd| v rd|v r| d         |d         }}t          |t                    rt          |t                    rd|v rd|v r|d         |d         }}d|v rd|v r 
j        |d         
j                  } 
j        |d         
j                  } 
j        ||          sdS |D ]*}|dk    r"||         |                    |          k    r dS +| D ]*}|dk    r"| |         |                    |          k    r dS +dS t          |                                           t          |                                          k    rdS | D ]i}t          | |         t                    r7t          ||         t                    r 	| |         ||                   s dS T| |         ||         k    r dS jdS | |k    S )Nr  rg  r]   r]  FT)r   r   rr   r  r  r   r_   r^   )ra  rb  rank1rank2rc  rd  re  rf  re   compare_search_dictsrq   s            r   rs  zLTestRoundTripConversion.test_search_round_trip.<locals>.compare_search_dicts6  s%   "d## ! 
2t(<(< ! R<<FbLL#%f:r&z5E!%.. ,:eT3J3J ,!U??v).vf$D&$7d??%-RXd7m2:%N%N%N%-RXd7m2:%N%N%N'2r{2r':': !1+05+/ !5 !5C'*g~~$s)txxPS}}:T:T/4uu+- !5 !5C'*f}}CBFF3KK9O9O/4uu'+t rwwyy>>S^^33 5 % %C!"S'400 %Z35N5N %33BsGRWEE )#(55)CBsG++$uu ,tRxr   )
r  r  r  rs  r  r_  r-  rE  r  rt  )ry   r  r  r_  r-  rE  original_searchsearch_dict
new_searchnew_dictrs  rq   s             @@r   test_search_round_tripz.TestRoundTripConversion.test_search_round_trip  s]   ======RRRRRRRRRRRR &#h--8+C:&&&%b///6~...	
 
 
 &--// V+6x+@J+h''d(3F(;EV$$g&x(	
 
 

 %%''"	  "	  "	  "	  "	  "	 H $#Hk:::::::r   c           
         ddl m} ddlm}m}m}  | |d          dk     | |d          g ||j        gd          	          
          }|                                }|d         d         dgk    sJ |d         d         ddgddik    sJ  ||                    |d                             }|                                d         |d         k    sJ dS )z%Test Search round-trip with group_by.r   r  )r  r  r  r  r  r  ro   r  r  )r\  r  r  r^   r  r  r  r  N)	r  r  rs  r  r  r  r  rt  r  )ry   r  r  r  r  r.  ru  r  s           r   $test_search_round_trip_with_group_byz<TestRoundTripConversion.test_search_round_trip_with_group_by\  sI   ======MMMMMMMMMM6#h--8+Wc*oo&$SYK1555  
 
 
 &&((:&v.:,>>>>:&{3z228
 
 
 
 

 67#4#4[5L#M#MNNN!!*-Z1HHHHHHHr   N)
r   r   r   r  rZ  rh  rj  rm  rx  rz  r   r   r   rW  rW    s        CC/ / /+7 +7 +7Z/ / /I I IA; A; A;FI I I I Ir   rW  )r5   )r6   N)r*   r-   sysr   rA  r   r   typingr   r   r  rq   r   r'   chromadb.server.fastapichromadb.api.fastapir   r  r   r   r	   r
   r   chromadb.configr   chromadb.errorsr   r   r   "chromadb.utils.embedding_functionsr   fixturer   r1   r4   boolr=   rT  rE   markparametrizerf   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.  r0  r6  r:  r<  rA  rC  rE  rH  rS  rW  rY  r^  r`  rb  rg  rm  rn  rp  rs  rv  r{  rx  r}  r  r  r  r  r  r  r  bad_number_of_results_queryr  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.  flakyplatform
startswithr7  rG  r`  rn  rp  r  r  r  r  r  r  r  r  r  r  r   r%  r+  r1  r8  r<  rF  r\  r  r  r  r  r  r*  rB  rW  r   r   r   <module>r     s6   				  



      ( ( ( ( ( ( ( (                  ( ( ( ( ( (              % $ $ $ $ $         
 H G G G G G    7 7 7( 7 7 7&" "$ " " " "F F F$ F F F F ):(;<<# # =<#0 ):(;<<%# %# =<%#P ):(;<<+$ +$ =<+$\ ):(;<<+ + =<+*> > >  
, , ,. . .< < < #??$4$4$45#%<= # # #( ( (# # #$ #??$4$4$45#%<= # # #( ( (  / / /+# +# +#\  ? ? ?F F F' ' '# # #  + + +( ( ($ $ $= = =./ ./ ./b# # #,
9 
9 
9, , ,! ! !! ! !% % %$  / / /; ; ; #??$4$4$455>uEE	a  
C 
C 
CF F F: : :: : :9 9 99 9 9  #??$4$4$455>XsO,w			.BC  / / /M M M9 9 9W W W #??$4$4$455>uEEuEE  ( ( (( ( (( ( (( ( (( ( (( ( ($4 $4 $4R ('')>)>)>?5>   ---/D/D/DE 
 )*:*:*:;  ' ' '' ' ')
 )
 )
Z #??$4$4$4502GH5>uEEuEE	  ( ( (, , ,,# # #" 		 (''uERRuERRweTTvUSS	    .5( 5( 5(p$( $( $(T 99.../5>uEE	a +,EF $' $' $'N- - -J@ @ @$     &$) $) $)N" " "# # #<4 4 4"/ / // / /! ! !, , ,<  :( ( ((" " "4 99...0@0@0@A   uEE	a	!
     #??$4$4$455>eLL	a
 	+) +. +. +.\- - -%' %' %'V' ' '' ' ' !s|'>'>w'G'GHH  IH !s|'>'>w'G'GHH? ? IH?; ; ;6&9 &9 &9RT2 T2 T2nO@ O@ O@d]& ]& ]&@|( |( |(~(/ (/ (/V  8  '( '( '(T$ $ $8 6  6  6F#" #" #"LG G G@9 9 9@G G G>"; "; ";J" " "D"" "" ""J*E *E *EZj3 j3 j3 j3Z@# @# @# @#F
2H 2H 2H 2HlOO OO OO OO OO OO OO OOda* a* a* a* a* a* a* a*Hx5 x5 x5 x5 x5 x5 x5 x5v@= @= @= @= @= @= @= @=F<= <= <= <= <= <= <= <=~eI eI eI eI eI eI eI eI eI eIr   