
    LKi             
       |   S SK r S SKrS SKrS SKrS SKrS SKJrJr  S SKJr  S SK	r	S SK
rS SKrS SKrS SKrS SKJr  S SKJrJrJrJrJr  S SKJr  S SKJrJrJr  S SKJr  \R>                  S	 5       r \R>                  S
 5       r!\R>                  S 5       r"SS\#4S jjr$SS\%S\#4S jjr&\RN                  RQ                  S\!/5      S 5       r)\RN                  RQ                  S\!/5      S 5       r*\RN                  RQ                  S\!/5      S 5       r+\RN                  RQ                  S\!/5      S 5       r,S r-S r.S r/S r0S r1/ SQ/ SQ/SS/S.r2S r3S  r4S! r5/ SQ/ SQ/SS/S.r6S" r7S# r8S$ r9S% r:S& r;S' r<S( r=S) r>S* r?S+ r@S, rAS- rBS. rCS/ rDS0 rES1 rFS2 rGS3 rHS4 rIS5 rJS6 rKS7 rLS8 rMS9 rNS: rO/ SQ/ SQ/S;S</S=S>S?S@.SASB0/SC.rPSD rQSE rRSF rSSG rTSH rUSI rV/ SQ/ SQ/S;S</SJSKSL00SJ/ SMQ0/SC.rWSN rXSO rYSP rZSQ r[/ SQ/ SQ/S;S</S=S>S?S@.SBSRSSST./SC.r\SU r]SV r^SW r_SX r`SY raSZ rbS[ rc/ S\Q/ S]Q/S;S</S.rdS^/ S\Q/ S]Q/0re/ SQ/ SQ/S_S`.rfSa rgSb rhSc ri/ SQ/ SQ/SdSe/S;S</S=S>S?S@.SBSRSSST./Sf.rjSg rkSh rlSi rm/ SQ/ SQ/ SjQ/ SkQ// SlQS=S>S?SmSn.SBSRSSSmSo.SpSqSrSmSo.SsStSuSmSo.// SvQSw.rnSx roSy rp/ SzQ/ SQ/S;S</S=S>S?S@.SASB0/S{S|/Sw.rqS} rrS~ rsS rtS ruS rvS rwS rxS ryS rzS r{S r|S r}S r~S rS r/ SzQ/ SQ/ SQ// SQS=S>S?S@.SASB0SSr0// SQSw.r/ SQ/ SQ/S;S/S=SS?S@.SASs0/SS/Sw.rS rS rS rS rS r\RN                  GR                  Sp\GR                  GR                  S5      S9S 5       r\RN                  GR                  Sp\GR                  GR                  S5      S9S 5       rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSS jrSS jrSS jr " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      rg)    N)datetime	timedelta)Any)FastAPI)DocumentEmbeddingFunctionQueryResultTYPE_KEYSPARSE_VECTOR_TYPE_VALUE)Settings)ChromaErrorNotFoundErrorInvalidArgumentError)DefaultEmbeddingFunctionc                  ,    [         R                  " 5       $ N)tempfilemkdtemp     X/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/chromadb/test/test_api.pypersist_dirr   !   s    r   c              #      #    [         R                  " [        SSSSSSSU S95      nUv   UR                  5         [        R
                  R                  U 5      (       a  [        R                  " U SS9  g g 7f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   &   l     __=@!C!C(a)		
F L
	ww~~k""k6 #   A4A6c              #      #    [         R                  " [        SSSSSSSU S95      nUv   UR                  5         [        R
                  R                  U 5      (       a  [        R                  " U SS9  g g 7fr   r&   r/   s     r   local_persist_api_cache_bustr5   ;   r2   r3   returnc                 "    [        X-
  5      U:  $ r   )absab	tolerances      r   approx_equalr=   O   s    qu:	!!r   r<   c                     [        U 5      [        U5      :w  a  g[        [        X5       V Vs/ s H  u  p[        XU5      PM     snn 5      $ s  snn f )NF)lenallzipr=   r9   s      r   vector_approx_equalrB   S   s?    
1vQ#a)D)$!Q9-)DEEDs   A
api_fixturec                    UR                  S5      nUR                  5         UR                  S5      nUR                  SSS9  UR                  S5      nUR	                  S5      n/ SQnUR                  SS/ SQS	9nUR                  5        HN  nXu;   d  US
:X  a  [        Xg   5      S:X  d   eM#  US:X  a  [        Xg   5      [        U5      :X  d   eMG  Xg   c  MN   e   g )Nr1   testid1helloids	documentsr5   
embeddingsrJ   	metadatas	distances   query_texts	n_resultsincluderI   included)	getfixturevalueresetcreate_collectionaddget_collectionquerykeysr?   set)rC   requestr0   
collectionapi2includesnnkeys           r   test_persist_index_loadingrc   Y   s    $$%89F
LLN))&1JNNuN0""#ABD$$V,JDH			E 
 
B
 wwyOrw<1$$$Jrw<3x=0007?"? r   c                     " S S[         [           5      nUR                  S5      nUR                  5         UR	                  SU" 5       S9nUR                  SSS9  UR                  S	5      nUR                  SU" 5       S9n/ S
QnUR                  SSUS9nUR                  5        HN  nX;   d  US:X  a  [        Xx   5      S:X  d   eM#  US:X  a  [        Xx   5      [        U5      :X  d   eMG  Xx   c  MN   e   g )Nc                      ^  \ rS rSrS rS\S\SS4U 4S jjrS\4S jrS	\	\\4   SS4S
 jr
S\	\\4   4S jrSrU =r$ )=test_persist_index_loading_embedding_function.<locals>.TestEFt   c                     [        [        U5      5       Vs/ s H  n[        R                  " / SQ5      PM     sn$ s  snf NrO         ranger?   nparrayselfinput_s      r   __call__Ftest_persist_index_loading_embedding_function.<locals>.TestEF.__call__u   .    16s5z1BC1BABHHY'1BCCC   "<argskwargsr6   Nc                 &   > [         TU ]  " U0 UD6  g r   super__init__rr   ry   rz   	__class__s      r   r~   Ftest_persist_index_loading_embedding_function.<locals>.TestEF.__init__x       Gd-f-r   c                     gNrE   r   rr   s    r   nameBtest_persist_index_loading_embedding_function.<locals>.TestEF.name{       r   configc                     g r   r   rr   r   s     r   build_from_configOtest_persist_index_loading_embedding_function.<locals>.TestEF.build_from_config~       r   c                     0 $ r   r   r   s    r   
get_configHtest_persist_index_loading_embedding_function.<locals>.TestEF.get_config       Ir   r   __name__
__module____qualname____firstlineno__ru   r   r~   strr   dictr   r   __static_attributes____classcell__r   s   @r   TestEFrf   t   c    	D	.# 	. 	. 	.	# 		DcN 	t 		S#X 	 	r   r   r1   rE   embedding_functionrF   rG   rH   r5   rK   rO   rP   rI   rT   )r   r   rU   rV   rW   rX   rY   rZ   r[   r?   r\   )	rC   r]   r   r0   r^   client2r`   ra   rb   s	            r   -test_persist_index_loading_embedding_functionr   r   s    "8,   $$%89F
LLN))&VX)NJNNuN0%%&DEG''68'LJDH			 
 
B
 wwyOrw<1$$$Jrw<3x=0007?"? r   c                     " S S[         [           5      nUR                  S5      nUR                  5         UR	                  SU" 5       S9nUR                  SSS9  UR                  S	5      nUR	                  SU" 5       S9n/ S
QnUR                  SSUS9nUR                  5        HN  nX;   d  US:X  a  [        Xx   5      S:X  d   eM#  US:X  a  [        Xx   5      [        U5      :X  d   eMG  Xx   c  MN   e   US   S//:X  d   eUS   S   S   R                  5       / SQ:X  d   eUS   S//:X  d   eUS   S//:X  d   eg )Nc                      ^  \ rS rSrS rS\S\SS4U 4S jjrS\4S jrS	\	\\4   SS4S
 jr
S\	\\4   4S jrSrU =r$ )Ctest_persist_index_get_or_create_embedding_function.<locals>.TestEF   c                     [        [        U5      5       Vs/ s H  n[        R                  " / SQ5      PM     sn$ s  snf ri   rm   rq   s      r   ru   Ltest_persist_index_get_or_create_embedding_function.<locals>.TestEF.__call__   rw   rx   ry   rz   r6   Nc                 &   > [         TU ]  " U0 UD6  g r   r|   r   s      r   r~   Ltest_persist_index_get_or_create_embedding_function.<locals>.TestEF.__init__   r   r   c                     gr   r   r   s    r   r   Htest_persist_index_get_or_create_embedding_function.<locals>.TestEF.name   r   r   r   c                     g r   r   r   s     r   r   Utest_persist_index_get_or_create_embedding_function.<locals>.TestEF.build_from_config   r   r   c                     0 $ r   r   r   s    r   r   Ntest_persist_index_get_or_create_embedding_function.<locals>.TestEF.get_config   r   r   r   r   r   s   @r   r   r      r   r   r   r1   rE   r   rF   rG   rH   r5   rK   rO   rP   rI   rT   rL   r   rj   rJ   rN   )r   r   rU   rV   get_or_create_collectionrX   rZ   r[   r?   r\   tolist)	rC   r]   r   apir^   r_   r`   ra   rb   s	            r   3test_persist_index_get_or_create_embedding_functionr      si   "8,   
!
!"5
6CIIK--f-RJNNuN0""#ABD..v&(.SJDH			 
 
B wwyOrw<1$$$Jrw<3x=0007?"?  e9%	!!!lAq!((*i777k?yk)))k?se###r   c                    UR                  U R                  5      nUR                  5         UR                  S5      nUR                  " S0 [
        D6  UR                  5       S:X  d   eUR                  U R                  5      nUR                  S5      nUR                  5       S:X  d   eUR                  S5        UR                  U R                  5      nUR                  5       / :X  d   eg N	testspacerk   r   )
rU   r   rV   rW   rX   batch_recordscountrY   delete_collectionlist_collections)rC   r]   r0   r^   s       r   test_persistr      s    $$[%9%9:F
LLN))+6JNN#]#"""$$[%9%9:F&&{3J"""
[)$$[%9%9:F""$***r   c                     U R                  5       n[        U[        5      (       d   eUS-  n[        R                  " U5      nU[        R
                  " 5       [        SS9-
  :  d   eg )Ni ʚ;
   )seconds)	heartbeat
isinstanceintr   fromtimestampnowr   )r0   heartbeat_nsheartbeat_sr   s       r   test_heartbeatr      s[    ##%LlC((((%'K&&{3Ix||~	"(=====r   c                 4    U R                  5       nUS:  d   eg )Nr   )get_max_batch_size)r0   
batch_sizes     r   test_max_batch_sizer      s    **,J>>r   c                     [        U [        5      (       d  [        R                  " S5        U R	                  5         U R                  5       nUSL d   eg )NNot a FastAPI instanceT)r   r   pytestskiprV   supports_base64_encoding)r0   r   s     r   test_supports_base64_encodingr      sB    fg&&,-
LLN%>>@#t+++r   c                     [        U [        5      (       d  [        R                  " S5        U R	                  5         SS0U l        U R                  5       SL d   eU R                  5       S:X  d   eg )Nr   max_batch_sized   F)r   r   r   r   rV   pre_flight_checksr   r   )r0   s    r   $test_supports_base64_encoding_legacyr      sf    fg&&,-
LLN 	# F **,555$$&#---r   c                 z   [        U [        5      (       d  [        R                  " S5        [        R
                  " U R                   S35      nUR                  S:X  d   eUR                  5       c   eSUR                  5       R                  5       ;   d   eSUR                  5       R                  5       ;   d   eg )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&&,-99((:;<Ds"""99;"""tyy{//1111%)9)9);;;;r   皙?ffffff@皙	@333333?Q@r   zhttps://example.com/1zhttps://example.com/2rL   rI   c                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  5       S:X  d   eg r   )rV   rW   rX   r   r   r0   r^   s     r   test_addr     sA    
LLN))+6JNN#]#"""r   c                     U R                  5         U R                  S5      nU R                  S5        [        R                  " [
        SS9   UR                  " S0 [        D6  S S S 5        g ! , (       d  f       g = fNrE   Collection .* does not existmatchr   )rV   rW   r   r   raisesr   rX   r   r   s     r   2test_collection_add_with_invalid_collection_throwsr   "  sT    
LLN))&1J
V$	},K	L'' 
M	L	L   A,,
A:c                 v   U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  5       S:X  d   e[
        R                  " [        5         U R                  S5      nS S S 5        U R                  S5      nUR	                  5       S:X  d   eg ! , (       d  f       N6= fr   )	rV   rW   rX   r   r   r   r   	Exceptionr   r   s     r   test_get_or_creater   +  s    
LLN))+6JNN#]#"""	y	!--k:
 
" 00=J""" 
"	!s   (B**
B8c                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  5       S:X  d   eg r   )rV   rW   rX   minimal_recordsr   r   s     r   test_add_minimalr   B  sA    
LLN))+6JNN%_%"""r   c                 \   U R                  5         U R                  S5      nUR                  " S0 [        D6  / SQnUR	                  US9nUR                  5        HN  nXB;   d  US:X  a  [        X4   5      S:X  d   eM#  US:X  a  [        X4   5      [        U5      :X  d   eMG  X4   c  MN   e   g )Nr   rL   rJ   rM   rS   rI   rk   rT   r   )rV   rW   rX   r   r   r[   r?   r\   )r0   r^   r`   recordsrb   s        r   test_get_from_dbr   L  s    
LLN))+6JNN#]#7HnnXn.G||~Ow|$)))Jw|$H555<''' r   c                     U R                  5         U R                  S5      nU R                  S5        [        R                  " [
        SS9   UR                  5         S S S 5        g ! , (       d  f       g = fNrE   r   r   )rV   rW   r   r   r   r   r   r   s     r   2test_collection_get_with_invalid_collection_throwsr   [  sO    
LLN))&1J
V$	},K	L 
M	L	L   A&&
A4c                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  5       S:X  d   eU R                  5         [        U R                  5       5      S:X  d   eg )Nr   rk   r   r   )rV   rW   rX   r   r   r?   r   r   s     r   test_reset_dbr  d  sf    
LLN))+6JNN#]#"""
LLNv&&()Q...r   c                 B   U R                  5         U R                  S5      nUR                  " S
0 [        D6  / SQnUR	                  / SQSUS9nUR                  5        HN  nXB;   d  US:X  a  [        X4   5      S:X  d   eM#  US:X  a  [        X4   5      [        U5      :X  d   eMG  X4   c  MN   e   UR	                  / SQ/SUS9nUR                  5        HN  nXB;   d  US:X  a  [        X4   5      S:X  d   eM#  US:X  a  [        X4   5      [        U5      :X  d   eMG  X4   c  MN   e   UR	                  / SQ/ SQ/SUS9nUR                  5        HN  nXB;   d  US:X  a  [        X4   5      S	:X  d   eM#  US:X  a  [        X4   5      [        U5      :X  d   eMG  X4   c  MN   e   g )Nr   rK   r   rO   query_embeddingsrR   rS   rI   rT   )皙?r         @rk   r   )rV   rW   rX   r   rZ   r[   r?   r\   r0   r^   r`   ra   rb   s        r   test_get_nearest_neighborsr
  o  s   
LLN))+6JNN#]#DH			( 
 
B
 wwyOrw<1$$$Jrw<3x=0007?"?  
		)* 
 
B
 wwyOrw<1$$$Jrw<3x=0007?"?  
		)?; 
 
B
 wwyOrw<1$$$Jrw<3x=0007?"? r   c                 &   U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  5       S:X  d   e[
        R                  " [        5         UR                  5         S S S 5        g ! , (       d  f       g = fr   )	rV   rW   rX   r   r   r   r   r   deleter   s     r   test_deleter    se    
LLN))+6JNN#]#"""	y	! 
"	!	!s   (B
Bc                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  5       S:X  d   eUR                  [        S   S9b   eg )Nr   rk   rI   rI   r   )rV   rW   rX   r   r   r  r   s     r   test_delete_returns_noner    s`    
LLN))+6JNN#]#"""u!56>>>r   c                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  5       S:X  d   eUR                  / SQ/SS9  g )Nr   rk   r   rO   r  rR   r   )rV   rW   rX   r   r   rZ   r   s     r   test_delete_with_indexr    sW    
LLN))+6JNN#]#"""&71Er   c                     U R                  5         U R                  S5      nU R                  S5        [        R                  " [
        SS9   UR                  S/S9  S S S 5        g ! , (       d  f       g = f)NrE   r   r   rF   r  )rV   rW   r   r   r   r   r  r   s     r   5test_collection_delete_with_invalid_collection_throwsr    sX    
LLN))&1J
V$	},K	Lug& 
M	L	Lr  c                     U R                  5         U R                  S5      nUR                  5       S:X  d   eUR                  " S0 [        D6  UR                  5       S:X  d   eg )Nr   r   rk   r   )rV   rW   r   rX   r   r   s     r   
test_countr    sX    
LLN))+6J"""NN#]#"""r   c                     U R                  5         U R                  S5      nU R                  S5        [        R                  " [
        SS9   UR                  5         S S S 5        g ! , (       d  f       g = fr   )rV   rW   r   r   r   r   r   r   s     r   4test_collection_count_with_invalid_collection_throwsr    sQ    
LLN))&1J
V$	},K	L 
M	L	Lr  c                     U R                  5         U R                  S5      nUR                  SS9  UR                  S:X  d   eg Nr   
testspace2r   )rV   rW   modifyr   r   s     r   test_modifyr    s@    
LLN))+6J<( ??l***r   c                     U R                  5         U R                  S5      nU R                  S5        [        R                  " [
        SS9   UR                  SS9  S S S 5        g ! , (       d  f       g = f)NrE   r   r   test2r  )rV   rW   r   r   r   r   r  r   s     r   5test_collection_modify_with_invalid_collection_throwsr"    sV    
LLN))&1J
V$	},K	Lw' 
M	L	Ls   A%%
A3c                     U R                  5         U R                  S5        U R                  S5      n[        R                  " [        5         UR                  SS9  S S S 5        g ! , (       d  f       g = fr  rV   rW   r   r   r   r  )r0   c2s     r   "test_modify_error_on_existing_namer&    sO    
LLN
[)		!	!,	/B	y	!
		{	# 
"	!	!s   A&&
A4c                     U R                  5         U R                  S5      n[        R                  " [        SS9   UR                  SS0S9  S S S 5        g ! , (       d  f       g = f)Nr   znot supportedr   
hnsw:spacecosinemetadatar$  )r0   caplogr^   s      r   test_modify_warn_on_DF_changer-    sK    
LLN))+6J	y	8L(#;< 
9	8	8s   A
A$c                    U R                  5         SSS.nU R                  SUS9nUR                  c   eUR                  S   S:X  d   eUR                  S   S:X  d   eU R                  S5      nUR                  c   eUR                  S   S:X  d   eUR                  S   S:X  d   eUR	                  SSS	.S9  UR                  S   S:X  d   eUR                  S
   S:X  d   eSUR                  ;  d   eU R                  S5      nUR                  c   eUR                  S   S:X  d   eUR                  S
   S:X  d   eSUR                  ;  d   eU R                  S5      nUR                  c   eUR                  S   S:X  d   eUR                  S
   S:X  d   eU R                  S5      nUR                  b   eU R                  5       nU Ho  nUR                  S:X  a;  UR                  c   eUR                  S   S:X  d   eUR                  S
   S:X  d   eMN  UR                  S:X  d  M`  UR                  c  Mo   e   g )NrO   rk   )r:   r;   r   r*  r:   r;   rl   )r:   cr/  r  )rV   rW   r+  rY   r  r   r   r   )r0   
metadata_ar^   collectionss       r   test_metadata_crur2    s   
LLNq!J))+
)KJ***s#q(((s#q((( &&{3J***s#q(((s#q((( QQ/0s#q(((s#q(((j))))) &&{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&&s+q000__,&&... "r   c                    U R                  5         U R                  S5      nUR                  " S	0 [        D6  UR	                  5       S:X  d   e/ SQnUR                  / SQ/SUS9nUR                  5        HN  nXB;   d  US:X  a  [        X4   5      S:X  d   eM#  US:X  a  [        X4   5      [        U5      :X  d   eMG  X4   c  MN   e   g )
Nr   rk   rK   r   rO   r  rI   rT   r   )	rV   rW   rX   r   r   rZ   r[   r?   r\   r	  s        r   test_increment_index_onr4  '  s    
LLN))+6JNN#]#"""DH			)* 
 
B
 wwyOrw<1$$$Jrw<3x=0007?"? r   c                    U R                  5         U R                  S5        U R                  S5      nUR                  S:X  d   e[        R
                  " [        5         U R                  S5      nS S S 5        g ! , (       d  f       g = f)Nr   r  )rV   rW   rY   r   r   r   r   r   s     r   test_add_a_collectionr6  =  sg    
LLN
[) &&{3J??k))) 
y	!**<8
 
"	!	!s   A::
Bc                     U R                  5         [        R                  " [        5       nU R	                  S5        S S S 5        WR
                  R                  c   eg ! , (       d  f       N(= f)Nr  )rV   r   r   r   rY   valuetrace_id)http_clienterrors     r   test_error_includes_trace_idr<  J  sP    	{	#u""<0 
$ ;;+++ 
$	#s   A
A-c                     U R                  5         U R                  S5        U R                  S5        U R                  5       n[        U5      S:X  d   eg )Nr   r  rk   rV   rW   r   r?   r0   r1  s     r   test_list_collectionsr@  S  sJ    
LLN
[)
\* ))+K{q   r   c                    U R                  5         U R                  S5        U R                  S5        U R                  5       n[        U5      S:X  d   eU R                  5         U R                  5       n[        U5      S:X  d   eg )Nr   r  rk   r   r>  r?  s     r   
test_resetrB  ]  st    
LLN
[)
\* ))+K{q   
LLN))+K{q   r   c                    U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  5       S:X  d   eUR                  5       n[        U5        UR                  5        HQ  nUS;   d  US:X  a  [        X#   5      S:X  d   eM$  US:X  a   [        X#   5      [        / SQ5      :X  d   eMJ  X#   c  MQ   e   g )Nr   rk   r   rI   rT   rL   rM   rJ   r   )
rV   rW   rX   r   r   peekprintr[   r?   r\   )r0   r^   rE  rb   s       r   	test_peekrG  k  s    
LLN))+6JNN#]#""" ??D	$Kyy{::cUlty>Q&&&Jty>S)Q%RRRR9$$$ r   c                     U R                  5         U R                  S5      nU R                  S5        [        R                  " [
        SS9   UR                  5         S S S 5        g ! , (       d  f       g = fr   )rV   rW   r   r   r   r   rE  r   s     r   3test_collection_peek_with_invalid_collection_throwsrI  }  sO    
LLN))&1J
V$	},K	L 
M	L	Lr  c                     U R                  5         U R                  S5      nU R                  S5        [        R                  " [
        SS9   UR                  S/S9  S S S 5        g ! , (       d  f       g = f)NrE   r   r   )rQ   )rV   rW   r   r   r   r   rZ   r   s     r   4test_collection_query_with_invalid_collection_throwsrK    sX    
LLN))&1J
V$	},K	LfX. 
M	L	Lr  c                     U R                  5         U R                  S5      nU R                  S5        [        R                  " [
        SS9   UR                  S/S/S9  S S S 5        g ! , (       d  f       g = f)NrE   r   r   rF   rH   )rV   rW   r   r   r   r   updater   s     r   5test_collection_update_with_invalid_collection_throwsrN    s\    
LLN))&1J
V$	},K	Lug&: 
M	L	Ls   A((
A6rF   id2rO   onejt?	int_valuestring_valuefloat_valuerS  rk   rL   rI   rM   c                 z   U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  SS/S9nUS   S   S   S:X  d   eUS   S   S	   S
:X  d   eUS   S   S   S:X  d   e[        US   S   S   [        5      (       d   e[        US   S   S	   [        5      (       d   eg )Ntest_intrF   rO  r  rM   r   rS  rO   rU  rQ  rk   r   )rV   rW   rX   metadata_recordsr   r   r   floatr0   r^   itemss      r   test_metadata_add_get_int_floatr]    s    
LLN))*5JNN&%&NNu~N.Ea -222a /5888a -222eK(+K8#>>>>eK(+M:EBBBBr   c                    U R                  5         U R                  S5      nUR                  " S
0 [        D6  UR	                  / SQ/SS9nUS   c   eUS   S   S   S   S:X  d   eUS   S   S   S   S	:X  d   e[        US   S   S   S   [        5      (       d   e[        US   S   S   S   [        5      (       d   eg )NrX  r   rO   r  rM   r   rS  rU  rQ  r   )rV   rW   rX   rY  rZ   r   r   rZ  r[  s      r   !test_metadata_add_query_int_floatr_    s    
LLN))*5JNN&%&#)))*a * E )))a #K0A555a #M2e;;;eK(+A.{;SAAAAeK(+A.}=uEEEEr   c                     U R                  5         U R                  S5      nUR                  " S	0 [        D6  UR	                  SS0S9nUS   S   S   S:X  d   eUS   S   S   S:X  d   eg )
NrX  rT  rP  whererM   r   rS  rO   r   rV   rW   rX   rY  r   r[  s      r   test_metadata_get_where_stringrd    sz    
LLN))*5JNN&%&NN.%!8N9Ea -222a 0E999r   c                     U R                  5         U R                  S5      nUR                  " S	0 [        D6  UR	                  SS0S9nUS   S   S   S:X  d   eUS   S   S   S:X  d   eg )
NrX  rS  rO   ra  rM   r   rT  rP  r   rc  r[  s      r   test_metadata_get_where_intrf    sz    
LLN))*5JNN&%&NN+q!1N2Ea -222a 0E999r   c                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  SS0S9nUS   S   S   S:X  d   eUS   S   S	   S
:X  d   eUS   S   S   S:X  d   eg )NrX  rU  rQ  ra  rM   r   rS  rO   rT  rP  r   rc  r[  s      r   test_metadata_get_where_floatrh    s    
LLN))*5JNN&%&NN-!7N8Ea -222a 0E999a /5888r   c                 $   U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  S/SSSS./S9  UR                  S/S9nUS	   S
   S   S:X  d   eUS	   S
   S   S:X  d   eUS	   S
   S   S:X  d   eg )NrX  rF   rk   twojt @rR  rI   rM   r  rM   r   rS  rT  rU  r   )rV   rW   rX   rY  rM  r   r[  s      r   "test_metadata_update_get_int_floatrm    s    
LLN))*5JNN&%&G!"E%PQ   NNwN'Ea -222a 0E999a /5888r   r8  nested5rj   c                     U R                  5         U R                  S5      n[        R                  " [        SS9   UR
                  " S0 [        D6  S S S 5        g ! , (       d  f       g = f)Ntest_metadata_validationr+  r   r   )rV   rW   r   r   
ValueErrorrX   bad_metadata_recordsr   s     r   test_metadata_validation_addrt    sF    
LLN))*DEJ	z	4.-. 
5	4	4   A
A)c                    U R                  5         U R                  S5      nUR                  " S	0 [        D6  [        R
                  " [        SS9   UR                  S/SSS00S9  S S S 5        g ! , (       d  f       g = f)
Nrq  r+  r   rF   r8  rn  ro  rl  r   )rV   rW   rX   rY  r   r   rr  rM  r   s     r   test_metadata_validation_updaterw    sd    
LLN))*DEJNN&%&	z	4ug'Hc?1KL 
5	4	4s   A00
A>c                     U R                  5         U R                  S5      n[        R                  " [        SS9   UR                  SSS00S9  S S S 5        g ! , (       d  f       g = f)Ntest_where_validationrb  r   r8  rn  ro  ra  )rV   rW   r   r   rr  r   r   s     r   test_where_validation_getrz    sM    
LLN))*ABJ	z	1g#78 
2	1	1s   A
A&c                     U R                  5         U R                  S5      n[        R                  " [        SS9   UR                  / SQSSS00S9  S S S 5        g ! , (       d  f       g = f)	Nry  rb  r   r   r   r   r8  rn  ro  )r  rb  )rV   rW   r   r   rr  rZ   r   s     r   test_where_validation_queryr}    sS    
LLN))*ABJ	z	1)GhPS_;UV 
2	1	1ru  rk  rj  )rS  rU  rT  c                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  SSS00S9n[        US   5      S:X  d   eg )	Ntest_where_ltrS  $ltrk   ra  rM   rO   r   rV   rW   rX   operator_recordsr   r?   r[  s      r   r  r    s\    
LLN))/:JNN&%&NN+qz!:N;Eu[!"a'''r   c                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  SSS00S9n[        US   5      S:X  d   eg )	Ntest_where_lterS  $lte       @ra  rM   rk   r   r  r[  s      r   r  r  %  s]    
LLN))*:;JNN&%&NN+}!=N>Eu[!"a'''r   c                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  SSS00S9n[        US   5      S:X  d   eg )	Nr  rU  $gtgffffffra  rM   rk   r   r  r[  s      r   test_where_gtr  -  s]    
LLN))*:;JNN&%&NN-%!?N@Eu[!"a'''r   c                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  SSS00S9n[        US   5      S:X  d   eg )	Nr  rU  $gterk  ra  rM   rO   r   r  r[  s      r   test_where_gter  5  s]    
LLN))*:;JNN&%&NN-&%!ANBEu[!"a'''r   c                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  SSS00S9n[        US   5      S:X  d   eg )	Nr  rT  $nerj  ra  rM   rO   r   r  r[  s      r   test_where_ne_stringr  =  s]    
LLN))*:;JNN&%&NN.5%.!ANBEu[!"a'''r   c                    U R                  5         U R                  S5      nUR                  " S
0 [        D6  UR	                  SSS00S9n[        US   5      S:X  d   eUR	                  SSS	00S9n[        US   5      S:X  d   eg )Nr  rS  r  rO   ra  rM   rU  $eqrk  r   r  r[  s      r   test_where_ne_eq_numberr  E  s    
LLN))*:;JNN&%&NN+qz!:N;Eu[!"a'''NN-%!@NAEu[!"a'''r   c                    U R                  5         U R                  S5      nUR                  " S0 [        D6  [        R
                  " [        5         UR                  SSS00S9  S S S 5        [        R
                  " [        5         UR                  SSS00S9  S S S 5        [        R
                  " [        5         UR                  SSSS	.0S9  S S S 5        [        R
                  " [        5         UR                  S
SSS000S9  S S S 5        [        R
                  " [        5         UR                  SS0SSS00S.S9  S S S 5        [        R
                  " [        5         UR                  SSSS00SSS00/0S9  S S S 5        [        R
                  " [        5         UR                  SSSS00/0S9  S S S 5        [        R
                  " [        5         UR                  S/ 0S9  S S S 5        [        R
                  " [        5         UR                  SS0S9  S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN`= f! , (       d  f       GN7= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Ntest_where_valid_operatorsrS  z$invalidrk   ra  r  2rO   )r  r  $andr  )rS  $orr  	$containsrE   r   )rV   rW   rX   r  r   r   rr  r   r   s     r   r  r  O  s%   
LLN))*FGJNN&%&	z	"kJ?;< 
# 
z	"kE3<89 
# 
z	"k1Q+?@A 
# 
z	"f{UAJ&?@A 
# 
z	"!&
K%3LM 	 	
 
#
 
z	"K%4{UAJ6OPQ 	 	
 
#
 
z	"e{UAJ&?%@AB 
# 
z	"eR[) 
#
 
z	"k623 
#	"? 
#	" 
#	" 
#	" 
#	" 
#	"
 
#	"
 
#	" 
#	"
 
#	"sl   H.I >I5I$-I6(J&JJ+J<.
H= 
I
I!$
I36
J
J
J(+
J9<
K
)r   r   r   r  )r   r   r   r  r  r   r  c                 <   U R                  5         U R                  S5      nUR                  " S0 [        D6  [        R
                  " [        5       nUR                  " S0 [        D6  S S S 5        S[        WR                  5      ;   d   eg ! , (       d  f       N*= f)Ntest_dimensionality_validation	dimensionr   )
rV   rW   rX   r   r   r   r   bad_dimensionality_recordsr   r8  r0   r^   es      r   "test_dimensionality_validation_addr    sm    
LLN))*JKJNN%_%	y	!Q434 
"#agg,&&& 
"	!   B
Bc                 <   U R                  5         U R                  S5      nUR                  " S0 [        D6  [        R
                  " [        5       nUR                  " S0 [        D6  S S S 5        S[        WR                  5      ;   d   eg ! , (       d  f       N*= f)N$test_dimensionality_validation_queryr  r   )rV   rW   rX   r   r   r   r   rZ   bad_dimensionality_queryr   r8  r  s      r   r  r    so    
LLN))*PQJNN%_%	y	!Q434 
"#agg,&&& 
"	!r  c                    U R                  5         U R                  S5      nUR                  " S0 [        D6  [        R
                  " [        SS9   UR                  SSS00S9  S S S 5        [        R
                  " [        SS9   UR                  / SQS	S0S
9  S S S 5        [        R
                  " [        SS9   UR                  S	/ 0S9  S S S 5        [        R
                  " [        SS9   UR                  S	SS00S9  S S S 5        [        R
                  " [        SS9   UR                  SSS00S9  S S S 5        [        R
                  " [        5         UR                  SSS00S9  S S S 5        [        R
                  " [        5         UR                  SSS0SS0/0S9  S S S 5        [        R
                  " [        5         UR                  SS	S0/0S9  S S S 5        [        R
                  " [        5         UR                  S/ 0S9  S S S 5        [        R
                  " [        5         UR                  SSS	S0/0S	S0/0S9  S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNp= f! , (       d  f       GNL= f! , (       d  f       GN$= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr  zwhere documentr   r  z$nestedrk   where_documentr|  r  )r  r  textrG   $not_containsr  z$unsupporteddocr  r   )	rV   rW   rX   r  r   r   rr  r   rZ   r   s     r   #test_query_document_valid_operatorsr    sg   
LLN))*FGJNN&%&	z)9	:uy!n&=> 
; 
z)9	:)[RSDTU 
; 
z)9	:{B&78 
; 
z)9	:{VW4E&FG 
; 
z)9	:8I&JK 
; 
z	"v/F&GH 
# 
z	"!^U$;ne=T#UV 	 	
 
#
 
z	"uU/C.D&EF 
# 
z	"ubk2 
# 
z	";"6!78;:NO 	 	
 
#	"A 
;	: 
;	: 
;	: 
;	: 
;	: 
#	" 
#	"
 
#	" 
#	" 
#	"sx   II+<I=/J$J!J3K
KK(5K9
I(+
I:=
J
J!
J03
K
K
K%(
K69
Lzthis is doc1 and it's great!zdoc2 is also great!)rL   rJ   rI   rM   c                 P   U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  SS0S9n[        US   5      S:X  d   eUR	                  SS0S9n[        US   5      S:X  d   eUR	                  SS	0S9n[        US   5      S
:X  d   eg )Ntest_get_where_documentr  doc1r  rM   rO   greatrk   badr   r   )rV   rW   rX   contains_recordsr   r?   r[  s      r   r  r    s    
LLN))*CDJNN&%&NN;*?N@Eu[!"a'''NN;*@NAEu[!"a'''NN;*>N?Eu[!"a'''r   c                    U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  / SQSS0SS9n[        US   S   5      S:X  d   eUR	                  / S	QSS
0SS9n[        US   S   5      S:X  d   e[        R                  " [        5       nUR	                  / S	QSS0SS9nS[        UR                  5      ;   d   e S S S 5        g ! , (       d  f       g = f)Ntest_query_where_documentrO   r   r   r  r  rO   )r  r  rR   rM   r   r|  r  rk   r  
datapointsr   )rV   rW   rX   r  rZ   r?   r   r   r   r   r8  )r0   r^   r\  r  s       r   r  r    s   
LLN))*EFJNN&%&"K3HTU  E u[!!$%***"K3IUV  E u[!!$%***	y	!Q  &U7KWX ! 
 s177|+++	 
"	!	!s   *1C%%
C3c                 \   U R                  5         U R                  S5      nUR                  " S	0 [        D6  UR	                  SS0S9  UR                  5       S:X  d   eUR	                  SS0S9  UR                  5       S:X  d   eUR	                  SS0S9  UR                  5       S:X  d   eg )
Ntest_delete_where_documentr  r  r  rO   r  r  r   r   )rV   rW   rX   r  r  r   r   s     r   r  r    s    
LLN))*FGJNN&%&k6%:;"""k5%9:"""k7%;<"""r   )g?g      @r   )gffffff?gGz@r   )rF   rO  id3id4r  )rS  rT  rU  is)rS  rU  rT  r  rl   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)rL   rI   rM   rJ   c           	         U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  SSSSS00SSS	00/0S
S0/0S9n[        US   5      S:X  d   eUR	                  SSSSS00SSS00/0SSSS00SSS00/0/0S9n[        US   5      S:X  d   eUR	                  SSSSS00SSS00/0SSSS00SSS00/0/0S9n[        US   5      S:X  d   eg )Ntest_logical_operatorsr  r  rS  r  rl   rU  r  gffffff?r  r  ra  rM   r  rT  r  r  r  rk   rO   rj  rP  r   rV   rW   rX   logical_operator_recordsr   r?   r[  s      r   test_where_logical_operatorsr    s   
LLN))*BCJNN.-.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                 ~   U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  SSS0SS0/0S9n[        US   5      S:X  d   eUR	                  S	SS0SS
0/0S9n[        US   5      S:X  d   eUR	                  S	SS0SS
0/0SSS00S9n[        US   5      S:X  d   eg )Ntest_document_logical_operatorsr  r  firstr  r  rM   rO   r  secondrk   rS  r  )r  rb  r   r  r[  s      r   %test_where_document_logical_operatorsr  T  s   
LLN))*KLJNN.-.NNg&e$
  E u[!"a'''NNg&h'
  E u[!"a'''NNg&h'
 %
  
E u[!"a'''r   r|  this document is firstthis document is secondc                    U R                  5         U R                  S5      nUR                  " S0 [        D6  / SQnUR	                  / SQUSS9nUS   b   eUS   S   S   S	:X  d   eUS
   S   S   S   S:X  d   e[        US   5      [        U5      :X  d   e/ SQnUR	                  / SQUSS9nUS
   b   eUS   S   S   S	:X  d   e[        US   5      [        U5      :X  d   eUR	                  / SQ/ SQ// SS9nUS   b   eUS
   b   eUS   b   eUS   b   eUS   S   S   S	:X  d   eUS   S   S   S:X  d   eg )Ntest_query_includerM   rJ   rN   r|  rO   r  rS   rR   rL   rI   r   rF   rM   rS  rT   )rL   rJ   rN   )rO   rk   r   rk   rJ   rN   rO  r   )rV   rW   rX   r   rZ   r\   r0   r^   rS   r\  s       r   r  r    s   
LLN))*>?JNNW5G"  E
 &&&<?1&&&a #K0A555uZ !S\1116G"  E
 %%%<?1&&&uZ !S\111#[1  E
 %%%%%%&&&%%%<?1&&&<?1&&&r   c                    U R                  5         U R                  S5      nUR                  " S0 [        D6  SS/nUR	                  USS0S9nUS   b   eUS   S	   S
:X  d   eUS   S	   S   S:X  d   eUS   S	   S:X  d   e[        US   5      [        U5      :X  d   eSS/nUR	                  US9nUS   b   eUS   S	   S
:X  d   e[        US   S   S	   S5      (       d   e[        US   5      [        U5      :X  d   eUR	                  / S9nUS   b   eUS   b   eUS   b   eUS   S	   S
:X  d   eUS   / :X  d   e[        R                  " [        SS9   UR	                  SS/S9nS S S 5        [        R                  " [        SS9   UR	                  S S9nS S S 5        g ! , (       d  f       N@= f! , (       d  f       g = f)Ntest_get_includerM   rJ   rS  rO   )rS   rb  rL   rI   r   rF   r  rT   r   r   rS   r   	undefinedr   )
rV   rW   rX   r   r   r\   r=   r   r   rr  r  s       r   r  r    s   
LLN))*<=JNNWK(GNN7;2BNCE&&&<?e###a -222a $<<<<uZ !S\111[)GNN7N+E%%%<?e###l+A.q137777uZ !S\111NN2N&E%%%%%%&&&<?e###"""	z	3['AB 
4 
z	3t, 
4	3 
4	3 
4	3s   F'F8'
F58
Gc                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  / SQ/ SQSS9nUS   S   S   S:X  d   eUS   S   S	   S
:X  d   eg )Ntest_query_orderr   r  rk   r  rJ   r   r  rO   r  r   rV   rW   rX   r   rZ   r[  s      r   r  r    s    
LLN))*<=JNNW)7  E a #'@@@@a #'????r   c                    U R                  5         U R                  S5      n[        R                  " [        5       nUR                  / SQS/0 /S9  S S S 5        S[        WR                  5      ;   d   e[        R                  " [        5       nUR                  SS9  S S S 5        S[        UR                  5      ;   d   e[        R                  " [        5       nUR                  SS/S9  S S S 5        S[        UR                  5      ;   d   eg ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NL= f)	Ntest_invalid_idr|  rO   rV  IDr  validr   )
rV   rW   r   r   rr  rX   r   r8  r   r  r  s      r   r  r    s    
LLN))*;<J	z	"a)!E 
#3qww< 
z	"a1 
#3qww< 
z	"awl+ 
#3qww< 
#	"
 
#	"
 
#	"s#   DD#D4
D #
D14
Ec                 V   SnU R                  5         U R                  SS9nUR                  " S0 [        D6  UR	                  / SQSS9nUS   S   S   S	:  d   eU R                  5         U R                  SS
SSS.S9nUR                  " S0 [        D6  UR	                  / SQSS9nUS   S   S   SU-
  :  d   eUS   S   S   SU-   :  d   eU R                  5         U R                  SSS0S9nUR                  " S0 [        D6  UR	                  / SQSS9nUS   S   S   S:  d   eg )Ng-q=test_index_paramsr  )333333?gQ?g?rO   r  rN   r   r  r)        )r(  zhnsw:construction_efzhnsw:Mr   r+  r(  ipr   r  )r0   EPSr^   r\  s       r   r  r    s   
C
LLN))/B)CJNNW)  E a #a''' LLN))  ("PQR * J NNW)  E a #a#g---a #a#g--- LLN)) L$+? * J NNW)  E a #b(((r   c                     U R                  5         [        R                  " [        5         U R	                  SSS0S9nUR
                  " S0 [        D6  S S S 5        g ! , (       d  f       g = f)Nr  r(  foobarr  r   )rV   r   r   r   rW   rX   r   r   s     r   test_invalid_index_paramsr     sT    
LLN	+	,--$h/G . 

 	!!	 
-	,	,s   )A
A+c                    UR                  S5      n U R                  5         U R                  SSS0S9nUR                  SSS9  UR                  S	5      nUR	                  S5      nUR
                  S   S:X  d   e/ S
QnUR                  SSUS9nUR                  5        HN  nXd;   d  US:X  a  [        XV   5      S:X  d   eM#  US:X  a  [        XV   5      [        U5      :X  d   eMG  XV   c  MN   e   g )Nr1   rE   r(  r  r*  rF   rG   rH   r5   rK   rO   rP   rI   rT   )
rU   rV   rW   rX   rY   r+  rZ   r[   r?   r\   )r0   r]   r^   r_   r`   ra   rb   s          r   !test_persist_index_loading_paramsr  *  s   $$%89F
LLN))% * J NNuN0""#ABD$$J |,444DH			 
 
B
 wwyOrw<1$$$Jrw<3x=0007?"? r   c                    U R                  5         U R                  S5      n[        R                  R	                  SS5      R                  [        R                  5      R                  5       nUR                  U[        [        U5      5       Vs/ s H  nSU 3PM
     snS9  UR                  5       [        U5      :X  d   eg s  snf )Nr   i     zhttp://example.com/r   )rV   rW   ro   randomrandastypefloat32r   rX   rn   r?   r   )r0   r^   large_recordsis       r   test_add_larger  H  s    
LLN))+6J IINN4-44RZZ@GGIMNN 05c-6H0IJ0I1"1#&0IJ  
 ]!3333 Ks   C
c                 ~    U R                  5         U R                  5       nSS KnUR                  SU5      (       d   eg )Nr   z\d+\.\d+\.\d+)rV   get_versionrer   )r0   versionr  s      r   test_get_versionr  Y  s6    
LLN  "G 88$g....r   c                    U R                  5         U R                  S5      nUR                  " S0 [        D6  [	        U R                  5       5      S:X  d   eU R                  S5        [	        U R                  5       5      S:X  d   eg )Ntest_delete_collectionrO   r   r   )rV   rW   rX   r   r?   r   r   r   s     r   r  r  d  sr    
LLN))*BCJNNWv&&()Q...
56v&&()Q...r   c                      [        5       n [        S5       Vs/ s H  nSPM     nnU " U5      n[        U5      S:X  d   eg s  snf )N@   zthis is a test)r   rn   r?   )r   rt   docsrL   s       r   test_default_embeddingr  o  sE    13&+Bi0iiD0#D)Jz?b    1s   A c                    [         R                  R                  SS5      R                  [         R                  5      R                  5       n[         R                  R                  SS5      R                  [         R                  5      R                  5       n[        [        U5      5       Vs/ s H  nSU 3PM
     nn[        [        U5      5       Vs/ s H  nSU 3PM
     nnU R                  5         U R                  S5      nUR                  XS9  U R                  S5      nUR                  X%S9  [        U R                  5       5      S:X  d   eUR                  5       [        U5      :X  d   eUR                  5       [        U5      :X  d   eUR                  US	   S
S9nUR                  US	   S
S9n	[        US   5      S	:  d   e[        U	S   5      S	:  d   e[        US   S	   5      S	:  d   e[        U	S   S	   5      S	:  d   eUS   S	   S	   US	   :X  d   eU	S   S	   S	   US	   :X  d   eg s  snf s  snf )Nr   r  zhttp://example.com/1/zhttp://example.com/2/coll1r   coll2rk   r   rO   r  rI   )ro   r  r  r  r  r   rn   r?   rV   rW   rX   r   r   rZ   )
r0   embeddings1embeddings2r  ids1ids2r  r  results1results2s
             r   test_multiple_collectionsr  v  s   ))..S)00<CCEK))..S)00<CCEK16s;7G1HI1HA#A3'1HDI16s;7G1HI1HA#A3'1HDI
LLN$$W-E	III/$$W-E	III/v&&()Q...;;=C,,,,;;=C,,,,{{KNa{HH{{KNa{HH x!###x!###xq!"Q&&&xq!"Q&&&E?1a DG+++E?1a DG+++1 JIs   -H7H<c                    U R                  5         U R                  S5      nUR                  " S0 [        D6  [        S   S   // SQ/S/SS0/S.nUR                  " S0 UD6  UR                  US	   S
/ SQS9n[        US   S   5      S
:X  d   eUS   S   S   US   S   :X  d   eUS   S   S   US   S   :X  d   eUS   S   S   S   S:X  d   e[        US	   S   S   US	   S   5      (       d   eg )Ntest_update_queryrI   r   r  皙?333333?zupdated documentfoobar)rI   rL   rJ   rM   rL   rO   r   r  rJ   rM   r   )rV   rW   rX   r   rM  rZ   r?   rB   )r0   r^   updated_recordsresultss       r   r  r    sS   
LLN))*=>JNNW q!"&'()en%	O (( (68  G
 wu~a !Q&&&5>!Q?5#9!#<<<<;"1%)Ea)HHHH;"1%e,555a #_\%B1%E   r   c                 l   U R                  5         U R                  S5      nUR                  " S
0 [        D6  / SQnUR	                  / SQ/SUS9nUR                  5        HQ  nXB;   d  US:X  a  [        X4   S   5      S:X  d   eM&  US	:X  a  [        X4   5      [        U5      :X  d   eMJ  X4   c  MQ   e   g )Nr   rK   r   r  r  rI   r   rk   rT   r   )rV   rW   rX   r   rZ   r[   r?   r\   )r0   r^   r`   r  rb   s        r   <test_get_nearest_neighbors_where_n_results_more_than_elementr    s    
LLN))+6JNNWDH)*  G
 ||~?cUlw|A'1,,,Jw|$H555<''' r   c                 ^   U R                  5         U R                  S5      nUR                  " S	0 [        D6  [        R
                  " [        5       nUR                  / SQ/S/ SQS9  S S S 5        S[        WR                  5      ;   d   eUR                  [        :X  d   e[        R
                  " [        5       nUR                  / SQ/S/ SQS9  S S S 5        S[        UR                  5      ;   d   eUR                  [        :X  d   eg ! , (       d  f       N= f! , (       d  f       NQ= f)
Nr   r   rK   r  z<Number of requested results -1, cannot be negative, or zero.rP  r   r   )rV   rW   rX   r   r   r   	TypeErrorrZ   r   r8  typerr  )r0   r^   excs      r   test_invalid_n_results_paramr    s   
LLN))+6JNNW	y	!S-.I 	 	
 
" JS		N    88y   	z	"c-.I 	 	
 
# C		N"""88z!!!% 
"	! 
#	"s   D<D
D
D,)g@gQ	@g@rF   rO  r  rT  )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                    U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  5       S:X  d   eUR
                  " S0 [        D6  UR	                  5       S:X  d   eUR                  / SQ[        S   S   S9n[        US   S   [        S   S   5      (       d   eUS	   S   [        S	   S   :X  d   eUS
   S   [        S
   S   :X  d   eUR                  US   S/ SQS9n[        US   S   S   [        S   S   5      (       d   eUS	   S   S   [        S	   S   :X  d   eUS
   S   S   [        S
   S   :X  d   eUR                  [        S   S   S9  UR                  [        S   S   / SQ/SS0/S9  UR	                  5       S:X  d   eUR                  / SQS/S9n[        US   S   / SQ5      (       d   eUS	   S   SS0:X  d   eUS
   S   b   eg )NrE   rl   r  rD  rI   r   )rS   rI   rL   rM   rJ   rO   r  rk   r  )r   Gz?gGz@rT  za new string valuerI   rL   rM   r  r   )rV   rW   rX   initial_recordsr   upsertnew_recordsr   rB   rZ   r  )r0   r^   
get_resultquery_results       r   test_upsertr     s   
LLN))&1JNN%_%"""$$"""8k%>PQR>S   J < #[%>q%A    k"1%[)A!)DDDDk"1%[)A!)DDDD###L18 $ L
 \"1%a(+l*CA*F    $Q'*k+.Fq.IIII$Q'*k+.Fq.IIII/%034E"1%%&"$89:  
 """8ug   J z,7:<MNNNNk"1%.:N)OOOOk"1%---r   c                     U R                  5         U R                  S5      nU R                  S5        [        R                  " [
        SS9   UR                  " S0 [        D6  S S S 5        g ! , (       d  f       g = fr   )rV   rW   r   r   r   r   r  r  r   s     r   5test_collection_upsert_with_invalid_collection_throwsr"  )  sV    
LLN))&1J
V$	},K	L,O, 
M	L	Lr   c                    U R                  5         U R                  S5      n/ SQ/ SQ/SS/S.n[        R                  " [        5       nUR
                  " S0 UD6  S S S 5        S[        WR                  5      ;   d   e[        R                  " [        5       nUR                  / SQ/S	S
9  S S S 5        S[        UR                  5      ;   d   eS/S/S//S/S/S///SS/S.n[        R                  " [        5       nUR                  " S0 UD6  S S S 5        S[        UR                  5      ;   d   e/ SQ// SQ//SS/S.n[        R                  " [        5       nUR                  " S0 UD6  S S S 5        S[        UR                  5      ;   d   eg ! , (       d  f       GN@= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N_= f)Ntest_invalid_embeddings)0r%  r%  )z1.2z2.243.2rF   rO  r   	embedding)z1.1z2.3r&  rO   r  r   r   r   r   r   r   r   )rV   rW   r   r   rr  rX   r   r8  rZ   rM  r  )r0   r^   invalid_recordsr  s       r   r$  r$  5  s   
LLN))*CDJ '(>?u~O 
z	"a)) 
##agg,&&& 
z	"a34 	 	
 
#
 #agg,&&& aS1##(>?u~O 
z	"a,O, 
##agg,&&& ((+;*<=u~O 
z	"a,O, 
##agg,&&&9 
#	"
 
#	" 
#	" 
#	"s0   	FF'?F9G

F$'
F69
G

Gc                 <   U R                  5         U R                  S5      nUR                  " S0 [        D6  [        R
                  " [        5       nUR                  " S0 [        D6  S S S 5        S[        WR                  5      ;   d   eg ! , (       d  f       N*= f)N$test_dimensionality_update_exceptionr  r   )rV   rW   rX   r   r   r   r   rM  r  r   r8  r  s      r   $test_dimensionality_exception_updater+  `  o    
LLN))*PQJNN%_%	y	!Q767 
"#agg,&&& 
"	!r  c                 <   U R                  5         U R                  S5      nUR                  " S0 [        D6  [        R
                  " [        5       nUR                  " S0 [        D6  S S S 5        S[        WR                  5      ;   d   eg ! , (       d  f       N*= f)N$test_dimensionality_upsert_exceptionr  r   )rV   rW   rX   r   r   r   r   r  r  r   r8  r  s      r   $test_dimensionality_exception_upsertr/  m  r,  r  win32)reruns	conditionc                     [         R                  R                  S5      (       a  [        R                  " S5        U R                  5         g )NCHROMA_INTEGRATION_TEST_ONLY"Skipping test for integration test)r*   environr   r   r   r   )
client_ssls    r   test_ssl_self_signedr8  x  s/    	zz~~45589r   c                 J   [         R                  R                  S5      (       a  [        R                  " S5        U R                  5         U R                  R                  R                  n[        R                  " [        5       n[        R                  " SUS9  S S S 5        [        R                  " [        WR                   5      UR                   UR                   R"                  5      nU R%                  5         SSR'                  U5      ;   d   eg ! , (       d  f       N= f)Nr4  r5  T)sslportCERTIFICATE_VERIFY_FAILED )r*   r6  r   r   r   r   _server	_settingschroma_server_http_portr   rr  r'   
HttpClient	tracebackformat_exceptionr  r8  __traceback__r)   join)r7  _portr  stack_traces       r   'test_ssl_self_signed_without_ssl_verifyrH    s    	zz~~45589((@@E	z	"a51 
#,,QWWqww 5 5K !!#&"''+*>>>> 
#	"s   D
D"c                   ^ U R                  5         U R                  S5      nSnSn[        R                  R	                  SS5      R                  [        R                  5      R                  5       n[        U5       Vs/ s H  oU PM     nnUR                  UUS9  [        SUS5       Vs/ s H  oU PM     snm[        R                  R	                  U5      R                  [        R                  5      R                  5       nUR                  UTU/ S9nUS    V	V
s/ s H  o  H  oPM     M     nn	n
[        U4S	 jU 5       5      (       d   eg s  snf s  snf s  sn
n	f )
Ntest_query_id_filtering_smallr   r  r   r   r   r  rI   rR   rS   rI   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   .0id	query_idss     r   	<genexpr>8test_query_id_filtering_small_dataset.<locals>.<genexpr>       :)92Y)9   rV   rW   ro   r  r  r  r  r   rn   rX   rZ   r@   )r0   r^   num_vectorsdimsmall_recordsr  rI   query_embeddingr  sublistitemall_returned_idsrP  s               @r   %test_query_id_filtering_small_datasetr]    s@   
LLN))*IJJK
CIINN3,33BJJ?FFHM -
.-aS6-C
.NN   
 "'q+r!:;!:A3!:;IiinnS)00<CCEO(	  G -4ENONwtwNO:)9:::::# / < Ps   ?E,EEc                   ^ U R                  5         U R                  S5      nSnSn[        R                  R	                  X#5      R                  [        R                  5      R                  5       n[        U5       Vs/ s H  oU PM     nnUR                  UUS9  [        SUS5       Vs/ s H  oU PM     snm[        R                  R	                  U5      R                  [        R                  5      R                  5       nUR                  UTU/ S9nUS    V	V
s/ s H  o  H  oPM     M     nn	n
[        U4S	 jU 5       5      (       d   e[        S
5       Vs/ s HM  n[        R                  R	                  U5      R                  [        R                  5      R                  5       PMO     nnUR                  UTS/ S9nUS    H  n[        U4S jU 5       5      (       a  M   e   g s  snf s  snf s  sn
n	f s  snf )Ntest_query_id_filtering_medium  r  r   r   r   rK  rI   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   rM  s     r   rQ  9test_query_id_filtering_medium_dataset.<locals>.<genexpr>  rS  rT  rl   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   rM  s     r   rQ  rb    s     8Zr?ZrT  rU  )r0   r^   rV  rW  medium_recordsr  rI   rY  r  rZ  r[  r\  rt   multi_query_embeddingsmulti_results
result_setrP  s                   @r   &test_query_id_filtering_medium_datasetrh    s   
LLN))*JKJK
CYY^^K5<<RZZHOOQN -
.-aS6-C
.NN!  
 "'q+r!:;!:A3!:;IiinnS)00<CCEO(	  G -4ENONwtwNO:)9::::: BGqAIA		s""2::.557   $$/	 % M $E*
8Z88888 += / < Ps   >G/+G4G9AG?c                   ^ U R                  5         U R                  S5      nSnSn[        R                  R	                  X25      R                  [        R                  5      R                  5       n[        U5       Vs/ s H  oU PM     nn[        U5       Vs/ s H  nSU0PM	     nnUR                  UUUS9  [        SS5       Vs/ s H  oU PM     nnUR                  US9  [        SS	5       Vs/ s H  oU PM     n	nUS
-   n
[        X:5       Vs/ s H  oU PM     nn[        R                  R	                  [        U	5      [        U5      -   U5      R                  [        R                  5      R                  5       n[        [        U5      5       Vs/ s H  oUSS.PM	     nnUR                  UX-   US9  [        SS5       Vs/ s H  oU PM     sn[        SS5       Vs/ s H  oU PM     sn-   [        US-   US-   5       Vs/ s H  oU PM     sn-   mS/n[        R                  R	                  U5      R                  [        R                  5      R                  5       nUR                  UTU
US9nUS    VVs/ s H  nU  H  nUPM     M     nnn[        U4S jU 5       5      (       d   e[        US   5       H>  u  nn[        U5       H)  u  nnUU	;   d  UU;   d  M  US   U   U   S   (       a  M)   e   M@     U	S   nUR                  UUSUS9nUS   S   S   S   (       d   eUS   n[         R"                  " [$        5       nUR                  UUSUS9  S S S 5        S['        WR(                  5      ;   d   eg s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snnf ! , (       d  f       N]= f)Ntest_query_id_filtering_e2er  r   indexrV  r      r  2   r  T)rk  upsertedr  #   -      rM   rK  rI   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   )rN  rO  valid_query_idss     r   rQ  .test_query_id_filtering_e2e.<locals>.<genexpr>  s     @/?_$/?rT  rn  r   rO   zError finding id)rV   rW   ro   r  r  r  r  r   rn   rX   r  r?   r  rZ   r@   	enumerater   r   r   r   r8  )r0   r^   rW  rV  rL   r  rI   rM   ids_to_deleteids_to_upsert_existingnew_num_vectorsids_to_upsert_newupsert_embeddingsupsert_metadatasr`   rY  r  rZ  r[  r\  result_indexid_list
item_indexitem_idupserted_id
deleted_idr;  rs  s                              @r   rj  rj    s   
LLN))*GHJ
CK188DKKMJ -
.-aS6-C
.',['9:'9!'1'9I:NN   &+2r]3]sV]M3-( /4Bm<mfm<!B&O).{)LM)LA3)LM 			s12S9J5KKSQ	

		  16c:K6L0M0M1&0M   $"6"   q"&A3& R=
)=aS6=
)	* "+/;3CD
DqcFD
	
  }HiinnS)00<CCEO(!	  G -4ENONwtwNO@/?@@@@@!*75>!:g#,W#5J00G?P4P{+L9*EjQQQQ $6 "; )+K(	  G ;"1%j111q!J	y	!U,	 	 	
 
" U[[!1111[ /: 4 =M 	'
)
 P* 
"	!sH   >NNN3NNN N%$N*N/ N4N::
Oc                  z   SSK Jn   U " / SQ/ SQS9  U " / / S9  [        R                  " [        SS9   U " SS	S
/S9  SSS5        [        R                  " [        SS9   U " SS/SS9  SSS5        [        R                  " [        SS9   U " / SQS	S
/S9  SSS5        [        R                  " [        SS9   U " / SQ/ SQS9  SSS5        [        R                  " [        SS9   U " / SQ/ SQS9  SSS5        [        R                  " [        SS9   U " / SQ/ SQS9  SSS5        [        R                  " [        SS9   U " / SQ/ SQS9  SSS5        U " / SQ/ SQS9  U " / SQ/ SQS9  U " / SQ/ SQS9  [        R                  " [        SS9   U " SS/S	S/S9  SSS5        [        R                  " [        SS9   U " SS/S	S
/S9  SSS5        U " S/S/S9  U " SS/SS/S9  [        R                  " [        SS9   U " / S Q/ SQS9  SSS5        [        R                  " [        SS9   U " / S!Q/ S"QS9  SSS5        [        R                  " [        SS9   U " / S#Q/ S$QS9  SSS5        g! , (       d  f       GN2= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNV= f! , (       d  f       GN;= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g= f)%z.Test SparseVector validation in __post_init__.r   SparseVectorr   rk   r  r        ??indicesvaluesz*Expected SparseVector indices to be a listr   
not_a_listr  r  Nz)Expected SparseVector values to be a listrO   ,indices and values must have the same lengthr   rO   rk   z%SparseVector indices must be integers)r   not_intrk   r  )SparseVector indices must be non-negativer   r  rk   #SparseVector values must be numbers)r  
not_numberr  )              ?r  rj   )rO         @rl   )r   r`  i'  *   Q	@TF2indices must be sorted in strictly ascending order)r   rk   rO   )r   rO   rO   rk   )r  r  r  皙?)r  rl   rO   )r  r  r  )chromadb.base_typesr  r   r   rr  r  s    r   test_validate_sparse_vectorr  *  s   0 ?; B' 
z)U	V\3*= 
W 
z)T	UaVL9 
V 
H
 	YSz:
 
z)P	Q.G 
R 
z)T	UZ@ 
V 
z)N	OY/GH 
P 
z)P	Q__E 
R 95 ;7 +OD 
z)N	OaVS$K8 
P 
z)P	QaYSz: 
R "tf- !Qu6 
N
 	Y?
 
N
 	\2FG
 
N
 	Y?
 
C 
W	V 
V	U
 
 
R	Q 
V	U 
P	O 
R	Q 
P	O 
R	Q
 

 

 
s   
I'
I9J5J"J/K<K
K%7K78L	%LL,'
I69
J
J
J,/
J>
K
K"%
K47
L	
L
L),
L:c            	      (   SSK Jn   SSKJn  U" / SQ/ SQS9nU" / SQ/ SQS9nS	US
S.nSUSS.nU " U5        U " U5        SU" / / S9S.nU " U5        [        R
                  " [        SS9   SU" SS/S/S9S.nSSS5        SSSS/0S.n[        R
                  " [        SS9   U " U5        SSS5        [        R
                  " [        SS9   SU" / SQ/ SQS9S.n	SSS5        [        R
                  " [        SS9   S U" SS/SS!/S9S.n
SSS5        S"U" SS/SS/S9U" / S#Q/ S$QS9S%S&.nU " U5        S'/ S(Q/ S)QS.S*.n[        R
                  " [        SS9   U " U5        SSS5        U" [        [        S+5      5      [        S+5       Vs/ s H  n[        U5      S,-  PM     snS9nS-US..nU " U5        g! , (       d  f       GNF= f! , (       d  f       GN%= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= fs  snf )/z<Test that sparse vectors are properly validated in metadata.r   )validate_metadatar  r  r  r  rO   rl   r  )r  r  r  z
document 1r  )r  sparse_embeddingscorez
document 2皙?zempty sparse)r  
sparse_vecr  r   invalidrO   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)rk   rl   r  )r  r  r  r  )r  sparse_1sparse_2regular_fieldsome_configr  r  r  r  )r   sparse_vectorr`  gMbP?zlarge sparse)r  large_sparse_vec)
chromadb.api.typesr  r  r  r   r   rr  listrn   rZ  )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_nestedr  large_sparsemetadata_larges                   r   )test_sparse_vector_in_metadata_validationr  |  sE   40 #9_MO"9_MO +J +J
 j!j! "2b9N n% 
H
  ,aVSE J

 "%Sz2 
b
 	,-	
 
z)T	U$ ,"?!
 
V 
z)N	O' ,A^'<!
 
P * !Qc
C ?K	 '(  %./JO 
b
 	/*	
  U4[!*/+6+Qa5 +6L -,ONn%
 

 
 
V	U 
P	O,
 
 7sB   *F7"	G	G<G-	G>H
7
G	
G
G*-
G;>
Hc                     SSK Jn Jn  SSKJn  S[
        [        S/ SQS/ SQ0S	.nU " U5      n[        US
   U5      (       d   eUS
   R                  / SQ:X  d   eUS
   R                  / SQ:X  d   eU" U5        U" / SQ/ SQS9nSUS	.nU " U5      nUS
   UL d   eU" U5        S[
        [        S/ SQS/ SQ0S	.n[        R                  " [        SS9   U " U5        SSS5        S[
        [        S/ SQS/ SQ0S	.n	[        R                  " [        SS9   U " U	5        SSS5        S[
        [        S/ SQS/ SQ0S	.n
[        R                  " [        SS9   U " U
5        SSS5        S[
        [        SSS/S/ SQ0S	.n[        R                  " [        SS9   U " U5        SSS5        SSS0S.nU " U5      n[        US    [        5      (       d   eUS    S   S:X  d   eS![
        [        S/ S/ 0S	.nU " U5      n[        US
   U5      (       d   eUS
   R                  / :X  d   eUS
   R                  / :X  d   e[
        [        SSS"/SS#S$/0[
        [        SSS%/SS&S'/0S(S).nU " U5      n[        US*   U5      (       d   e[        US+   U5      (       d   eUS   S(:X  d   eg! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNp= f! , (       d  f       GNA= f),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   rk   )r  r  r  r  r   N
duplicates)r   rk   rk   negative)r  r   rk   zindices must be non-negativemismatchrk   r  regularrb   r8  )r  r   r   emptyrO   r  r  rl   r        @r  )sparse1sparse2r  r  r  )r  r  r  r  r  r
   r   r   r  r  r   r   rr  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    st   H0  .yo
 $$89Jj*L9999h''9444h&&/999 j! #9_MO!  %%=>Kx O333k" .yo
 
N
 	,-
 .yo
 
N
 	./
 .zo
 
z)G	H,- 
I
 .1vo
 
H
 	,-
 '" %%:;Kk(+T2222x '7222 5y"hPRSN %^4Kk(+\::::x ((B...x ''2---
 .1vsCj
 .1vsCj

  %%67Kk),l;;;;k),l;;;;y!R'''c
 

 
 
I	H
 
s0   	J$	J6	K	K$
J36
K
K
K)c                     SSK Jn Jn  U " SSS/05        U " S/ SQ05        U " SS	S
/05        U " S/ SQ05        U " SS/SSS.5        [        R                  " [
        SS9   U " S/ 05        SSS5        [        R                  " [
        SS9   U " SSS/05        SSS5        [        R                  " [
        SS9   U " SSS/05        SSS5        [        R                  " [
        SS9   U " SSS/05        SSS5        [        R                  " [
        SS9   U " SS//05        SSS5        U" SSS/05        U" S/ SQ05        U" SS05        [        R                  " [
        SS9   U" S/ 05        SSS5        g! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g= f)z6Test that list metadata values are properly validated.r   r  validate_update_metadatatagsactioncomedyscoresrj   ratingsr  r   flags)TFTr:   r;   r  rE   )r  r   r   z	non-emptyr   Nz	same typerO   valsr  Tyeszstr, int, float, or boolrn  )r  r  r  r   r   rr  r  s     r   test_list_metadata_validationr  [  s   N v(345x+,y3*-.w 345 SzAvFG 
z	562,' 
6 
z	56C8,- 
6 
z	56As8,- 
6 
z	56D%=12 
6 
z)C	D6XJ<01 
E fx&:;<h	23 fd^, 
z	5 &". 
6	53 
6	5 
6	5 
6	5 
6	5 
E	D 
6	5sH    E:F:F(F.F?&G:
F	
F
F+.
F<?
G
Gc                     SSK Jn   U " SSS005        U " SSS005        U " SSS	005        U " S
SS005        U " SSS005        U " SSS005        [        R                  " [        5         U " SSSS/005        SSS5        [        R                  " [        5         U " SSSS0005        SSS5        U " SSSS00SSS00/05        g! , (       d  f       NT= f! , (       d  f       N4= f)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;   Nrn  r  yearr    )r  r  r   r   rr  r  s    r   test_where_contains_validationr    s   1 F[(345H{B/01IS123Gk4012 F_g678H234 
z	"sCj 9:; 
# 
z	"x.> ?@A 
# 	6K23fudm5LMN 
#	" 
#	"s   )CC
C
C%c                 l    U R                  5       nUR                  S:H  =(       a    UR                  S:H  $ )zrReturn 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0DEr   c           	      B   [        U 5      (       a  [        R                  " S5        U R                  5         U R	                  S5      nUR                  / SQ/ SQ/ SQ/ SQ/SS/S	S
.S/SS
.SS/SS
./S9  UR                  S/S9n[        US   5      S:X  d   e[        US   S   S   5      SS/:X  d   eUS   S   S   S	:X  d   eUR                  SSS00S9n[        US    Vs/ s H  o3S   PM	     sn5      nUS	S/:X  d   eUR                  SSS00S9n[        US   5      S:X  d   eUS   S   S   S:X  d   eUR                  SSS00S9n[        US   5      S:X  d   eUS   S   S   S:X  d   eUR                  SSS00S9n[        US   5      S:X  d   egs  snf )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   rO   r   )r   r   rO   r  r  r  )r  r  dramai  thrilleri  r  rF   r  rM   rO   r   r  r  r  ra  r  romanceN)	r  r   r   rV   rW   rX   r   r?   sorted)r0   r^   r\  mrI   s        r   r  r    s   ''NO
LLN))*CDJNN!y)4)48Y-
+T:
   NNwN'Eu[!"a'''%$Q'/0Xx4HHHHa (D000 NN&;*A!BNCE
U;%78%7F)%78
9C4, NN&;*@!ANBEu[!"a'''a (D000 NN&?H*E!FNGEu[!"a'''a (D000 NN&;	*B!CNDEu[!"a''' 9s   %Fc                    [        U 5      (       a  [        R                  " S5        U R                  5         U R	                  S5      nUR                  SS// SQ/ SQ/S/ SQ0SS	S
/0/S9  UR                  SSS00S9n[        US   5      S:X  d   eUS   S   S:X  d   eUR                  SSS
00S9n[        US   5      S:X  d   eUS   S   S:X  d   eUR                  SSS00S9n[        US   5      S:X  d   eUS   S   S:X  d   eg)z(End-to-end: $contains on integer arrays.r  test_int_array_e2erF   rO  r  r  r  )r   r  rl  (   rm  r  r  r  ra  rI   rO   r   r  r   N)r  r   r   rV   rW   rX   r   r?   r[  s      r   $test_array_metadata_int_contains_e2er    sD   ''NO
LLN))*>?JNNENy)|$Bx 
   NN([",=!>N?EuU|!!!<?e###NN([",=!>N?EuU|!!!<?e###NN(_b,A!BNCEuU|!!!<?e###r   c                    [        U 5      (       a  [        R                  " S5        U R                  5         U R	                  S5      nUR                  S// SQ/SSS/0/S9  UR                  SS	S00S
9n[        US   5      S:X  d   eUR                  S/SS/0/S9  UR                  SS	S00S
9n[        US   5      S:X  d   eUR                  SS	S00S
9n[        US   5      S:X  d   eUR                  S/S9nUS   S   S   S/:X  d   eg)z8End-to-end: updating array metadata replaces old values.r  test_array_update_e2erF   r  r  old_aold_br  r  ra  rI   rO   new_xrl  r   r  rM   N)	r  r   r   rV   rW   rX   r   r?   rM  r[  s      r   test_array_metadata_update_e2er    sR   ''NO
LLN))*ABJNNG;Wg./0   NN&;*@!ANBEuU|!!! GWI&'   NN&;*@!ANBEuU|!!! NN&;*@!ANBEuU|!!! NNwN'Ea (WI555r   c                 L   [        U 5      (       a  [        R                  " S5        U R                  5         U R	                  S5      nUR                  S// SQ/SSSS/S	./S
9  UR                  S/S9nUS   S   nUS   S:X  d   eUS   S:X  d   e[        US   5      SS/:X  d   eUR                  SSS00S9n[        US   5      S:X  d   eUR                  SSS00S9n[        US   5      S:X  d   eUR                  SSSS00SSS00/0S9n[        US   5      S:X  d   eg)z8End-to-end: records with both scalar and array metadata.r  test_mixed_e2erF   r  Alicer  adminuser)r   r  r  r  r  rM   r   r   r  r  r  ra  rI   rO   r  r  r  r  N)	r  r   r   rV   rW   rX   r   r  r?   )r0   r^   r\  mds       r   )test_array_metadata_mixed_with_scalar_e2er	  	  s}   ''NO
LLN))*:;JNNG;#b7F:KLM   NNwN'E	{	A	Bf:   g;""V*'6!2222 NN'E2;!7N8EuU|!!! NN&;*@!ANBEuU|!!! NN62,'+w/0
  E uU|!!!r   c                    [        U 5      (       a  [        R                  " S5        U R                  5         U R	                  S5      nUR                  S// SQ/SS0/S9  UR                  S/SSS	/0/S
9  UR                  SSS00S9n[        US   5      S:X  d   S5       eUR                  SSS00S9n[        US   5      S:X  d   eUR                  S/S9n[        US   S   S   5      SS	/:X  d   eg)zREnd-to-end: changing a metadata field from scalar to array removes the old scalar.r  test_scalar_to_arrayrF   r  r  
old_scalarr  new_anew_brl  r  ra  rI   r   z+Stale scalar value should have been removedr  rO   r  rM   N)
r  r   r   rV   rW   rX   rM  r   r?   r  r[  s      r   -test_metadata_type_change_scalar_to_array_e2er  <	  s-   ''NO
LLN))*@AJ NNG;L)*  
 GWg./0   NN&5,*?!@NAEuU|!P#PP! NN&;*@!ANBEuU|!!! NNwN'E%$Q'/0Wg4FFFFr   c                    [        U 5      (       a  [        R                  " S5        U R                  5         U R	                  S5      nUR                  S// SQ/SSS/0/S9  UR                  S/SS	0/S
9  UR                  SSS00S9n[        US   5      S:X  d   S5       eUR                  SSS	00S9n[        US   5      S:X  d   eUR                  S/S9nUS   S   S   S	:X  d   eg)zVEnd-to-end: changing a metadata field from array to scalar removes the old array rows.r  test_array_to_scalarrF   r  r  r  r   r  
new_scalarrl  r  ra  rI   r   z)Stale array rows should have been removedr  rO   r  rM   N	r  r   r   rV   rW   rX   rM  r   r?   r[  s      r   -test_metadata_type_change_array_to_scalar_e2er  \	  s#   ''NO
LLN))*@AJ NNG;Wg./0  
 GL)*   NN&;*@!ANBEuU|!N#NN! NN&5,*?!@NAEuU|!!! NNwN'Ea (L888r   c                    [        U 5      (       a  [        R                  " S5        U R                  5         U R	                  S5      nUR                  S// SQ/SS0/S9  UR                  S// SQ/SSS	/0/S9  UR                  SS
S00S9n[        US   5      S:X  d   S5       eUR                  SSS00S9n[        US   5      S:X  d   eUR                  S/S9n[        US   S   S   5      SS	/:X  d   eg)zFEnd-to-end: upsert (not update) correctly cleans up when type changes.r  test_upsert_type_changerF   r  r  
scalar_valr  arr_aarr_br  ra  rI   r   z*Stale scalar from upsert should be removedr  rO   r  rM   N)	r  r   r   rV   rW   r  r   r?   r  r[  s      r   (test_metadata_type_change_via_upsert_e2er  |	  s2   ''NO
LLN))*CDJ G;L)*  
 G;Wg./0   NN&5,*?!@NAEuU|!O#OO! NN&;*@!ANBEuU|!!!NNwN'E%$Q'/0Wg4FFFFr   c                 T   [        U 5      (       a  [        R                  " S5        U R                  5         U R	                  S5      nUR                  S// SQ/SS0/S9  UR                  S/SS/0/S	9  UR                  S/SS
0/S	9  UR                  SSS00S9n[        US   5      S:X  d   S5       eUR                  SSS00S9n[        US   5      S:X  d   S5       eUR                  SSS
00S9n[        US   5      S:X  d   eUR                  S/S9nUS   S   S   S
:X  d   eg)z;End-to-end: scalar -> array -> scalar leaves no stale data.r  test_rapid_fliprF   r  r  originalr  mid_arl  final_scalarr  ra  rI   r   zOriginal scalar should be goner  z!Intermediate array should be gonerO   r  rM   Nr  r[  s      r   !test_metadata_rapid_type_flip_e2er   	  sz   ''NO
LLN))*;<JNNG;J'(  
 GWI&'   GN+,   NN&5**=!>N?EuU|!C#CC! NN&;*@!ANBEuU|!F#FF! NN&5.*A!BNCEuU|!!!NNwN'Ea (N:::r   c                 B   [        U 5      (       a  [        R                  " S5        U R                  5         U R	                  S5      nUR                  S// SQ/SSS/S./S	9  UR                  S/S
S/SS./S9  UR                  SSS00S9n[        US   5      S:X  d   S5       eUR                  SSS
00S9n[        US   5      S:X  d   eUR                  SSS00S9n[        US   5      S:X  d   S5       eUR                  SSS00S9n[        US   5      S:X  d   eg)zNEnd-to-end: one update changes 'color' scalar->array AND 'tags' array->scalar.r  test_mixed_type_changerF   r  redr  r   )colorr  r  bluegreenr  rl  r$  r  ra  rI   r   zOld color scalar should be goner  rO   r  zOld tags array should be goneNr  r[  s      r   1test_metadata_mixed_simultaneous_type_changes_e2er'  	  s`   ''NO
LLN))*BCJNNG;"Wg,>?@  
 G$g.EF   NN'E5>!:N;EuU|!D#DD! NN'K+@!ANBEuU|!!! NN&;*@!ANBEuU|!B#BB! NN&5,*?!@NAEuU|!!!r   c                 V   [        U 5      (       a  [        R                  " S5        U R                  5         U R	                  S5      nUR                  S// SQ/SSS./S9  UR                  S/S	S
S/0/S9  UR                  S/S	S0/S9  UR                  S/S9n[        US   5      S:X  d   eS	US   S   ;  d   SUS   S    35       eUS   S   S   S:X  d   eUR                  S	SS00S9n[        US   5      S:X  d   eUR                  S	SS
00S9n[        US   5      S:X  d   eg)zBEnd-to-end: add scalar, update to array, then delete key entirely.r  test_delete_after_type_changerF   r  r  r  )r  keepr  r  r  r  rl  Nr  rI   rO   rM   r   z tags key should be deleted, got r*  r  ra  r  r  r[  s      r   *test_metadata_delete_after_type_change_e2er+  	  s   ''NO
LLN))*IJJNNG;(%89  
 GWg./0   GD>"   NNwN'EuU|!!!eK(++B	)%*<Q*?)@AB+a (E111 NN&5,*?!@NAEuU|!!!NN&;*@!ANBEuU|!!!r   c                  
   SSK Jn Jn  SSKJn  U " / SQSS[
        [        SSS/S	S
S/0S.SU" SS/SS/S9S.SS0// SQS9n[        US   S   S   U5      (       d   e[        US   S   S   U5      (       d   eSUS   S   ;  d   eU" U5        US   S   S   R                  SS/:X  d   eUS   S   S   R                  S
S/:X  d   eUS   S   S   R                  SS/:X  d   eUS   S   S   R                  SS/:X  d   eg)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  rk   r  r  r  r  r!  rO   rl   r  r  r  r  test3)zdoc onezdoc twoz	doc three)rI   rL   rM   rJ   rM   r  )
r  r-  r.  r  r  r
   r   r   r  r  )r-  r.  r  
record_sets       r   ,test_sparse_vector_dict_format_in_record_setr5  
  s{    1 -$  61vsCj  &1vsCjI W
 6%J, j-a0:LIIIIj-a0:LIIII:k215555 z* k"1%h/77Aq6AAAk"1%h/663*DDDk"1%h/77Aq6AAAk"1%h/663*DDDr   c            
      :   SSK Jn   U " / SQ// SQ/SS/SS/S	S
///SS0SS0SS0/// SQ// SQ/S.5      nUR                  5       n[        U5      S:X  d   e[        US   5      S:X  d   eUS   S   S   S:X  d   eUS   S   S   S:X  d   eUS   S   S   SS/:X  d   eUS   S   S   SS0:X  d   eUS   S   S   S:X  d   eUS    H+  nSU;   d   eSU;   d   eSU;   d   eSU;   d   eSU;   a  M+   e   U " SS// SQ/SS // S!Q/S"S/S/S///S#S0S#S$0/S"/S%S&// SQ/SS/SS//S.5      nUR                  5       n[        U5      S$:X  d   e[        US   5      S$:X  d   e[        US   5      S:X  d   eUS   S   SSS#S0S%S'.:X  d   eUS   S   SS S#S$0S&S'.:X  d   eUS   S   S(S)S/SS*.:X  d   eUS   S   S+S,S/S-S*.:X  d   eUS   S$   S.S/S/S0S*.:X  d   eU " / / / / / / S.5      nUR                  5       nU/ :X  d   eU " / SQ// S1Q/S"SS0S"SS0/// S2Q// S3Q/S.5      nUR                  5       n[        U5      S:X  d   e[        US   5      S:X  d   eUS   S   SSS0SS4.:X  d   eUS   S   S5S6S7.:X  d   eUS   S$   S8SS0S0S4.:X  d   eU " SS5//S"S"S"S"/ /S.5      nUR                  5       n[        U5      S:X  d   e[        US   5      S$:X  d   eUS   S   SS0:X  d   eUS   S   SS50:X  d   eU " S9//S://S9S;0//S<S=///S>//S?//S@.5      nUSA   S9//:X  d   eUR	                  SB5      S://:X  d   eSCU;   d   e[        U5      SD:X  d   eUR                  5       n[        US   5      S:X  d   eUS   S   S   S9:X  d   e[        SE5        g")FzTTest the SearchResult.rows() method for converting column-major to row-major format.r   )SearchResultr  r/  r  r  r  r        @g      @rb   r:   r;   r/  )r  r  ffffff?)documentr  r+  )rI   rJ   rL   rM   r  selectrO   rl   rO  rF   r:  r  r'  r+  r  r  a1a2)b1b2b3doc_a1doc_a2)doc_b1doc_b2doc_b3Nxrk   r  r  )rO  r:  r+  r  r>  rC  )rO  r:  r'  r  r?  rD  r  r@  rE  r9  )Nr0  N)r  Nr9  )r:  r+  r  )rO  r+  r  rO  r0  )rO  r:  r  rE   ztest docTr  r  r  r@   )rI   rJ   rM   rL   r  r;  rI   rJ   rM      z%All SearchResult.rows() tests passed!)r  r7  rowsr?   r   rF  )r7  resultrH  rows       r   test_search_result_rowsrK  4
  s   / )*23 #Jc
S#J?@!3<%s|DE&'89	
	F ;;=Dt9>>tAw<1 71:du$$$71:j!V+++71:k"sCj00071:j!eS\11171:g#%%% Aws{{S   c!!!S   #~~  4L"45#X.0NOu%  8c1X.5Sz?3"G,{G.DE
	
F ;;=Dt9>>tAw<1tAw<1 71:!H	    71:!H	    71:U	    71:U	    71:U	    	
	F ;;=D2:: )*./8TC845'(89	
	F ;;=Dt9>>tAw<1 71:C8cJJJJ 71:6:::: 71:C8cJJJJ EN#d	
	F ;;=Dt9>>tAw<171:$&&&71:$&&& H:%,"D>*+ #J<.vhwi	
	F %=fXJ&&&::k"
|n444&   v;! ;;=DtAw<171:dv%%%	
12r   c                      SSK n SSKJnJnJn  U" U" SS/SS9U" SS	/S
SS9/5      nUR                  5       nSSS0SSSS0SSS0SSS/SSSS.0/0S.0SSS0SSS0SSS	/S
SSS.0/0S.0/0/0nXV:X  d   eU" U" SS/SS9U" SS	/S
SS9/SS/SS9nUR                  5       nSSS0SSSS0SSS0SSS/SSSS.0/0S.0SSS0SSS0SSS	/S
SSS.0/0S.0/0/0n	X:X  d   eU" U" SS/SS9U" SS	/S
SS9U" S5      /5      n
U
R                  5       nSU;   d   eSUS   S   ;   d   eUS   S   S   n[        U5      S:X  d   eU R                  " [        SS9   U" U" SS/SS9U" SS	/SS9/S/S 9nUR                  5         SSS5        U R                  " [        S!S9   U" U" SS/SS9U" SS	/SS9/SS"/S 9nUR                  5         SSS5        U R                  " [        S#S9   U" / 5      nUR                  5         SSS5        U R                  " [        S$S9   U" U" S5      /S%S&9nUR                  5         SSS5        U R                  " [        S$S9   U" U" S5      /SS&9nUR                  5         SSS5        U" U" SS/SS9U" SS	/S
SS9/S'S/SSS(9nUR                  5       nSSS0SSSS)0SSS0SSS/SSSS.0/0S.0SSS*0SSS0SSS	/S
SSS.0/0S.0/0/0nUU:X  d   eU" U" SS/SS9U" SS	/SS9/SS+9nUR                  5       nSSS0SSSS,0SSS0SSS/SSSS.0/0S.0SSS,0SSS0SSS	/SSSS.0/0S.0/0/0nUU:X  d   eU R                  " [        S-S9   U" U" SS/SS9U" SS	/SS9/S.S./SS/9nUR                  5         SSS5        [        S05        g! , (       d  f       GN+= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN~= f! , (       d  f       Nt= f)1z9Test the Rrf (Reciprocal Rank Fusion) to_dict conversion.r   N)RrfKnnValr  r  T)rZ   return_rankr  r  r  )rZ   rb   rP  $mul$valr  $sum$divr  <   $knn
#embedding   rZ   rb   limitrP  leftrightr  r   )ranksweightskr8  rO   rl   z/Number of weights .* must match number of ranksr   )r^  r_  z All weights must be non-negativeg      zRRF requires at least one rankzk must be positiver  )r`  r  )r^  r_  	normalizer`  g      ?g      ?)r^  ra  r  zSum of weights must be positiver  )r^  r_  ra  zAll RRF tests passed!)
r   &chromadb.execution.expression.operatorrM  rN  rO  to_dictr?   r   rr  rF  )r   rM  rN  rO  rrfrI  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_dictrx  
  s    DD sCjd3sCj&8dK	
C [[]F 	RL%+SM &%+RL(.693Z3?57;?	1*%&
)"&!& %+SM &%+RL(.693Z3E57;?	1*%&
)"&!'%'*
,H\  sCjd3sCj&8dK
 c

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

!"W
 
 
M	L 
K	J
 
?	>
 
?	>| 
L	KsH   )N%*N7%O	OO-&+O?%
N47
O	
O
O*-
O<?
Pc            	         SSK n SSKJnJnJnJnJn  U" U" S5      U" UR                  SS9S9nUR                  5       S/SS	/SS.0S.:X  d   eU" U" S
5      U" S5      /U" UR                  U" S5      /SS9S9nUR                  5       S
S/SS	S/SS.0S.:X  d   eU" U" S5      /U" UR                  /SS9S9nUR                  UR                  5       5      R                  5       UR                  5       :X  d   eU" 5       nUR                  5       0 :X  d   eUR                  0 5      R                  5       0 :X  d   eU R                  " [        SS9   UR                  SSS	/SS.005        SSS5        U R                  " [        SS9   UR                  SS/05        SSS5        U R                  " [        SS9   UR                  / SS	/SS.0S.5        SSS5        U R                  " [        SS9   UR                  SS	/SS.05        SSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nf= f! , (       d  f       g= f)z?Test GroupBy, MinK, and MaxK serialization and deserialization.r   N)GroupByMinKMaxKKey	Aggregatecategoryrl   r[   r`  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   rb  rz  r{  r|  r}  r~  SCORErc  	from_dictr   rr  )	r   rz  r{  r|  r}  r~  group_byr  empty_group_bys	            r   test_group_by_serializationr  $  s_     C
Ota7PQH(! <="    &k3z?+SYYJ8A>H $(J)?a HI"    S_-CII;RS9TUHX--/088:h>N>N>PPPP YN!!#r)))R ((*b000 
z)@	A;XJQ3O(PQR 
B 
z)E	F6J<01 
G 
z)?	@x8*11M&NO	
 
A
 
z)E	FZ8*1)EFG 
G	F 
B	A 
G	F 
A	@
 
G	Fs0   H
H&<H74I
H#&
H47
I
Ic                   N    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rSrg)TestSearchDictSupportiZ  z%Test Search class dict input support.c                     SSK Jn  SSKJn  U" SS0S9nUR                  c   e[        UR                  U5      (       d   eU" SSS0S	S
S00/0S9nUR                  c   eg)z-Test Search accepts dict for where parameter.r   SearchWherestatusactivera  Nr  r  r  r  )"chromadb.execution.expression.planr  rb  r  _wherer   )rr   r  r  searchs       r   test_search_with_dict_where1TestSearchDictSupport.test_search_with_dict_where]  su    =@ x23}}(((&--//// v8(<wPS>U'VWX}}(((r   c                     SSK Jn  SSKJn  U" SSSS/00S9nUR                  c   e[        UR                  U5      (       d   eU" S
S0S9nUR                  c   eg	)z,Test Search accepts dict for rank parameter.r   r  RankrV  rZ   r  r  rankNrR  r  )r  r  rb  r  _rankr   )rr   r  r  r  s       r   test_search_with_dict_rank0TestSearchDictSupport.test_search_with_dict_rankk  si    =? fwc
&;<=||'''&,,---- fc]+||'''r   c                    SSK Jn  U" SSS.S9nUR                  R                  S:X  d   eUR                  R                  S:X  d   eU" SS9nUR                  R                  S:X  d   eUR                  R                  S:X  d   eg)z5Test Search accepts dict and int for limit parameter.r   r  r   r  rZ  offsetrZ  N)r  r  _limitrZ  r  rr   r  r  s      r   test_search_with_dict_limit1TestSearchDictSupport.test_search_with_dict_limity  s    = a89}}""b(((}}##q((( b!}}""b(((}}##q(((r   c                     SSK Jn  U" SSS/0S9nUR                  c   eU" SS/S9nUR                  c   eU" SS	1S9nUR                  c   eg)
z=Test Search accepts dict, list, and set for select parameter.r   r  r[   	#documentr  r;  N	#metadatarW  )r  r  _selectr  s      r   test_search_with_dict_select2TestSearchDictSupport.test_search_with_dict_select  sm    = h(?@A~~))) [9:~~))) \:;~~)))r   c                     SSK Jn  SSKJn  U" U" S5      S:H  SSSS	/00S
S/S9nUR                  c   eUR
                  c   eUR                  R                  S
:X  d   eUR                  c   eg)z2Test Search with mixed expression and dict inputs.r   r  r}  r  r  rV  rZ   r  r  r   r  rb  r  rZ  r;  N)	r  r  rb  r}  r  r  r  rZ  r  )rr   r  r}  r  s       r   test_search_mixed_inputs.TestSearchDictSupport.test_search_mixed_inputs  s    =>h-8+7S#J/0=	
 }}(((||'''}}""b(((~~)))r   c                     SSK Jn  U" 5       R                  SS05      R                  SS05      nUR                  c   eUR
                  c   eg)z)Test Search builder methods accept dicts.r   r  r  r  rR  r  N)r  r  rb  r  r  r  r  s      r   &test_search_builder_methods_with_dicts<TestSearchDictSupport.test_search_builder_methods_with_dicts  sI    =8 45::FC=I}}(((||'''r   c                    SSK nSSKJn  UR                  " [        SS9   U" SS9  SSS5        UR                  " [        SS9   U" S	S
9  SSS5        UR                  " [        SS9   U" SS9  SSS5        UR                  " [        SS9   U" SS9  SSS5        g! , (       d  f       N{= f! , (       d  f       Nh= f! , (       d  f       NU= f! , (       d  f       g= f)z(Test Search rejects invalid input types.r   Nr  zwhere must ber   r  ra  zrank must ber  r  zlimit must be10r  zselect must be{   r  )r   r  r  r   r  )rr   r   r  s      r   test_search_invalid_inputs0TestSearchDictSupport.test_search_invalid_inputs  s    =]]9O<# = ]]9N; < ]]9O< = ]]9,<=# >= =< <; =< >=s/   BB-(B>C
B*-
B;>
C
Cc                    SSK nSSKJn  SSKJnJnJn  U" S/SS/SS	.0S
.S9n[        UR                  U5      (       d   eU" U" S5      U" UR                  SS	9S
9nU" US9R                  UL d   eU" 5       R                  U5      R                  R                  c   eUR                  " [        SS9   U" SS9  SSS5        UR                  " [        SS9   U" SS/0S9  SSS5        g! , (       d  f       N6= f! , (       d  f       g= f)zATest Search accepts group_by as dict, object, and builder method.r   Nr  )rz  r{  r}  r  r  r  rl   r  r  r  zgroup_by must ber   r  r  r[   )r   r  r  rb  rz  r{  r}  r   	_group_byr  r  r  r   r  rr  )rr   r   r  rz  r{  r}  r  r  s           r   test_search_with_group_by/TestSearchDictSupport.test_search_with_group_by  s   =MM #&(!(DE
 &**G4444 J4SYYRS;TUx(22h>>>x  *44>>JJJ ]]9,>?I& @]]:-IJVj\23 KJ @?JJs   5C,
C=,
C:=
Dc           
      p   SSK Jn  SSKJnJnJnJn  U" 5       R                  U" SS/S95      R                  S5      nUR                  5       S   0 :X  d   eU" 5       R                  U" U" S	5      U" UR                  S
S9S95      nUR                  5       S   nUS   S	/:X  d   eUS   SS/S
S.0:X  d   eg)z*Test Search serializes group_by correctly.r   r  )rz  r{  r}  rN  r  r  rZ   r   r  r  rl   r  r  r[   r  r  r  N)r  r  rb  rz  r{  r}  rN  r  rZ  rc  r  r  )rr   r  rz  r{  r}  rN  r  rI  s           r   "test_search_group_by_serialization8TestSearchDictSupport.test_search_group_by_serialization  s    =RR s#s45;;B?~~
+r111 ""ZDcii14MN
 !*-f~*---k"x8*11M&NNNNr   r   N)r   r   r   r   __doc__r  r  r  r  r  r  r  r  r  r   r   r   r   r  r  Z  s3    /)()* * ("44Or   r  c                   f    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rSrg)TestWhereFromDicti  z"Test Where.from_dict() conversion.c                     SSK JnJn  UR                  SS05      n[	        X25      (       d   eUR                  SSS005      n[	        X25      (       d   eg)z Test simple equality conversion.r   )r  Eqr  r  r  N)rb  r  r  r  r   )rr   r  r  rb  s       r   test_simple_equality&TestWhereFromDict.test_simple_equality  sV    D 8 45%$$$$ E8+< =>%$$$$r   c                    SSK JnJnJnJnJnJn  UR                  SSS005      n[        Xr5      (       d   eUR                  SSS005      n[        Xs5      (       d   eUR                  SS	S005      n[        Xt5      (       d   eUR                  SS
S005      n[        Xu5      (       d   eUR                  SSS005      n[        Xv5      (       d   eg)z%Test comparison operator conversions.r   )r  NeGtGteLtLter  r  inactiver  r  r  r  r  r  r  N)	rb  r  r  r  r  r  r  r  r   )rr   r  r  r  r  r  r  rb  s           r   test_comparison_operators+TestWhereFromDict.test_comparison_operators  s    VV E:+> ?@%$$$$ 5#, 78%$$$$ 63- 89%%%%% 5#, 78%$$$$ 63- 89%%%%%r   c                     SSK JnJnJn  UR	                  SSSS/005      n[        XB5      (       d   eUR	                  SSSS	/005      n[        XC5      (       d   eg
)z%Test membership operator conversions.r   )r  InNinr  $inr  pendingz$nindeletedarchivedN)rb  r  r  r  r  r   )rr   r  r  r  rb  s        r   test_membership_operators+TestWhereFromDict.test_membership_operators  sh    II EHi3H+I JK%$$$$ FY
4K+L MN%%%%%r   c                 X   SSK JnJnJnJnJn  UR                  SSS005      n[        Xb5      (       d   eUR                  SSS005      n[        Xc5      (       d   eUR                  SSS	005      n[        Xd5      (       d   eUR                  SS
S005      n[        Xe5      (       d   eg)z!Test string operator conversions.r   )r  ContainsNotContainsRegexNotRegexr  r  rG   r  spamz$regexz^test.*z
$not_regexz\d+N)rb  r  r  r  r  r  r  r   )rr   r  r  r  r  r  rb  s          r   test_string_operators'TestWhereFromDict.test_string_operators  s    	
 	
 +w)? @A%**** /6)B CD%---- (I)> ?@%'''' ,)? @A%****r   c                 $   SSK JnJnJn  UR	                  SSS005      n[        XB5      (       d   eUR                  5       SSS00:X  d   eUR	                  SSS005      n[        XB5      (       d   eUR                  5       SSS00:X  d   eUR	                  SSS	005      n[        XB5      (       d   eUR                  5       SSS	00:X  d   eUR	                  S
SS005      n[        XB5      (       d   eUR                  5       S
SS00:X  d   eUR	                  SSS005      n[        XC5      (       d   eUR                  5       SSS00:X  d   eUR	                  SSS005      n[        XC5      (       d   eUR                  5       SSS00:X  d   eg)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)rb  r  r  r  r  r   rc  )rr   r  r  r  rb  s        r   test_array_contains_operators/TestWhereFromDict.test_array_contains_operators9  s   WW +x)@ AB%****}}6K+B"CCCC K+< =>%****}}8k2->"???? [#,> ?@%****}}9{C.@"AAAA ;*= >?%****}}7[$,?"@@@@ /7)C DE%----}}6OW+E"FFFFOQ+? @A%----}}8oq-A"BBBBr   c                 0   SSK nSSKJn  UR                  " [        SS9   UR                  SSSS	/005        SSS5        UR                  " [        S
S9   UR                  SSSS0005        SSS5        g! , (       d  f       ND= f! , (       d  f       g= f)z:Test $contains/$not_contains reject invalid operand types.r   Nr  z\$contains requiresr   r  r  rO   rk   z\$not_contains requiresr  rn  T)r   rb  r  r   r  r  rr   r   r  s      r   $test_array_contains_invalid_operands6TestWhereFromDict.test_array_contains_invalid_operandsZ  s    @]]9,BCOOVkAq6%:;< D ]]9,FGOOVo$7G%HIJ HG DC HGs   A6B6
B
Bc                    SSK JnJn  U" S5      R                  S5      U" S5      R                  S5      U" S5      R                  S5      U" S	5      R                  S
5      U" S5      R	                  S5      /nU HB  nUR                  5       nUR                  U5      nUR                  5       U:X  a  M:   SU 35       e   g)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)rb  r  r}  containsnot_containsrc  r  )rr   r  r}  casesr  drestoreds          r   test_array_contains_round_trip0TestWhereFromDict.test_array_contains_round_tripe  s    E K  *M""2&	N##C(L!!$'K$$W-
 H  "Aq)H##%*H.DQC,HH* r   c                     SSK JnJnJn  U" S5      R	                  S5      U" S5      S:  -  n[        XB5      (       d   eUR                  5       nUR                  U5      nUR                  5       U:X  d   eg)z:Test $contains combined with other operators via $and/$or.r   r  Andr}  r  r  r  r  N)rb  r  r  r}  r  r   rc  r  )rr   r  r  r}  rb  r  r  s          r    test_array_contains_in_composite2TestWhereFromDict.test_array_contains_in_compositeu  sk    JJV%%h/CK$4FG%%%%%MMO??1%!Q&&&r   c                    SSK nSSKJn  UR                  R	                  S5      nUR                  5       SSS00:X  d   eUR                  R                  S5      nUR                  5       SSS00:X  d   eS Hu  nUR                  " [        S	S
9   UR                  R	                  U5        SSS5        UR                  " [        SS
9   UR                  R                  U5        SSS5        Mw     U" S5      R	                  S5      R                  5       SSS00:X  d   eU" S5      R                  S5      R                  5       SSS00:X  d   eg! , (       d  f       N= f! , (       d  f       M  = f)z9Key.DOCUMENT.contains/not_contains must receive a string.r   Nr  rG   r  r  r  )r  r  TFz)\$contains on #document requires a stringr   z-\$not_contains on #document requires a stringr  r  r  T)	r   rb  r}  DOCUMENTr  rc  r  r   r  )rr   r   r}  expr	bad_values        r   &test_document_contains_requires_string8TestWhereFromDict.test_document_contains_requires_string  sY   > ||$$W-||~+W/E!FFFF||((1||~+/I!JJJJ 1I!M %%i0
 !Q )))4  1 8}%%b)113;PRBS7TTTT7|((.668ot,=
 
 	
 
 
 s   EE 
E	 
E/	c                     SSK JnJnJn  UR	                  SSS0SSS00/05      n[        XB5      (       d   eUR	                  S	SS0SS
0/05      n[        XC5      (       d   eg)z"Test logical operator conversions.r   )r  r  Orr  r  r  r  r  r  r  r  N)rb  r  r  r  r  r   )rr   r  r  r  rb  s        r   r  (TestWhereFromDict.test_logical_operators  s{    II x*Wucl,CDE
 %%%%% (H)=)?T(U VW%$$$$r   c                 z    SSK JnJn  UR                  SSSS0SS0/0SS	S
00/05      n[	        X25      (       d   eg)zTest nested logical operations.r   )r  r  r  r  r  r  r  r  r  r  N)rb  r  r  r  r   )rr   r  r  rb  s       r   test_nested_logical_operators/TestWhereFromDict.test_nested_logical_operators  sV    Eh1Hi3HIJvsm,
 %%%%%r   c                 f    SSK JnJn  UR                  SSSS/005      n[	        X25      (       d   eg)zTest special key handling.r   )r  r  z#idr  rF   rO  N)rb  r  r  r  r   )rr   r  r  rb  s       r   test_special_keys#TestWhereFromDict.test_special_keys  s4    D (? @A%$$$$r   c                    SSK nSSKJn  UR                  " [        SS9   UR                  S5        SSS5        UR                  " [        SS9   UR                  0 5        SSS5        UR                  " [        SS9   UR                  S	/ 05        SSS5        g! , (       d  f       No= f! , (       d  f       NQ= f! , (       d  f       g= f)
zTest invalid Where dict inputs.r   Nr  Expected dictr   
not a dictcannot be emptyzrequires at least one conditionr  )r   rb  r  r   r  r  rr  r  s      r   test_invalid_where_dicts*TestWhereFromDict.test_invalid_where_dicts  s    @]]9O<OOL) = ]]:->?OOB @ ]]:-NOOOVRL) PO =< @? POs#   BB,>B=
B),
B:=
Cr   N)r   r   r   r   r  r  r  r  r  r  r  r  r  r   r  r  r	  r  r   r   r   r   r  r    sJ    ,
%&0
&+4CB	KI '
<%&%*r   r  c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)TestRankFromDicti  z!Test Rank.from_dict() conversion.c                     SSK JnJn  UR                  SS05      n[	        X25      (       d   eUR
                  S:X  d   eg)zTest Val conversion.r   )r  rO  rR  r  N)rb  r  rO  r  r   r8  )rr   r  rO  r  s       r   test_val_conversion$TestRankFromDict.test_val_conversion  s:    D~~vsm,$$$$$zzS   r   c                 8   SSK nSSKJnJn  UR	                  SSSS/005      n[        XC5      (       d   e[        UR                  UR                  5      (       a7  UR                  " UR                  UR                  " SS/5      5      (       d   eOUR                  SS/:X  d   eUR                  S:X  d   eUR                  S	:X  d   eUR	                  SSS/S
SSS.05      nUR                  S
:X  d   eUR                  S:X  d   eUR                  (       d   eg)zTest KNN conversion.r   N)r  rN  rV  rZ   r  r  rW  rX  r     TrY  )numpyrb  r  rN  r  r   rZ   ndarrayallcloserp   rb   rZ  rP  )rr   ro   r  rN  r  s        r   test_knn_conversion$TestRankFromDict.test_knn_conversion  s   D ~~v#s'<=>$$$$$djj"**--;;tzz288S#J+?@@@@::#s+++xx<'''zzR ~~!3Z- #'		
 xx----zzS   r   c                 |   SSK JnJnJnJnJn  UR                  SSS0SS0/05      n[        Xb5      (       d   eUR                  SSS0SS0S	.05      n[        Xc5      (       d   eUR                  S
SS0SS0/05      n[        Xd5      (       d   eUR                  SSS0SS0S	.05      n[        Xe5      (       d   eg)z%Test arithmetic operator conversions.r   )r  SumSubMulDivrS  rR  r  r  z$subr  r[  rQ  r  rT  N)rb  r  r  r  r   r!  r  r   )rr   r  r  r  r   r!  r  s          r   test_arithmetic_operators*TestRankFromDict.test_arithmetic_operators  s    SS ~~v}'EFG$$$$$ ~~vQT'VWX$$$$$ ~~v}'EFG$$$$$ ~~vQT'VWX$$$$$r   c                    SSK JnJnJnJn  UR                  SSS005      n[        XR5      (       d   eUR                  SSS005      n[        XS5      (       d   eUR                  SSS	005      n[        XT5      (       d   eg
)zTest math function conversions.r   )r  AbsExpLogz$absrR  g      z$expr  z$logr  N)rb  r  r%  r&  r'  r  r   )rr   r  r%  r&  r'  r  s         r   test_math_functions$TestRankFromDict.test_math_functions  s    NN ~~v~67$$$$$ ~~v}56$$$$$ ~~v}56$$$$$r   c                     SSK JnJnJn  UR	                  SSS0SS0/05      n[        XB5      (       d   eUR	                  SSS0SS0/05      n[        XC5      (       d   eg)	zTest min/max conversions.r   )r  MaxMinz$maxrR  r  r  z$minN)rb  r  r+  r,  r  r   )rr   r  r+  r,  r  s        r   test_aggregation_functions+TestRankFromDict.test_aggregation_functions  sn    II ~~v}'EFG$$$$$ ~~v}'EFG$$$$$r   c                     SSK JnJn  UR                  SSSSSS/00S	S
0/0SS	S0S	S0/0/05      n[	        X25      (       d   eg)z%Test complex nested rank expressions.r   )r  r  rS  rQ  rV  rZ   r  r  rR  r  r  N)rb  r  r  r  r   )rr   r  r  r  s       r   test_complex_rank_expression-TestRankFromDict.test_complex_rank_expression+  sg    D~~v#s'<=}MNvsmfc];<
 $$$$$r   c                 (   SSK nSSKJn  UR                  " [        SS9   UR                  S5        SSS5        UR                  " [        SS9   UR                  0 5        SSS5        UR                  " [        SS9   UR                  S	S
S/0S.5        SSS5        UR                  " [        SS9   UR                  SS05        SSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nb= f! , (       d  f       g= f)zTest invalid Rank dict inputs.r   Nr  r  r   r  r  zexactly one operatorr  rZ   r  )rR  rV  zrequires a numberrR  znot a number)r   rb  r  r   r  r  rr  )rr   r   r  s      r   test_invalid_rank_dicts(TestRankFromDict.test_invalid_rank_dicts9  s    ?]]9O<NN<( = ]]:->?NN2 @ ]]:-CDNNC'C51ABC E ]]9,?@NNFN34 A@ =< @? ED A@s/   CC!>C23D
C!
C/2
D 
Dr   N)r   r   r   r   r  r  r  r"  r(  r-  r0  r3  r   r   r   r   r  r    s)    +! @%(% 
%%5r   r  c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)TestLimitFromDictiK  z"Test Limit.from_dict() conversion.c                 ~    SSK Jn  UR                  SS05      nUR                  S:X  d   eUR                  S:X  d   eg)zTest limit without offset.r   LimitrZ  r  Nrb  r9  r  rZ  r  rr   r9  rZ  s      r   test_limit_only!TestLimitFromDict.test_limit_onlyN  s;    @".{{b   ||q   r   c                 x    SSK Jn  UR                  SS05      nUR                  S:X  d   eUR                  b   eg)zTest offset without limit.r   r8  r  r   N)rb  r9  r  r  rZ  r;  s      r   test_offset_only"TestLimitFromDict.test_offset_onlyV  s9    @2/||r!!!{{"""r   c                     SSK Jn  UR                  SSS.5      nUR                  S:X  d   eUR                  S:X  d   eg)zTest both limit and offset.r   r8  r  r   r  Nr:  r;  s      r   test_limit_and_offset'TestLimitFromDict.test_limit_and_offset^  s<    @" ;<{{b   ||r!!!r   c                    SSK nSSKJn  UR                  " [        SS9   UR                  SS05        SSS5        UR                  " [        SS9   UR                  SS05        SSS5        UR                  " [        SS9   UR                  S	S05        SSS5        g! , (       d  f       Nq= f! , (       d  f       NQ= f! , (       d  f       g= f)
zTest Limit validation.r   Nr8  zmust be positiver   rZ  r  zmust be non-negativer  r   rb  r9  r   rr  r  rr   r   r9  s      r   test_validation!TestLimitFromDict.test_validationf  s    @ ]]:-?@OOWbM* A ]]:-?@OOWaL) A ]]:-CDOOXrN+ ED A@ A@ EDs#   BB0C
B-0
B>
Cc                    SSK nSSKJn  UR                  " [        SS9   UR                  S5        SSS5        UR                  " [        SS9   UR                  SS	05        SSS5        UR                  " [        SS9   UR                  S
S05        SSS5        g! , (       d  f       Nq= f! , (       d  f       NQ= f! , (       d  f       g= f)zTest type validation.r   Nr8  r  r   r  zmust be an integerrZ  20r  g      %@)r   rb  r9  r   r  r  rF  s      r   test_invalid_types$TestLimitFromDict.test_invalid_typesw  s    @]]9O<OOL) = ]]9,@AOOWdO, B ]]9,@AOOXt,- BA =< BA BAs#   BB. B?
B+.
B<?
Cc                     SSK nSSKJn  UR                  " [        SS9   UR                  SSS.5        SSS5        g! , (       d  f       g= f)	"Test rejection of unexpected keys.r   Nr8  Unexpected keysr   r   rb   )rZ  r  rE  rF  s      r   test_unexpected_keys&TestLimitFromDict.test_unexpected_keys  s5    @]]:->?OObU;< @??	   >
Ar   N)r   r   r   r   r  r<  r?  rB  rG  rK  rP  r   r   r   r   r6  r6  K  s#    ,!#",".=r   r6  c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)TestSelectFromDicti  z#Test Select.from_dict() conversion.c                    SSK JnJn  UR                  S/ SQ05      nUR                  UR
                  ;   d   eUR                  UR
                  ;   d   eUR                  UR
                  ;   d   eUR                  UR
                  ;   d   eg)zTest special key conversion.r   Selectr}  r[   )r  rW  r  r  N)	rb  rW  r}  r  r  r[   	EMBEDDINGMETADATAr  rr   rW  r}  r;  s       r   r	  $TestSelectFromDict.test_special_keys  sx    F!!GH
 ||v{{***}}+++||v{{***yyFKK'''r   c                     SSK JnJn  UR                  S/ SQ05      nU" S5      UR                  ;   d   eU" S5      UR                  ;   d   eU" S5      UR                  ;   d   eg)	z!Test regular metadata field keys.r   rV  r[   )titleauthordater]  r^  r_  N)rb  rW  r}  r  r[   rZ  s       r   test_metadata_keys%TestSelectFromDict.test_metadata_keys  s]    F!!6+F"GH7|v{{***8}+++6{fkk)))r   c                     SSK JnJn  UR                  S/ SQ05      nUR                  UR
                  ;   d   eU" S5      UR
                  ;   d   eUR                  UR
                  ;   d   eg)z&Test mix of special and metadata keys.r   rV  r[   )r  r]  r  r]  N)rb  rW  r}  r  r  r[   r  rZ  s       r   test_mixed_keys"TestSelectFromDict.test_mixed_keys  s]    F!!6+K"LM||v{{***7|v{{***yyFKK'''r   c                 l    SSK Jn  UR                  S/ 05      n[        UR                  5      S:X  d   eg)zTest empty keys list.r   rW  r[   N)rb  rW  r  r?   r[   )rr   rW  r;  s      r   test_empty_keys"TestSelectFromDict.test_empty_keys  s0    A!!62,/6;;1$$$r   c                    SSK nSSKJn  UR                  " [        SS9   UR                  S5        SSS5        UR                  " [        SS9   UR                  SS	05        SSS5        UR                  " [        S
S9   UR                  SS/05        SSS5        g! , (       d  f       Nr= f! , (       d  f       NR= f! , (       d  f       g= f)zTest Select validation.r   Nrf  r  r   r  zmust be a list/tuple/setr[   z
not a listzmust be a stringr  )r   rb  rW  r   r  r  rr   r   rW  s      r   rG  "TestSelectFromDict.test_validation  s    A]]9O<\* = ]]9,FGfl34 H ]]9,>?fse_- @? =< HG @?s#   BB/ C 
B,/
B= 
Cc                     SSK nSSKJn  UR                  " [        SS9   UR                  / SS.5        SSS5        g! , (       d  f       g= f)rN  r   Nrf  rO  r   rb   )r[   r  )r   rb  rW  r   rr  r  rj  s      r   rP  'TestSelectFromDict.test_unexpected_keys  s7    A]]:->?bU;< @??rR  r   N)r   r   r   r   r  r	  r`  rc  rg  rG  rP  r   r   r   r   rT  rT    s#    -
(*(%.=r   rT  c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)TestRoundTripConversioni  z9Test that to_dict() and from_dict() round-trip correctly.c                     SSK JnJnJn  U" U" S5      S:H  U" S5      S:  /5      nUR	                  5       nUR                  U5      nUR	                  5       U:X  d   eg)z!Test Where round-trip conversion.r   r  r  r  r  r  N)rb  r  r  r}  rc  r  )rr   r  r  r}  r  	dict_formr  s          r   test_where_round_trip-TestRoundTripConversion.test_where_round_trip  s\    JJH13w<#3EFG$$&	??9-!Y...r   c                    ^^	 SSK m	SSKJnJnJn  U" SS/S9S-  U" S5      S-  -   nUR                  5       nUR                  U5      nUR                  5       nUU	4S	 jmT" Xu5      (       d   eg)
z Test Rank round-trip conversion.r   N)r  rN  rO  r  r  r  r  r  c                 
  > [        U [        5      (       Ga  [        U[        5      (       a  SU ;   a  SU;   a  U S   US   p2SU;   a  SU;   a  TR                  " US   TR                  S9nTR                  " US   TR                  S9nTR                  " XE5      (       d  gU H$  nUS:w  d  M  X&   UR                  U5      :w  d  M$    g   g[        U R                  5       5      [        UR                  5       5      :w  a  gU  H  nT" X   X   5      (       a  M    g   g[        U [        5      (       aL  [        U[        5      (       a7  [        U 5      [        U5      :w  a  g[        U4S j[        X5       5       5      $ X:H  $ )NrV  rZ   dtypeFTc              3   8   >#    U  H  u  pT" X5      v   M     g 7fr   r   )rN  r:   r;   compare_dictss      r   rQ  VTestRoundTripConversion.test_rank_round_trip.<locals>.compare_dicts.<locals>.<genexpr>   s     G;41=..;s   )r   r   rp   r  r  r   r\   r[   r  r?   r@   rA   )	d1d2knn1knn2q1q2rb   ry  ro   s	          r   ry  CTestRoundTripConversion.test_rank_round_trip.<locals>.compare_dicts  s=   "d##
2t(<(<R<FbL!#FRZ$$7d?XXd7m2::FXXd7m2::F!{{222#(#'C"g~$)txx}2L', $(  $ rwwy>S^3 C("'::$  B%%*R*>*>r7c"g% G3r;GGGxr   )r  rb  r  rN  rO  rc  r  )
rr   r  rN  rO  r  rq  r  restored_dictry  ro   s
           @@r   test_rank_round_trip,TestRoundTripConversion.test_rank_round_trip  sn    IIc3Z(3.SC?$$&	>>), ((*	 > ]6666r   c                     SSK Jn  U" SSS9nUR                  5       nUR                  U5      nUR                  5       U:X  d   eg)z!Test Limit round-trip conversion.r   r8  r  r   r  N)rb  r9  rc  r  )rr   r9  r  rq  r  s        r   test_limit_round_trip-TestRoundTripConversion.test_limit_round_trip  sD    @r"-$$&	??9-!Y...r   c                     SSK JnJn  U" UR                  U" S5      UR                  1S9nUR                  5       nUR                  U5      n[        UR                  5       S   5      [        US   5      :X  d   eg)z"Test Select round-trip conversion.r   rV  r]  r[   r[   N)rb  rW  r}  r  r  rc  r  r\   )rr   rW  r}  r  rq  r  s         r   test_select_round_trip.TestRoundTripConversion.test_select_round_trip  sk    Fc'lCIIFG$$&	##I.8##%f-.#i6G2HHHHr   c           	      P  ^
^ SSK mSSKJn  SSKJnJnJnJn  U" U" S5      S:H  U" SS/S	9U" S
S9U" UR                  1S9S9nUR                  5       nU" US   (       a  US   OSUS   (       a  US   OSUS   US   S9nUR                  5       n	U
U4S jm
T
" X5      (       d   eg)z+Test Search round-trip through dict inputs.r   Nr  )r}  rN  r9  rW  r  r  r  r  r  r   r  r  r  filterr  rZ  r;  c                   > [        U [        5      (       Ga  [        U[        5      (       Ga  SU ;   Ga  SU;   a  U S   US   p2[        U[        5      (       a  [        U[        5      (       a  SU;   a  SU;   a  US   US   pTSU;   a  SU;   a  T
R                  " US   T
R                  S9nT
R                  " US   T
R                  S9nT
R                  " Xg5      (       d  gU H$  nUS:w  d  M  XH   UR                  U5      :w  d  M$    g   U  H$  nUS:w  d  M  X   UR                  U5      :w  d  M$    g   g[        U R                  5       5      [        UR                  5       5      :w  a  gU  HS  n[        X   [        5      (       a-  [        X   [        5      (       a  T	" X   X   5      (       d    gMG  X   X   :w  d  MS    g   gX:H  $ )Nr  rV  rZ   rv  FT)r   r   rp   r  r  r   r\   r[   )r{  r|  rank1rank2r}  r~  r  r  rb   compare_search_dictsro   s            r   r  LTestRoundTripConversion.test_search_round_trip.<locals>.compare_search_dicts6  s   "d##
2t(<(<R<FbL#%f:r&z5!%..:eT3J3J!U?v).vf$&$7d?%'XXd7m2::%N%'XXd7m2::%N'){{2':':+0+/C'*g~$)txxPS}:T/4 ,0 ,.C'*f}BFF3K9O/4 ,. (, rwwy>S^3 C!"'400Z5N5N3BGRWEE#(  FBG+$  xr   )
r  r  r  rb  r}  rN  r9  rW  r  rc  )rr   r  r}  rN  r9  rW  original_searchsearch_dict
new_searchnew_dictr  ro   s             @@r   test_search_round_trip.TestRoundTripConversion.test_search_round_trip  s    =RR h-8+C:&b/~.	
 &--/ +6x+@+h'd(3F(;V$g&x(	

 %%'"	 H $H::::r   c                 J   SSK Jn  SSKJnJnJn  U" U" S5      S:H  U" U" S5      /U" UR                  /SS9S	9S
9nUR                  5       nUS   S   S/:X  d   eUS   S   SS/SS.0:X  d   eU" UR                  US   5      S9nUR                  5       S   US   :X  d   eg)z%Test Search round-trip with group_by.r   r  )r}  rz  r{  r  r  r  rl   r  r  )rb  r  r  r[   r  r  r  r  N)	r  r  rb  r}  rz  r{  r  rc  r  )rr   r  r}  rz  r{  r  r  r  s           r   $test_search_round_trip_with_group_by<TestRoundTripConversion.test_search_round_trip_with_group_by\  s    =MMh-8+*o&SYYK15
 &&(:&v.:,>>>:&{3z28
 
 	
 

 7#4#4[5L#MN!*-Z1HHHHr   r   N)r   r   r   r   r  rr  r  r  r  r  r  r   r   r   r   ro  ro    s(    C/+7Z/IA;FIr   ro  )gư>)r6   N)r*   r-   sysr   rB  r   r   typingr   r   r  ro   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   r5   boolr=   rZ  rB   markparametrizerc   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-  r2  r4  r6  r<  r@  rB  rG  rI  rK  rN  rY  r]  r_  rd  rf  rh  rm  rs  rt  rw  rz  r}  r  r  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
startswithr8  rH  r]  rh  rj  r  r  r  r  r  r  r  r  r  r	  r  r  r  r   r'  r+  r5  rK  rx  r  r  r  r  r6  rT  ro  r   r   r   <module>r     s   	  
   (       (  % 
 H   7 7( 7 7&"$ "F F$ F ):(;<# =#0 ):(;<%# =%#P ):(;<+$ =+$\ ):(;<+ =+*>
,.< #$45#%<=#(#$ #$45#%<=#(/+#\?F'#+($=./b#,
9,!!%$/; #$455>uE	a 
CF::99  #$455>XsO,w	.BC /M9W #$455>uEuE (((((($4R ()>?5>  -/DE 
 )*:; '')
Z #$4502GH5>uEuE	 (,,#" 		 (uERuERweTvUS	 .5(p$(T ./5>uE	a +,EF$'N-J@$ &$)N"#<4"//!,<:(("4 .0@A uE	a	!
  #$455>eL	a
 	+)+.\-%'V'' !s||'>'>w'GH I !s||'>'>w'GH? I?;6&9RT2nO@d]&@|(~(/V8'(T$8 6F#"LG@9@G>";J"D""J*EZj3Z@#F
2HlOO OOda* a*Hx5 x5v@= @=F<= <=~eI eIr   