
    eiL|                    P   d dl mZmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZmZmZmZmZ d dlmZmZ d dlmZmZ d dlmZ d dl m!Z! d d	l"m#Z# d d
l$m%Z%m&Z& d dl'mZ( d dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4Z5d dl6Z6e G d dee-e7                   Z8e G d dee-e7                   Z9	 	 	 	 dUdZ:	 	 	 	 dUdZ;e G d dee-e7                   Z<	 	 dVddde/e   de/ee*      de0eef   fdZ=de*de-e*   fdZ>	 	 	 	 dUdZ?	 	 	 	 dUdZ@	 	 	 	 dUd ZAe6j                  j                  e e!      	 	 	 	 dUd"       ZDe6j                  j                  ee!      	 	 	 	 dUd#       ZE	 	 	 	 dUd$ZF	 	 	 	 dUd%ZGe6j                  j                  ee!      	 	 	 	 dUd&       ZHe6j                  j                  ee!      	 	 	 	 dUd'       ZIe6j                  j                  ee!      	 	 	 	 dUd(       ZJ	 	 	 	 dUd)ZK	 	 	 	 dUd*ZLe6j                  j                  ee!      	 	 	 	 dUd+       ZM	 	 	 	 dUd,ZN	 	 	 	 dUd-ZO e       e6j                  j                  ee!      	 	 	 	 dUd.              ZPe6j                  j                  ee!      	 	 	 	 dUd/       ZQ	 	 	 	 dUd0ZRe6j                  j                  ee!      	 	 	 	 dUd1       ZSe6j                  j                  ee!      	 	 	 	 dUd2       ZTe6j                  j                  ee!      	 	 	 	 dUd3       ZUe6j                  j                  ee!      	 	 	 	 dUd4       ZVe6j                  j                  ee!      	 	 	 	 dUd5       ZWe6j                  j                  ee!      	 	 	 	 dUd6       ZXe6j                  j                  ee!      	 	 	 	 dUd7       ZYe6j                  j                  ee!      	 	 	 	 dUd8       ZZe6j                  j                  ee!      	 	 	 	 dUd9       Z[e6j                  j                  ee!      	 	 	 	 dUd:       Z\e6j                  j                  ee!      	 	 	 	 dUd;       Z]e6j                  j                  ee!      	 	 	 	 dUd<       Z^	 	 	 	 dUd=Z_	 	 	 	 dUd>Z`	 	 	 	 dUd?Za	 	 	 	 dUd@Zbe6j                  j                  ee!      	 	 	 	 dUdA       Zce6j                  j                  ee!      	 	 	 	 dUdB       Zde6j                  j                  ee!      	 	 	 	 dUdC       Zee6j                  j                  ee!      	 	 	 	 dUdD       ZfdWdEZgdWdFZhdWdGZie6j                  j                  ee!      	 	 	 	 dUdH       Zje6j                  j                  ee!      	 	 	 	 dUdI       Zke6j                  j                  ee!      dJeddfdK       Zle6j                  j                  e dL!      dJeddfdM       Zme6j                  j                  ee!      dJeddfdN       Zne6j                  j                  ee!      dJeddfdO       Zoe6j                  j                  ee!      dJeddfdP       ZpdWdQZqe G dR dSee-e7                   Zre6j                  j                  ee!      deddfdT       Zsy)X    )	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)KnnSearch)AnyCallableDictListMappingOptionalTuplecast)uuid4Nc                       e Zd ZdZddefdZdee   defdZ	e
defd       Zdeeef   fdZe
d	eeef   dd fd
       ZdefdZy)SimpleEmbeddingFunctionzJSimple embedding function with stable configuration for persistence tests.dimc                     || _         y N_dim)selfr+   s     k/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/chromadb/test/api/test_schema_e2e.py__init__z SimpleEmbeddingFunction.__init__/   s	    	    inputreturnc                     t        | j                        D cg c]  }t        |       }}t        t        |D cg c]  }| c}      S c c}w c c}w r-   )ranger/   floatr'   r   )r0   r4   ivector_s        r1   __call__z SimpleEmbeddingFunction.__call__2   sB    $)$))$45q%(55J 7A 788 6 7s
   A
	A
c                       y)N	simple_ef r?   r3   r1   namezSimpleEmbeddingFunction.name6   s    r3   c                     d| j                   iS )Nr+   r.   r0   s    r1   
get_configz"SimpleEmbeddingFunction.get_config:   s    tyy!!r3   configc                      t        | d         S )Nr+   r+   )r*   rD   s    r1   build_from_configz)SimpleEmbeddingFunction.build_from_config=   s    &6%=99r3   c                      y)Ncosiner?   rB   s    r1   default_spacez%SimpleEmbeddingFunction.default_spaceA   s    r3   N)   )__name__
__module____qualname____doc__intr2   r#   strr   r<   staticmethodr@   r"   r    rC   rH   rK   r?   r3   r1   r*   r*   +   s    TC 9d3i 9J 9 #  "DcN " :$sCx. :5N : :s r3   r*   c                       e Zd ZdZddeddfdZdee   defdZdee   defdZ	e
defd	       Zdeeef   fd
Ze
deeef   dd fd       Zy) RecordingSearchEmbeddingFunctionzBEmbedding function that records inputs for search embedding tests.labelr5   Nc                 .    || _         g | _        g | _        y r-   )_labelcall_inputsquery_inputsr0   rV   s     r1   r2   z)RecordingSearchEmbeddingFunction.__init__I   s    ,.-/r3   r4   c           	          | j                   j                  t        |             |D cg c]-  }t        t	        |            t        t	        |            dz   g/ }}t        t        |      S c c}w )Ng      ?)rY   appendlistr8   lenr'   r   r0   r4   textvectorss       r1   r<   z)RecordingSearchEmbeddingFunction.__call__N   s\    U,JOP$E#d)$eCI&6&<=PPJ(( Q   2A-c           	          | j                   j                  t        |             |D cg c]-  }t        t	        |            t        t	        |            dz   g/ }}t        t        |      S c c}w )Ng      ?)rZ   r]   r^   r8   r_   r'   r   r`   s       r1   embed_queryz,RecordingSearchEmbeddingFunction.embed_queryS   s\      e-JOP$E#d)$eCI&6&<=PPJ(( Qrc   c                       y)Nrecording_search_efr?   r?   r3   r1   r@   z%RecordingSearchEmbeddingFunction.nameX   s    $r3   c                     d| j                   iS NrV   rX   rB   s    r1   rC   z+RecordingSearchEmbeddingFunction.get_config\       %%r3   rD   c                 8    t        | j                  dd            S )NrV   default)rU   getrG   s    r1   rH   z2RecordingSearchEmbeddingFunction.build_from_config_   s    /

7I0NOOr3   )rm   )rM   rN   rO   rP   rR   r2   r#   r   r<   re   rS   r@   r"   r    rC   rH   r?   r3   r1   rU   rU   E   s    L0c 0$ 0
)d3i )J )
)c )z )
 %# % %&DcN & P$sCx. P5W P Pr3   rU   client_factoriesr   r5   c                    | j                         }|j                          dt               j                   }t	               }|j                  t        dt        dddd            	       |j                  ||
      }|j                  }|J t        |j                                |j                  d   j                  }|J |j                  }|J |j                  du sJ |j                   J |j                   j"                  J |j                   j"                  dk(  sJ | j                         }|j%                  |      }	|	j                  }
|
J |
j                  d   j                  }|J |j                  }|J |j                   J |j                   j"                  J |j                   j"                  dk(  sJ y)EEnsure schema-provided SPANN settings persist across client restarts.schema_spann_rJ          x      search_nprobewrite_nprobeef_constructionmax_neighbors)spacespannrG   r@   schemaN
#embeddingTr@   )create_client_from_systemresetr(   hexr   create_indexr   r   get_or_create_collectionr   printserialize_to_jsonkeys
float_listvector_indexenabledrD   r|   get_collection)ro   clientcollection_namer   
collectionpersisted_schemaembedding_overrider   client_reloadedreloaded_collectionreloaded_schemareloaded_embedding_overridereloaded_vector_indexs                r1   %test_schema_vector_config_persistencer   d   s    
 779F
LLN%egkk]3OXF
 "  # 	
  
 00 1 J
 "(('''	

,
,
./)..|<GG)))%22L###4'''***$$000$$000&@@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9r3   c                 	   | j                         }|j                          dt               j                   }t	               }t        d      }|j                  t        d|t        dddd	      
             |j                  ||      }|j                  }|J t        |j                                |j                  d   j                  }|J |j                  }|J |j                   du sJ |j"                  J |j"                  j$                  J |j"                  j$                  dk(  sJ t&        sr|j"                  j(                  J |j"                  j(                  }	|	j*                  dk(  sJ |	j,                  dk(  sJ |	j.                  dk(  sJ |	j0                  dk(  sJ |j"                  j(                  J |j"                  j2                  J |j"                  j2                  }
|
j.                  dk(  sJ |
j4                  dk(  sJ |
j0                  dk(  sJ |
j6                  dk(  sJ |j"                  j8                  }|J |j;                         dk(  sJ |j=                         ddik(  sJ |j                         }t&        s(|d   d   d   d   d   d   }|d   dk(  sJ |d   dk(  s4J |d   d   d   d   d   d   }|d   dk(  sJ |d   dk(  sJ |d   dk(  sJ | j                         }|j?                  |      }|j                  }|J |j                  d   j                  }|J |j                  }|J |j"                  J |j"                  j$                  J |j"                  j$                  dk(  sJ t&        sb|j"                  j(                  J |j"                  j(                  j*                  dk(  sJ |j"                  j(                  j,                  dk(  sJ |j"                  j2                  J |j"                  j2                  j.                  dk(  sJ |j"                  j2                  j4                  dk(  sJ |j"                  j2                  j0                  dk(  sJ |j"                  j2                  j6                  dk(  sJ |j@                  }|J |jC                  d       }|J |j;                         dk(  sJ |j=                         ddik(  sJ y)!rq   rr      rF   rJ   rs   rt   ru   rv   rw   )r|   embedding_functionr}   rG   r~   Nr   Td   g333333?r>   r+   r   r   r   rD   r}   rx   ry   hnswrz   	ef_searchr{   r   r   )"r   r   r(   r   r   r*   r   r   r   r   r   r   r   r   r   r   r   rD   r|   r   r}   rx   ry   rz   r{   r   r   resize_factorr   r@   rC   r   configurationrn   )ro   r   r   r   r   r   r   r   r   spann_confighnsw_configefpersisted_json
spann_json	hnsw_jsonr   r   r   r   r   rD   	config_efs                         r1   -test_schema_vector_config_persistence_with_efr      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///r3   c                       e Zd ZdZddefdZdee   dee   fdZe	defd       Z
deeef   fdZe	d	eeef   dd fd
       Zy)$DeterministicSparseEmbeddingFunctionzCSparse embedding function that emits predictable token/value pairs.rV   c                     || _         y r-   rj   r[   s     r1   r2   z-DeterministicSparseEmbeddingFunction.__init__  	    r3   r4   r5   c                     t        |      D cg c])  \  }}t        |gt        t        |      |z         g      + c}}S c c}}w Nindicesvalues	enumerater   r8   r_   r0   r4   idxra   s       r1   r<   z-DeterministicSparseEmbeddingFunction.__call__  F     'u-
T #c$i#o0F/GH
 	
 
   .Ac                       y)N
det_sparser?   r?   r3   r1   r@   z)DeterministicSparseEmbeddingFunction.name  s    r3   c                     d| j                   iS ri   rj   rB   s    r1   rC   z/DeterministicSparseEmbeddingFunction.get_config   rk   r3   rD   c                 8    t        | j                  dd            S )NrV   r   )r   rn   rG   s    r1   rH   z6DeterministicSparseEmbeddingFunction.build_from_config#  s     4FJJw4UVVr3   N)r   )rM   rN   rO   rP   rR   r2   r#   r   r<   rS   r@   r"   r    rC   rH   r?   r3   r1   r   r     s    Mc 
d3i 
D,> 
 #  &DcN & WS#XW	/W Wr3   r   r   r   c                     | j                         }|j                          dt               j                   }||j	                  ||      }||fS ||j	                  ||      }||fS |j	                  |      }||fS )zKProvision a new temporary collection and return it with the backing client.schema_e2e_r~   r@   r   r   )r   r   r(   r   r   )ro   r   r   r   r   r   s         r1   _create_isolated_collectionr   *  s     779F
LLN#EGKK=1O44  5 

 v )88$#5 9 J v	  88$ 9 J vr3   rankc                    | g S t        | t              r| j                  gS g }t        | dd       }||j	                  t        |             t        | dd       }||j	                  t        |             t        | dd       }||j	                  t        |             t        | dd       }|r!|D ]  }|j	                  t        |              |S )Nr   leftrightranks)
isinstancer   querygetattrextend_collect_knn_queries)r   queries
child_rank	left_rank
right_rankr   childs          r1   r   r   G  s    |	$

|Gvt,J+J78fd+I+I67w-J+J78D'4(E 	8ENN/67	8 Nr3   c                    t        |       \  }}|j                  }|J |j                  J |j                  j                  J |j                  j                  j                  }|J |j
                  du sJ |j                  j                  J |j                  j                  j                  }|J |j
                  du sJ |j                  j                  J |j                  j                  j                  }|J |j
                  du sJ |j                  j                  J |j                  j                  j                  }|J |j
                  du sJ |j                  d   j                  }|J |j                  }	|	J |	j
                  du sJ |j                  d   j                  }
|
J |
j                  }|J |j
                  du sJ g d}g d}ddd	dd
ddddd
ddddd
g}|j!                  |||       |j#                  ddi      }t%        |d         dhk(  sJ |j#                  ddi      }t%        |d         dhk(  sJ |j#                  ddi      }t%        |d         dhk(  sJ |j'                  dgdddg       |j#                  ddi      }t%        |d         dhk(  sJ |j)                  dgdgdddg       |j#                  dgd g!      }|d    J t+        |d          d"k(  sJ |j-                  |j.                        }|j                  J t0        s.|j                  j3                         |j3                         k(  sJ yy)#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   addrn   setupdateupsertr_   r   r@   r   r   )ro   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                        r1   .test_schema_defaults_enable_indexed_operationsr  d  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 NNsi9N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 "r3   c                    t               }|j                  dt                      |j                  dt                      t	        | |      \  }}|j
                  J |j
                  j                         }d|d   v sJ d|d   v sJ |j                  |j                        }|j
                  J |j
                  j                         |k(  sJ |j                  |j                        }|j
                  J |j
                  j                         |k(  sJ |j                  dgd	gd
ddg       |j                  dd
i      }t        |d         dhk(  sJ y)zIEnsure repeated collection lookups reuse the persisted schema definition.
custom_tagkeyrD   
importancer   Nr   r   zschema-preservedocr   
   )r  r
  r   r   r   )r   r   r	   r
   r   r   r   r   r@   r   r   rn   r   )ro   base_schemar   r   initial_schema_jsonsecond_referencefetchedstoreds           r1   5test_get_or_create_and_get_collection_preserve_schemar    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4r3   c                 6   t               }|j                  dt                      t        | |      \  }}|j                  J d|j                  j
                  v sJ |j                  |j                         |j                  |j                        }|j                  J |j                  j                         }t               j                         }d|d   vsJ t        |d   j                               t        |d   j                               k(  sJ y)zHDeleting and recreating a collection should drop prior schema overrides.transient_keyr  r  Nr   r   )r   r   r	   r   r   r   delete_collectionr@   create_collectionr   r   )ro   r   r   r   	recreatedrecreated_jsonbaseline_jsons          r1   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Rr3   )reasonc                     t               }|j                  dt                      t        j                  t
        d      5  t        | |       ddd       y# 1 sw Y   yxY w)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   )ro   r   s     r1   &test_sparse_vector_not_allowed_locallyr#    s[    
 XF
-6M6OP	$T
 E 	$$4VDE E Es   AA!c                    t        d      }t               }|j                  dt        d|             |j                  dt	                      |j                  dt	                      t        | |	      \  }}|j                  J d|j                  j                  v sJ d|j                  j                  v sJ d|j                  j                  v sJ |j                  dgdgddddg       |j                  dgdg      }|d   J |d   d   }|J |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ d|v sJ t        t        |d         }| |dg      d   k(  sJ |j                  t               j                  t        dt        t         |                        }t#        |d         dk(  sJ d|d   d   v sJ t%        j&                  t(              5  |j                  j                  dt        d             d
d
d
       |j                  ddi      }	t+        |	d         dhk(  sJ y
# 1 sw Y   2xY w)zNSparse vector configs honor source key embedding and single-index enforcement.zsource-testrV   r  raw_text
source_keyr   r  tag_atag_br  Nzsparse-1zsource documentorangescitrusfruit)r&  r)  r*  r   r   r   r   r	  r   r   r   another_sparser(  r   )r   r   r   r   r	   r   r   r   r   rn   r'   r   searchr   r   r   r    r_   r!  r"  
ValueErrorr   )
ro   	sparse_efr   r   r;   r  metadatasparse_payloadsearch_resultstring_filters
             r1   3test_sparse_vector_source_key_and_index_constraintsr8    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   (H44H=c           	         t               }|j                  dt                      |j                  dt                      |j                  dt	                      |j                  dt                      t        | |      \  }}|j                  dgdgd	d
dddg       |j                  J |j                  j                         }| j                         }|j                  |j                        }|j                  J t        s|j                  j                         |k(  sJ |j                  dd	i      }t        |d         dhk(  sJ y)z<Custom schema overrides persist across new client instances.titler  published_yearscoreis_featuredr  z	persist-1zpersistent doczSchema Persistencei  g      @T)r:  r;  r<  r=  r   Nr   r   r   )r   r   r	   r
   r   r   r   r   r   r   r   r   r@   r   rn   r   )ro   r   r   r   expected_schema_jsonreloaded_clientr   r  s           r1   -test_schema_persistence_with_custom_overridesr@  ?  sg    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~;-///r3   c                    t        d      }t               j                  t        |            }t	        | |      \  }}|j                  dg      }|J t        j                  |d   g d	      sJ t        d
      }t	        | |      \  }}|j                  dg      }|J t        j                  |d   g d      sJ y)zE_embed should respect schema-provided and direct embedding functions.r   rF   r   rG   r  zschema documentNr                 ?       @      @g      @r   zdirect document)rD  rE  rF  )r*   r   r   r   r   _embednpallclose)	ro   schema_emb_fnr   schema_collectionr;   schema_embeddingsdirect_emb_fndirect_collectiondirect_embeddingss	            r1   Btest_collection_embed_uses_schema_or_collection_embedding_functionrQ  h  s    
 ,2MX"" MB # F 7q
 *002C1DE(((;;(+-FGGG+2M6(q
 *002C1DE(((;;(+_===r3   c                    t        d      }t        | |      \  }}t               j                  t	        d            }t        |j                         |j                  |      }|j                  dggk(  sJ |j                  rJ t        |j                  t              sJ |j                  j                  dk(  sJ |j                  }t        |t              sJ |j                  ddgk(  sJ y)	Q_embed_search_string_queries should embed string KNN queries using collection EF.primaryr%  rB  hello worldr         &@g      )@N)rU   r   r   r   r   r   r   _embed_search_string_queriesrZ   rY   r   _rankr   )ro   embedding_fnr   r;   r1  embedded_searchembedded_ranks          r1   %test_search_embeds_string_knn_queriesr]    s     4)DL/\MJ X]]3]34F	*

 ==fEO$$-(9999''''fllC(((<<...#))MmS)))4,...r3   c                 Z   t        d      }t               j                  dt        d|            }t	        | |      \  }}t               j                  t        dd	            }|j                  |      }t        |j                  t              sJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ |j                  }t        |t              sJ |j                  dk(  sJ t        |j                         |j                  t        d
gdg      k(  sJ y)rS  sparser%  r  r&  r'  r  r  rU  r.  r   rW  r   N)r   r   r   r   r   r   r   r   rX  r   rY  r	  r   r   r   )ro   r3  r   r   r;   r1  r[  r\  s           r1   Dtest_search_embeds_string_knn_queries_with_sparse_embedding_functionr`    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Jr3   c                 l   t        d      }t        | |      \  }}t        d      t        d      z   j                  t        d            }t        d      d	z  j	                         }t               j                  |      t               j                  |      g}|D cg c]  }|j                  |       }}dgdgdgdgg}	|j                  |	k(  sJ g }
|D ]&  }|
j                  t        |j                               ( |
sJ t        d
 |
D              sJ t        d |
D              sJ yc c}w )z>String queries in composite rank trees should all be embedded.nestedr%  rB  r   rV  r   r   delta   c              3   >   K   | ]  }t        |t                 y wr-   )r   rR   .0r   s     r1   	<genexpr>zDtest_search_embeds_string_queries_in_nested_ranks.<locals>.<genexpr>  s     Ce:eS))Cs   c              3   <   K   | ]  }t        |t                y wr-   )r   r^   rf  s     r1   rh  zDtest_search_embeds_string_queries_in_nested_ranks.<locals>.<genexpr>  s     @5z%&@s   N)rU   r   r   maxabsr   r   rX  rZ   r   r   rY  all)ro   rZ  r   r;   rank_onerank_twosearchessembedded_searchesexpected_queriesall_queriesr[  s               r1   1test_search_embeds_string_queries_in_nested_ranksrt    s2    4(CL/\MJ '"Sv%66;;Cg<NOH'"Q&++-Hh'x)@AHMUV@@CVV 	F8gY	B$$(8888K, H/0E0EFGH ;C{CCCC@K@@@@ Ws   "D1c                    t               j                  t                     }t        | |      \  }}|j	                  dgdgddig       t        j                  t              5  |j                  ddi       d	d	d	       |j                  |j                  
       t               j                  t                     j                  dt                     }|j                  |j                  |      }|j	                  dgdgddig       t        j                  t              5  |j                  ddi       d	d	d	       |j                  |j                  
       t               j                  dt                     }|j                  |j                  |      }|j	                  dgdgddig       |j                  ddi      }t        |d         dhk(  sJ y	# 1 sw Y   kxY w# 1 sw Y   xY w)z>Toggling inverted index enablement reflects in query behavior.rG   r  zno-indexr  global_fieldvaluer   r   Nr   r   r  r~   zkey-disabledr   zkey-enabledr   )r   delete_indexr	   r   r   r!  r"  	Exceptionrn   r  r@   r   r   r   )	ro   disabled_defaultsr   r   disabled_key_schemar  restored_schemarestoredr1  s	            r1   $test_schema_delete_index_and_restorer~    s    --5N5P-Q4 J
 NNL'"G,-   
y	! 8ng678 *//2 		68	9	*-F-H	I 
 //__%8 0 I MM''(   
y	! 2Z012 *//2h++8: , O ..___ / H LLO''(   \\V 4\5Fve}-000K8 8&2 2s   %G#(G0#G-0G9c                   	 t               j                  dt                     }t        | |      \  }j	                  dgt        t        g dg      ddigdg       j                  J j                  j                  d   j                  }|J |j                  }|J |j                  d
u sJ ddi	dt        g t        f   dd	fd}	fd	fd	fdg}|D ]
  } ||        y	)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	operationr5   c                     t        j                  t              5 } |         d d d        dt        j                        v sJ y # 1 sw Y   #xY wNz1Cannot filter using metadata key 'restricted_tag'r!  r"  r   rR   rw  r  exc_infos     r1   _expect_disabled_errorzetest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>._expect_disabled_error-  L    ]]/0 	HK	BcNNG
 
 	
 
	 	   AAc                  (     j                        S Nr   rn   r   filter_payloads   r1   <lambda>zWtest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>.<lambda>5      
^4 r3   c                  N     j                  t        t        g dg      d      S Nr  r   )query_embeddings	n_resultsr   r   r'   r   r  s   r1   r  zWtest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>.<lambda>6  +    
  !*/C.DE  ! 
 r3   c                  (     j                        S r  deleter  s   r1   r  zWtest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>.<lambda>;      
!!!7 r3   )r   rx  r	   r   r   r'   r   r   r   r   r   r   r!   r    )
ro   r   r;   schema_entryindex_configr  
operationsr  r   r  s
           @@r1   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)*r3   c                   	
 t               j                  dt                     }t        | |      \  }j	                  dgt        t        g dg      ddigdg       j                  J j                  j                  d   j                  }|J |j                  }|J |j                  d
u sJ ddi	t        	      
dt        g t        f   dd	fd}	fd	fd
fd	fdg}|D ]
  } ||        y	)zFDisabled metadata inverted index should block filter-based operations.r  r  r  r  r  r  r  r  NFr   r  r5   c                     t        j                  t              5 } |         d d d        dt        j                        v sJ y # 1 sw Y   #xY wr  r  r  s     r1   r  z[test_disabled_metadata_index_filters_raise_invalid_argument.<locals>._expect_disabled_error]  r  r  c                  (     j                        S r  r  r  s   r1   r  zMtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>e  r  r3   c                  N     j                  t        t        g dg      d      S r  r  r  s   r1   r  zMtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>f  r  r3   c                  &     j                        S r-   )r1  )r   search_requests   r1   r  zMtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>k  s    
!!.1 r3   c                  (     j                        S r  r  r  s   r1   r  zMtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>l  r  r3   )r   rx  r	   r   r   r'   r   r   r   r   r   r   r   r!   r    )ro   r   r;   r  r  r  r  r  r   r  r  s           @@@r1   ;test_disabled_metadata_index_filters_raise_invalid_argumentr  B  s7   
 X""%>%@ # F 00@PMJNN
%9$:;$i01'	   ((($$))*:;BBL###55L###5(((&6	%BN.1N
(2s7*; 
 
 	5	

 	27	+J   *	y)*r3   c                 n   t        |       \  }}t        ||j                        }d}t        |      D cg c]  }d| 	 }}t        |      D cg c]  }d| 	 }}t        |      D cg c]	  }dd| i }}|j	                  |||       t
        st        ||j                  |       |j                  |j                        }	|	j                  J d|	j                  j                  v sJ |	j                  j                  d   j                  }
|
J |
j                  }|J |j                  du sJ t        ||j                        }d	}t        |      D cg c]  }d
| 	 }}t        |      D cg c]  }d| 	 }}t        |      D cg c]	  }dd| i }}|j                  |||       t
        st        ||j                  |       |j                  |j                        }|j                  J d|j                  j                  v sJ |j                  j                  d   j                  }|J |j                  }|J |j                  du sJ |j                  ddi      }t        |d         dhk(  sJ |j                  ddi      }t        |d         dhk(  sJ | j!                         }|j                  |j                        }|j                  J d|j                  j                  v sJ d|j                  j                  v sJ yc c}w c c}w c c}w c c}w c c}w c c}w )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   r@   r7   r   r   r   r   r   r   r   r   r   r   rn   r   r   )ro   r   r   initial_version
batch_sizer9   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                           r1   /test_schema_discovers_new_keys_after_compactionr  s  su    55EFJ,VZ__EOJ(-j(9
:1]1#
:C
:%*:%674s7I705j0A*+,6!&*I * NNsi9NE!!&*//?K$$Z__5H??&&&X__11111"//..~>EE***/EE ,,, ((D000)&*//BLL272EFQ$QC(FJF.3L.AB[$BKB383F1./	fQCL)1 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#   LL*L#L(5L-L2c                    t        |       \  }}t        ||j                        }t        d      D cg c]  }d| 	 }}t        d      D cg c]	  }dd| i }}t        d      D cg c]  }d| 	 }}|j	                  |||       t
        st        ||j                  |       |j                  dgdgdd	ig       |j                  d
gddig       |j                  |j                        j                  }|J d|j                  v sJ |j                  d   }	|	j                  :|	j                  j                  $|	j                  j                  j                  du sJ |j                  ddi      }
t!        |
d         dhk(  sJ |j                  dgdg      }|d   J |d   d   }|J t#        |d   t$        t&        f      sJ yc c}w c c}w c c}w )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   r@   r7   r   r   r   r   r   r   r   r   r   r   r   rn   r   r   rQ   r8   )ro   r   r   r  r9   r   r   r   r   conflict_entryfetchconflict_bad_metabad_metadatas                r1   6test_schema_rejects_conflicting_discoverable_key_typesr    s    55EFJ,VZ__EO$)#J
/qYqc?
/C
/05c
*+,6!&*I * &+3Z04s0I0NNsi9N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AM 0* 1s   GG*Gc                     t               }|j                  dt                      t        | |      \  }}t	        ||j
                        }t        d      D cg c]  }d| 	 }}t        d      D cg c]  }d| 	 }}t        d      D cg c]	  }dd| i }}|j                  |||       t        ||j
                  |       |j                  J |j                  j                         }	|j
                   d
}
|j                  |
      }|j                  J |j                  j                         |	k(  sJ t	        ||j
                        }t        d      D cg c]  }d| 	 }}t        d      D cg c]  }d| 	 }}t        d      D cg c]
  }dd| d }}|j                  |||       t        ||j
                  |       |j                  |j
                        }|j                  J d|j                  j                  v sJ |j                  j                  d   j                  }|J |j                   }|J |j"                  du sJ |j                  |j
                        }|j                  J d|j                  j                  vsJ |j%                  ddi      }t'        |d         dhk(  sJ |j%                  ddi      }t'        |d         dhk(  sJ y	c c}w c c}w c c}w c c}w c c}w c c}w )zPAssert forked collections inherit schema and evolve independently of the parent.
shared_keyr  r  r  zparent-zparent doc parent_r   N_forkzfork-z	fork doc parentr  )r  
child_onlyr  T	parent_10r   r   z	parent-10r  zfork-10)r   r   r	   r   r   r@   r7   r   r   r   r   forkr   r   r   r   r   r   rn   r   )ro   r   r   r   parent_version_before_addr9   
parent_idsparent_docsparent_metadatasparent_schema_json	fork_nameforkedfork_versionfork_ids	fork_docsfork_metadatasupdated_childchild_only_configchild_inverted_indexreloaded_parentparent_resultschild_resultss                         r1   1test_collection_fork_inherits_and_isolates_schemar    s8    XF
L1J1LM4J
 !7vz O).s4AGA3-4J4.3Cj9[$9K9/4Sz1*+}%1 1 NN"   fjoo7PQ(((#**<<>??#5)I__Y'F==$$$==**,0BBBB)&&++>L%*3Z0%s0H0*/*5Q9QC5I5FKCj/ABxs|</N / MMh)~MNffkk<@))&++6M+++=//44444%,,11,?FF(((,BB+++''4///++JOO<O!!---55:::::$((k/J(KN~e$%+666JJlJ%?J@M}U#$333m 5914 15/s$   K24K7K<"L=LLc                    t               j                  t        t        d                  }t	        | |t        d            \  }}|j                  dgdg       |j                  dgd	g
      }|d	   J t        j                  |d	   d   g d      sJ t               }t               j                  dt        d|            }t	        | |      \  }}|j                  dgdgddig        |dg      d   }|j                  dgdg
      }	|	d   J |	d   d   }
|
J d|
v sJ t        t        |
d         }||k(  sJ |j                  t               j                  t!        dt        t"        |                        }t%        |d         dk(  sJ d|d   d   v sJ |j                  dgdgddig       |j                  dgdg
      }|d   J |d   d   }|J d|vsJ y)zKSchema-provided embedding functions drive both dense and sparse embeddings.r   rF   rB  rG   r   r   zembed-1zembedding documentr   r   r   r   Nr   rC  sparse_autotext_to_embedr'  r  r  zsparse-textr  zschema embeddingr   r   r.  r   r   zsparse-numeric)r   r   r   r*   r   r   rn   rI  rJ  r   r   r'   r   r1  r   r   r   r    r_   )ro   vector_schemavector_collectionr;   embeddedr3  sparse_schemasparse_collectionsparse_querysparse_resultsparse_metar5  sparse_searchnumeric_metanumeric_metadatas                  r1   ,test_schema_embedding_configuration_enforcedr  2  s   
 H)) 4KPQ4RS * M 72q9q K'(  
 !$$)|n$MHL!---;;x-a02KLLL46IH))&&(
 * M 7q
 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0r3   c                 X   t               j                  t                     j                  dt                     }t	        | |      \  }}t        d      D cg c]  }d| 	 }}t        d      D cg c]  }d| 	 }}t        d      D cg c]
  }dd	| d
 }}t        ||j                        }|j                  |||       t        st        ||j                  |       |j                  |j                        j                  }	|	J d|	j                  v sJ |	j                  d   j                  }
|
J |
j                  }|J |j                   du sJ d|	j                  v sJ |	j                  d   j                  }|J |j                  }|J |j                   du sJ |j#                  ddi      }t%        |d         t%        |      k(  sJ t'        j(                  t*              5  |j#                  ddi       ddd       yc c}w c c}w c c}w # 1 sw Y   yxY w)zLExplicit overrides take precedence over disabled defaults and discoverables.rG   explicit_keyr  r  r  zprecedence-r  explicit	discover_)r  discover_keyr   NTr  Fr   r   
discover_5)r   rx  r	   r   r   r7   r   r@   r   r   r   r   r   r   r   r   r   rn   r   r!  r"  ry  )ro   r   r   r   r9   r   r   r   r  schema_stateexplicit_key_stringexplicit_inverted_indexdiscover_key_stringdiscover_inverted_indexexplicit_results                  r1   ?test_schema_precedence_for_overrides_discoverables_and_defaultsr  w  sM   
 		68	9	.1J1L	M  5J
 ',Cj
1[
1C
1%*3Z04s0I0 s* $y_E*I *
 -VZ__EONNsi9N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4HH3H  H)c                    t        d      }t               j                  dt        d|            }t	        | |      \  }}|j                  g dg d	
       |j                  g ddg      }|d   J  |g d	      }t        g d      D ]f  \  }}|d   |   }	|	J d|	v sJ t        t        |	d         }
|
j                  ||   j                  k(  sJ |
j                  ||   j                  k(  rfJ  y)zQTest sparse embedding auto-generation using #document as source with no metadata.doc_no_metar%  auto_sparser   r'  r  r  doc1doc2doc3)rU  test documentshortr  r   r   N)r   r   r   r   r   r   rn   r   r'   r   r   r   )ro   r3  r   r   r;   r  expected_batchr9   doc_idr4  actuals              r1   ;test_sparse_auto_embedding_with_document_source_no_metadatar    s&   
 5=IIX""&"(
 # F 00@PMJ NN$;   ^^ 8;-^PF+*** HIN78 9	6+&q)###((( lH]$;<~~!2!:!::::}}q 1 8 88889r3   c                 4   t        d      }t               j                  dt        d|            }t	        | |      \  }}|j                  dd	gd
dgddddddg       |j                  dd	gdg      }|d   J |d   d   d   dk(  sJ |d   d   d   dk(  sJ |d   d   d   dk(  sJ |d   d   d   dk(  sJ d|d   d   v sJ d|d   d   v sJ  |d
dg      }t        t        |d   d   d         }|j                  |d   j                  k(  sJ y)zKTest sparse embedding with #document source when metadata is also provided.doc_with_metar%  
doc_sparser   r'  r  r  m1m2r   r   test*   )r   rw  prodc   r   r   r   Nr   r   rw  r   
r   r   r   r   r   r   rn   r'   r   r   )ro   r3  r   r   r;   r  r  	actual_m1s           r1   <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9r3   c                    t        d      }t               j                  dt        d|            }t	        | |      \  }}|j                  g dg d	dd
iddiddig       |j                  g ddg      }|d   J  |g d      }t        d      D ]i  }|d   |   }|J d|v sJ d|v sJ t        t        |d         }	|	j                  ||   j                  k(  sJ |	j                  ||   j                  k(  riJ  y)z7Test sparse embedding using a metadata field as source.meta_sourcer%  content_sparsecontentr'  r  r  s1s2s3r  sparse content onesparse content twosparse content threer   r   r   N)r&  r'  r(  r   )r   r   r   r   r   r   rn   r7   r'   r   r   r   
ro   r3  r   r   r;   r  r  r9   r4  r  s
             r1   3test_sparse_auto_embedding_with_metadata_source_keyr*    sU   
 5=IIX""& (
 # F 00@PMJ NN*,-,-./
   ^^ 2[M^JF+*** LN 1X 9+&q)###8+++ H$$$ lH-=$>?~~!2!:!::::}}q 1 8 88889r3   c                    t        d      }t               j                  dt        d|            }t	        | |      \  }}|j                  g dg d	d
d
ddid
g       |j                  g ddg      }|d   J  |g d	      }t        |d         D ]@  \  }}|J d|v sJ t        t        |d         }	|	j                  ||   j                  k(  r@J  |d   d   d   dk(  sJ y
)z@Test sparse embedding with mixed metadata (None, empty, filled).
mixed_metar%  mixed_sparser   r'  r  r  )n1n2n3n4)zdoc onezdoc twoz	doc threezdoc fourNexistingdatar   r   r   rd  )r   r   r   r   r   r   rn   r   r'   r   r   r)  s
             r1   >test_sparse_auto_embedding_with_mixed_metadata_none_and_filledr4  3  s5   
 5<HIX""&"(
 # F 00@PMJ NN$A 	
  	 ^^ 8;-^PF+*** NON !!45 ;8###))) lH^$<=~~!2!:!::::; +q!*-777r3   c                 6   t        d      }t               j                  dt        d|            }t	        | |      \  }}t        dgd	g
      }|j                  ddgddgdd|ig       |j                  ddgdg      }|d   J |d   d   }|J d|v sJ  |dg      d   }t        t
        |d         }	|	j                  |j                  k(  sJ |d   d   }
|
J t        t
        |
d         }|j                  dgk(  sJ |j                  d	gk(  sJ y)zBTest that sparse auto-embedding doesn't overwrite existing values.preserver%  preserve_sparser   r'  r  r  i  gw/^@r   	preserve1	preserve2zauto documentzmanual documentNr   r   r   r   r   )r   r   r   r   r   r   r   rn   r'   r   r   )ro   r3  r   r   r;   existing_sparser  	auto_metaexpected_autoactual_automanual_metaactual_manuals               r1   0test_sparse_auto_embedding_skips_existing_valuesr@  c  s}   
 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,,,r3   c                    t        d      }t               j                  dt        d|            }t	        | |      \  }}|j                  g dg d	dd
iddiddidg       |j                  g ddg      }|d   J d|d   d   v sJ  |d
g      d   }t        t        |d   d   d         }|j                  |j                  k(  sJ d|d   d   vsJ d|d   d   vsJ |d   d   J y)zJTest sparse embedding when source metadata field is missing or wrong type.missing_fieldr%  field_sparse
text_fieldr'  r  r  )f1f2f3f4)r	  r
  r  doc4z
valid text{   other_fieldrw  Nr   r   r   r   r   rd  r   r  )ro   r3  r   r   r;   r  expectedr  s           r1   4test_sparse_auto_embedding_with_missing_source_fieldrM    sN   
 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!)))r3   c                 N   t        d      }t               }|j                  dt                      |j                  dt	        d|             t        | |      \  }}|j                  d	d
gddgddddddg       |j                  d	d
gdg      }|d   J  |ddg      }t        |d         D ]F  \  }}|J d|v sJ t        t        |d         }	|	j                  ||   j                  k(  sJ d|v rFJ  |j                  ddi      }
t        |
d         d	hk(  sJ y)zCTest sparse auto-embedding works alongside string inverted indexes.with_string_indexr%  r   r  sparse_fieldcustom_textr'  r  multi1multi2zmain documentzanother documentzfield contentcat1)rQ  r   zdifferent contentcat2r   r   r   Nr   r   )r   r   r   r	   r   r   r   rn   r   r'   r   r   r   )ro   r3  r   r   r;   r  r  r9   r4  actual_fieldr   s              r1   5test_sparse_auto_embedding_with_string_inverted_indexrW    s   
 5;NOIXF
(*   &$(
   00@PMJNNx "$67+@/VD
   ^^8 4{m^LF+*** 1DEFN !45 &8### ))) L(>*BC##~a'8'@'@@@@ X%%%& ~~Z$8~9HxH:---r3   c                    t        d      }t        d      }t               }|j                  t	        |             |j                  dt        d|	      
       t        | ||      \  }}|j                  ddgddg       |j                  ddgddg      }|d   J t        |d         dk(  sJ t        |d   d         dk(  sJ |d   J |d   D ]  }|J d|v rJ  y)z9Test that dense and sparse auto-embeddings work together.rL   rF   
with_denser%  rB  rG   
sparse_keyr   r'  r  r  both1both2zcombined documentzanother docr  r   r   r   Nrd  r   )
r*   r   r   r   r   r   r   r   rn   r_   )ro   dense_efr3  r   r   r;   r  r4  s           r1   .test_dense_and_sparse_auto_embeddings_togetherr^    sD   
 '1-H4<HIXF
0HMN
&"(
   0#MJ NNg&6  
 ^^g{+  F ,+++vl#$)))vl#A&'1,,, +***;' (###x'''(r3   c                    t        d      }t               j                  dt        d|            }t	        | |      \  }}|j                  dgd	g
       |j                  dgdg
       |j                  dgddg      }|d   J |d   J |d   d   dk(  sJ d|d   d   v sJ  |dg      d   }t        t        |d   d   d         }|j                  |j                  k(  sJ |j                  dgdg
       |j                  dgdg      }|d   J d|d   d   v sJ  |dg      d   }	t        t        |d   d   d         }
|
j                  |	j                  k(  sJ y)z=Test sparse auto-embedding with update and upsert operations.update_upsertr%  update_sparser   r'  r  r  up1zoriginal docr  zupdated docr   r   r   Nr   up2zupserted doc)r   r   r   r   r   r   r   rn   r'   r   r   r   )ro   r3  r   r   r;   result_updaterL  r  r  expected_upsertactual_upserts              r1   1test_sparse_auto_embedding_with_update_and_upsertrg  #  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$;$;;;;r3   c                    t        d      }t               j                  dt        d|            }t	        | |      \  }}|j
                  }|j                  dgd	g
       | j                         }|j                  |      }|j                  J d|j                  j                  v sJ |j                  dgdg
       |j                  ddgdg      }|d   J d|d   d   v sJ d|d   d   v sJ y)zFTest that sparse auto-embedding config persists across client reloads.persist_testr%  persist_sparser   r'  r  r  persist1zpersistent documentr  r   Npersist2znew document after reloadr   r   r   r   )r   r   r   r   r   r@   r   r   r   r   r   rn   )	ro   r3  r   r   r   r   r?  r   r  s	            r1   ;test_sparse_auto_embedding_persistence_across_client_reloadrm  [  sN   
 5>JIX""&"(
 # F 55Ef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5r3   c                     t        d      }t               j                  dt        d|            }t	        | |      \  }}d}t        |      D cg c]  }d	| 	 }}t        |      D cg c]  }d
| 	 }}|j                  ||       |j                  |dd dg      }	|	d   J  ||      }
t        |	d         D ]@  \  }}|J d|v sJ t        t        |d         }|j                  |
|   j                  k(  r@J  yc c}w c c}w )z9Test sparse auto-embedding with large batch of documents.
batch_testr%  batch_sparser   r'  r  r  r   zbatch-zdocument number r  Nr  r   r   )r   r   r   r   r   r7   r   rn   r   r'   r   r   )ro   r3  r   r   r;   r  r9   r   r   r  r  r4  r  s                r1   0test_sparse_auto_embedding_with_batch_operationsrq    sD   
 5<HIX""&"(
 # F 00@PMJ J!&z!2
3AVA3<
3C
316z1BCA#A3'CICNNsiN0 ^^CR;-^@F+*** y)N !45 ;8###)))lH^$<=~~!2!:!::::; 4Cs   D-Dc                    t        d      }t               j                  dt        d|            }t	        | |      \  }}|j                  dgd	g
       |j                  dgdg      }|d   J |d   d   }|J d|v sJ y)zCTest sparse auto-embedding handles empty/None documents gracefully.
empty_testr%  empty_sparser   r'  r  r  empty1 r  r   r   Nr   )r   r   r   r   r   r   rn   )ro   r3  r   r   r;   r  r4  s          r1   /test_sparse_auto_embedding_with_empty_documentsrw    s    
 5<HIX""&"(
 # F 00@PMJ NNJ$  
 ^^
[M^BF+*** k"1%HX%%%r3   c                 2   t        |       \  }}|j                  }|J d|j                  v sJ |j                  d   j                  }|J |j                  }|J |j
                  du sJ |j                  J |j                  j                  J |j                  j                  dk(  sJ |j                  j                  }|J |j                         dk(  sJ |j                  }|J |j                  d      }|J |j                         dk(  sJ |j                         }	|	d   d   d   d	   }
|
d
   d   }|d   dk(  sJ |d   dk(  sJ |	d   d   d	   }|d
   d   }|d   dk(  sJ |d   dk(  sJ |	d   d   d   }|J |d
   d   }|d   dk(  sJ y)zbVerify that when no schema is provided, the collection uses DefaultEmbeddingFunction (not legacy).Nr   Tl2rm   r   r   r   r   rD   typeknownr@   r   sparse_vectorsparse_vector_indexunknown)r   r   r   r   r   r   rD   r|   r   r@   r   rn   r   )ro   r   r   r   r   r   r   rD   r   	json_dataembedding_vector	ef_configdefaults_vectordefaults_ef_configdefaults_sparsesparse_ef_configs                   r1   7test_default_embedding_function_when_no_schema_providedr    sA   
 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0r3   c                    | j                         }|j                          dt               j                   }t	        d      }|j                  ||       |j                  ||      }|j                  }|J d|j                  v sJ |j                  d   j                  }|J |j                  }|J |j                  du sJ |j                  J |j                  j                  J |j                  j                  dk(  sJ |j                  j                  }|J |j                         d	k(  sJ |j!                         d
dik(  sJ |j#                         }	|	d   d   d   d   }
|
d   d   }|d   dk(  sJ |d   d	k(  sJ |d   d
dik(  sJ |	d   d   d   }|d   d   }|d   dk(  sJ |d   d	k(  sJ |d   d
dik(  sJ |j%                  dgdg       |j'                  dgdg      }|d   J t)        |d   d         dk(  sJ y)zXVerify that custom embedding function is reflected in schema when no schema is provided.custom_ef_no_schema_   rF   r   Nr   TrJ   r>   r+   r   r   r   rD   r   rz  r{  r@   r   test1r  r  r   r   r   )r   r   r(   r   r*   r  r   r   r   r   r   r   rD   r|   r   r@   rC   r   r   rn   r_   ro   r   r   	custom_efr   r   r   r   r   r  r  r  r  r  r  s                  r1   -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,,,r3   c                 0   | j                         }|j                          dt               j                   }t	        d      }|j                  ||t                      |j                  ||      }|j                  }|J d|j                  v sJ |j                  d   j                  }|J |j                  }|J |j                  du sJ |j                  J |j                  j                  J |j                  j                  d	k(  sJ |j                  j                  }|J |j!                         d
k(  sJ |j#                         ddik(  sJ |j%                         }	|	d   d   d   d   }
|
d   d   }|d   dk(  sJ |d   d
k(  sJ |d   ddik(  sJ |	d   d   d   }|d   d   }|d   dk(  sJ |d   d
k(  sJ |d   ddik(  sJ |j'                  dgdg       |j)                  dgdg      }|d   J t+        |d   d         dk(  sJ y)z_Verify that custom embedding function is reflected in schema when default Schema() is provided.custom_ef_default_schema_r  rF   r@   r   r   r   Nr   TrJ   r>   r+   r   r   r   rD   r   rz  r{  r@   r   r  r  r  r   r   r   )r   r   r(   r   r*   r  r   r   r   r   r   r   r   rD   r|   r   r@   rC   r   r   rn   r_   r  s                  r1   2test_custom_embedding_function_with_default_schemar  X  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,,,r3   c                    | j                         }|j                          dt               j                   }t	        d      }t	        d      }t               j                  t        |            }t        j                  t              5 }|j                  |||       ddd       t        j                        }d	|j                         v sd
|j                         v sJ yy# 1 sw Y   FxY w)zTVerify that setting different custom embedding functions in schema and config fails.conflict_ef_rL   rF   r   rB  rG   r  Nr   conflict)r   r   r(   r   r*   r   r   r   r!  r"  ry  r  rR   rw  lower)ro   r   r   r   	schema_efr   r  	error_msgs           r1   ?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''C0c                    t               }|j                  t               d       |j                  t               t	        d             t        | |      \  }}|j                  J d|j                  j                  v sJ d|j                  j                  v sJ |j                  dgdgdd	d
g       |j                  ddi      }t        |d         dhk(  sJ |j                  dd	i      }t        |d         dhk(  sJ y)z6Test that create_index accepts both str and Key types.	field_strrD   r	  	field_keyr  Nz
key-test-1test docvalue1r  )r  r  r   r   r   )r   r   r	   r
   r   r   r   r   r   rn   r   )ro   r   r   r;   
str_result
int_results         r1   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3r3   c                 v   t               }|j                  t               d       |j                  t               t	        d             t        | |      \  }}|j                  J d|j                  j                  v sJ d|j                  j                  v sJ |j                  dgdgdd	d
g       t        j                  t              5  |j                  ddi       ddd       t        j                  t              5  |j                  dd	i       ddd       y# 1 sw Y   @xY w# 1 sw Y   yxY w)z6Test that delete_index accepts both str and Key types.disabled_strr  disabled_keyr  Nzdisable-test-1r  rw  r   )r  r  r   r   )r   rx  r	   r
   r   r   r   r   r   r!  r"  ry  rn   )ro   r   r   r;   s       r1   test_delete_index_with_key_typer    s1    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	! 8ng678 
y	! 4nc234 48 84 4s   D#D/#D,/D8c                 d   t               }|j                  t        t        j                  t        d                   t        | |t        d            \  }}|j                  J |j                  j                  d   j                  }|J |j                  J |j                  j                  j                  J |j                  j                  j                  dk(  sJ |j                  j                  j                  d	k(  sJ |j                  g d
g d       |j                  dgdg      }|d   J t!        |d   d         dk(  sJ |j#                  t%               j'                  t)        g dd                  }t!        |d         dkD  sJ t!        |d   d         dk  sJ y)z<Test that VectorIndexConfig source_key accepts Key.DOCUMENT.r   rF   r'  rG   r  Nr   rJ   r   )vec-1zvec-2zvec-3)zapple fruitzbanana fruitzcar vehicler  r  r   r   r   rC  rd  )r   limitr   )r   r   r   r   DOCUMENTr*   r   r   r   r   r   rD   r|   r(  r   rn   r_   r1  r   r   r   )ro   r   r   r;   embedding_configr  r6  s          r1   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,,,r3   c                    t        d      }t               j                  dt        t        j
                  |            }t        | |      \  }}|j                  J |j                  j                  d   j                  }|J |j                  J |j                  j                  j                  dk(  sJ |j                  g d	g d
       |j                  dgdg      }|d   J d|d   d   v sJ t        t         |d   d   d         }|j#                  t%               j'                  t)        dt        t*        |      d                  }t-        |d         dkD  sJ d|d   d   v sJ t               j                  dt        t	        d      |            }	t        | |	      \  }
}|
j                  J |
j                  j                  d   j                  }|J |j                  J |j                  j                  j                  dk(  sJ |
j                  ddgddgddiddig       |
j                  ddgdg      }|d   J d|d   d   v sJ d|d   d   v sJ t        t         |d   d   d         }|
j#                  t%               j'                  t)        dt        t*        |      d                  }t-        |d         dkD  sJ d|d   d   v sJ y)zLTest that SparseVectorIndexConfig source_key accepts both str and Key types.	key_typesr%  sparse1r'  r  r  Nr   r"  )applebananaoranger  r#  r   r   r   rd  )r	  r   r  r   sparse2rD  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}  rD   r(  r   rn   r'   r   r1  r   r   r   r    r_   )ro   r3  schema1collection1r;   sparse1_configresult1
sparse_vecsearch_result1schema2collection2sparse2_configresult2r  search_result2s                  r1   .test_sparse_vector_index_config_with_key_typesr  5  sX   
 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5r3   c                  `   t               } t        j                  t        d      5  | j	                  t               d       ddd       t        j                  t        d      5  | j	                  t               t        j                         ddd       y# 1 sw Y   WxY w# 1 sw Y   yxY w)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!  r"  r2  r   r	   r   	EMBEDDINGr  s    r1   /test_schema_rejects_special_key_in_create_indexr    s     XF	z)D	E U#<#>OTU 
K
 S 	#<#>CMMRS S	U US S   B%*B$B!$B-c                  `   t               } t        j                  t        d      5  | j	                  t               d       ddd       t        j                  t        d      5  | j	                  t               t        j                         ddd       y# 1 sw Y   WxY w# 1 sw Y   yxY w)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!  r"  r2  rx  r	   r   r  r  s    r1   /test_schema_rejects_special_key_in_delete_indexr    s     XF	z)D	E U#<#>OTU 
J
 R 	#<#>CLLQR R	U UR Rr  c                     t        j                  t        d      5  t        d       ddd       t        j                  t        d      5  t        t        j
                         ddd       t        j                  t        d      5  t        d       ddd       t        j                  t        d      5  t        t        j
                         ddd       t        j                  t        d      5  t        d       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   yxY w)z=Test that config validators reject invalid source_key values.z source_key cannot begin with '#'r  r   r0  Nz	#metadata)r!  r"  r2  r   r   r  r   r?   r3   r1   1test_schema_rejects_invalid_source_key_in_configsr    s     
z)K	L 3\23 
z)K	L 4S]]34 
z)K	L 9<89 
z)K	L :3==9: 
z)K	L 8;78 83 34 49 9: :8 8s;   DD
D&:D28D>DD#&D/2D;>Ec           	         | j                         }|j                          dt               j                   }t	               }ddlm}m}m}m	}  | | |d |                         |j                  d<   t        j                  t              5 }|j                  ||	       d
d
d
       t        j                         }	d|	v s(d|	j#                         v sd|	j#                         v sJ y
y
y
# 1 sw Y   KxY w)zKTest that server-side validation rejects schemas with invalid special keys.server_validate_r   )
ValueTypesStringValueTypeStringInvertedIndexTyper	   Tr   rD   )r   )r   z#invalid_keyr~   N#r	  invalid)r   r   r(   r   r   chromadb.api.typesr  r  r  r	   r   r!  r"  ry  r  rR   rw  r  )
ro   r   r   r   r  r  r  r	   r  r  s
             r1   .test_server_validates_schema_with_special_keysr    s    
 779F
LLN(6O XF  #-"902#
#FKK 
y	! FX  of EF HNN#IyEY__%66)yGX:XX:X6F Fs   C//C8c                    | j                         }|j                          dt               j                   }ddlm}m}m} t               }t        j                  ddd      } | | |d|      	      
      |j                  d<   t        j                  t              5 }|j                  ||       ddd       t!        j"                        }	d|	j%                         v sd|	v sd|	j%                         v sJ yyy# 1 sw Y   KxY w)zWTest that server-side validation rejects invalid source_key in SparseVectorIndexConfig.server_source_key_r   )r  SparseVectorValueTypeSparseVectorIndexTypeNr   )r   r(  bm25Tr  )r}  )r|  test_sparser~   r(  r  document)r   r   r(   r   r  r  r  r  r   r   model_constructr   r!  r"  ry  r  rR   rw  r  )
ro   r   r   r  r  r  r   invalid_configr  r  s
             r1   @test_server_validates_invalid_source_key_in_sparse_vector_configr    s   
 779F
LLN*57;;-8O  XF,<<N ",+ 5%!
"FKK 
y	! FX  of EF HNN#I	)))**	+*  	*F Fs   "D  D	r   c                 h   dt                }| j                  |      }|j                  }|J |j                  j                  J |j                  j                  j
                  J |j                  j                  j
                  j                  j                  J |j                  dddii       |j                  }|J |j                  j                  j
                  j                  j                  j                  dk(  sJ |j                  d   j                  j
                  j                  j                  j                  dk(  sJ | j                  |      }|j                  }|J |j                  j                  j
                  j                  j                  j                  dk(  sJ y)	bTest that modifying a collection without initial config/schema creates and updates default schema.test_modify_no_init_r   Nr}   rx   rt   r   r   )r(   r  r   r   r   r   rD   r}   modifyrx   r   r   r   r   r   r   updated_schemacollection_refreshedrefreshed_schemas          r1   ?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[]]]]r3   zSPANN is disabledc                 h   dt                }| j                  |      }|j                  }|J |j                  j                  J |j                  j                  j
                  J |j                  j                  j
                  j                  j                  J |j                  dddii       |j                  }|J |j                  j                  j
                  j                  j                  j                  dk(  sJ |j                  d   j                  j
                  j                  j                  j                  dk(  sJ | j                  |      }|j                  }|J |j                  j                  j
                  j                  j                  j                  dk(  sJ y)	r  r  r   Nr   r   r   r  r   )r(   r  r   r   r   r   rD   r   r  r   r   r   r  s          r1   Etest_modify_collection_no_initial_config_creates_default_schema_localr  4	  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Yr3   c                    dt                }| j                  |ddddi      }|j                  }|J |j                  j                  j
                  j                  j                  J |j                  j                  j
                  j                  j                  j                  dk(  sJ |j                  j                  j
                  j                  j                  j                  dk(  sJ |j                  ddd	ii
       |j                  }|J |j                  j                  j
                  j                  j                  j                  d	k(  sJ |j                  j                  j
                  j                  j                  j                  dk(  sJ |j                  d   j                  j
                  j                  j                  j                  d	k(  sJ |j                  d   j                  j
                  j                  j                  j                  dk(  sJ | j                  |      }|j                  }|J |j                  j                  j
                  j                  j                  j                  d	k(  sJ |j                  j                  j
                  j                  j                  j                  dk(  sJ y)zQTest creating collection with SPANN schema within server limits and modifying it.test_modify_with_schema_r}   r  2   rx   r   r@   r   Nrx      r  r   )r(   r  r   r   r   r   rD   r}   rx   r   r  r   r   r  s          r1   0test_modify_collection_with_initial_spann_schemar  V	  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Yr3   c                    dt                }| j                  |ddddi      }|j                  ddddi	       |j                  }|J |j                  j
                  j                  j                  j                  j                  dk(  sJ |j                  j
                  j                  j                  j                  j                  dk(  sJ |j                  j
                  j                  j                  j                  j                  dk(  sJ |j                  d   j
                  j                  j                  j                  j                  dk(  sJ |j                  d   j
                  j                  j                  j                  j                  dk(  sJ | j                  |      }|j                  }|J |j                  j
                  j                  j                  j                  j                  dk(  sJ |j                  j
                  j                  j                  j                  j                  dk(  sJ |j                  j
                  j                  j                  j                  j                  dk(  sJ y
)zCTest that modifying multiple SPANN fields updates schema correctly.test_modify_schema_multi_r}   @   r   r  r     r  r  Nrt   r   )r(   r  r  r   r   r   r   rD   r}   rx   r   ry   r   r   )r   r   r   r   r  r  s         r1   ;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\\\\r3   c                 >   dt                }| j                  |dddii      }|j                  }|J |j                  j                  J |j                  j
                  J |j                  j                  J |j                  j                  J |j                  j                  J |j                  d   J |j                  dddii	       |j                  }|J |j                  j                  J |j                  j                  j                  J |j                  j                  j                  J |j                  j
                  J |j                  j
                  j                  J |j                  j                  J |j                  j                  j                  J |j                  j                  J |j                  j                  j                  J |j                  j                  J |j                  j                  j                   J |j                  d   J |j                  d   j                  J |j                  d   j                  j                  J |j                  d   j                  j                  j"                  d
u sJ |j                  j$                  j&                  j(                  j*                  j,                  dk(  sJ | j/                  |      }|j                  }|J |j                  j$                  j&                  j(                  j*                  j,                  dk(  sJ |j                  j                  J |j                  j                  j                  J |j                  j                  j                  J |j                  j
                  J |j                  j                  J |j                  j                  J |j                  j                  J |j                  d   J y)zJTest that modifying configuration doesn't affect other schema value types.test_modify_schema_preserve_r}   rx   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   rD   r}   rx   r   )r   r   r   initial_schemar  r  r  s          r1   4test_modify_collection_preserves_other_schema_fieldsr  	  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9r3   c                     t               j                  t        t                           } t	        t               di | j                         dddddd	
      }t        t        t        t                     |d
      }|j                  J |j                  J |j                  j                  d      J |j                  dg      }|J t        j                   |d   g d      sJ y)z=Test that embeddings are using the schema embedding function.rB  rG   schema_only_collectionNrL   tenantdatabaser   )
idr@   configuration_jsonserialized_schemar4  	dimensionr  r  versionlog_position)r   modelr   r   rU  )rD  rE  rF  rG  )r   r   r   r*   CollectionModelr(   r   r   r'   r   object_embedding_functionr   rn   rH  rI  rJ  )r   collection_modelr   r   s       r1   +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!}&:;;;r3   c                       e Zd ZdZddefdZdee   dee   fdZdee   dee   fdZ	e
defd       Zdeeef   fd	Ze
d
eeef   dd fd       Zy)TestSparseEmbeddingFunctionzESparse embedding function for testing search API with string queries.rV   c                     || _         y r-   rj   r[   s     r1   r2   z$TestSparseEmbeddingFunction.__init__
  r   r3   r4   r5   c                     t        |      D cg c])  \  }}t        |gt        t        |      |z         g      + c}}S c c}}w r   r   r   s       r1   r<   z$TestSparseEmbeddingFunction.__call__"
  r   r   c                     t        |      D cg c],  \  }}t        |gt        t        |      |z   dz         g      . c}}S c c}}w )Nr   r   r   r   s       r1   re   z'TestSparseEmbeddingFunction.embed_query(
  sK     'u-
T #c$i#o6I0J/KL
 	
 
s   1Ac                       y)Ntest_sparse_efr?   r?   r3   r1   r@   z TestSparseEmbeddingFunction.name.
  s    r3   c                     d| j                   iS ri   rj   rB   s    r1   rC   z&TestSparseEmbeddingFunction.get_config2
  rk   r3   rD   c                 8    t        | j                  dd            S )NrV   r  )r
  rn   rG   s    r1   rH   z-TestSparseEmbeddingFunction.build_from_config5
  s    *6::g}+MNNr3   N)r  )rM   rN   rO   rP   rR   r2   r#   r   r<   re   rS   r@   r"   r    rC   rH   r?   r3   r1   r
  r
  
  s    Oc 
d3i 
D,> 

c 
tL/A 
  #    &DcN & O$sCx. O5R O Or3   r
  c                    t        d      }t               j                  dt        t        j
                  |            }t        | |      \  }}|j                  ddgd	d
g       |j                         }|J |d   J t        |d         dk(  sJ t               j                  t        dd	            }|j                  |      }|d   J t        |d         dk(  sJ t        |d   d         dkD  sJ d|d   d   v sJ y)zMTest that search API uses embedded_searches when string queries are embedded.search_testr%  rP  r'  r  r  r	  r
  rU  r  r  Nr   rd  r.  r   r   r   )r
  r   r   r   r   r  r   r   rn   r_   r   r   r   r1  )ro   r3  r   r   r;   r  r1  resultss           r1   =test_search_api_uses_embedded_searches_with_sparse_embeddingsr  :
  s2    ,-@IX""&||(
 # F 00@PMJNNV /2  
 ^^F+***vk"#q(((X]]3>GHF'G5>%%%wu~!###wu~a !A%%%WU^A&&&&r3   )ro   r   r5   N)NN)r5   N)t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   chromadb.execution.expressionr   r   chromadb.typesr  typingr    r!   r"   r#   r$   r%   r&   r'   uuidr(   numpyrI  r!  rR   r*   rU   r   r   r   r   r   r  r  r  markskipifr#  r8  r@  rQ  r]  r`  rt  r~  r  r  r  r  r  r  r  r  r  r*  r4  r@  rM  rW  r^  rg  rm  rq  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r?   r3   r1   <module>r%     s
   -    7  6 A 0 5 8 L L L    /S	:  2 P'8c'C P P<7:'7:	7:t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D4'D4	D4 O D4N *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<D $O"9$s)"D O $O< *3MN!'%!'	!' O!'r3   