
    3ii                       S SK JrJr  S SKJrJrJrJrJrJ	r	J
r
JrJrJrJrJr  S SKJr  S SKJrJrJrJrJr  S SKJrJr  S SKJrJr  S SKJr  S SK J!r!  S S	K"J#r#J$r$  S S
K%J&r&J'r'  S SK(Jr)  S SK*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2  S SK3J4r4  S SK5r6S SK7r7\ " S S\\.\8      5      5       r9\ " S S\\.\8      5      5       r:    SQS jr;\ " S S\\.\8      5      5       r<  SRSSS\0\   S\0\\+      S\1\\4   4S jjr=S\+S\.\+   4S jr>    SQS jr?    SQS jr@    SQS jrA\7R                  R                  \(       + \S 9    SQS! j5       rD\7R                  R                  \\S 9    SQS" j5       rE    SQS# jrF    SQS$ jrG\7R                  R                  \\S 9    SQS% j5       rH\7R                  R                  \\S 9    SQS& j5       rI\7R                  R                  \\S 9    SQS' j5       rJ    SQS( jrK    SQS) jrL\7R                  R                  \\S 9    SQS* j5       rM    SQS+ jrN    SQS, jrO\" 5       \7R                  R                  \\S 9    SQS- j5       5       rP\7R                  R                  \\S 9    SQS. j5       rQ    SQS/ jrR\7R                  R                  \\S 9    SQS0 j5       rS\7R                  R                  \\S 9    SQS1 j5       rT\7R                  R                  \\S 9    SQS2 j5       rU\7R                  R                  \\S 9    SQS3 j5       rV\7R                  R                  \\S 9    SQS4 j5       rW\7R                  R                  \\S 9    SQS5 j5       rX\7R                  R                  \\S 9    SQS6 j5       rY\7R                  R                  \\S 9    SQS7 j5       rZ\7R                  R                  \\S 9    SQS8 j5       r[\7R                  R                  \\S 9    SQS9 j5       r\\7R                  R                  \\S 9    SQS: j5       r]\7R                  R                  \\S 9    SQS; j5       r^    SQS< jr_    SQS= jr`    SQS> jra    SQS? jrb\7R                  R                  \\S 9    SQS@ j5       rc\7R                  R                  \\S 9    SQSA j5       rd\7R                  R                  \\S 9    SQSB j5       re\7R                  R                  \\S 9    SQSC j5       rfSSSD jrgSSSE jrhSSSF jri\7R                  R                  \\S 9    SQSG j5       rj\7R                  R                  \\S 9    SQSH j5       rk\7R                  R                  \\S 9SI\SS4SJ j5       rl\7R                  R                  \(       + SKS 9SI\SS4SL j5       rm\7R                  R                  \\S 9SI\SS4SM j5       rn\7R                  R                  \\S 9SI\SS4SN j5       ro\7R                  R                  \\S 9SI\SS4SO j5       rpSSSP jrqg)T    )	ClientAPI	ServerAPI)SchemaSparseVectorIndexConfigSparseEmbeddingFunctionSparseVectorStringInvertedIndexConfigIntInvertedIndexConfigFloatInvertedIndexConfigBoolInvertedIndexConfigVectorIndexConfigSpannIndexConfigEmbeddingFunction
Embeddings)Key)ClientFactoriesis_spann_disabled_modeskip_if_not_clusterskip_reason_spann_disabledskip_reason_spann_enabled)get_collection_versionwait_for_version_increase)register_embedding_function"register_sparse_embedding_function)
Collection)CollectionCommon)InvalidArgumentErrorInternalError)KnnSearch)AnyCallableDictListMappingOptionalTuplecast)uuid4Nc                       \ rS rSrSrSS\4S jjrS\\   S\	4S jr
\S\4S j5       rS\\\4   4S	 jr\S
\\\4   SS 4S j5       rS\4S jrSrg)SimpleEmbeddingFunction+   zJSimple embedding function with stable configuration for persistence tests.dimc                     Xl         g N_dim)selfr-   s     [/home/james-whalen/.local/lib/python3.13/site-packages/chromadb/test/api/test_schema_e2e.py__init__ SimpleEmbeddingFunction.__init__/   s    	    inputreturnc                     [        U R                  5       Vs/ s H  n[        U5      PM     nn[        [        U Vs/ s H  oCPM     sn5      $ s  snf s  snf r/   )ranger1   floatr(   r   )r2   r7   ivector_s        r3   __call__ SimpleEmbeddingFunction.__call__2   sI    $)$))$45$4q%($45J 7A 788 6 7s
   AA
c                      g)N	simple_ef rC   r6   r3   nameSimpleEmbeddingFunction.name6   s    r6   c                     SU R                   0$ )Nr-   r0   r2   s    r3   
get_config"SimpleEmbeddingFunction.get_config:   s    tyy!!r6   configc                     [        U S   S9$ )Nr-   r-   )r+   rJ   s    r3   build_from_config)SimpleEmbeddingFunction.build_from_config=   s    &6%=99r6   c                     g)NcosinerC   rG   s    r3   default_space%SimpleEmbeddingFunction.default_spaceA   s    r6   r0   N)   )__name__
__module____qualname____firstlineno____doc__intr4   r$   strr   r?   staticmethodrD   r#   r!   rH   rN   rR   __static_attributes__rC   r6   r3   r+   r+   +   s    TC 9d3i 9J 9 #  "DcN " :$sCx. :5N : :s r6   r+   c                       \ rS rSrSrSS\SS4S jjrS\\   S\4S jr	S\\   S\4S	 jr
\S\4S
 j5       rS\\\4   4S jr\S\\\4   SS 4S j5       rSrg) RecordingSearchEmbeddingFunctionE   zBEmbedding function that records inputs for search embedding tests.labelr8   Nc                 ,    Xl         / U l        / U l        g r/   _labelcall_inputsquery_inputsr2   ra   s     r3   r4   )RecordingSearchEmbeddingFunction.__init__I   s    ,.-/r6   r7   c           	          U R                   R                  [        U5      5        U Vs/ s H.  n[        [	        U5      5      [        [	        U5      5      S-   /PM0     nn[        [        U5      $ s  snf )Ng      ?)re   appendlistr;   lenr(   r   r2   r7   textvectorss       r3   r?   )RecordingSearchEmbeddingFunction.__call__N   s]    U,JOP%$E#d)$eCI&6&<=%PJ(( Q   5A0c           	          U R                   R                  [        U5      5        U Vs/ s H.  n[        [	        U5      5      [        [	        U5      5      S-   /PM0     nn[        [        U5      $ s  snf )Ng      ?)rf   rj   rk   r;   rl   r(   r   rm   s       r3   embed_query,RecordingSearchEmbeddingFunction.embed_queryS   s]      e-JOP%$E#d)$eCI&6&<=%PJ(( Qrq   c                      g)Nrecording_search_efrC   rC   r6   r3   rD   %RecordingSearchEmbeddingFunction.nameX   s    $r6   c                     SU R                   0$ Nra   rd   rG   s    r3   rH   +RecordingSearchEmbeddingFunction.get_config\       %%r6   rJ   c                 8    [        U R                  SS5      5      $ )Nra   default)r_   getrM   s    r3   rN   2RecordingSearchEmbeddingFunction.build_from_config_   s    /

7I0NOOr6   rc   )r~   )rU   rV   rW   rX   rY   r[   r4   r$   r   r?   rs   r\   rD   r#   r!   rH   rN   r]   rC   r6   r3   r_   r_   E   s    L0c 0$ 0
)d3i )J )
)c )z )
 %# % %&DcN & P$sCx. P5W P Pr6   r_   client_factoriesr   r8   c                 :
   U R                  5       nUR                  5         S[        5       R                   3n[	        5       n[        SS9nUR                  [        SU[        SSSSS	9S
9S9  UR                  UUS9nUR                  nUc   e[        UR                  5       5        UR                  S   R                  nUc   eUR                  nUc   eUR                   SL d   eUR"                  c   eUR"                  R$                  c   eUR"                  R$                  S:X  d   e[&        (       dx  UR"                  R(                  c   eUR"                  R(                  n	U	R*                  S:X  d   eU	R,                  S:X  d   eU	R.                  S:X  d   eU	R0                  S:X  d   eOUR"                  R(                  b   eUR"                  R2                  c   eUR"                  R2                  n
U
R.                  S:X  d   eU
R4                  S:X  d   eU
R0                  S:X  d   eU
R6                  S:X  d   eUR"                  R8                  nUc   eUR;                  5       S:X  d   eUR=                  5       SS0:X  d   eUR                  5       n[&        (       d+  US   S   S   S   S   S   nUS   S:X  d   eUS   S:X  d   eO5US   S   S   S   S   S   nUS   S:X  d   eUS   S:X  d   eUS   S:X  d   eU R                  5       nUR?                  US9nUR                  nUc   eUR                  S   R                  nUc   eUR                  nUc   eUR"                  c   eUR"                  R$                  c   eUR"                  R$                  S:X  d   e[&        (       df  UR"                  R(                  c   eUR"                  R(                  R*                  S:X  d   eUR"                  R(                  R,                  S:X  d   eOUR"                  R2                  c   eUR"                  R2                  R.                  S:X  d   eUR"                  R2                  R4                  S:X  d   eUR"                  R2                  R0                  S:X  d   eUR"                  R2                  R6                  S:X  d   eUR@                  nUc   eURC                  S 5      nUc   eUR;                  5       S:X  d   eUR=                  5       SS0:X  d   eg)!zEEnsure schema-provided SPANN settings persist across client restarts.schema_spann_   rL   rQ          x      )search_nprobewrite_nprobeef_constructionmax_neighbors)spaceembedding_functionspannrM   rD   schemaN
#embeddingTd   g333333?rB   r-   keys
float_listvector_indexrJ   r   r   r   hnswr   	ef_searchr   rD   r   )"create_client_from_systemresetr)   hexr   r+   create_indexr   r   get_or_create_collectionr   printserialize_to_jsonr   r   r   enabledrJ   r   r   r   r   r   r   r   r   r   resize_factorr   rD   rH   get_collectionconfigurationr   )r   clientcollection_namer   r   
collectionpersisted_schemaembedding_overrider   spann_confighnsw_configefpersisted_json
spann_json	hnsw_jsonclient_reloadedreloaded_collectionreloaded_schemareloaded_embedding_overridereloaded_vector_indexrJ   	config_efs                         r3   %test_schema_vector_config_persistencer   d   s   
 779F
LLN%egkk]3OXF0Q7
 1"  # 		
   00 1 J
 "(('''	

,
,
./)..|<GG)))%22L###4'''***$$000$$000!!""((444#**00))R///((B...++s222))R///""((000""''333"))..**c111$$+++((B...((C///				/	/B>>779###==?uaj(((%779N!!#F+L9,GW


 /*b000.)R///"6*<8F~V

	 *+s222%,,,)R///&@@BO)88 9  *00O&&&"1"6"6|"D"O"O&2227DD ,,, ''333 ''--999 ''--999!!$++11===$++11??2EEE$++11>>"DDD$++00<<<$++00@@CGGG$++00::cAAA$++00>>"DDD$++00>>#EEE ..F

/0I   >>{***!eQZ///r6   c                       \ rS rSrSrSS\4S jjrS\\   S\\   4S jr	\
S\4S j5       rS\\\4   4S	 jr\
S
\\\4   SS 4S j5       rSrg)$DeterministicSparseEmbeddingFunction   zCSparse embedding function that emits predictable token/value pairs.ra   c                     Xl         g r/   rz   rg   s     r3   r4   -DeterministicSparseEmbeddingFunction.__init__   s    r6   r7   r8   c                     [        U5       VVs/ s H&  u  p#[        U/[        [        U5      U-   5      /S9PM(     snn$ s  snnf )Nindicesvalues)	enumerater   r;   rl   )r2   r7   idxrn   s       r3   r?   -DeterministicSparseEmbeddingFunction.__call__   sI     'u-
-	 #c$i#o0F/GH-
 	
 
s   -A c                      g)N
det_sparserC   rC   r6   r3   rD   )DeterministicSparseEmbeddingFunction.name   s    r6   c                     SU R                   0$ ry   rz   rG   s    r3   rH   /DeterministicSparseEmbeddingFunction.get_config   r|   r6   rJ   c                 8    [        U R                  SS5      5      $ )Nra   r   )r   r   rM   s    r3   rN   6DeterministicSparseEmbeddingFunction.build_from_config   s     4FJJw4UVVr6   rz   N)r   )rU   rV   rW   rX   rY   r[   r4   r$   r   r?   r\   rD   r#   r!   rH   rN   r]   rC   r6   r3   r   r      s    Mc 
d3i 
D,> 
 #  &DcN & WS#XW	/W Wr6   r   r   r   c                     U R                  5       nUR                  5         S[        5       R                   3nUb  UR	                  UUS9nXS4$ Ub  UR	                  UUS9nXS4$ UR	                  US9nXS4$ )zKProvision a new temporary collection and return it with the backing client.schema_e2e_r   rD   r   r   )r   r   r)   r   r   )r   r   r   r   r   r   s         r3   _create_isolated_collectionr      s     779F
LLN#EGKK=1O44  5 

  )88$#5 9 J 	  88$ 9 J r6   rankc                    U c  / $ [        U [        5      (       a  U R                  /$ / n[        U SS 5      nUb  UR	                  [        U5      5        [        U SS 5      nUb  UR	                  [        U5      5        [        U SS 5      nUb  UR	                  [        U5      5        [        U SS 5      nU(       a#  U H  nUR	                  [        U5      5        M     U$ )Nr   leftrightranks)
isinstancer   querygetattrextend_collect_knn_queries)r   queries
child_rank	left_rank
right_rankr   childs          r3   r   r     s    |	$

|Gvt,J+J78fd+I+I67w-J+J78D'4(EENN/67  Nr6   c                    [        U 5      u  pUR                  nUc   eUR                  c   eUR                  R                  c   eUR                  R                  R                  nUc   eUR
                  SL d   eUR                  R                  c   eUR                  R                  R                  nUc   eUR
                  SL d   eUR                  R                  c   eUR                  R                  R                  nUc   eUR
                  SL d   eUR                  R                  c   eUR                  R                  R                  nUc   eUR
                  SL d   eUR                  S   R                  nUc   eUR                  n	U	c   eU	R
                  SL d   eUR                  S   R                  n
U
c   eU
R                  nUc   eUR
                  SL d   e/ SQn/ SQnSSS	SS
.SSSSS
.SSSSS
./nUR!                  XUS9  UR#                  SS0S9n[%        US   5      S1:X  d   eUR#                  SS0S9n[%        US   5      S1:X  d   eUR#                  SS0S9n[%        US   5      S1:X  d   eUR'                  S/SSS./S9  UR#                  SS0S9n[%        US   5      S1:X  d   eUR)                  S/S/SSS./S9  UR#                  S/S /S!9nUS    c   e[+        US    5      S":X  d   eUR-                  UR.                  5      nUR                  c   e[0        (       d/  UR                  R3                  5       UR3                  5       :X  d   egg)#zKValidate default schema indexes support filtering, updates, and embeddings.NT	#documentr   )doc-1doc-2doc-3)alphabetagammanews   g      #@)categoryratingprice	is_activescience   g      @F   g      @ids	documents	metadatasr   wherer   r   r   r   r   r   r   updates)r   r   r   r   zbeta-updated)r   r   
embeddingsr   include   )r   r   defaultsstringstring_inverted_indexr   	int_valueint_inverted_indexfloat_valuefloat_inverted_indexbooleanbool_inverted_indexr   	fts_indexr   r   addr   setupdateupsertrl   r   rD   r   r   )r   r   r   r   string_index	int_indexfloat_index
bool_indexdocument_overrider  r   r   r   r   r   filterednumeric_filterbool_filterrating_after_updateembeddings_payloadreloadeds                        r3   .test_schema_defaults_enable_indexed_operationsr  *  s    55EFJF??&&&??!!---??))??L###4'''??$$000))<<I   $$$??&&222//--BBK"""$&&&??""...((<<J!!!%%%K077(((!++I   $$$\2==)))%22L###4'''
%C*Iq3TJ!cNq3TJ*I NNs9NE~~Z$;~<HxG9,,,^^8Q-^8N~e$%'222..U';.<K{5!"wi///7)1)0T/UV$..!}.="5)*wi777I!" i89   $WI~Nl+777!,/0A555 $$Z__5H??&&&!!002f6N6N6PPPP "r6   c                    [        5       nUR                  S[        5       S9  UR                  S[        5       S9  [	        U US9u  p#UR
                  c   eUR
                  R                  5       nSUS   ;   d   eSUS   ;   d   eUR                  UR                  S9nUR
                  c   eUR
                  R                  5       U:X  d   eUR                  UR                  S9nUR
                  c   eUR
                  R                  5       U:X  d   eUR                  S/S	/S
SS./S9  UR                  SS
0S9n[        US   5      S1:X  d   eg)zIEnsure repeated collection lookups reuse the persisted schema definition.
custom_tagkeyrJ   
importancer   Nr   r   zschema-preservedocr   
   )r  r  r   r   r   )r   r   r	   r
   r   r   r   r   rD   r   r  r   r  )r   base_schemar   r   initial_schema_jsonsecond_referencefetchedstoreds           r3   5test_get_or_create_and_get_collection_preserve_schemar!  x  s    (K(*   %'  
 5J
 ((($++==?.v6666.v666666JOO6L""...""446:MMMM###9G>>%%%>>++-1DDDD'")<=   [[g6[7Fve}"3!4444r6   c                 *   [        5       nUR                  S[        5       S9  [        U US9u  p#UR                  c   eSUR                  R
                  ;   d   eUR                  UR                  S9  UR                  UR                  S9nUR                  c   eUR                  R                  5       n[        5       R                  5       nSUS   ;  d   e[        US   R                  5       5      [        US   R                  5       5      :X  d   eg)zHDeleting and recreating a collection should drop prior schema overrides.transient_keyr  r  Nr   r   )r   r   r	   r   r   r   delete_collectionrD   create_collectionr   r  )r   r   r   r   	recreatedrecreated_jsonbaseline_jsons          r3   2test_delete_collection_resets_schema_configurationr)    s    XF
(*  
 5J
 (((j//44444
*//2((joo(>I'''%%779NH..0M."8888~f%**,-]65J5O5O5Q1RRRRr6   )reasonc                     [        5       nUR                  S[        5       S9  [        R                  " [
        SS9   [        XS9  SSS5        g! , (       d  f       g= f)z<Sparse vector configs are not allowed to be created locally.sparse_metadatar  z.Sparse vector indexing is not enabled in localmatchr  N)r   r   r   pytestraisesr   r   )r   r   s     r3   &test_sparse_vector_not_allowed_locallyr1    sP    
 XF
-6M6OP	M
 	$$4D
 
 
s   
A
Ac                 d   [        SS9n[        5       nUR                  S[        SUS9S9  UR                  S[	        5       S9  UR                  S[	        5       S9  [        XS	9u  p4UR                  c   eSUR                  R                  ;   d   eSUR                  R                  ;   d   eSUR                  R                  ;   d   eUR                  S/S/SSSS./S9  UR                  S/S/S9nUS   c   eUS   S   nUc   eUS   S:X  d   eUS   S:X  d   eUS   S:X  d   eSU;   d   e[        [        US   5      nXq" S/5      S   :X  d   eUR                  [        5       R                  [        S[        [         U5      S95      5      n[#        US   5      S:X  d   eSUS   S   ;   d   e[$        R&                  " [(        5         UR                  R                  S[        SS9S9  S
S
S
5        UR                  SS0S9n	[+        U	S   5      S1:X  d   eg
! , (       d  f       N5= f)zNSparse vector configs honor source key embedding and single-index enforcement.zsource-testra   r,  raw_text
source_keyr   r  tag_atag_br  Nzsparse-1zsource documentorangescitrusfruit)r4  r7  r8  r   r   r   r   r  r   r   r   another_sparser6  r   )r   r   r   r   r	   r   r   r   r  r   r(   r   searchr    r   r   r!   rl   r/  r0  
ValueErrorr  )
r   	sparse_efr   r   r>   r   metadatasparse_payloadsearch_resultstring_filters
             r3   3test_sparse_vector_source_key_and_index_constraintsrF    s   
 5=IIXF
&!(
   G,E,GH
G,E,GH/0@PMJ(((
 1 1 6 6666j'',,,,,j'',,,,,NNL$% )HwOP   ^^{m^DF+***k"1%HG(((G'''J9,,,(((,1B(CDNY	{3A6666%%c/tC7PQRM }U#$)))u-a0000	z	"&& *jA 	' 	
 
# NN'7);N<M}U#$444 
#	"s   "H!!
H/c           	         [        5       nUR                  S[        5       S9  UR                  S[        5       S9  UR                  S[	        5       S9  UR                  S[        5       S9  [        U US9u  p#UR                  S/S/S	S
SSS./S9  UR                  c   eUR                  R                  5       nU R                  5       nUR                  UR                  S9nUR                  c   e[        (       d   UR                  R                  5       U:X  d   eUR                  SS	0S9n[        US   5      S1:X  d   eg)z<Custom schema overrides persist across new client instances.titler  published_yearscoreis_featuredr  z	persist-1zpersistent doczSchema Persistencei  g      @T)rH  rI  rJ  rK  r   Nr   r   r   )r   r   r	   r
   r   r   r   r  r   r   r   r   rD   r   r   r  )r   r   r   r   expected_schema_jsonreloaded_clientr   r  s           r3   -test_schema_persistence_with_custom_overridesrN    sh    XF
G,E,GH
,5K5MN
G,D,FG
M2I2KL4J
 NNM#$ ."&#	
   (((%,,>>@&@@BO)88joo8N%%111!!"));;=AUUUU!%%W6J,K%LGwu~;-///r6   c                 |   [        SS9n[        5       R                  [        US9S9n[	        U US9u  p4UR                  S/5      nUc   e[        R                  " US   / S	Q5      (       d   e[        S
S9n[	        U US9u  ptUR                  S/5      nUc   e[        R                  " US   / SQ5      (       d   eg)zE_embed should respect schema-provided and direct embedding functions.r   rL   r   rM   r  zschema documentNr                 ?       @      @g      @r   zdirect document)rR  rS  rT  )r+   r   r   r   r   _embednpallclose)	r   schema_emb_fnr   schema_collectionr>   schema_embeddingsdirect_emb_fndirect_collectiondirect_embeddingss	            r3   Btest_collection_embed_uses_schema_or_collection_embedding_functionr_  .  s    
 ,2MX"" MB # F 7
 *002C1DE(((;;(+-FGGGG+2M6(
 *002C1DE(((;;(+_====r6   c                    [        SS9n[        XS9u  p#[        5       R                  [	        SS95      n[        UR                  5        UR                  U5      nUR                  S//:X  d   eUR                  (       a   e[        UR                  [        5      (       d   eUR                  R                  S:X  d   eUR                  n[        U[        5      (       d   eUR                  SS/:X  d   eg)	Q_embed_search_string_queries should embed string KNN queries using collection EF.primaryr3  rP  hello worldr         &@g      )@N)r_   r   r    r   r   r   r   _embed_search_string_queriesrf   re   r   _rankr   )r   embedding_fnr   r>   r?  embedded_searchembedded_ranks          r3   %test_search_embeds_string_knn_queriesrk  K  s     4)DL/MJ X]]3]34F	*

 ==fEO$$-(9999''''fllC((((<<...#))MmS))))4,...r6   c                 N   [        SS9n[        5       R                  S[        SUS9S9n[	        XS9u  p4[        5       R                  [        SSS	95      nUR                  U5      n[        UR                  [        5      (       d   eUR                  R                  S:X  d   eUR                  R                  S:X  d   eUR                  n[        U[        5      (       d   eUR                  S:X  d   e[        UR                  5        UR                  [        S
/S/S9:X  d   eg)ra  sparser3  r,  r4  r5  r  r  rc  r<  r   re  r   N)r   r   r   r   r   r    r   r   rf  r   rg  r  r   r   r   )r   rA  r   r   r>   r?  ri  rj  s           r3   Dtest_search_embeds_string_knn_queries_with_sparse_embedding_functionrn  g  s    58DIX""&!i
 # F 00@PMJX]]3#4MJKF ==fEOfllC((((<<0000<<...#))MmS)))) 1111	-

,sD6"JJJJr6   c                 l   [        SS9n[        XS9u  p#[        SS9[        SS9-   R                  [        SS95      n[        SS9S	-  R	                  5       n[        5       R                  U5      [        5       R                  U5      /nU Vs/ s H  orR                  U5      PM     nnS/S/S/S//n	UR                  U	:X  d   e/ n
U H'  nU
R                  [        UR                  5      5        M)     U
(       d   e[        S
 U
 5       5      (       d   e[        S U
 5       5      (       d   egs  snf )z>String queries in composite rank trees should all be embedded.nestedr3  rP  r   rd  r   r   delta   c              3   L   #    U  H  n[        U[        5      (       + v   M     g 7fr/   )r   r[   .0r   s     r3   	<genexpr>Dtest_search_embeds_string_queries_in_nested_ranks.<locals>.<genexpr>  s     C{e:eS))){s   "$c              3   B   #    U  H  n[        U[        5      v   M     g 7fr/   )r   rk   rt  s     r3   rv  rw    s     @K5z%&&Ks   N)r_   r   r   maxabsr    r   rf  rf   r   r   rg  all)r   rh  r   r>   rank_onerank_twosearchessembedded_searchesexpected_queriesall_queriesri  s               r3   1test_search_embeds_string_queries_in_nested_ranksr    s,    4(CL/MJ '"Sv%66;;Cg<NOH'"Q&++-Hh'x)@AHMUVX@@CXV 	F8gY	B$$(8888K,/0E0EFG - ;C{CCCCC@K@@@@@ Ws   D1c                    [        5       R                  [        5       S9n[        U US9u  p#UR	                  S/S/SS0/S9  [
        R                  " [        5         UR                  SS0S9  S	S	S	5        UR                  UR                  S
9  [        5       R                  [        5       S9R                  S[        5       S9nUR                  UR                  US9nUR	                  S/S/SS0/S9  [
        R                  " [        5         UR                  SS0S9  S	S	S	5        UR                  UR                  S
9  [        5       R                  S[        5       S9nUR                  UR                  US9nUR	                  S/S/SS0/S9  UR                  SS0S9n[        US   5      S1:X  d   eg	! , (       d  f       GNQ= f! , (       d  f       N= f)z>Toggling inverted index enablement reflects in query behavior.rM   r  zno-indexr  global_fieldvaluer   r   Nr   r   r  r   zkey-disabledr   zkey-enabledr   )r   delete_indexr	   r   r  r/  r0  	Exceptionr   r$  rD   r   r   r  )	r   disabled_defaultsr   r   disabled_key_schemar&  restored_schemarestoredr?  s	            r3   $test_schema_delete_index_and_restorer    s    --5N5P-Q4 J
 NNL'"G,-   
y	!ng67 
" *//2 		68	9	*-F-H	I 
 //__%8 0 I MM''(   
y	!Z01 
" *//2h++8: , O ..___ / H LLO''(   \\V 4\5Fve}-000K 
"	!& 
"	!s   F8G
8
G

Gc                   ^^	 [        5       R                  S[        5       S9n[        XS9u  mnTR	                  S/[        [        / SQ/5      SS0/S/S9  TR                  c   eTR                  R                  S   R                  nUc   eUR                  nUc   eUR                  S
L d   eSS0m	S[        / [        4   SS	4S jnUU	4S jUU	4S jUU	4S j/nU H  nU" U5        M     g	)zDisabled metadata inverted index should block filter-based operations in get, query, and delete for local, single node, and distributed.restricted_tagr  r  restricted-docg?g?g333333?g?blockedr  r   r   r   r   NF	operationr8   c                     [         R                  " [        5       nU " 5         S S S 5        S[        WR                  5      ;   d   eg ! , (       d  f       N*= fNz1Cannot filter using metadata key 'restricted_tag'r/  r0  r   r[   r  r  exc_infos     r3   _expect_disabled_erroretest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>._expect_disabled_error  E    ]]/0HK 1BcNNG
 
 	
 
 10   A
Ac                  "   > T R                  TS9$ Nr   r   r   filter_payloads   r3   <lambda>Wtest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>.<lambda>      
^4r6   c                  H   > T R                  [        [        / SQ/5      STS9$ Nr  r   )query_embeddings	n_resultsr   r   r(   r   r  s   r3   r  r    )    
  !*/C.DE  ! 
r6   c                  "   > T R                  TS9$ r  deleter  s   r3   r  r        
!!!7r6   )r   r  r	   r   r  r(   r   r   r   r   r   r   r"   r!   )
r   r   r>   schema_entryindex_configr  
operationsr  r   r  s
           @@r3   Etest_disabled_metadata_index_filters_raise_invalid_argument_all_modesr    s#    X""%>%@ # F 00@PMJNN
%9$:;$i01'	   ((($$))*:;BBL###55L###5(((&6	%BN
(2s7*; 
 
 	5	

 	8+J  	y)  r6   c                    ^^	^
 [        5       R                  S[        5       S9n[        XS9u  mnTR	                  S/[        [        / SQ/5      SS0/S/S9  TR                  c   eTR                  R                  S   R                  nUc   eUR                  nUc   eUR                  S
L d   eSS0m	[        T	S9m
S[        / [        4   SS	4S jnUU	4S jUU	4S jUU
4S jUU	4S j/nU H  nU" U5        M     g	)zFDisabled metadata inverted index should block filter-based operations.r  r  r  r  r  r  r  r  NFr   r  r8   c                     [         R                  " [        5       nU " 5         S S S 5        S[        WR                  5      ;   d   eg ! , (       d  f       N*= fr  r  r  s     r3   r  [test_disabled_metadata_index_filters_raise_invalid_argument.<locals>._expect_disabled_error#  r  r  c                  "   > T R                  TS9$ r  r  r  s   r3   r  Mtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>+  r  r6   c                  H   > T R                  [        [        / SQ/5      STS9$ r  r  r  s   r3   r  r  ,  r  r6   c                  &   > T R                  T5      $ r/   )r?  )r   search_requests   r3   r  r  1  s    
!!.1r6   c                  "   > T R                  TS9$ r  r  r  s   r3   r  r  2  r  r6   )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  s           @@@r3   ;test_disabled_metadata_index_filters_raise_invalid_argumentr    s0   
 X""%>%@ # F 00@PMJNN
%9$:;$i01'	   ((($$))*:;BBL###55L###5(((&6	%BN.1N
(2s7*; 
 
 	5	

 	27	+J  	y)  r6   c                    [        U 5      u  p[        X!R                  5      nSn[        U5       Vs/ s H  nSU 3PM
     nn[        U5       Vs/ s H  nSU 3PM
     nn[        U5       Vs/ s H
  nSSU 30PM     nnUR	                  XgUS9  [
        (       d  [        X!R                  U5        UR                  UR                  5      n	U	R                  c   eSU	R                  R                  ;   d   eU	R                  R                  S   R                  n
U
c   eU
R                  nUc   eUR                  SL d   e[        X!R                  5      nS	n[        U5       Vs/ s H  nS
U 3PM
     nn[        U5       Vs/ s H  nSU 3PM
     nn[        U5       Vs/ s H
  nSSU 30PM     nnUR                  UUUS9  [
        (       d  [        X!R                  U5        UR                  UR                  5      nUR                  c   eSUR                  R                  ;   d   eUR                  R                  S   R                  nUc   eUR                  nUc   eUR                  SL d   eUR                  SS0S9n[        US   5      S1:X  d   eUR                  SS0S9n[        US   5      S1:X  d   eU R!                  5       nUR                  UR                  5      nUR                  c   eSUR                  R                  ;   d   eSUR                  R                  ;   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 )zJCompaction promotes unseen metadata keys into discoverable schema entries.   zdiscover-add-doc discover_addtopic_r   NT  zdiscover-upsert-zupsert doc discover_upserttopic_42r   r   zdiscover-add-42zdiscover-upsert-42)r   r   rD   r:   r  r   r   r   r   r   r   r   r   r  r   r  r   )r   r   r   initial_version
batch_sizer<   r   r   r   r  discover_add_configr   next_versionupsert_count
upsert_idsupsert_docsupsert_metadataspost_upsertdiscover_upsert_configupsert_inverted_indexresultresult_upsertreload_client	persisteds                           r3   /test_schema_discovers_new_keys_after_compactionr  9  s    55EFJ,V__EOJ(-j(9
:(91]1#(9C
:%*:%67%64s%6I705j0A*0A16!&0A  * NNs9NE!!!&//?K$$Z__5H??&&&X__11111"//..~>EE***/EE ,,, ((D000)&//BLL272EF2EQ$QC(2EJF.3L.AB.A[$.AKB383F13Fa	fQCL)3F  1 "   "!!&//<H''
8K))) 2 2 7 7777(//445FGNN!---2HH ,,, ((D000^^>:">^?Fve}"3!4444NN*;Z)HNIM}U#$)=(>>>>$>>@M,,Z__=I'''Y--22222	 0 0 5 5555s ;7** GB1s#   L6L;.M &MM
"Mc                    [        U 5      u  p[        X!R                  5      n[        S5       Vs/ s H  nSU 3PM
     nn[        S5       Vs/ s H
  nSSU 30PM     nn[        S5       Vs/ s H  nSU 3PM
     nnUR	                  XWUS9  [
        (       d  [        X!R                  U5        UR                  S/S/SS	0/S9  UR                  S
/SS0/S9  UR                  UR                  5      R                  nUc   eSUR                  ;   d   eUR                  S   n	U	R                  b<  U	R                  R                  b%  U	R                  R                  R                  SL d   eUR                  SS0S9n
[!        U
S   5      S1:X  d   eUR                  S/S/S9nUS   c   eUS   S   nUc   e[#        US   [$        [&        45      (       d   egs  snf s  snf s  snf )zGConflicting value types should not corrupt discoverable schema entries.r  z	conflict-conflict_keyvalue_r  r   zconflict-badzbad docr   z
conflict-0   r   NTvalue_10r   r   zconflict-10r   r   r   )r   r   rD   r:   r  r   r   r  r  r   r   r   r   r   r   r   r  r   rZ   r;   )r   r   r   r  r<   r   r   r   r   conflict_entryfetchconflict_bad_metabad_metadatas                r3   6test_schema_rejects_conflicting_discoverable_key_typesr  ~  s    55EFJ,V__EO$)#J
/JqYqc?JC
/05c
*0:16!&
  * &+3Z0Z4sZI0NNs9NE!!!&//?K+"C()   N"C()  
 "":??3::FV[[((([[0N)!!77C$$::BBdJJJNN.*!=N>EuU|///"N+;k]S[)555$[1!4L###l>2S%LAAAAM 0* 1s   GG!.G&c                    [        5       nUR                  S[        5       S9  [        U US9u  p#UR	                  S/S/SS0/S9  UR
                  c   eUR
                  R                  5       nUR                   S	3nUR                  U5      nUR
                  c   eUR
                  R                  5       U:X  d   e[        X6R                  5      n[        S
5       Vs/ s H  nSU 3PM
     n	n[        S
5       Vs/ s H  nSU 3PM
     n
n[        S
5       Vs/ s H  nSSU 3S.PM     nnUR                  XUS9  [        X6R                  U5        UR                  UR                  5      nUR
                  c   eSUR
                  R                  ;   d   eUR
                  R                  S   R                  nUc   eUR                   nUc   eUR"                  SL d   eUR                  UR                  5      nUR
                  c   eSUR
                  R                  ;  d   eUR%                  SS0S9n['        US   5      S1:X  d   eUR%                  SS0S9n['        US   5      S1:X  d   egs  snf s  snf s  snf )zPAssert forked collections inherit schema and evolve independently of the parent.
shared_keyr  r  zparent-1z
parent docparentr   N_forkr  zfork-z	fork doc r  )r  
child_onlyr  Tr   r   r  zfork-10)r   r   r	   r   r  r   r   rD   forkr   r:   r  r   r   r   r   r   r   r   r  )r   r   r   r   parent_schema_json	fork_nameforkedfork_versionr<   fork_ids	fork_docsfork_metadatasupdated_childchild_only_configchild_inverted_indexreloaded_parentparent_resultschild_resultss                     r3   1test_collection_fork_inherits_and_isolates_schemar    s    XF
L1J1LM4J NNL. (+,   (((#**<<>??#5)I__Y'F==$$$==**,0BBBB)&++>L%*3Z0Z%sZH0*/*5*Q9QC*I5FKCj/FPxs|<j  / MMh~MNfkk<@))&++6M+++=//44444%,,11,?FF(((,BB+++''4///++JOO<O!!---55:::::$((h/G(HN~e$%*555JJlJ%?J@M}U#$3335 15/s   I8=I=Jc                    [        5       R                  [        [        SS9S9S9n[	        U U[        SS9S9u  p#UR                  S/S/S9  UR                  S/S	/S
9nUS	   c   e[        R                  " US	   S   / SQ5      (       d   e[        5       n[        5       R                  S[        SUS9S9n[	        U US9u  psUR                  S/S/SS0/S9  U" S/5      S   nUR                  S/S/S
9n	U	S   c   eU	S   S   n
U
c   eSU
;   d   e[        [        U
S   5      nX:X  d   eUR                  [        5       R                  [!        S[        ["        U5      S95      5      n[%        US   5      S:X  d   eSUS   S   ;   d   eUR                  S/S/SS0/S9  UR                  S/S/S
9nUS   c   eUS   S   nUc   eSU;  d   eg)zKSchema-provided embedding functions drive both dense and sparse embeddings.r   rL   rP  rM   r   r   zembed-1zembedding documentr   r   r   r   Nr   rQ  sparse_autotext_to_embedr5  r  r  zsparse-textr  zschema embeddingr   r   r<  r   r   zsparse-numeric)r   r   r   r+   r   r  r   rW  rX  r   r   r(   r   r?  r    r   r   r!   rl   )r   vector_schemavector_collectionr>   embeddedrA  sparse_schemasparse_collectionsparse_querysparse_resultsparse_metarC  sparse_searchnumeric_metanumeric_metadatas                  r3   ,test_schema_embedding_configuration_enforcedr    s   
 H)) 4KPQ4RS * M 72q9 K'(  
 !$$)|n$MHL!---;;x-a02KLLLL46IH))&&(
 * M 7
 O'#%789  
 01215L%))}o})UM%111,Q/K"""K''',M(BCN)))%,,cm4^3LMNM }U#$)))M%03333'#Q'(   %((.>-?+(WL$000#K03''' 0000r6   c                 l   [        5       R                  [        5       S9R                  S[        5       S9n[	        U US9u  p#[        S5       Vs/ s H  nSU 3PM
     nn[        S5       Vs/ s H  nSU 3PM
     nn[        S5       Vs/ s H  nSS	U 3S
.PM     nn[        X2R                  5      nUR                  XVUS9  [        (       d  [        X2R                  U5        UR                  UR                  5      R                  n	U	c   eSU	R                  ;   d   eU	R                  S   R                  n
U
c   eU
R                  nUc   eUR                   SL d   eSU	R                  ;   d   eU	R                  S   R                  nUc   eUR                  nUc   eUR                   SL d   eUR#                  SS0S9n[%        US   5      [%        U5      :X  d   e[&        R(                  " [*        5         UR#                  SS0S9  SSS5        gs  snf s  snf s  snf ! , (       d  f       g= f)zLExplicit overrides take precedence over disabled defaults and discoverables.rM   explicit_keyr  r  r  zprecedence-r  explicit	discover_)r  discover_keyr   NTr	  Fr   r   
discover_5)r   r  r	   r   r   r:   r   rD   r  r   r   r   r   r   r   r   r   r   r  r/  r0  r  )r   r   r   r   r<   r   r   r   r  schema_stateexplicit_key_stringexplicit_inverted_indexdiscover_key_stringdiscover_inverted_indexexplicit_results                  r3   ?test_schema_precedence_for_overrides_discoverables_and_defaultsr  /  sD   
 		68	9	.1J1L	M  5J
 ',Cj
1j[jC
1%*3Z0Z4sZI0 s*A $y_E  *
 -V__EONNs9NE!!!&//?K((9@@L###\.....&++N;BB***1GG"..."**d222\.....&++N;BB***1GG"..."**e333 nnNJ+GnHOu%&#c(222	y	!nl;< 
"	!A 20*< 
"	!s   H-HH ;H%%
H3c                    [        SS9n[        5       R                  S[        SUS9S9n[	        XS9u  p4UR                  / SQ/ S	QS
9  UR                  / SQS/S9nUS   c   eU" / S	Q5      n[        / SQ5       Hi  u  pxUS   U   n	U	c   eSU	;   d   e[        [        U	S   5      n
U
R                  Xg   R                  :X  d   eU
R                  Xg   R                  :X  a  Mi   e   g)zQTest sparse embedding auto-generation using #document as source with no metadata.doc_no_metar3  auto_sparser   r5  r  r  doc1doc2doc3)rc  test documentshortr  r   r   N)r   r   r   r   r   r  r   r   r(   r   r   r   )r   rA  r   r   r>   r  expected_batchr<   doc_idrB  actuals              r3   ;test_sparse_auto_embedding_with_document_source_no_metadatar  b  s   
 5=IIX""&"(
 # F 00@PMJ NN$;   ^^ 8;-^PF+*** HIN78	+&q)###((( lH]$;<~~!2!:!::::}} 1 8 8888 9r6   c                     [        SS9n[        5       R                  S[        SUS9S9n[	        XS9u  p4UR                  SS	/S
S/SSS.SSS./S9  UR                  SS	/S/S9nUS   c   e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   S:X  d   eSUS   S   ;   d   eSUS   S   ;   d   eU" S
S/5      n[        [        US   S   S   5      nUR                  US   R                  :X  d   eg)zKTest sparse embedding with #document source when metadata is also provided.doc_with_metar3  
doc_sparser   r5  r  r  m1m2r   r   test*   )r   r  prodc   r   r   r   Nr   r   r  r   
r   r   r   r   r   r  r   r(   r   r   )r   rA  r   r   r>   r  r  	actual_m1s           r3   <test_sparse_auto_embedding_with_document_source_and_metadatar*    s   
 5?KIX""&"(
 # F 00@PMJ NN4LF#"-"-
   ^^t{m^DF+*** +q!*-777+q!'*b000+q!*-777+q!'*b000 6+.q11116+.q1111 01N\6+#6q#9,#GHIq 1 9 9999r6   c                    [        SS9n[        5       R                  S[        SUS9S9n[	        XS9u  p4UR                  / SQ/ S	QSS
0SS0SS0/S9  UR                  / SQS/S9nUS   c   eU" / SQ5      n[        S5       Ho  nUS   U   nUc   eSU;   d   eSU;   d   e[        [        US   5      n	U	R                  Xg   R                  :X  d   eU	R                  Xg   R                  :X  a  Mo   e   g)z7Test sparse embedding using a metadata field as source.meta_sourcer3  content_sparsecontentr5  r  r  s1s2s3r  sparse content onesparse content twosparse content threer   r   r   N)r3  r4  r5  r   )r   r   r   r   r   r  r   r:   r(   r   r   r   
r   rA  r   r   r>   r  r  r<   rB  r  s
             r3   3test_sparse_auto_embedding_with_metadata_source_keyr7    sH   
 5=IIX""& (
 # F 00@PMJ NN*,-,-./
   ^^ 2[M^JF+*** LN 1X+&q)###8+++ H$$$ lH-=$>?~~!2!:!::::}} 1 8 8888 r6   c                    [        SS9n[        5       R                  S[        SUS9S9n[	        XS9u  p4UR                  / SQ/ S	QS
S
SS0S
/S9  UR                  / SQS/S9nUS   c   eU" / S	Q5      n[        US   5       HC  u  pxUc   eSU;   d   e[        [        US   5      n	U	R                  Xg   R                  :X  a  MC   e   US   S   S   S:X  d   eg
)z@Test sparse embedding with mixed metadata (None, empty, filled).
mixed_metar3  mixed_sparser   r5  r  r  )n1n2n3n4)zdoc onezdoc twoz	doc threezdoc fourNexistingdatar   r   r   rr  )r   r   r   r   r   r  r   r   r(   r   r   r6  s
             r3   >test_sparse_auto_embedding_with_mixed_metadata_none_and_filledrA    s(   
 5<HIX""&"(
 # F 00@PMJ NN$A 	
  	 ^^ 8;-^PF+*** NON !!45###))) lH^$<=~~!2!:!:::: 6 +q!*-777r6   c                    [        SS9n[        5       R                  S[        SUS9S9n[	        XS9u  p4[        S/S	/S
9nUR                  SS/SS/SSU0/S9  UR                  SS/S/S9nUS   c   eUS   S   nUc   eSU;   d   eU" S/5      S   n[        [
        US   5      n	U	R                  UR                  :X  d   eUS   S   n
U
c   e[        [
        U
S   5      nUR                  S/:X  d   eUR                  S	/:X  d   eg)zBTest that sparse auto-embedding doesn't overwrite existing values.preserver3  preserve_sparser   r5  r  r  i  gw/^@r   	preserve1	preserve2zauto documentzmanual documentNr   r   r   r   r   )r   r   r   r   r   r   r  r   r(   r   r   )r   rA  r   r   r>   existing_sparser  	auto_metaexpected_autoactual_automanual_metaactual_manuals               r3   0test_sparse_auto_embedding_skips_existing_valuesrM    sy   
 5:FIX""&"(
 # F 00@PMJ #C5'CONN+&"$560
   ^^k :[M^RF+*** {#A&I   	)))/03M|Y/@%ABK-"7"7777 %a(K"""{3D'EFM  SE)))G9,,,r6   c                    [        SS9n[        5       R                  S[        SUS9S9n[	        XS9u  p4UR                  / SQ/ S	QSS
0SS0SS0S/S9  UR                  / SQS/S9nUS   c   eSUS   S   ;   d   eU" S
/5      S   n[        [        US   S   S   5      nUR                  UR                  :X  d   eSUS   S   ;  d   eSUS   S   ;  d   eUS   S   b   eg)zJTest sparse embedding when source metadata field is missing or wrong type.missing_fieldr3  field_sparse
text_fieldr5  r  r  )f1f2f3f4)r  r  r  doc4z
valid text{   other_fieldr  Nr   r   r   r   r   rr  r   r(  )r   rA  r   r   r>   r  expectedr  s           r3   4test_sparse_auto_embedding_with_missing_source_fieldrZ  K  sJ   
 5?KIX""&#(
 # F 00@PMJNN$2<(3G$	
  	 ^^ 8;-^PF+*** VK03333,(+H,{ 3A 6~ FGF>>X----- !4Q!7777!4Q!7777+q!)))r6   c                 *   [        SS9n[        5       nUR                  S[        5       S9  UR                  S[	        SUS9S9  [        XS9u  p4UR                  S	S
/SS/SSS.SSS./S9  UR                  S	S
/S/S9nUS   c   eU" SS/5      n[        US   5       HK  u  pxUc   eSU;   d   e[        [        US   5      n	U	R                  Xg   R                  :X  d   eSU;   a  MK   e   UR                  SS0S9n
[        U
S   5      S	1:X  d   eg)zCTest sparse auto-embedding works alongside string inverted indexes.with_string_indexr3  r   r  sparse_fieldcustom_textr5  r  multi1multi2zmain documentzanother documentzfield contentcat1)r^  r   zdifferent contentcat2r   r   r   Nr   r   )r   r   r   r	   r   r   r  r   r   r(   r   r   r  )r   rA  r   r   r>   r  r  r<   rB  actual_fieldr  s              r3   5test_sparse_auto_embedding_with_string_inverted_indexrd  v  s~   
 5;NOIXF
(*   &$(
   00@PMJNNx "$67+@/VD
   ^^8 4{m^LF+*** 1DEFN !45### ))) L(>*BC##~'8'@'@@@@ X%%% 6 ~~Z$8~9HxH:---r6   c                    [        SS9n[        SS9n[        5       nUR                  [	        US9S9  UR                  S[        SUS	9S
9  [        U UUS9u  pEUR                  SS/SS/S9  UR                  SS/SS/S9nUS   c   e[        US   5      S:X  d   e[        US   S   5      S:X  d   eUS   c   eUS    H  nUc   eSU;   a  M   e   g)z9Test that dense and sparse auto-embeddings work together.rT   rL   
with_denser3  rP  rM   
sparse_keyr   r5  r  r  both1both2zcombined documentzanother docr  r   r   r   Nrr  r   )
r+   r   r   r   r   r   r   r  r   rl   )r   dense_efrA  r   r   r>   r  rB  s           r3   .test_dense_and_sparse_auto_embeddings_togetherrk    s=   
 '1-H4<HIXF
0HMN
&"(
   0#MJ NNg&6  
 ^^g{+  F ,+++vl#$)))vl#A&'1,,, +***;'###x''' (r6   c                    [        SS9n[        5       R                  S[        SUS9S9n[	        XS9u  p4UR                  S/S	/S
9  UR                  S/S/S
9  UR                  S/SS/S9nUS   c   eUS   c   eUS   S   S:X  d   eSUS   S   ;   d   eU" S/5      S   n[        [        US   S   S   5      nUR                  UR                  :X  d   eUR                  S/S/S
9  UR                  S/S/S9nUS   c   eSUS   S   ;   d   eU" S/5      S   n	[        [        US   S   S   5      n
U
R                  U	R                  :X  d   eg)z=Test sparse auto-embedding with update and upsert operations.update_upsertr3  update_sparser   r5  r  r  up1zoriginal docr  zupdated docr   r   r   Nr   up2zupserted doc)r   r   r   r   r   r  r  r   r(   r   r   r  )r   rA  r   r   r>   result_updaterY  r  r  expected_upsertactual_upserts              r3   1test_sparse_auto_embedding_with_update_and_upsertrt    s   
 5?KIX""&"(
 # F 00@PMJ NNG!"   G /  
 NNwk8RNSM%111%111%a(M999mK8;;;; -)!,H,k :1 =o NOF>>X----- G!"  
 NNwNFM%111mK8;;;;   01!4O}['A!'D_'UVM  O$;$;;;;r6   c                    [        SS9n[        5       R                  S[        SUS9S9n[	        XS9u  p4UR
                  nUR                  S/S	/S
9  U R                  5       nUR                  US9nUR                  c   eSUR                  R                  ;   d   eUR                  S/S/S
9  UR                  SS/S/S9nUS   c   eSUS   S   ;   d   eSUS   S   ;   d   eg)zFTest that sparse auto-embedding config persists across client reloads.persist_testr3  persist_sparser   r5  r  r  persist1zpersistent documentr  r   Npersist2znew document after reloadr   r   r   r   )r   r   r   r   r   rD   r  r   r   r   r   r   )	r   rA  r   r   r   r   rM  r   r  s	            r3   ;test_sparse_auto_embedding_persistence_across_client_reloadrz    sJ   
 5>JIX""&"(
 # F 55EUJ ooONNL()   '@@BO)88 9 
 %%111299>>>>> L./   !$$$ % F +***vk215555vk215555r6   c                    [        SS9n[        5       R                  S[        SUS9S9n[	        XS9u  p4Sn[        U5       Vs/ s H  nS	U 3PM
     nn[        U5       Vs/ s H  nS
U 3PM
     nnUR                  XxS9  UR                  USS S/S9n	U	S   c   eU" U5      n
[        U	S   5       HC  u  pkUc   eSU;   d   e[        [        US   5      nUR                  X   R                  :X  a  MC   e   gs  snf s  snf )z9Test sparse auto-embedding with large batch of documents.
batch_testr3  batch_sparser   r5  r  r  r   zbatch-zdocument number r  Nr  r   r   )r   r   r   r   r   r:   r  r   r   r(   r   r   )r   rA  r   r   r>   r  r<   r   r   r  r  rB  r  s                r3   0test_sparse_auto_embedding_with_batch_operationsr~  D  s;   
 5<HIX""&"(
 # F 00@PMJ J!&z!2
3!2AVA3<!2C
316z1BC1BA#A3'1BICNNsN0 ^^CR;-^@F+*** y)N !45###)))lH^$<=~~!2!:!:::: 6 4Cs   C<"Dc                     [        SS9n[        5       R                  S[        SUS9S9n[	        XS9u  p4UR                  S/S	/S
9  UR                  S/S/S9nUS   c   eUS   S   nUc   eSU;   d   eg)zCTest sparse auto-embedding handles empty/None documents gracefully.
empty_testr3  empty_sparser   r5  r  r  empty1 r  r   r   Nr   )r   r   r   r   r   r  r   )r   rA  r   r   r>   r  rB  s          r3   /test_sparse_auto_embedding_with_empty_documentsr  k  s    
 5<HIX""&"(
 # F 00@PMJ NNJ$  
 ^^
[M^BF+*** k"1%HX%%%r6   c                 X   [        U 5      u  pUR                  nUc   eSUR                  ;   d   eUR                  S   R                  nUc   eUR                  nUc   eUR
                  SL d   eUR                  c   eUR                  R                  c   eUR                  R                  S:X  d   eUR                  R                  nUc   eUR                  5       S:X  d   eUR                  nUc   eUR                  S5      nUc   eUR                  5       S:X  d   eUR                  5       n	U	S   S   S   S	   n
U
S
   S   nUS   S:X  d   eUS   S:X  d   eU	S   S   S	   nUS
   S   nUS   S:X  d   eUS   S:X  d   eU	S   S   S   nUc   eUS
   S   nUS   S:X  d   eg)zbVerify that when no schema is provided, the collection uses DefaultEmbeddingFunction (not legacy).Nr   Tl2r~   r   r   r   r   rJ   typeknownrD   r   sparse_vectorsparse_vector_indexunknown)r   r   r   r   r   r   rJ   r   r   rD   r   r   r   )r   r   r   r   r   r   r   rJ   r   	json_dataembedding_vector	ef_configdefaults_vectordefaults_ef_configdefaults_sparsesparse_ef_configs                   r3   7test_default_embedding_function_when_no_schema_providedr    s?   
 55EFJ F 6;;&&&\2==)))%22L###4'''***$$000$$,,, 
			/	/B>> 779	!!!%%F

/0I   >>y((( ((*I (6|D^T *+?@I V'''V	)))  
+L9.IO(23GHf%000f%222  
+O<=RSO&&&&x01EFF#y000r6   c                 (   U R                  5       nUR                  5         S[        5       R                   3n[	        SS9nUR                  UUS9  UR                  UUS9nUR                  nUc   eSUR                  ;   d   eUR                  S   R                  nUc   eUR                  nUc   eUR                  SL d   eUR                  c   eUR                  R                  c   eUR                  R                  S:X  d   eUR                  R                  nUc   eUR                  5       S	:X  d   eUR!                  5       S
S0:X  d   eUR#                  5       n	U	S   S   S   S   n
U
S   S   nUS   S:X  d   eUS   S	:X  d   eUS   S
S0:X  d   eU	S   S   S   nUS   S   nUS   S:X  d   eUS   S	:X  d   eUS   S
S0:X  d   eUR%                  S/S/S9  UR'                  S/S/S9nUS   c   e[)        US   S   5      S:X  d   eg)zXVerify that custom embedding function is reflected in schema when no schema is provided.custom_ef_no_schema_   rL   r   Nr   TrQ   rB   r-   r   r   r   rJ   r   r  r  rD   r   test1r  r  r   r   r   )r   r   r)   r   r+   r%  r   r   r   r   r   r   rJ   r   r   rD   rH   r   r  r   rl   r   r   r   	custom_efr   r   r   r   r   r  r  r  r  r  r  s                  r3   -test_custom_embedding_function_without_schemar    s    779F
LLN,UW[[M:O (A.I $   &&$ ' J F 6;;&&&\2==)))%22L###4'''***$$000$$000 
			/	/B>> 779###==?uaj((( ((*I (6|D^T *+?@I V'''V+++X5!*,,,  
+L9.IO(23GHf%000f%444h'E1:555 NNI"#  
 ^^	L>^BF,+++vl#A&'1,,,r6   c                 :   U R                  5       nUR                  5         S[        5       R                   3n[	        SS9nUR                  UU[        5       S9  UR                  UUS9nUR                  nUc   eSUR                  ;   d   eUR                  S   R                  nUc   eUR                  nUc   eUR                  SL d   eUR                  c   eUR                  R                  c   eUR                  R                  S	:X  d   eUR                  R                  nUc   eUR!                  5       S
:X  d   eUR#                  5       SS0:X  d   eUR%                  5       n	U	S   S   S   S   n
U
S   S   nUS   S:X  d   eUS   S
:X  d   eUS   SS0:X  d   eU	S   S   S   nUS   S   nUS   S:X  d   eUS   S
:X  d   eUS   SS0:X  d   eUR'                  S/S/S9  UR)                  S/S/S9nUS   c   e[+        US   S   5      S:X  d   eg)z_Verify that custom embedding function is reflected in schema when default Schema() is provided.custom_ef_default_schema_r  rL   rD   r   r   r   Nr   TrQ   rB   r-   r   r   r   rJ   r   r  r  rD   r   r  r  r  r   r   r   )r   r   r)   r   r+   r%  r   r   r   r   r   r   r   rJ   r   r   rD   rH   r   r  r   rl   r  s                  r3   2test_custom_embedding_function_with_default_schemar    s    779F
LLN1%'++?O (A.I $x   &&$ ' J F 6;;&&&\2==)))%22L###4'''***$$000$$000 
			/	/B>> 779###==?uaj((( ((*I (6|D^T *+?@I V'''V+++X5!*,,,  
+L9.IO(23GHf%000f%444h'E1:555 NNI"#  
 ^^	L>^BF,+++vl#A&'1,,,r6   c                    U R                  5       nUR                  5         S[        5       R                   3n[	        SS9n[	        SS9n[        5       R                  [        US9S9n[        R                  " [        5       nUR                  UUUS9  SSS5        [        WR                  5      nS	UR                  5       ;   d  S
UR                  5       ;   d   egg! , (       d  f       NO= f)zTVerify that setting different custom embedding functions in schema and config fails.conflict_ef_rT   rL   r   rP  rM   r  Nr   conflict)r   r   r)   r   r+   r   r   r   r/  r0  r  r%  r[   r  lower)r   r   r   r   	schema_efr   r  	error_msgs           r3   ?test_conflicting_embedding_functions_in_schema_and_config_failsr  ]  s     779F
LLN$UW[[M2O (A.I'A.I X"" I> # F 
y	!X   ( 	! 	
 
" HNN#Iy((J)//:K,KKK,K( 
"	!s   C
C+c                    [        5       nUR                  [        5       SS9  UR                  [        5       [	        S5      S9  [        XS9u  p#UR                  c   eSUR                  R                  ;   d   eSUR                  R                  ;   d   eUR                  S/S/SS	S
./S9  UR                  SS0S9n[        US   5      S1:X  d   eUR                  SS	0S9n[        US   5      S1:X  d   eg)z6Test that create_index accepts both str and Key types.	field_strrJ   r  	field_keyr  Nz
key-test-1test docvalue1r%  )r  r  r   r   r   )r   r   r	   r
   r   r   r   r   r  r   r  )r   r   r   r>   
str_result
int_results         r3   test_create_index_with_key_typer  }  s    XF
8:L
57S=MN/0@PMJ (((*++00000*++00000 NNN,!);<   {H&=>Jz% !l^333 {B&78Jz% !l^333r6   c                 p   [        5       nUR                  [        5       SS9  UR                  [        5       [	        S5      S9  [        XS9u  p#UR                  c   eSUR                  R                  ;   d   eSUR                  R                  ;   d   eUR                  S/S/SS	S
./S9  [        R                  " [        5         UR                  SS0S9  SSS5        [        R                  " [        5         UR                  SS	0S9  SSS5        g! , (       d  f       NC= f! , (       d  f       g= f)z6Test that delete_index accepts both str and Key types.disabled_strr  disabled_keyr  Nzdisable-test-1r  r  r   )r  r  r   r   )r   r  r	   r
   r   r   r   r   r  r/  r0  r  r   )r   r   r   r>   s       r3   test_delete_index_with_key_typer    s    XF
8:O
57S=PQ/0@PMJ (((Z..33333Z..33333 NN,$+SAB   
y	!ng67 
" 
y	!nc23 
"	! 
"	! 
"	!s   D;D'
D$'
D5c           	      F   [        5       nUR                  [        [        R                  [        SS9S9S9  [        U U[        SS9S9u  p#UR                  c   eUR                  R                  S   R                  nUc   eUR                  c   eUR                  R                  R                  c   eUR                  R                  R                  S:X  d   eUR                  R                  R                  S	:X  d   eUR                  / S
Q/ SQS9  UR                  S/S/S9nUS   c   e[!        US   S   5      S:X  d   eUR#                  [%        5       R'                  [)        / SQSS95      5      n[!        US   5      S:  d   e[!        US   S   5      S::  d   eg)z<Test that VectorIndexConfig source_key accepts Key.DOCUMENT.r   rL   r5  rM   r  Nr   rQ   r   )vec-1zvec-2zvec-3)zapple fruitzbanana fruitzcar vehicler  r  r   r   r   rQ  rr  )r   limitr   )r   r   r   r   DOCUMENTr+   r   r   r   r   r   rJ   r   r6  r  r   rl   r?  r    r   r   )r   r   r   r>   embedding_configr  rD  s          r3   1test_vector_index_config_with_key_document_sourcer    s   
 XF
 ||61=
   02q9MJ (((!((--l;FF'''((444((//55AAA((//55AAA((//::kIII NN'@   ^^	L>^BF,+++vl#A&'1,,, %%c 9CDM }U#$q(((}U#A&'1,,,r6   c                    [        SS9n[        5       R                  S[        [        R
                  US9S9n[        XS9u  p4UR                  c   eUR                  R                  S   R                  nUc   eUR                  c   eUR                  R                  R                  S:X  d   eUR                  / S	Q/ S
QS9  UR                  S/S/S9nUS   c   eSUS   S   ;   d   e[        [         US   S   S   5      nUR#                  [%        5       R'                  [)        S[        [*        U5      SS95      5      n[-        US   5      S:  d   eSUS   S   ;   d   e[        5       R                  S[        [	        S5      US9S9n	[        X	S9u  pU
R                  c   eU
R                  R                  S   R                  nUc   eUR                  c   eUR                  R                  R                  S:X  d   eU
R                  SS/SS/SS0SS0/S9  U
R                  SS/S/S9nUS   c   eSUS   S   ;   d   eSUS   S   ;   d   e[        [         US   S   S   5      nU
R#                  [%        5       R'                  [)        S[        [*        U5      SS95      5      n[-        US   5      S:  d   eSUS   S   ;   d   eg)zLTest that SparseVectorIndexConfig source_key accepts both str and Key types.	key_typesr3  sparse1r5  r  r  Nr   r/  )applebananaoranger  r0  r   r   r   rr  )r  r   r  r   sparse2rQ  zsparse-key-1zsparse-key-2r  r  zcontent onezcontent twor   r   )r   r   r   r   r   r  r   r   r   r  r  rJ   r6  r  r   r(   r   r?  r    r   r   r!   rl   )r   rA  schema1collection1r>   sparse1_configresult1
sparse_vecsearch_result1schema2collection2sparse2_configresult2r  search_result2s                  r3   .test_sparse_vector_index_config_with_key_typesr    sP   
 5;GI h##&||(
 $ G 11ARNK))) '',,Y7EEN%%%--999--44??;NNN OO/   oo4&;-o@G;+++,Q////lGK$8$;I$FGJ !''citC/DANON ~e$%)))>%(++++ h##&<((
 $ G 11ARNK))) '',,Y7EEN%%%--999--44??<OOO OO^,6" -0<2OP   oo^,{m  G ;+++,Q////,Q//// gk&:1&=i&HIL !''citC/FaPQN ~e$%)))^E215555r6   c                  `   [        5       n [        R                  " [        SS9   U R	                  [        5       SS9  SSS5        [        R                  " [        SS9   U R	                  [        5       [        R                  S9  SSS5        g! , (       d  f       NW= f! , (       d  f       g= f)zITest that create_index rejects keys starting with # (except system keys).key cannot begin with '#'r-  #custom_fieldr  Nz/Cannot create index on special key '#embedding')r   r/  r0  r@  r   r	   r   	EMBEDDINGr  s    r3   /test_schema_rejects_special_key_in_create_indexr  A  s     XF	z)D	E#<#>OT 
F 
K
 	#<#>CMMR
 
	 
F	E
 
   B'B
B
B-c                  `   [        5       n [        R                  " [        SS9   U R	                  [        5       SS9  SSS5        [        R                  " [        SS9   U R	                  [        5       [        R                  S9  SSS5        g! , (       d  f       NW= f! , (       d  f       g= f)zITest that delete_index rejects keys starting with # (except system keys).r  r-  r  r  Nz.Cannot delete index on special key '#document')r   r/  r0  r@  r  r	   r   r  r  s    r3   /test_schema_rejects_special_key_in_delete_indexr  O  s     XF	z)D	E#<#>OT 
F 
J
 	#<#>CLLQ
 
	 
F	E
 
r  c                     [         R                  " [        SS9   [        SS9  SSS5        [         R                  " [        SS9   [        [        R
                  S9  SSS5        [         R                  " [        SS9   [        SS9  SSS5        [         R                  " [        SS9   [        [        R
                  S9  SSS5        [         R                  " [        SS9   [        SS9  SSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nm= f! , (       d  f       g= f)z=Test that config validators reject invalid source_key values.z source_key cannot begin with '#'r-  r   r>  Nz	#metadata)r/  r0  r@  r   r   r  r   rC   r6   r3   1test_schema_rejects_invalid_source_key_in_configsr  ]  s     
z)K	L\2 
M 
z)K	LS]]3 
M 
z)K	L<8 
M 
z)K	L3==9 
M 
z)K	L;7 
M	L 
M	L 
M	L 
M	L 
M	L 
M	Ls;   
C5D>
D)D("
D95
D
D
D%(
D69
Ec           	         U R                  5       nUR                  5         S[        5       R                   3n[	        5       nSSKJnJnJnJ	n  U" U" U" SU" 5       S9S9S9UR                  S'   [        R                  " [        5       nUR                  X#S	9  S
S
S
5        [        WR                   5      n	SU	;   d,  SU	R#                  5       ;   d  SU	R#                  5       ;   d   eg
g
g
! , (       d  f       NV= f)zKTest that server-side validation rejects schemas with invalid special keys.server_validate_r   )
ValueTypesStringValueTypeStringInvertedIndexTyper	   Tr   rJ   )r   )r   z#invalid_keyr   N#r  invalid)r   r   r)   r   r   chromadb.api.typesr  r  r  r	   r   r/  r0  r  r%  r[   r  r  )
r   r   r   r   r  r  r  r	   r  r  s
             r3   .test_server_validates_schema_with_special_keysr  q  s    
 779F
LLN(6O XF  #-"902#
#FKK 
y	!X  o E 
" HNN#IyEY__%66)yGX:XX:X6 
"	!s   	C))
C7c           	         U R                  5       nUR                  5         S[        5       R                   3nSSKJnJnJn  [        5       n[        R                  " SSSS9nU" U" U" SUS9S	9S
9UR                  S'   [        R                  " [        5       nUR                  X&S9  SSS5        [!        WR"                  5      n	SU	R%                  5       ;   d  SU	;   d  SU	R%                  5       ;   d   eggg! , (       d  f       NV= f)zWTest that server-side validation rejects invalid source_key in SparseVectorIndexConfig.server_source_key_r   )r  SparseVectorValueTypeSparseVectorIndexTypeNr   )r   r6  bm25Tr  )r  )r  test_sparser   r6  r  document)r   r   r)   r   r  r  r  r  r   r   model_constructr   r/  r0  r  r%  r[   r  r  )
r   r   r   r  r  r  r   invalid_configr  r  s
             r3   @test_server_validates_invalid_source_key_in_sparse_vector_configr    s    
 779F
LLN*57;;-8O  XF,<<N ",+ 5%!
"FKK 
y	!X  o E 
" HNN#I	)))**	+*  	* 
"	!s   C88
Dr   c                 n   S[        5        3nU R                  US9nUR                  nUc   eUR                  R                  c   eUR                  R                  R
                  c   eUR                  R                  R
                  R                  R                  c   eUR                  SSS00S9  UR                  nUc   eUR                  R                  R
                  R                  R                  R                  S:X  d   eUR                  S   R                  R
                  R                  R                  R                  S:X  d   eU R                  U5      nUR                  nUc   eUR                  R                  R
                  R                  R                  R                  S:X  d   eg)	bTest that modifying a collection without initial config/schema creates and updates default schema.test_modify_no_init_r   Nr   r   r   r   r   )r)   r%  r   r   r   r   rJ   r   modifyr   r   r   r   r   r   r   updated_schemacollection_refreshedrefreshed_schemas          r3   ?test_modify_collection_no_initial_config_creates_default_schemar    s   
 -UWI6O )))?J F??%%111??%%22>>>??%%2299??KKK W.C$DE  &&N%%%""--::AAGGUUY[[[[|,77DDKKQQ__ceeee "00A+22'''$$//<<CCIIWW[]]]]r6   zSPANN is disabledc                 n   S[        5        3nU R                  US9nUR                  nUc   eUR                  R                  c   eUR                  R                  R
                  c   eUR                  R                  R
                  R                  R                  c   eUR                  SSS00S9  UR                  nUc   eUR                  R                  R
                  R                  R                  R                  S:X  d   eUR                  S   R                  R
                  R                  R                  R                  S:X  d   eU R                  U5      nUR                  nUc   eUR                  R                  R
                  R                  R                  R                  S:X  d   eg)	r  r  r   Nr   r   r   r  r   )r)   r%  r   r   r   r   rJ   r   r  r   r   r   r  s          r3   Etest_modify_collection_no_initial_config_creates_default_schema_localr    s   
 -UWI6O )))?J F??%%111??%%22>>>??%%2299>>JJJ Vk3-?$@A  &&N%%%""--::AAFFPPTWWWW|,77DDKKPPZZ^aaaa "00A+22'''$$//<<CCHHRRVYYYYr6   c                    S[        5        3nU R                  USSSS.0S9nUR                  nUc   eUR                  R                  R
                  R                  R                  c   eUR                  R                  R
                  R                  R                  R                  S:X  d   eUR                  R                  R
                  R                  R                  R                  S:X  d   eUR                  SSS	00S
9  UR                  nUc   eUR                  R                  R
                  R                  R                  R                  S	:X  d   eUR                  R                  R
                  R                  R                  R                  S:X  d   eUR                  S   R                  R
                  R                  R                  R                  S	:X  d   eUR                  S   R                  R
                  R                  R                  R                  S:X  d   eU R                  U5      nUR                  nUc   eUR                  R                  R
                  R                  R                  R                  S	:X  d   eUR                  R                  R
                  R                  R                  R                  S:X  d   eg)zQTest creating collection with SPANN schema within server limits and modifying it.test_modify_with_schema_r   r  2   r   r   rD   r   Nr      r  r   )r)   r%  r   r   r   r   rJ   r   r   r   r  r   r   r  s          r3   0test_modify_collection_with_initial_spann_schemar  	  s    1	:O ))!#
 * J F??%%2299??KKK??%%2299??MMQSSSS??%%2299??IIROOO W.C$DE  &&N%%%""--::AAGGUUY[[[[""--::AAGGQQUWWWW |,77DDKKQQ__ceeee|,77DDKKQQ[[_aaaa "00A+22'''$$//<<CCIIWW[]]]]$$//<<CCIISSWYYYYr6   c                 "   S[        5        3nU R                  USSSS.0S9nUR                  SSSS.0S	9  UR                  nUc   eUR                  R
                  R                  R                  R                  R                  S:X  d   eUR                  R
                  R                  R                  R                  R                  S:X  d   eUR                  R
                  R                  R                  R                  R                  S:X  d   eUR                  S   R
                  R                  R                  R                  R                  S:X  d   eUR                  S   R
                  R                  R                  R                  R                  S:X  d   eU R                  U5      nUR                  nUc   eUR                  R
                  R                  R                  R                  R                  S:X  d   eUR                  R
                  R                  R                  R                  R                  S:X  d   eUR                  R
                  R                  R                  R                  R                  S:X  d   eg
)zCTest that modifying multiple SPANN fields updates schema correctly.test_modify_schema_multi_r   @   r   r  r     r  r  Nr   r   )r)   r%  r  r   r   r   r   rJ   r   r   r   r   r   r   )r   r   r   r   r  r  s         r3   ;test_modify_collection_updates_schema_spann_multiple_fieldsr  ;	  s@   
 2%';O ))"3 GH * J !$ 
   F??%%2299??MMQTTTT??%%2299??IISPPP ??%%2299??LLPRRRR ;;|$//<<CCIIWW[^^^^;;|$//<<CCIISSWZZZZ "00A+22'''$$//<<CCIIWW[^^^^$$//<<CCIISSWZZZZ$$//<<CCIIVVZ\\\\r6   c                 v   S[        5        3nU R                  USSS00S9nUR                  nUc   eUR                  R                  c   eUR                  R
                  c   eUR                  R                  c   eUR                  R                  c   eUR                  R                  c   eUR                  S   c   eUR                  SSS00S	9  UR                  nUc   eUR                  R                  c   eUR                  R                  R                  c   eUR                  R                  R                  c   eUR                  R
                  c   eUR                  R
                  R                  c   eUR                  R                  c   eUR                  R                  R                  c   eUR                  R                  c   eUR                  R                  R                  c   eUR                  R                  c   eUR                  R                  R                   c   eUR                  S   c   eUR                  S   R                  c   eUR                  S   R                  R                  c   eUR                  S   R                  R                  R"                  S
L d   eUR                  R$                  R&                  R(                  R*                  R,                  S:X  d   eU R/                  U5      nUR                  nUc   eUR                  R$                  R&                  R(                  R*                  R,                  S:X  d   eUR                  R                  c   eUR                  R                  R                  c   eUR                  R                  R                  c   eUR                  R
                  c   eUR                  R                  c   eUR                  R                  c   eUR                  R                  c   eUR                  S   c   eg)zJTest that modifying configuration doesn't affect other schema value types.test_modify_schema_preserve_r   r   r  r  Nr   r   r  T)r)   r%  r   r   r   r   r   r  r  r   r  r   r  r   r   r  r  r   r   r   rJ   r   r   r   )r   r   r   initial_schemar  r  r  s          r3   4test_modify_collection_preserves_other_schema_fieldsr  h	  s+    5UWI>O ))" 56 * J  &&N%%%""))555"",,888""..:::""**666""00<<<{+777 W.D$EF  &&N%%% ""))555""))??KKK""))33???"",,888"",,??KKK""..:::""..CCOOO""**666""**>>JJJ""00<<<""00DDPPP {+777{+22>>>{+22<<HHH{+22<<DDLLL ""--::AAGGUUY\\\\ "00A+22''' $$//<<CCIIWW[^^^^ $$++777$$++AAMMM$$++55AAA$$..:::$$00<<<$$,,888$$22>>>  -999r6   c                     [        5       R                  [        [        5       S9S9n [	        [        5       S0 U R                  5       SSSSSSS	9
n[        [        [        [        5       5      USS
9nUR                  b   eUR                  c   eUR                  R                  S5      b   eUR                  S/5      nUc   e[        R                   " US   / SQ5      (       d   eg)z=Test that embeddings are using the schema embedding function.rP  rM   schema_only_collectionNrT   tenantdatabaser   )
idrD   configuration_jsonserialized_schemarB  	dimensionr  r	  versionlog_position)r   modelr   r   rc  )rR  rS  rT  rU  )r   r   r   r+   CollectionModelr)   r   r   r(   r   object_embedding_functionr   r   rV  rW  rX  )r   collection_modelr   r   s       r3   +test_embeds_using_schema_embedding_functionr  	  s    X"" 4K4MN # F '7% 224 "Ivx(J ))111##///##''(<=EEE""M?3J!!!;;z!}&:;;;;r6   )r   r   r8   N)NN)r8   N)rchromadb.apir   r   r  r   r   r   r   r	   r
   r   r   r   r   r   r   &chromadb.execution.expression.operatorr   chromadb.test.conftestr   r   r   r   r   -chromadb.test.utils.wait_for_version_increaser   r   "chromadb.utils.embedding_functionsr   r   chromadb.api.models.Collectionr   $chromadb.api.models.CollectionCommonr   chromadb.errorsr   r   chromadb.execution.expressionr   r    chromadb.typesr  typingr!   r"   r#   r$   r%   r&   r'   r(   uuidr)   numpyrW  r/  r[   r+   r_   r   r   r   r   r  r!  r)  markskipifr1  rF  rN  r_  rk  rn  r  r  r  r  r  r  r  r  r  r  r*  r7  rA  rM  rZ  rd  rk  rt  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rC   r6   r3   <module>r%     s
   -    7  6 A ? 5 8 L L L    /S	:  2 P'8c'C P P<n0'n0	n0b $W+B49+M W $W8  $;?'V !!23!78 :y !	:s tCy :KQ'KQ	KQ\'5''5	'5TS'S	S8 ..7PQ	E'	E		E R	E *3MN65'65	65 O65r&0'&0	&0R>'>	>: *3MN/'/	/ O/6 *3MNK'K	K OK: *3MNA'A	A OA851'51	51p+*'+*	+*\ *3MN-*'-*	-* O-*`B6'B6	B6J.B'.B	.Bb *3MN64'64	64 O 64r *3MNA1'A1	A1 OA1H0='0=	0=f *3MN%9'%9	%9 O%9P *3MN*:'*:	*: O*:Z *3MN.9'.9	.9 O.9b *3MN,8',8	,8 O,8^ *3MN,-',-	,- O,-^ *3MN'*''*	'* O'*T *3MN3.'3.	3. O3.l *3MN*('*(	*( O*(Z *3MN4<'4<	4< O4<n *3MN-6'-6	-6 O-6` *3MN#;'#;	#; O#;L *3MN&'&	& O&>61'61	61rI-'I-	I-XJ-'J-	J-ZL'L	L@ *3MN4'4	4 O4@ *3MN4'4	4 O4> *3MN+-'+-	+- O+-\ *3MNP6'P6	P6 OP6fSR8( *3MN%'%	% O%P *3MN,',	, O,^ *3MN^^	^ O^B ..7JKZZ	Z LZB *3MN)ZY )Z4 )Z O)ZX *3MN)])]	)] O)]X *3MNE: E:t E: OE:P<r6   