
    3i             
       $   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 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     P/home/james-whalen/.local/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Nzchromadb.api.segment.SegmentAPIz chromadb.db.impl.sqlite.SqliteDBz7chromadb.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_apir/   &   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_bustr3   ;   r0   r1   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;   r7   s      r   vector_approx_equalr@   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 )Nr/   testid1helloids	documentsr3   
embeddingsrH   	metadatas	distances   query_texts	n_resultsincluderG   included)	getfixturevalueresetcreate_collectionaddget_collectionquerykeysr=   set)rA   requestr.   
collectionapi2includesnnkeys           r   test_persist_index_loadingra   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rM         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kwargsr4   Nc                 &   > [         TU ]  " U0 UD6  g r   super__init__rp   rw   rx   	__class__s      r   r|   Ftest_persist_index_loading_embedding_function.<locals>.TestEF.__init__x       Gd-f-r   c                     gNrC   r   rp   s    r   nameBtest_persist_index_loading_embedding_function.<locals>.TestEF.name{       r   configc                     g r   r   rp   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__rs   r   r|   strr   dictr   r   __static_attributes____classcell__r~   s   @r   TestEFrd   t   c    	D	.# 	. 	. 	.	# 		DcN 	t 		S#X 	 	r   r   r/   rC   embedding_functionrD   rE   rF   r3   rI   rM   rN   rG   rR   )r   r   rS   rT   rU   rV   rW   rX   rY   r=   rZ   )	rA   r[   r   r.   r\   client2r^   r_   r`   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 rg   rk   ro   s      r   rs   Ltest_persist_index_get_or_create_embedding_function.<locals>.TestEF.__call__   ru   rv   rw   rx   r4   Nc                 &   > [         TU ]  " U0 UD6  g r   rz   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   r/   rC   r   rD   rE   rF   r3   rI   rM   rN   rG   rR   rJ   r   rh   rH   rL   )r   r   rS   rT   get_or_create_collectionrV   rX   rY   r=   rZ   tolist)	rA   r[   r   apir\   r]   r^   r_   r`   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	testspaceri   r   )
rS   r   rT   rU   rV   batch_recordscountrW   delete_collectionlist_collections)rA   r[   r.   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   )r.   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)r.   
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skiprT   supports_base64_encoding)r.   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   rT   pre_flight_checksr   r   )r.   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jsonrY   )r.   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rJ   rG   c                     U R                  5         U R                  S5      nUR                  " S0 [        D6  UR	                  5       S:X  d   eg r   )rT   rU   rV   r   r   r.   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NrC   Collection .* does not existmatchr   )rT   rU   r   r   raisesr   rV   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   )	rT   rU   rV   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   )rT   rU   rV   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   rJ   rH   rK   rQ   rG   ri   rR   r   )rT   rU   rV   r   r   rY   r=   rZ   )r.   r\   r^   recordsr`   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NrC   r   r   )rT   rU   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   ri   r   r   )rT   rU   rV   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   rI   r   rM   query_embeddingsrP   rQ   rG   rR   )皙?r         @ri   r   )rT   rU   rV   r   rX   rY   r=   rZ   r.   r\   r^   r_   r`   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   )	rT   rU   rV   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   ri   rG   rG   r   )rT   rU   rV   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   ri   r   rM   r  rP   r   )rT   rU   rV   r   r   rX   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)NrC   r   r   rD   r  )rT   rU   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   ri   r   )rT   rU   r   rV   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   )rT   rU   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   )rT   rU   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)NrC   r   r   test2r  )rT   rU   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  rT   rU   r   r   r   r  )r.   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"  )r.   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 )NrM   ri   )r8   r9   r   r(  r8   r9   rj   )r8   cr-  r  )rT   rU   r)  rW   r  r   r   r   )r.   
metadata_ar\   collectionss       r   test_metadata_crur0    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   ri   rI   r   rM   r  rG   rR   r   )	rT   rU   rV   r   r   rX   rY   r=   rZ   r  s        r   test_increment_index_onr2  '  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  )rT   rU   rW   r   r   r   r   r   s     r   test_add_a_collectionr4  =  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  )rT   r   r   r   rW   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  ri   rT   rU   r   r=   r.   r/  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  ri   r   r<  r=  s     r   
test_resetr@  ]  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   ri   r   rG   rR   rJ   rK   rH   r   )
rT   rU   rV   r   r   peekprintrY   r=   rZ   )r.   r\   rC  r`   s       r   	test_peekrE  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   )rT   rU   r   r   r   r   rC  r   s     r   3test_collection_peek_with_invalid_collection_throwsrG  }  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)NrC   r   r   )rO   )rT   rU   r   r   r   r   rX   r   s     r   4test_collection_query_with_invalid_collection_throwsrI    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)NrC   r   r   rD   rF   )rT   rU   r   r   r   r   updater   s     r   5test_collection_update_with_invalid_collection_throwsrL    s\    
LLN))&1J
V$	},K	Lug&: 
M	L	Ls   A((
A6rD   id2rM   onejt?	int_valuestring_valuefloat_valuerQ  ri   rJ   rG   rK   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_intrD   rM  r  rK   r   rQ  rM   rS  rO  ri   r   )rT   rU   rV   metadata_recordsr   r   r   floatr.   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 )NrV  r   rM   r  rK   r   rQ  rS  rO  r   )rT   rU   rV   rW  rX   r   r   rX  rY  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 )
NrV  rR  rN  whererK   r   rQ  rM   r   rT   rU   rV   rW  r   rY  s      r   test_metadata_get_where_stringrb    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 )
NrV  rQ  rM   r_  rK   r   rR  rN  r   ra  rY  s      r   test_metadata_get_where_intrd    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 )NrV  rS  rO  r_  rK   r   rQ  rM   rR  rN  r   ra  rY  s      r   test_metadata_get_where_floatrf    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 )NrV  rD   ri   twojt @rP  rG   rK   r  rK   r   rQ  rR  rS  r   )rT   rU   rV   rW  rK  r   rY  s      r   "test_metadata_update_get_int_floatrk    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   r6  nested5rh   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   )rT   rU   r   r   
ValueErrorrV   bad_metadata_recordsr   s     r   test_metadata_validation_addrr    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)
Nro  r)  r   rD   r6  rl  rm  rj  r   )rT   rU   rV   rW  r   r   rp  rK  r   s     r   test_metadata_validation_updateru    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_validationr`  r   r6  rl  rm  r_  )rT   rU   r   r   rp  r   r   s     r   test_where_validation_getrx    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)	Nrw  r`  r   r   r   r   r6  rl  rm  )r  r`  )rT   rU   r   r   rp  rX   r   s     r   test_where_validation_queryr{    sS    
LLN))*ABJ	z	1)GhPS_;UV 
2	1	1rs  ri  rh  )rQ  rS  rR  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_ltrQ  $ltri   r_  rK   rM   r   rT   rU   rV   operator_recordsr   r=   rY  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_lterQ  $lte       @r_  rK   ri   r   r  rY  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  rS  $gtgffffffr_  rK   ri   r   r  rY  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  rS  $gteri  r_  rK   rM   r   r  rY  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  rR  $nerh  r_  rK   rM   r   r  rY  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  rQ  r  rM   r_  rK   rS  $eqri  r   r  rY  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S0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Nu= f! , (       d  f       GNI= f! , (       d  f       GN"= f! , (       d  f       GN = f! , (       d  f       N= f! , (       d  f       g = f)Ntest_where_valid_operatorsrQ  z$invalidri   r_  r~  2rM   )r~  r  $andr  )rQ  $orr  r8   	$containsrC   firstsecondr   )rT   rU   rV   r  r   r   rp  r   r   s     r   r  r  O  sz   
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	"cK#89: 
# 
z	";01 (+ 	 	
 
#	"A 
#	" 
#	" 
#	" 
#	" 
#	"
 
#	"
 
#	" 
#	" 
#	" 
#	"sx   I,I>>J5J"-J4(K&KK*K<	L,
I;>
J
J"
J14
K
K
K'*
K9<
L

L)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   )
rT   rU   rV   r   r   r   r   bad_dimensionality_recordsr   r6  r.   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   )rT   rU   rV   r   r   r   r   rX   bad_dimensionality_queryr   r6  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$nestedri   where_documentrz  r  )r  r  textrE   $not_containsr  z$unsupporteddocr  r   )	rT   rU   rV   r  r   r   rp  r   rX   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!)rJ   rH   rG   rK   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  rK   rM   greatri   badr   r   )rT   rU   rV   contains_recordsr   r=   rY  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)rM   r   r   r  r  rM   )r  r  rP   rK   r   rz  r  ri   r  
datapointsr   )rT   rU   rV   r  rX   r=   r   r   r   r   r6  )r.   r\   rZ  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  rM   r  r  r   r   )rT   rU   rV   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   )rD   rM  id3id4r  )rQ  rR  rS  is)rQ  rS  rR  r  rj   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)rJ   rG   rK   rH   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  rQ  r  rj   rS  r~  gffffff?r  r  r_  rK   r  rR  r  r  r  ri   rM   rh  rN  r   rT   rU   rV   logical_operator_recordsr   r=   rY  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  r  r  r  rK   rM   r  r  ri   rQ  r  )r  r`  r   r  rY  s      r   %test_where_document_logical_operatorsr  \  s   
LLN))*KLJNN.-.NNg&e$
  E u[!"a'''NNg&h'
  E u[!"a'''NNg&h'
 %
  
E u[!"a'''r   rz  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rK   rH   rL   rz  rM   r  rQ   rP   rJ   rG   r   rD   rK   rQ  rR   )rJ   rH   rL   )rM   ri   r   ri   rH   rL   rM  r   )rT   rU   rV   r   rX   rZ   r.   r\   rQ   rZ  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_includerK   rH   rQ  rM   )rQ   r`  rJ   rG   r   rD   r  rR   r   r   rQ   r   	undefinedr   )
rT   rU   rV   r   r   rZ   r;   r   r   rp  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  ri   r  rH   r   r  rM   r  r   rT   rU   rV   r   rX   rY  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_idrz  rM   rT  IDr  validr   )
rT   rU   r   r   rp  rV   r   r6  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?rM   r  rL   r   r  r'        )r&  zhnsw:construction_efzhnsw:Mr   r)  r&  ipr   r  )r.   EPSr\   rZ  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   )rT   r   r   r   rU   rV   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 )Nr/   rC   r&  r  r(  rD   rE   rF   r3   rI   rM   rN   rG   rR   )
rS   rT   rU   rV   rW   r)  rX   rY   r=   rZ   )r.   r[   r\   r]   r^   r_   r`   s          r   !test_persist_index_loading_paramsr  2  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   )rT   rU   rm   randomrandastypefloat32r   rV   rl   r=   r   )r.   r\   large_recordsis       r   test_add_larger  P  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+)rT   get_versionrer   )r.   versionr  s      r   test_get_versionr  a  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_collectionrM   r   r   )rT   rU   rV   r   r=   r   r   r   s     r   r  r  l  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   rl   r=   )r   rr   docsrJ   s       r   test_default_embeddingr  w  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   coll2ri   r   rM   r  rG   )rm   r  r  r  r  r   rl   r=   rT   rU   rV   r   r   rX   )
r.   embeddings1embeddings2r  ids1ids2r  r  results1results2s
             r   test_multiple_collectionsr   ~  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_queryrG   r   r  皙?333333?zupdated documentfoobar)rG   rJ   rH   rK   rJ   rM   r   r  rH   rK   r   )rT   rU   rV   r   rK  rX   r=   r@   )r.   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   rI   r   r  r  rG   r   ri   rR   r   )rT   rU   rV   r   rX   rY   r=   rZ   )r.   r\   r^   r	  r`   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   rI   r  z<Number of requested results -1, cannot be negative, or zero.rN  r   r   )rT   rU   rV   r   r   r   	TypeErrorrX   r   r6  typerp  )r.   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@rD   rM  r  rR  )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 )NrC   rj   r  rB  rG   r   )rQ   rG   rJ   rK   rH   rM   r  ri   r  )r   Gz?gGz@rR  za new string value)rG   rJ   rK   r  r   )rT   rU   rV   initial_recordsr   upsertnew_recordsr   r@   rX   r
  )r.   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   )rT   rU   r   r   r   r   r  r  r   s     r   5test_collection_upsert_with_invalid_collection_throwsr  1  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.2rD   rM  r   	embedding)z1.1z2.3r"  rM   r  r   r   r   r   r   r   r   )rT   rU   r   r   rp  rV   r   r6  rX   rK  r  )r.   r\   invalid_recordsr  s       r   r   r   =  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   )rT   rU   rV   r   r   r   r   rK  r  r   r6  r  s      r   $test_dimensionality_exception_updater'  h  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   )rT   rU   rV   r   r   r   r   r  r  r   r6  r  s      r   $test_dimensionality_exception_upsertr+  u  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_signedr4    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)Nr0  r1  T)sslportCERTIFICATE_VERIFY_FAILED )r(   r2  r   r   r   r   _server	_settingschroma_server_http_portr   rp  r%   
HttpClient	tracebackformat_exceptionr  r6  __traceback__r'   join)r3  _portr  stack_traces       r   'test_ssl_self_signed_without_ssl_verifyrD    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  rG   rP   rQ   rG   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   rT   rU   rm   r  r  r  r  r   rl   rV   rX   r>   )r.   r\   num_vectorsdimsmall_recordsr  rG   query_embeddingr	  sublistitemall_returned_idsrL  s               @r   %test_query_id_filtering_small_datasetrY    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   rG  rG   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   rI  s     r   rM  9test_query_id_filtering_medium_dataset.<locals>.<genexpr>  rO  rP  rj   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   rI  s     r   rM  r^    s     8Zr?ZrP  rQ  )r.   r\   rR  rS  medium_recordsr  rG   rU  r	  rV  rW  rX  rr   multi_query_embeddingsmulti_results
result_setrL  s                   @r   &test_query_id_filtering_medium_datasetrd    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   indexrT  r      r  2   r  T)rg  upsertedr  #   -      rK   rG  rG   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   )rJ  rK  valid_query_idss     r   rM  .test_query_id_filtering_e2e.<locals>.<genexpr>  s     @/?_$/?rP  rj  r   rM   zError finding id)rT   rU   rm   r  r  r  r  r   rl   rV   r
  r=   r  rX   r>   	enumerater   r   r   r   r6  )r.   r\   rS  rR  rJ   r  rG   rK   ids_to_deleteids_to_upsert_existingnew_num_vectorsids_to_upsert_newupsert_embeddingsupsert_metadatasr^   rU  r	  rV  rW  rX  result_indexid_list
item_indexitem_idupserted_id
deleted_idr9  ro  s                              @r   rf  rf    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   ri   r  r        ??indicesvaluesz*Expected SparseVector indices to be a listr   
not_a_listr  r  Nz)Expected SparseVector values to be a listrM   ,indices and values must have the same lengthr   rM   ri   z%SparseVector indices must be integers)r   not_intri   r  )SparseVector indices must be non-negativer   r  ri   #SparseVector values must be numbers)r  
not_numberr  )              ?r  rh   )rM         @rj   )r   r\  i'  *   gQ	@TF2indices must be sorted in strictly ascending order)r   ri   rM   )r   rM   rM   ri   )r  r  r  皙?)r  rj   rM   )r  r  r  )chromadb.base_typesr  r   r   rp  r  s    r   test_validate_sparse_vectorr  2  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  rM   rj   r  )r  r  r  z
document 1r  )r  sparse_embeddingscorez
document 2皙?zempty sparse)r  
sparse_vecr  r   invalidrM   r  )r  r  Nzmissing indicesr  r  zLExpected metadata value to be a str, int, float, bool, SparseVector, or Noner  znegative indexr  r  r  znon-numeric valuenot_a_numberzmultiple sparse vectors)ri   rj   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   rp  listrl   rX  )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    sB   40 #9_MO"9_MO +J +J
 j!j! "2b9N n% 
H
  ,aVSE J

 "%Sz2 
\
 	,-	
 
z)T	U$ ,"?!
 
V 
z)N	O' ,aVS.DY Z
 
P * !Qc
C ?K	 '(  %./JO 
\
 	/*	
  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   ri   )r  r  r  r  r   N
duplicates)r   ri   ri   negative)r  r   ri   zindices must be non-negativemismatchri   r  regularr`   r6  )r  r   r   emptyrM   r  r  rj   r        @r  )sparse1sparse2r  r  r  )r  r  r  r  r  r
   r   r   r  r  r   r   rp  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  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  ri   r  r  r  r  r  rM   rj   r  r  r  r  test3)zdoc onezdoc twoz	doc three)rG   rJ   rK   rH   rK   r  )
r  r  r  r  r  r
   r   r   r  r  )r  r  r  
record_sets       r   ,test_sparse_vector_dict_format_in_record_setr  a  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      @r`   r8   r9   r-  )r  r  ffffff?)documentr  r)  )rG   rH   rJ   rK   scoresselectrM   rj   rK  rD   r  r  r#  r)  r  r  a1a2)b1b2b3doc_a1doc_a2)doc_b1doc_b2doc_b3Nxri   r  r  )rK  r  r)  r  r  r  )rK  r  r#  r  r  r  r  r  r  r  )Nr  N)r  Nr  )r  r)  r  )rK  r)  r  rM  r  )rK  r  r  rC   ztest docTr  r  r  r>   )rG   rH   rK   rJ   r  r  rG   rH   rK      z%All SearchResult.rows() tests passed!)r  r  rowsr=   r   rD  )r  resultr  rows       r   test_search_result_rowsr    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)rX   return_rankr  r  r  )rX   r`   r  $mul$valr  $sum$divr  <   $knn
#embedding   rX   r`   limitr  leftrightr  r   )ranksweightskr  rM   rj   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  r
  r  zSum of weights must be positiver  )r  r  r
  zAll RRF tests passed!)
r   &chromadb.execution.expression.operatorr  r  r  to_dictr=   r   rp  rD  )r   r  r  r  rrfr  expectedrrf_weightedresult_weightedexpected_weighted	rrf_threeresult_threetermsrrf_badrrf_negative	rrf_empty	rrf_neg_k
rrf_zero_krrf_normalizedresult_normalizedexpected_normalizedrrf_normalize_defaultsresult_defaultsexpected_defaultsrrf_zero_weightss                            r   test_rrf_to_dictr!  ;	  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                   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)TestSearchDictSupporti
  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activer_  Nr  r  r  r  )"chromadb.execution.expression.planr&  r  r(  _wherer   )rp   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%  Rankr  rX   r  r  rankNr  r  )r+  r&  r  r2  _rankr   )rp   r&  r2  r-  s       r   test_search_with_dict_rank0TestSearchDictSupport.test_search_with_dict_rank
  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  r  offsetr  N)r+  r&  _limitr  r:  rp   r&  r-  s      r   test_search_with_dict_limit1TestSearchDictSupport.test_search_with_dict_limit
  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%  rY   	#document#scorer  N	#metadatar   )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%  )Keyr)  r*  r  rX   r  r  r   rA  r`  r4  r  r  N)	r+  r&  r  rI  r,  r5  r<  r  rE  )rp   r&  rI  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*  r  r  N)r+  r&  r`  r4  r,  r5  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  r_  zrank must ber  r3  zlimit must be10r;  zselect must be{   rC  )r   r+  r&  r   r  )rp   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r   N)r   r   r   r   __doc__r.  r6  r>  rF  rK  rN  rS  r   r   r   r   r#  r#  
  s(    /)()* * (r   r#  c                   H    \ 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)r  r(  rY  	from_dictr   )rp   r(  rY  r`  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)	r  r(  r^  r_  r`  ra  rb  rZ  r   )rp   r(  r^  r_  r`  ra  rb  r`  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)r  r(  rg  rh  rZ  r   )rp   r(  rg  rh  r`  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  rE   r  spamz$regexz^test.*z
$not_regexz\d+N)r  r(  rp  rq  rr  rs  rZ  r   )rp   r(  rp  rq  rr  rs  r`  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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(  AndOrr  r)  r*  r  r  r  r  rj  N)r  r(  rx  ry  rZ  r   )rp   r(  rx  ry  r`  s        r   r  (TestWhereFromDict.test_logical_operators3  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(  rx  r  r  r)  r*  rj  r  r  r  N)r  r(  rx  rZ  r   )rp   r(  rx  r`  s       r   test_nested_logical_operators/TestWhereFromDict.test_nested_logical_operatorsA  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(  rg  z#idri  rD   rM  N)r  r(  rg  rZ  r   )rp   r(  rg  r`  s       r   test_special_keys#TestWhereFromDict.test_special_keysO  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   r  r(  r   r  rZ  rp  )rp   r   r(  s      r   test_invalid_where_dicts*TestWhereFromDict.test_invalid_where_dictsW  s    @]]9O<OOL) = ]]:->?OOB @ ]]:-NOOOVRL) PO =< @? POs#   BB,>B=
B),
B:=
Cr   N)r   r   r   r   rU  r[  rd  rm  ru  r  r|  r  r  r   r   r   r   rW  rW  
  s-    ,
%&0
&+4%&%*r   rW  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)TestRankFromDictif  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   )r2  r  r  r  N)r  r2  r  rZ  r   r6  )rp   r2  r  r4  s       r   test_val_conversion$TestRankFromDict.test_val_conversioni  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)r2  r  r  rX   r  r  r   r  r     Tr  )numpyr  r2  r  rZ  r   rX   ndarrayallclosern   r`   r  r  )rp   rm   r2  r  r4  s        r   test_knn_conversion$TestRankFromDict.test_knn_conversionq  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   )r2  SumSubMulDivr  r  r  r  z$subr  r  r  r  r  N)r  r2  r  r  r  r  rZ  r   )rp   r2  r  r  r  r  r4  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   )r2  AbsExpLogz$absr  g      z$expr  z$logr  N)r  r2  r  r  r  rZ  r   )rp   r2  r  r  r  r4  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   )r2  MaxMinz$maxr  r  r  z$minN)r  r2  r  r  rZ  r   )rp   r2  r  r  r4  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   )r2  r  r  r  r  rX   r  r  r  r  r  N)r  r2  r  rZ  r   )rp   r2  r  r4  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   Nr1  r  r   r  r  zexactly one operatorr  rX   r  )r  r  zrequires a numberr  znot a number)r   r  r2  r   r  rZ  rp  )rp   r   r2  s      r   test_invalid_rank_dicts(TestRankFromDict.test_invalid_rank_dicts  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   rU  r  r  r  r  r  r  r  r   r   r   r   r  r  f  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
)TestLimitFromDicti  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   Limitr  r  Nr  r  rZ  r  r:  rp   r  r  s      r   test_limit_only!TestLimitFromDict.test_limit_only  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   r  r:  r   N)r  r  rZ  r:  r  r  s      r   test_offset_only"TestLimitFromDict.test_offset_only  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   r  r  r   r9  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   Nr  zmust be positiver   r  r  zmust be non-negativer:  r   r  r  r   rp  rZ  rp   r   r  s      r   test_validation!TestLimitFromDict.test_validation  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   Nr  r  r   r  zmust be an integerr  20r:  g      %@)r   r  r  r   r  rZ  r  s      r   test_invalid_types$TestLimitFromDict.test_invalid_types  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   Nr  Unexpected keysr   r   r`   )r  r  r  r  s      r   test_unexpected_keys&TestLimitFromDict.test_unexpected_keys  s5    @]]:->?OObU;< @??	   >
Ar   N)r   r   r   r   rU  r  r  r  r  r  r  r   r   r   r   r  r    s#    ,!#",".=r   r  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   SelectrI  rY   )rA  r   rD  rB  N)	r  r  rI  rZ  DOCUMENTrY   	EMBEDDINGMETADATASCORErp   r  rI  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   r  rY   )titleauthordater  r  r  N)r  r  rI  rZ  rY   r  s       r   test_metadata_keys%TestSelectFromDict.test_metadata_keys3  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   r  rY   )rA  r  rB  r  N)r  r  rI  rZ  r  rY   r  r  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   r  rY   N)r  r  rZ  r=   rY   )rp   r  r  s      r   test_empty_keys"TestSelectFromDict.test_empty_keysE  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   Nr  r  r   r  zmust be a list/tuple/setrY   z
not a listzmust be a stringrR  )r   r  r  r   r  rZ  rp   r   r  s      r   r  "TestSelectFromDict.test_validationL  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)r  r   Nr  r  r   r`   )rY   r  )r   r  r  r   rp  rZ  r  s      r   r  'TestSelectFromDict.test_unexpected_keysZ  s7    A]]:->?bU;< @??r  r   N)r   r   r   r   rU  r  r  r  r  r  r  r   r   r   r   r  r  $  s#    -
(*(%.=r   r  c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
TestRoundTripConversionic  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(  rx  rI  r)  r*  r  r  N)r  r(  rx  rI  r  rZ  )rp   r(  rx  rI  original	dict_formrestoreds          r   test_where_round_trip-TestRoundTripConversion.test_where_round_tripf  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)r2  r  r  r  r  rX   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  $ )Nr  rX   dtypeFTc              3   8   >#    U  H  u  pT" X5      v   M     g 7fr   r   )rJ  r8   r9   compare_dictss      r   rM  VTestRoundTripConversion.test_rank_round_trip.<locals>.compare_dicts.<locals>.<genexpr>  s     G;41=..;s   )r   r   rn   r  r  r   rZ   rY   r  r=   r>   r?   )	d1d2knn1knn2q1q2r`   r  rm   s	          r   r  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  r  r2  r  r  r  rZ  )
rp   r2  r  r  r  r  r  restored_dictr  rm   s
           @@r   test_rank_round_trip,TestRoundTripConversion.test_rank_round_tripo  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   r  r  r   r9  N)r  r  r  rZ  )rp   r  r  r  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   r  r  rY   rY   N)r  r  rI  r  r  r  rZ  rZ   )rp   r  rI  r  r  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%  )rI  r  r  r  r)  r*  r  r  r  r   r;  r  rJ  filterr4  r  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  $ )Nr4  r  rX   r  FT)r   r   rn   r  r  r   rZ   rY   )r  r  rank1rank2r  r  r  r  r`   compare_search_dictsrm   s            r   r  LTestRoundTripConversion.test_search_round_trip.<locals>.compare_search_dicts  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&  r  rI  r  r  r  r  r  )rp   r&  rI  r  r  r  original_searchsearch_dict
new_searchnew_dictr  rm   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   r   N)r   r   r   r   rU  r  r  r  r  r  r   r   r   r   r  r  c  s!    C/+7Z/IA;r   r  )gư>)r4   N)r(   r+   sysr   r>  r   r   typingr   r   r  rm   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   r/   r3   boolr;   rX  r@   markparametrizera   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r   r$  r+  r0  r2  r4  r:  r>  r@  rE  rG  rI  rL  rW  r[  r]  rb  rd  rf  rk  rq  rr  ru  rx  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
startswithr4  rD  rY  rd  rf  r  r  r  r  r  r!  r#  rW  r  r  r  r  r   r   r   <module>r#     sD   	  
   (       (  % 
 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 ((((((,
b ()>?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[&||(~*EZj3Z@#H
d dN}* }*@x5 x5v@= @=F<= <=~M; M;r   