
    ZiC1                    d   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mZmZmZmZ d dlmZ d dlmZmZmZ d dlmZ d dlZ G d deee                            Z G d d	eee                            Z G d
 d          ZddZddZddZ ddZ!ddZ"ddZ#ddZ$ddZ%ddZ&ddZ'ddZ(ddZ)dS )    )SchemaSparseVectorIndexConfigSparseEmbeddingFunctionSparseVectorStringInvertedIndexConfigIntInvertedIndexConfigFloatInvertedIndexConfigBoolInvertedIndexConfigVectorIndexConfigHnswIndexConfigSpannIndexConfigFtsIndexConfigEmbeddingFunction
EmbeddingsCmekCmekProvider)Key)ListDictAny)ValidationErrorNc                       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dS )MockSparseEmbeddingFunctionz+Mock sparse embedding function for testing.mock_sparsenamec                     || _         d S N_name)selfr   s     Z/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/test/api/test_schema.py__init__z$MockSparseEmbeddingFunction.__init__   s    


    inputreturnc                     d |D             S )Nc                 8    g | ]}t          d dgddg          S )r            ?)indicesvalues)r   ).0_s     r!   
<listcomp>z8MockSparseEmbeddingFunction.__call__.<locals>.<listcomp>    s-    OOOAaVS#J???OOOr#    )r    r$   s     r!   __call__z$MockSparseEmbeddingFunction.__call__   s    OOOOOOr#   c                      dS )Nr   r/   r/   r#   r!   r   z MockSparseEmbeddingFunction.name"   s    }r#   c                     d| j         iS )Nr   r   r    s    r!   
get_configz&MockSparseEmbeddingFunction.get_config&   s    
##r#   configc                 H    t          |                     dd                    S )Nr   r   )r   getr5   s    r!   build_from_configz-MockSparseEmbeddingFunction.build_from_config)   s    *6::fm+L+LMMMr#   N)r   )__name__
__module____qualname____doc__strr"   r   r   r0   staticmethodr   r   r   r4   r9   r/   r#   r!   r   r      s        55 S    Pd3i PD,> P P P P #    \$DcN $ $ $ $ N$sCx. N5R N N N \N N Nr#   r   c                       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dee         fdZdS )MockEmbeddingFunctionz$Mock embedding function for testing.
mock_model
model_namec                     || _         d S r   _model_name)r    rC   s     r!   r"   zMockEmbeddingFunction.__init__1   s    %r#   r$   r%   c                 (    dd l fd|D             S )Nr   c                 L    g | ] }                     g d j                  !S ))r)   g       @g      @)dtype)arrayfloat32)r,   r-   nps     r!   r.   z2MockEmbeddingFunction.__call__.<locals>.<listcomp>8   s/    KKK
;;KKKr#   )numpy)r    r$   rL   s     @r!   r0   zMockEmbeddingFunction.__call__4   s,     LKKKUKKKKr#   c                      dS )Nmock_embeddingr/   r/   r#   r!   r   zMockEmbeddingFunction.name:   s    r#   c                     d| j         iS )NrC   rE   r3   s    r!   r4   z MockEmbeddingFunction.get_config>   s    d.//r#   r5   c                 H    t          |                     dd                    S )NrC   rB   )rA   r7   r8   s    r!   r9   z'MockEmbeddingFunction.build_from_configA   s    $VZZl%K%KLLLr#   c                     dS )Ncosiner/   r3   s    r!   default_spacez#MockEmbeddingFunction.default_spaceE   s    xr#   c                 
    g dS )N)rS   l2ipr/   r3   s    r!   supported_spacesz&MockEmbeddingFunction.supported_spacesH   s    %%%%r#   N)rB   )r:   r;   r<   r=   r>   r"   r   r   r0   r?   r   r   r   r4   r9   rT   rX   r/   r#   r!   rA   rA   .   s'       ..& &3 & & & &Ld3i LJ L L L L  #       \ 0DcN 0 0 0 0 M$sCx. M5L M M M \Ms    &$s) & & & & & &r#   rA   c                   b   e Zd ZdZd.dZd.dZd.dZd.dZd.dZd.d	Z	d.d
Z
d.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.dZd.d Z d.d!Z!d.d"Z"d.d#Z#d.d$Z$d.d%Z%d.d&Z&d.d'Z'd.d(Z(d.d)Z)d.d*Z*d.d+Z+d.d,Z,d.d-Z-dS )/TestNewSchemaz$Test cases for the new Schema class.r%   Nc                    t                      }|j        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        j        j        j        du sJ |j        j        J |j        j        j	        J |j        j        j	        j        du sJ |j        j
        J |j        j
        j        J |j        j
        j        j        du sJ |j        j        J |j        j        j        J |j        j        j        j        du sJ |j        j        J |j        j        j        J |j        j        j        j        du sJ |j        J t#          |j                  dk    sJ d|j        v sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j        du sJ |j        d         j        j        J |j        d         j        j        j        du sJ d|j        v sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j        du sJ |j        d         j        j        j        j        dk    sJ dS )z5Test that Schema() initializes with correct defaults.NFT   	#document
#embedding)r   defaultsstring	fts_indexenabledstring_inverted_index
float_listvector_indexsparse_vectorsparse_vector_index	int_valueint_inverted_indexfloat_valuefloat_inverted_indexbooleanbool_inverted_indexkeyslenr5   
source_keyr    schemas     r!   "test_default_schema_initializationz0TestNewSchema.test_default_schema_initializationO   sD    *** %111%/;;;%/75@@@@%;GGGO"8@DHHHH )555)6BBBO&3;uDDDD ,888,@LLLO)=ENNNN (444(;GGGO%8@DHHHH *666*?KKKO'<DLLLL &222&:FFFO#7?4GGGG {&&&6;1$$$$ fk)))){;'.:::{;'.8DDD{;'.8@DHHHH{;'.DPPP{;'.DLPUUUUU v{****{<(3???{<(3@LLL{<(3@HDPPPPK%0=DO     r#   c                    t                      }t                      }|                    |d          }||u sJ d|j        v sJ |j        d         j        J |j        d         j        j        	 J |j        d         j        j        j        du sJ |j        d         j        j        j        |k    sJ |j        d         j        J |j        d         j	        J |j        d         j
        J |j        d         j        J |j        d         j        J |j        j        J |j        j        j        J |j        j        j        j        du sJ dS )zJTest creating a sparse vector index on a specific key with default config.custom_sparse_keyr5   keyNTF)r   r   create_indexrn   rf   rg   rb   r5   r`   rd   rh   rj   rl   r_   r    rr   r5   results       r!   &test_create_sparse_vector_index_on_keyz4TestNewSchema.test_create_sparse_vector_index_on_key   s    )**$$F8K$LL  #fk1111 {./=IIIK+,:N   K+,:NV    K+,:NU   
 {./6>>>{./:BBB{./9AAA{./;CCC{./7??? ,888,@LLLO)=ENNNNNNr#   c                    t                      }t          d          }t          |d          }|                    |d          }||u sJ d|j        v sJ |j        d         j        J |j        d         j        j        	 J |j        d         j        j        }|j        du sJ |j        j	        |k    sJ |j        j
        dk    sJ |j        j	                                        d	k    sJ |j        j	                                        d
dik    sJ |j        j        J |j        j        j        J |j        j        j        j        du sJ |j        j        j        j        j	        	 J dS )zTTest creating a sparse vector index with custom config including embedding function.custom_sparse_efr   custom_document_fieldembedding_functionrp   sparse_embeddingsrv   NTr   r   F)r   r   r   rx   rn   rf   rg   rb   r5   r   rp   r   r4   r_   )r    rr   embedding_funcr5   rz   sparse_indexs         r!   2test_create_sparse_vector_index_with_custom_configz@TestNewSchema.test_create_sparse_vector_index_with_custom_config   s    5:LMMM(-:Q
 
 

 $$F8K$LL  #fk1111{./=IIIK+,:N  
 {

+ 	 #t++++ "5GGGG"-1HHHHH "5::<<MMMM"5@@BB&G
 
 
 
 

 ,888,@LLLO)=ENNNN O)=DW    r#   c                    t                      }t                      }|                    |d          }||u sJ d|j        v sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j        du sJ d|j        v sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j        du sJ d|j        v sJ |j        d         j        J |j        j        J |j        j        j        J |j        j        j        j        du sJ dS )7Test disabling string inverted index on a specific key.custom_text_keyrv   NFr]   r^   T)r   r   delete_indexrn   r`   rc   rb   r_   ry   s       r!   test_delete_index_on_keyz&TestNewSchema.test_delete_index_on_key   s    +,,$$F8I$JJ  !FK//// {,-4@@@{,-4JVVVK)*1GOSXXXXX fk)))){;'.:::{;'.DPPPK$+AIURRRR v{****K%,444 %111%;GGGO"8@DHHHHHHr#   c                    t                      }t          dt                                }t                      }|                    |d                              |d                              |d          }||u sJ d|j        v sJ d|j        v sJ d|j        v sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j	        du sJ |j        d         j        j        j
        j        dk    sJ |j        d         j        J |j        d         j        J |j        d         j        J |j        d         j        J |j        d         j        J |j        d         j        J |j        d         j        j        J |j        d         j        j        j	        d	u sJ |j        d         j        J |j        d         j        J |j        d         j        J |j        d         j        J |j        d         j        J |j        d         j        J |j        d         j        j        J |j        d         j        j        j	        d	u sJ |j        d         j        J |j        d         j        J |j        d         j        J |j        d         j        J |j        d         j        J |j        j        J |j        j        j        J |j        j        j        j	        d	u sJ |j        j        J |j        j        j        J |j        j        j        j	        du sJ d
|j        v sJ d|j        v sJ |j        d
         j        J |j        d
         j        j        J |j        d
         j        j        j	        du sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j	        du sJ dS )zDTest chaining create_index() and delete_index() operations together.raw_textrp   r   embeddings_keyrv   
text_key_1
text_key_2NTFr]   r^   )r   r   r   r   rx   r   rn   rf   rg   rb   r5   rp   r`   rd   rh   rj   rl   rc   r_   ra   re   )r    rr   sparse_configstring_configrz   s        r!   )test_chained_create_and_delete_operationsz7TestNewSchema.test_chained_create_and_delete_operations"  s    0!6Q6S6S
 
 
 233 }:JKK\L\AA\L\AA 	   6;....v{****v{**** {+,:FFFK()7KWWW K()7KS    K /z    {+,3;;;{+,7???{+,6>>>{+,8@@@{+,4<<< {<(/;;;{<(/EQQQ{<(/EMQVVVVV {<(6>>>{<(3;;;{<(2:::{<(4<<<{<(0888 {<(/;;;{<(/EQQQ{<(/EMQVVVVV {<(6>>>{<(3;;;{<(2:::{<(4<<<{<(0888 ,888,@LLLO)=ENNNN %111%;GGGO"8@DHHHH fk))))v{****{;'.:::{;'.8DDDK$+5=EEEE{<(3???{<(3@LLLK%0=EMMMMMMr#   c                    t                      }t          dd          }|                    |          }||u sJ |j        j        J |j        j        j        J |j        j        j        j        du sJ |j        j        j        j        j        dk    sJ |j        j        j        j        j	        dk    sJ |j
        d         j        J |j
        d         j        j        J |j
        d         j        j        j        du sJ |j
        d         j        j        j        j        dk    sJ |j
        d         j        j        j        j	        d	k    sJ t          d
          }t          j        t          d          5  |                    |d           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    |d	           ddd           n# 1 swxY w Y   t          d          }t          j        t          d          5  |                    |d           ddd           dS # 1 swxY w Y   dS )z5Test vector index configuration and key restrictions.rS   custom_source)spacerp   r8   NFr^   Tr]   rV   )r   /Vector index cannot be enabled on specific keysmatch
my_vectorsrv   .Cannot create index on special key '#document'rW   /Cannot create index on special key '#embedding')r   r   rx   r_   rd   re   rb   r5   r   rp   rn   pytestraises
ValueError)r    rr   vector_configrz   vector_config2vector_config3s         r!   )test_vector_index_config_and_restrictionsz7TestNewSchema.test_vector_index_config_and_restrictions  s   )_UUU $$M$:: )555)6BBBO&3;uDDDD)6=CxOOOOO&3:EXXXX
 {<(3???{<(3@LLLK%0=EMMMM K%0=DJhVVVV K%0=DO   
 +666]O
 
 
 	I 	I ~<HHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I ]N
 
 
 	H 	H ~;GGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H +666]O
 
 
 	I 	I ~<HHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is6   ?F##F'*F'	G--G14G1#IIIc                    t                      }t          d          }t          ddd          }t          |d|d	          }|                    |
          }||u sJ |j        j        J |j        j        j        }|J |j        du sJ |j	        j
        |u sJ |j	        j
                                        dk    sJ |j	        j
                                        ddik    sJ |j	        j        dk    sJ |j	        j        J |j	        j        j        dk    sJ |j	        j        j        dk    sJ |j	        j        j        dk    sJ |j	        j        dk    sJ |j        d         j        J |j        d         j        j        }|J |j        du sJ |j	        j
        |u sJ |j	        j        dk    sJ |j	        j        J |j	        j        j        dk    sJ |j	        j        dk    sJ dS )zATest setting embedding function and HNSW config for vector index.custom_model_v2rC          d   ef_constructionmax_neighbors	ef_searchrV   r   )r   r   hnswrp   r8   NFrO   rC   r^   Tr]   )r   rA   r   r   rx   r_   rd   re   rb   r5   r   r   r4   r   r   r   r   r   rp   rn   )r    rr   mock_efhnsw_configr   rz   defaults_vectorembedding_vectors           r!   2test_vector_index_with_embedding_function_and_hnswz@TestNewSchema.test_vector_index_with_embedding_function_and_hnsw  s    (3DEEE%rS
 
 

 *&.	
 
 
 $$M$:: )555 /4A***&%////%8GCCCC%8==??CSSSSS%8CCEE+J
 
 
 
 
 %+t3333%*666%*:cAAAA%*8B>>>>%*4;;;;%04KKKKK {<(3???!;|4?L+++'4////&9WDDDD&,4444&+777&+;sBBBB#.+======r#   c                    t                      }t                      }t          j        t          d          5  |                    |           ddd           n# 1 swxY w Y   |                    |d          }||u sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j	        du sJ |j        d         j        j        j
        |k    sJ t                      }t          j        t          d          5  |                    |d           ddd           n# 1 swxY w Y   t          j        t          d	          5  |                    |d
           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    t                      d           ddd           dS # 1 swxY w Y   dS )z2Test FTS index configuration and key restrictions..FTS index can only be enabled on #document keyr   r8   Nr]   rv   Tcustom_text_fieldr   r^   r   )r   r   r   r   r   rx   rn   r`   ra   rb   r5   r   )r    rr   
fts_configrz   fts_config2s        r!   &test_fts_index_config_and_restrictionsz4TestNewSchema.test_fts_index_config_and_restrictions  sF   #%%
 ]N
 
 
 	3 	3 z222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 $$JK$HH {;'.:::{;'.8DDD{;'.8@DHHHH{;'.8?:MMMM %&&]N
 
 
 	M 	M {8KLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M ]O
 
 
 	F 	F {EEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F ]N
 
 
 	U 	U '@'B'BTTT	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	UsG   AA"AD??EE%F		FF/$G  G$'G$c                    t                      }t                      }t          j        t          d          5  |                    |d           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    |d           ddd           n# 1 swxY w Y   t                      }t          j        t          d          5  |                    |d           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    |d           ddd           dS # 1 swxY w Y   dS )zHTest that #embedding and #document keys are blocked for all index types.r   r   r]   rv   Nr   r^   )r   r   r   r   r   rx   r   )r    rr   r   r   s       r!   -test_special_keys_blocked_for_all_index_typesz;TestNewSchema.test_special_keys_blocked_for_all_index_types  s    233]N
 
 
 	G 	G }+FFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G ]O
 
 
 	H 	H },GGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 011]N
 
 
 	G 	G }+FFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G ]O
 
 
 	H 	H },GGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	HsG   AA #A B&&B*-B*C>>DD$E		EEc                 H   t                      }t          j        t          d          5  |                    d           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    d           ddd           dS # 1 swxY w Y   dS )z8Test that enabling all indexes for a key is not allowed.z.Cannot enable all index types for key 'my_key'r   my_keyrw   Nz/Cannot disable all index types for key 'my_key')r   r   r   r   rx   r   rq   s     r!   &test_cannot_enable_all_indexes_for_keyz4TestNewSchema.test_cannot_enable_all_indexes_for_key7  s4    ]N
 
 
 	. 	. H---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. ]O
 
 
 	. 	. H---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s#   AAA3BBBc                    t                      }t                      }t          j        t          d          5  |                    |           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    |d           ddd           n# 1 swxY w Y   t                      }t          j        t          d          5  |                    |           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    |d           ddd           n# 1 swxY w Y   |                    |d	           |j        d	         j        J |j        d	         j        j	        J |j        d	         j        j	        j
        d
u sJ |j        d	         j        j	        j        |k    sJ dS )zLTest that deleting vector index is not allowed and FTS delete is restricted.0Deleting vector index is not currently supportedr   r8   Nr   rv   5Deleting FTS index is only supported on #document keymy_textr]   F)r   r   r   r   r   r   r   rn   r`   ra   rb   r5   r    rr   r   r   s       r!   &test_cannot_delete_vector_or_fts_indexz4TestNewSchema.test_cannot_delete_vector_or_fts_indexG  s    *++]P
 
 
 	6 	6 }555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 ]P
 
 
 	H 	H },GGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H $%%
]U
 
 
 	3 	3 z222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 ]U
 
 
 	B 	B zyAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	:;???{;'.:::{;'.8DDD{;'.8@EIIII{;'.8?:MMMMMMsG   AA"AB%%B),B)C<<D D "EE
E
c                    t                      }|j        j        J |j        j        j        J |j        j        j        j        du sJ t                      }|                    |          }||u sJ |j        j        j        J |j        j        j        j        du sJ |j        j        j        j        |k    sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j        du sJ dS )z.Test disabling string inverted index globally.NTr8   Fr]   )	r   r_   r`   rc   rb   r   r   r5   rn   r    rr   r   rz   s       r!   +test_disable_string_inverted_index_globallyz9TestNewSchema.test_disable_string_inverted_index_globallyl  s(    %111%;GGG%;CtKKKK 233$$M$:: %;GGG%;CuLLLL%;BmSSSS {;'.:::{;'.DPPPK$+AIURRRRRRr#   c                    t                      }t                      }|                    |d          }||u sJ d|j        v sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j        du sJ |j        d         j        j        j        |k    sJ |j        d         j        J |j        d         j	        J |j        d         j
        J |j        j        J |j        j        j        J |j        j        j        j        du sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j        du sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j        du sJ dS )r   my_text_fieldrv   NFTr]   r^   )r   r   r   rn   r`   rc   rb   r5   rd   rf   rh   r_   re   r   s       r!   )test_disable_string_inverted_index_on_keyz7TestNewSchema.test_disable_string_inverted_index_on_key  s    233$$M$OO &+----{?+2>>>{?+2HTTTK(/EMQVVVVV K(/EL   
 {?+6>>>{?+9AAA{?+5=== %111%;GGG%;CtKKKK {;'.:::{;'.DPPP{;'.DLPUUUUU{<(3???{<(3@LLL{<(3@HDPPPPPPr#   c                    t                      }|j        j        J |j        j        j        J |j        j        j        j        du sJ t                      }|                    |          }||u sJ |j        j        j        j        du sJ |j        j        j        j        |k    sJ t                      }|                    |d          }||u sJ d|j        v sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j        du sJ |j        d         j        j        j        |k    sJ |j        d         j	        J |j        d         j
        J |j        d         j        J |j        d         j        J |j        d         j        J |j        d         j	        J |j        d         j
        J dS )	zATest disabling int inverted index globally and on a specific key.NTr8   F	age_fieldrv   r]   r^   )r   r_   rh   ri   rb   r   r   r5   rn   r`   rd   rf   rj   rl   )r    rr   
int_configrz   int_config2s        r!   test_disable_int_inverted_indexz-TestNewSchema.test_disable_int_inverted_index  s    (444(;GGG(;CtKKKK ,--
$$J$77 (;CuLLLL(;BjPPPP -..$$K[$II fk)))){;'1==={;'1DPPP{;'1DLPUUUUUK$.AHKWWWW {;'.666{;'2:::{;'5==={;'3;;;{;'/777 {;'.:::{<(3?????r#   c                    t                      }|                                }d|v sJ d|v sJ t          |d         t                    sJ t          |d         t                    sJ |d         }d|v sJ d|d         v sJ |d         d         d         du sJ |d         d         d         i k    sJ d|d         v sJ |d         d         d         d	u sJ |d         d         d         i k    sJ d
|v sJ d|d
         v sJ |d
         d         d         du sJ |d
         d         d         }d|v sJ |d         dk    sJ d|v sJ |d         d         dk    sJ |d         d         dk    sJ |d         d         i k    sJ d|v sJ d|d         v sJ |d         d         d         du sJ |d         d         d         }d|v sJ |d         ddik    sJ d|v sJ d|d         v sJ |d         d         d         d	u sJ |d         d         d         i k    sJ d|v sJ d|d         v sJ |d         d         d         d	u sJ |d         d         d         i k    sJ d|v sJ d|d         v sJ |d         d         d         d	u sJ |d         d         d         i k    sJ |d         }d|v sJ d|d         v sJ d|d         d         v sJ |d         d         d         d         d	u sJ |d         d         d         d         i k    sJ d|d         d         v sJ |d         d         d         d         du sJ |d         d         d         d         i k    sJ d|v sJ d
|d         v sJ d|d         d
         v sJ |d         d
         d         d         d	u sJ |d         d
         d         d         }d|v sJ |d         dk    sJ d|v sJ |d         dk    sJ d|v sJ |d         d         dk    sJ |d         d         dk    sJ |d         d         i k    sJ 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        k    sJ |j        j        j	        J |j        j        j	        j        d	u sJ |j        j        j	        j        |j        j        j	        j        k    sJ |j        j
        J |j        j
        j        J |j        j
        j        j        du sJ |j        j
        j        j        |j        j
        j        j        k    sJ |j        j
        j        j        j        dk    sJ |j        j
        j        j        j        	 J |j        j
        j        j        j                                        dk    sJ |j        j
        j        j        j                                        dk    sJ |j        j        J |j        j        j        J |j        j        j        j        du sJ |j        j        j        j        |j        j        j        j        k    sJ |j        j        J |j        j        j        J |j        j        j        j        d	u sJ |j        j        j        j        |j        j        j        j        k    sJ |j        j        J |j        j        j        J |j        j        j        j        d	u sJ |j        j        j        j        |j        j        j        j        k    sJ |j        j        J |j        j        j        J |j        j        j        j        d	u sJ |j        j        j        j        |j        j        j        j        k    sJ d|j        v sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j        d	u sJ |j        d         j        j        j        |j        d         j        j        j        k    sJ |j        d         j        j	        J |j        d         j        j	        j        du sJ |j        d         j        j	        j        |j        d         j        j	        j        k    sJ d|j        v sJ |j        d         j
        J |j        d         j
        j        J |j        d         j
        j        j        d	u sJ |j        d         j
        j        j        |j        d         j
        j        j        k    sJ |j        d         j
        j        j        j        dk    sJ |j        d         j
        j        j        j        dk    sJ |j        d         j
        j        j        j        dk    sJ |j        d         j
        j        j        j        	 J |j        d         j
        j        j        j                                        dk    sJ |j        d         j
        j        j        j                                        dk    sJ dS ) z;Test serialization and deserialization of a default Schema.r_   rn   r`   ra   rb   Fr5   rc   Trd   re   r   rV   r   typeknownr   defaultrf   rg   unknownintri   floatrk   boolrm   r]   r^   rp   N)r   serialize_to_json
isinstancedictdeserialize_from_jsonr_   r`   ra   rb   rc   rd   re   r5   r   r   r   rf   rg   rh   ri   rj   rk   rl   rm   rn   rp   )	r    original	json_datar_   r   sparse_vector_configrn   embedding_vector_configdeserializeds	            r!   )test_serialize_deserialize_default_schemaz7TestNewSchema.test_serialize_deserialize_default_schema  sY    88 ..00	 Y&&&&"""")J/66666)F+T22222 Z( 8####hx00000!+.y9UBBBB!+.x8B>>>>&(8*<<<<<!"9:9EMMMM!"9:8DJJJJ x'''',!77777%n5i@EIIII .~>xH-''''W%----#}4444126:gEEEE126:iGGGG128<BBBB (****$(AAAAA()>?	JeSSSS'89NO 
 $';;;;;#$89fi=PPPPP     #x666634Y?4GGGG34X>"DDDD (""""%')::::: !78CtKKKK !78BbHHHH !!!!$(88888 56yATIIII 56x@BFFFF   d""""4,,,,,d;/99999K *;7	BdJJJJK *;7ARGGGG&${*;H*EEEEEK *+BCINRWWWWWK *+BCHMQSSSSS t####tL11111l!3L!AAAAAL!,/?	JdRRRR"&|"4\"B>"R#
 11111&w/4777766666&|4CCCC#'>>>>>&';<VDOOOO&';<VD	QQQQ&';<XF"LLLL 3I>> $+777$+5AAA$+5=FFFF!(2: '19: : : : $+AMMM$+AITQQQQ!(>F '=EF F F F
 $/;;;$/<HHH$/<DMMMM!,9A +8@A A A A $/<CITQQQQ !,9@S   !,9@SXXZZ    (5<OTTVV   
 $2>>>$2FRRR$2FNRWWWWW!/CK .BJK K K K
 $.:::$.AMMM$.AITQQQQ!+>F *=EF F F F
 $0<<<$0EQQQ$0EMQUUUUU!-BJ ,AIJ J J J
 $,888$,@LLL$,@HDPPPP!)=E (<DE E E E
 l///// -4@@@ -4>JJJ -4>F$NNNNk*1;C}[)0:BC C C C  -4JVVVk*1GOSXXXXX k*1GO}[)0FNO O O O
 |00000 .9EEE .9FRRR .9FNRVVVVVl+6CK}\*5BJK K K K
 l+6CJU    M,'2?FQ   
 l+6CJPTXXXXX f-?   f-?    Mf-?     r#   c                    t                      }t          dd          }|                    |           |                                }|d         }d|v sJ d|d         v sJ |d         d         }|d         d	u sJ |d
         d         dk    sJ |d
         d         d         dk    sJ |d         }d|v sJ |d         d         d         }|d         du sJ |d
         d         dk    sJ |d
         d         dk    sJ |d
         d         d         dk    sJ t          j        |          }|j        j        J |j        j        j        J |j        j        j        j        d	u sJ |j        j        j        j	        j
        dk    sJ |j        j        j        j	        j        	 J d|j        v sJ |j        d         j        J |j        d         j        j        J |j        d         j        j        j        du sJ |j        d         j        j        j	        j
        dk    sJ |j        d         j        j        j	        j        dk    sJ |j        d         j        j        j	        j        	 J dS )z^Test serialization/deserialization of Schema with vector config where embedding_function=None.rS   N)r   r   r8   r_   rd   re   rb   Fr5   r   r   r   legacyrn   r^   Trp   r]   )r   r   rx   r   r   r_   rd   re   rb   r5   r   r   rn   rp   )	r    r   r   r   r_   vector_jsonrn   embedding_vector_jsonr   s	            r!   3test_serialize_deserialize_with_vector_config_no_efzATestNewSchema.test_serialize_deserialize_with_vector_config_no_ef  s#    88)#
 
 
 	]333 ..00	 Z(x'''',!77777|,^<9%....8$W-99998$%9:6BhNNNN  t#### $\ 2< @ P$Y/47777!(+G4@@@@$X.|<KKKK$X./CDVLPXXXXX 3I>> $/;;;$/<HHH$/<DMMMM!,9@F(RRRR !,9@S  
 |00000 .9EEE .9FRRR .9FNRVVVVVl+6CJP    l+6CJU   
 f-?    r#   c                    ddl m} t          |d<   	 t                      }t          d          }t	          ddd	          }t          |d
|          }|                    |           |                                }|d         }d|v sJ d|d         v sJ |d         d         }|d         du sJ |d         d         d
k    sJ |d         d         d         dk    sJ |d         d         d         dk    sJ |d         d         d         d         dk    sJ d|d         v 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|	v sJ |	d         d         d         }
|
d         du sJ |
d         d         d
k    sJ |
d         d          d!k    sJ |
d         d         d         dk    sJ |
d         d         d         dk    sJ |
d         d         d         d         dk    sJ d|
d         v sJ |
d         d         d         dk    sJ |
d         d         d         dk    sJ |
d         d         d         dk    sJ t          j        |          }|j	        j
        J |j	        j
        j        J |j	        j
        j        j        du sJ |j	        j
        j        j        j        d
k    sJ |j	        j
        j        j        j        	 J |j	        j
        j        j        j                                        dk    sJ |j	        j
        j        j        j                                        }|d         dk    s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	        j
        j        j        j        j        dk    sJ d|j        v sJ |j        d         j
        J |j        d         j
        j        J |j        d         j
        j        j        du sJ |j        d         j
        j        j        j        d
k    sJ |j        d         j
        j        j        j        d!k    sJ |j        d         j
        j        j        j        	 J |j        d         j
        j        j        j                                        dk    sJ |j        d         j
        j        j        j                                        }|d         dk    sJ |j        d         j
        j        j        j        	 J |j        d         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 	 d|v r|d= d"S d"S # d|v r|d= w xY w)#zLTest serialization/deserialization of Schema with custom embedding function.r   known_embedding_functionsrO   custom_model_v3r      0      r   rW   r   r   r   r8   r_   rd   re   rb   Fr5   r   r   r   r   r   rC   r   r   r   r   rn   r^   Trp   r]   N)"chromadb.utils.embedding_functionsr   rA   r   r   r   rx   r   r   r_   rd   re   rb   r5   r   r   r   r4   r   r   r   r   rn   rp   )r    r   r   	custom_efr   r   r   r_   r   rn   r   r   	ef_configef_config_embeddings                 r!   )test_serialize_deserialize_with_custom_efz7TestNewSchema.test_serialize_deserialize_with_custom_ef  s    	QPPPPP6K!"23k	@xxH-9JKKKI) #2  K .#,   M
 !!!777 !2244I !,H8++++!Xl%;;;;;"<0@Ky)U2222x(1T9999x()=>vF'QQQQH%&:;FCGWWWWW H%&:;HElS$% % % % [22222x(01BCsJJJJx(0ARGGGGx(0=DDDD V$D4''''$($6|$D^$T!%i0D8888 &h/8D@@@@ &h/=LLLL &h/0DEfMQXXXXX &h/0DEfM#$ $ $ $ &h/0DEhO  %% % % % 28<<<<<(26:;LMQTTTTT(26:?KrQQQQ(26:;G3NNNN "7	BBL  (3???(3@LLL(3@HEQQQQ%0=DJdRRRR %0=DW   %0=DW\\^^#$ $ $ $ %-8EL_jjllI\*.?????(3@GLXXX%0=DIY    %0=DIW    %0=DIS   
  <#44444$\2=III$\2=JVVV!,/:GOSWWWWW !,/:GNT    ! \&    ! \&1C   ! \&1CDDFF#$ $ $ $ #/"3#f-?

   '|48IIIII !,/:GNS   ! \&o    ! \&m    ! \&i      #<<<-.>??? =<#<<<-.>?????s   WW; ;	Xc                    ddl m} t          |d<   	 t                      }t          d          }t	          dddd	
          }t          |d|          }|                    |           |                                }|d         }d|v sJ d|d         v sJ |d         d         }|d         du sJ |d         d         dk    sJ |d         d         d         dk    sJ |d         d         d         dk    sJ |d         d         d         d         dk    sJ d|d         v 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         d	k    sJ |d                             d          J |d!         }	d"|	v sJ |	d"         d         d         }
|
d         d#u sJ |
d         d         dk    sJ |
d         d$         d%k    sJ |
d         d         d         dk    sJ |
d         d         d         dk    sJ |
d         d         d         d         dk    sJ d|
d         v 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         d	k    sJ |
d                             d          J t          j	        |          }|j
        j        J |j
        j        j        J |j
        j        j        j        du sJ |j
        j        j        j        j        dk    sJ |j
        j        j        j        j        	 J |j
        j        j        j        j                                        dk    sJ |j
        j        j        j        j                                        }|d         dk    s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
        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"|j        v sJ |j        d"         j        J |j        d"         j        j        J |j        d"         j        j        j        d#u sJ |j        d"         j        j        j        j        dk    sJ |j        d"         j        j        j        j        d%k    sJ |j        d"         j        j        j        j        	 J |j        d"         j        j        j        j                                        dk    sJ |j        d"         j        j        j        j                                        }|d         dk    sJ |j        d"         j        j        j        j        	 J |j        d"         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        d"         j        j        j        j        j        d	k    sJ |j        d"         j        j        j        j        	 J 	 d|v r|d= d S d S # d|v r|d= w xY w)&zETest serialization/deserialization of Schema with SPANN index config.r   r   rO   spann_modelr   r   2   r      )search_nprobewrite_nprober   r   rS   )r   r   spannr8   r_   rd   re   rb   Fr5   r   r   r   r   r   rC   r   r   r   r   r   r   Nrn   r^   Trp   r]   )r   r   rA   r   r   r   rx   r   r7   r   r_   rd   re   rb   r5   r   r   r   r4   r   r   r   r   r   r   rn   rp   )r    r   r   r   spann_configr   r   r_   r   rn   r   r   r   r   s                 r!   ,test_serialize_deserialize_with_spann_configz:TestNewSchema.test_serialize_deserialize_with_spann_config  s    	QPPPPP6K!"23B	@xxH-GGGI+!CSV  L .#,HL  M !!!777 !2244I !,H8++++!Xl%;;;;;"<0@Ky)U2222x(1X====x()=>vF'QQQQH%&:;FCGWWWWW H%&:;HElS ! ! ! ! k(33333x(1/BcIIIIx(1.ARGGGGx(12CDKKKKx(1+>#EEEEx(,,V44<<< V$D4''''$($6|$D^$T!%i0D8888 &h/8HDDDD &h/=LLLL &h/0DEfMQXXXXX &h/0DEfM#$ $ $ $ &h/0DEhO  !! ! ! ! 3H=====(27;OLPSSSSS(27;NKrQQQQ(27;<MNRUUUUU(27;KHCOOOO(266v>>FFF "7	BBL  (3???(3@LLL(3@HEQQQQ%0=DJhVVVV %0=DW   %0=DW\\^^#$ $ $ $ %-8EL_jjllI\*m;;;; %0=DJVVV %0=DJX    %0=DJW    %0=DJZ    %0=DJT     (3@GLTTT  <#44444$\2=III$\2=JVVV!,/:GOSWWWWW !,/:GNT    ! \&    ! \&1C   ! \&1CDDFF#$ $ $ $ #/"3#f-?

   '|4EEEE !,/:GNT   ! \&}    ! \&|    ! \&    ! \&y    !,/:GNS   
  #<<<-.>??? =<#<<<-.>?????s   [[= =	\c                    ddl m} t          |d<   t          |d<   	 t	                      }t          d          }t          dd	          }t          |d
|          }|                    |           t          d          }t          |d          }|                    |d           t                      }|
                    |d           t                      }	|
                    |	d           t                      }
|
                    |
d           |                                }|d         }|d         }|d         d         d         d         d
k    sJ |d         d         d         d         d         dk    sJ |d         d         d         d         d         dk    sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d |v sJ |d         }d!|v sJ |d!         d"         d#         d$u sJ |d!         d"         d         d%         dk    sJ |d!         d"         d         d&         d'         d(k    sJ |d!         d"         d         d&         d)         dk    sJ |d!         d"         d         d&         d         d)         dk    sJ d*|vsJ d|vsJ d+|vsJ d,|vsJ d-|vsJ |d         }d*|v sJ |d*         d.         d#         d/u sJ |d*         d.         d         i k    sJ d0|d*         vsJ d!|vsJ d|vsJ d+|vsJ d,|vsJ d-|vsJ |d         }d+|v sJ |d+         d1         d#         d/u sJ |d+         d1         d         i k    sJ d*|vsJ d!|vsJ d|vsJ d,|vsJ d-|vsJ |d         }d,|v sJ |d,         d2         d#         d/u sJ |d,         d2         d         i k    sJ d*|vsJ d!|vsJ d|vsJ d+|vsJ d-|vsJ |d          }d|v sJ |d         d         d#         d$u sJ |d         d         d         d         d
k    sJ |d         d         d         d%         dk    sJ |d         d         d         d&         d'         d(k    sJ |d         d         d         d&         d)         dk    sJ |d         d         d         d&         d         d3         dk    sJ |d         d         d         d         d         dk    sJ |d         d         d         d         d         dk    sJ |d         d         d                             d4          	 J d*|vsJ d!|vsJ d+|vsJ d,|vsJ d-|vsJ |d         }d*|v sJ |d*         d0         d#         d$u sJ |d*         d0         d         i k    sJ |d*         d.         d#         d/u sJ |d*         d.         d         i k    sJ d!|vsJ d|vsJ d+|vsJ d,|vsJ d-|vsJ t	          j        |          }|j        j        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        dk    sJ |j        j        j        j        j        j        dk    sJ |j        j        j        j        j        	 J |j        j        j        j        j                                        dk    sJ d|j        v sJ |j        d         j        J |j        d         j        j        	 J |j        d         j        j        j        d$u sJ |j        d         j        j        j        j        dk    sJ |j        d         j        J |j        d         j        J |j        d         j         J d|j        v sJ |j        d         j        J |j        d         j        j!        J |j        d         j        j!        j        d/u sJ |j        d         j        J |j        d         j        J d|j        v sJ |j        d         j         J |j        d         j         j"        J |j        d         j         j"        j        d/u sJ |j        d         j        J |j        d         j        J d|j        v sJ |j        d         j#        J |j        d         j#        j$        J |j        d         j#        j$        j        d/u sJ |j        d         j        J |j        d         j        J d |j        v sJ |j        d          j        J |j        d          j        j        J |j        d          j        j        j        j        d
k    sJ |j        d          j        j        j        j        dk    sJ |j        d          j        j        j        j        	 J |j        d          j        j        j        j        j        dk    sJ |j        j        J |j        j        j!        J |j        j        j!        j        d$u sJ |j        j         J |j        j         j"        J |j        j         j"        j        d$u sJ |j        j        J |j        j        j        J |j        j        j        j        d/u sJ 	 d|v r|d= d|v r|d= d5S d5S # d|v r|d= d|v r|d= w xY w)6zLTest serialization/deserialization with multiple mixed schema modifications.r   r   rO   r   mixed_test_modelr   i,  @   r   r   rW   r   r8   sparse_modelr~   
text_fieldr   embeddings_fieldrv   tagscountpricer_   rn   rd   re   r5   r   r   r   r   r]   r^   rf   rg   rb   Trp   r   r   r   r   r`   r   r   r   rc   Fra   ri   rk   rC   r   N)%r   r   rA   r   r   r   r   rx   r   r   r   r   r	   r   r7   r   r_   rd   re   r5   r   r   r   r   r   r   rn   rf   rg   rb   rp   r`   rh   rc   ri   rj   rk   )r    r   r   r   r   r   	sparse_efr   r   r   float_configr   r_   rn   embeddings_field_json	tags_json
count_json
price_jsonembedding_jsondocument_jsonr   s                        r!   6test_serialize_deserialize_complex_mixed_modificationszDTestNewSchema.test_serialize_deserialize_complex_mixed_modifications  s    	QPPPPP6K!"233N!-0O	=xxH .9KLLLI)#RPPPK-#,D{  M !!!777 4HHHI3#,  M !!<N!OOO 677M!!F!CCC 011J!!!AAA 455L!!7!CCC !2244I !,HV$D L).9(CGLPTTTTT&~6x@H%     &~6x@H#     &----T>>>>d????d????$&&&&4'''' %));$<!"&;;;;;%o67LMiX    &o67LMhW           &o67LMhW(     &o67LMhW( !! ! ! ! &o67LMhW("$ "" " " " #88888'<<<<< 55555"77777!66666 VIy((((X&'>?	JeSSSSX&'>?IROOOOi&99999")3333y0000	)))))++++**** gJJ&&&&e$%9:9ENNNNe$%9:8DJJJJ:----"*4444z1111*,,,,++++ gJj((((g&'=>yIURRRRg&'=>xHBNNNN:----"*4444z1111
****++++ ",/N>1111!,/?	JdRRRR|,^<XFwOSWWWWW |,^<XF|T    |,^<XF(     |,^<XF( $$ $ $ $ |,^<XF((* && & & & |,^<XFvN%     |,^<XFvN#     |,^<XFJJ7SS   >1111".8888.....0000//// !-M},,,, *;7	BdJJJJ *;7ARGGGG *+BCINRWWWWW *+BCHMQSSSSS"-7777}4444-----////.... "7	BBL  (3???(3@LLL(3@GMQUUUUU(3@GLXXX%0=DIY    %0=DIW    %0=DW   %0=DW\\^^#$ $ $ $
 &):::::$%78FRRR!"45CW   !& 3G    !& 3F:         $%78?GGG$%78CKKK$%78BJJJ \.....$V,3???$V,3IUUU!&)0FNRWWWWW  $V,:BBB$V,7??? l/////$W-7CCC$W-7JVVV!'*4GOSXXXXX  $W-4<<<$W-8@@@ l/////$W-9EEE!'*6KWWW !'*6KS     $W-4<<<$W-;CCC  <#44444$\2=III$\2=JVVV!,/:GNT    ! \&    !,/:GNS   ! \&o     (/;;;(/EQQQ%,BJdRRRR(2>>>(2EQQQ%/BJdRRRR(6BBB(6JVVV%3GOSXXXXXX  #<<<-.>? 999-m<<< :9  #<<<-.>? 999-m<<<<<s   j	j8 8kc                    t                      }t          dt                                }|                    |d           t	                      }|                    |d           d|j        v sJ |j        d         }|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        d         j        J |j        d         j        J |j        d         j        J |                                }|d         d         }d|v sJ d	|v sJ |d         d
         d         du sJ |d	         d         d         du sJ t          j        |          }d|j        v sJ |j        d         }|j        J |j        j        J |j        j        j        du sJ |j	        J |j	        j
        J |j	        j
        j        du sJ dS )z;Test that multiple index types can coexist on the same key.sourcer   multi_fieldrv   NTrn   rf   r`   rg   rb   rc   )r   r   r   rx   r   rn   rf   rg   rb   r`   rc   rd   rh   rj   rl   r   r   )	r    rr   r   r   r  r   multi_field_jsonr   des_multi_fields	            r!   %test_multiple_index_types_on_same_keyz3TestNewSchema.test_multiple_index_types_on_same_key  s    04O4Q4Q
 
 
 	=mDDD 233=mDDD ++++k-0(444(<HHH(<DLLLL!---!7CCC!7?4GGGG {=)4<<<{=)3;;;{=)5==={=)1999 ,,..	$V,];"22222+++++_-.CDYOSWWWWW)*AB9MQUUUUU 3I>> 11111&+M:,888,@LLL,@HDPPPP%111%;GGG%;CtKKKKKKr#   c                    t                      }t                      }|                    |d           d|j        v sJ |j        d         }|j        J |j        j        J |j        j        j        du sJ |                    |d           d|j        v sJ |j        d         }|j        J |j        j        J |j        j        j        du sJ |                                }d|d         v sJ |d         d         }d|v sJ |d         d         d	         du sJ t          j	        |          }d|j        v sJ |j        d         }|j        J |j        j        J |j        j        j        du sJ dS )
zcTest that disabling an index reverts to default behavior (key may still exist with disabled state).
temp_fieldrv   NTFrn   r`   rc   rb   )
r   r   rx   rn   r`   rc   rb   r   r   r   )	r    rr   r   temp_field_initialr  r   temp_field_jsonr   des_temp_fields	            r!   $test_override_then_revert_to_defaultz2TestNewSchema.test_override_then_revert_to_default  s    233=lCCC v{****#[6!(444!(>JJJ!(>F$NNNN 	=lCCC v{****[.
 ,,, 6BBB 6>%GGGG ,,..	y00000#F+L9?****x()@A)LPUUUUU 3I>>|00000%*<8$000$:FFF$:BeKKKKKKr#   c                 V   t                      }t                      }t          j        t          d          5  |                    |d           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    t                      d           ddd           n# 1 swxY w Y   t                      }|                    |d           t          j        t          d          5  |                                 ddd           n# 1 swxY w Y   t          j        t          d	          5  |                                 ddd           n# 1 swxY w Y   t          j        t          d
          5  |                    d           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    d           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    |           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    |           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    |d           ddd           n# 1 swxY w Y   t          j        t          d          5  |                    |d           ddd           dS # 1 swxY w Y   dS )z6Test that invalid operations raise appropriate errors.r   r   r^   rv   Nr   r]   zCannot disable all indexesz&Cannot enable all index types globallyz-Cannot enable all index types for key 'mykey'mykeyr   z.Cannot disable all index types for key 'mykey'r   r8   r   r   custom_fieldr   )	r   r   r   r   r   rx   r   r   r   r   s       r!   &test_error_handling_invalid_operationsz4TestNewSchema.test_error_handling_invalid_operationsA  s    *++]O
 
 
 	H 	H },GGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H ]N
 
 
 	U 	U '@'B'BTTT	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U $%%
:;??? ]:
 
 
 	" 	" !!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" ]:-UVVV 	" 	"!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" ]M
 
 
 	- 	- G,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- ]N
 
 
 	- 	- G,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- ]P
 
 
 	6 	6 }555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 ]U
 
 
 	3 	3 z222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 ]O
 
 
 	J 	J }.III	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J ]N
 
 
 	G 	G z~FFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   AA #A $B22B69B6=DD"%D"E%%E),E)F..F25F2G77G;>G;I  II&J		JJ/KKK9LL"%L"c                    t                      }|                                }t          |d                   dk    sJ d|d         v sJ d|d         v sJ t          j        |          }|j        }|j        J |j        j        J |j        j        j        du s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        J |j        j        J |j        j        j        du sJ |j        J |j        j        J |j        j        j        du sJ t          |j                  dk    sJ d|j        v sJ d|j        v sJ dS )z;Test serialization/deserialization of an unmodified schema.rn   r\   r]   r^   NTF)r   r   ro   r   r_   r`   rc   rb   ra   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   )r    r   r   r   r_   s        r!   test_empty_schema_serializationz-TestNewSchema.test_empty_schema_serialization  s]    88 ..00	 9V$%%****i/////y00000 3I>>  (***4@@@4<DDDD(444(0E9999"..."/;;;"/75@@@@%111%9EEE%9AUJJJJ!---!4@@@!4<DDDD#///#8DDD#8@DHHHH+++3???3;tCCCC <$%%****l/////|0000000r#   c                 x   ddl m} t          |d<   	 t                      }t          d          }t	          dd          }t          |d	|
          }|                    |           |                    t          dt                                d           |	                    t                      d           |                                }t          j        |          }|                                }t          j        |          }	|	                                }
t          j        |
          }||	|fD ]}|j        j        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        dk    sJ |j        j        j        j        j        j        dk    sJ |j        j        j        j        j        	 J |j        j        j        j        j                                        dk    sJ d|j        v sJ |j        d         }|j        J |j        j        J |j        j        j        du sJ |j        j        j        j        dk    sJ d|j        v sJ |j        d         }|j        J |j        j        J |j        j        j        du sJ t=          |j                  t=          |	j                  cxk    rt=          |j                  k    sn J t?          |j                                                  t?          |	j                                                  cxk    r*t?          |j                                                  k    sn J 	 d|v r|d= dS dS # d|v r|d= w xY w)zRTest that multiple serialization/deserialization cycles preserve schema integrity.r   r   rO   roundtrip_modelr   r   (   r  rS   r   r8   textr   
embeddingsrv   r  NTF) r   r   rA   r   r   r   rx   r   r   r   r   r   r   r_   rd   re   r5   r   r   r   r   r   r   rn   rf   rg   rb   rp   r`   rc   ro   set)r    r   r   r   r   r   json1schema1json2schema2json3schema3rr   embeddings_overridetags_overrides                  r!   .test_multiple_serialize_deserialize_roundtripsz<TestNewSchema.test_multiple_serialize_deserialize_roundtrips  s{    	QPPPPP6K!"23U	@xxH-9JKKKI)#RPPPK-#,H;  M !!!777!!.%:U:W:W   !	 "    !!)B)D)D&!QQQ ..00E2599G --//E2599G --//E2599G #GW5 )S )S1===1>JJJ1>EKxWWWW1>EJVVVO.;BGW    O.;BGU    O.;BU      O.;BUZZ\\'( ( ( (
 $v{2222&,k,&?#*8DDD*8LXXX'5IQ    (5IP[   
 ,,,, &F 3$+777$+AMMM$+AIURRRRR w|$$GL(9(9NNNNS=N=NNNNNNNGL%%''((w|((**++, , , ,w|((**++, , , , , , ,  #<<<-.>??? =<#<<<-.>?????s   NN0 0	N9c                    t                      }t          d          D ]}d| }|dk    r6|                    t          d| t	                                |           C|dz  dk    r$|                    t                      |           p|                    t                      |           t          |j	                  d	k    sJ d
|j	        v sJ |j	        d
         }|j
        J |j
        j        J |j
        j        j        du sJ d|j	        v sJ |j	        d         }|j        J |j        j        J |j        j        j        du sJ d|j	        v sJ |j	        d         }|j        J |j        j        J |j        j        j        du sJ |                                }t          |d                   d	k    sJ t          j        |          }t          |j	                  d	k    sJ d
|j	        v sJ |j	        d
         }	|	j
        J |	j
        j        J |	j
        j        j        du sJ |	j
        j        j        j        dk    sJ d|j	        v sJ |j	        d         }
|
j        J |
j        j        J |
j        j        j        du sJ d|j	        v sJ |j	        d         }|j        J |j        j        J |j        j        j        du sJ dS )z2Test schema with many key overrides (stress test).r   field_r   source_r   rv   r\   r(   4   field_0NTfield_1Ffield_2rn   source_0field_49field_48)r   rangerx   r   r   r   r   r   ro   rn   rf   rg   rb   r`   rc   rh   ri   r   r   r5   rp   )r    rr   ikey_namer6  r7  r8  r   r   des_field_0des_field_49des_field_48s               r!   test_many_keys_stressz#TestNewSchema.test_many_keys_stress  s    r 	S 	SA#||HAvv##2#0Q==+F+H+H   ! $     Q!##+D+F+FH#UUUU ##+A+C+C#RRRR 6;2%%%% FK''''+i($000$8DDD$8@DHHHHFK''''+i(~)))~3???~3;uDDDDFK''''+i( ,,, 3??? 3;uDDDD ,,..	9V$%%++++ 3I>><$%%++++ L-----"'	2(444(<HHH(<DLLLL%9@K    \.....#(4"..."8DDD"8@EIIII\.....#(4%111%8DDD%8@EIIIIIIr#   c                 x   t                      }|                    t          dt                                d                              t                      d                              t                      d                              t                      d          }||u sJ d|j        v sJ |j        d         }|j        J |j        j	        J |j        j	        j
        d	u sJ d|j        v sJ |j        d         }|j        J |j        j        J |j        j        j
        d
u sJ d|j        v sJ |j        d         }|j        J |j        j        J |j        j        j
        d
u sJ d|j        v sJ |j        d         }|j        J |j        j        J |j        j        j
        d
u sJ dS )z@Test chaining multiple create_index and delete_index operations.r&  r   field1rv   field2field3field4NTF)r   rx   r   r   r   r   r   rn   rf   rg   rb   r`   rc   rh   ri   )r    rr   rz   rD  rE  rF  rG  s          r!   test_chained_operationsz%TestNewSchema.test_chained_operationsZ  s    .%:U:W:W   	     \!:!<!<(\KK\!:!<!<(\KK\!7!9!9x\HH 	  6;&&&&X&#///#7CCC#7?4GGGG6;&&&&X&}(((}2>>>}2:eCCCC6;&&&&X&}(((}2>>>}2:eCCCC6;&&&&X&+++2>>>2:eCCCCCCr#   c                    t                      }|j        j        J |j        j        j        J |j        j        j        j        du sJ |j        j        J |j        j        j        J |j        j        j        j        du sJ t                      }|                    |           |j        j        j        J |j        j        j        j        du sJ t                      }|                    |           |j        j        j        J |j        j        j        j        du sJ |
                    t                      d           d|j        v sJ |j        d         j        j        j        du sJ |                    t                      d           d|j        v sJ |j        d         j        j        j        du sJ |                                }|d         d	         d
         d         du sJ |d         d         d         d         du sJ |d         d         d	         d
         d         du sJ |d         d         d         d         d         du sJ t          j        |          }|j        j        j        j        du sJ |j        j        j        j        du sJ |j        d         j        j        j        du sJ |j        d         j        j        j        du sJ dS )z8Test enabling/disabling float and bool inverted indexes.NTr8   Fr  rv   	is_activer_   r   rk   rb   r   rm   rn   )r   r_   rj   rk   rb   rl   rm   r	   r   r
   rx   rn   r   r   )r    rr   r	  bool_configr   r   s         r!   $test_float_and_bool_inverted_indexesz2TestNewSchema.test_float_and_bool_inverted_indexes  sJ    *666*?KKK*?G4OOOO&222&:FFF&:BdJJJJ 011<000*?KKK*?G5PPPP .//;///&:FFF&:BeKKKK 	#;#=#=7KKK&+%%%%{7#/DLPTTTTT 	#:#<#<+NNNfk)))){;'/CKuTTTT ,,..	j!'*+AB9MQVVVVV$V,-BCINRWWWWWfg&w/0FG	R    fk*623HI)T   
 3I>>$0EMQVVVVV$,@HEQQQQg&2GOSWWWWW k*2FNRWWWWWWWr#   c                    ddl m} t          |d<   	 t                      }t          d          }t	          |          }|                    |           |                                }|d         d	         d
         }|d         d         dk    sJ |d         d         d	         d
         }|d         d         dk    sJ t          j        |          }|j        j	        J |j        j	        j
        J |j        j	        j
        j        j        dk    sJ |j        d         j	        J |j        d         j	        j
        J |j        d         j	        j
        j        j        dk    sJ 	 d|v r|d= dS dS # d|v r|d= w xY w)zVTest that space is correctly inferred from embedding function when not explicitly set.r   r   rO   space_inference_testr   r   r8   r_   rd   re   r5   r   rS   rn   r^   Nr   r   rA   r   r   rx   r   r   r_   rd   re   r5   r   rn   	r    r   rr   r   r   r   r   r   r   s	            r!   ,test_space_inference_from_embedding_functionz:TestNewSchema.test_space_inference_from_embedding_function  s    	QPPPPP6K!"23+	@XXF .9OPPPI-#,  M }555 0022I (
3LA.QO"8,W5AAAA  )0>|L  $H-g6(BBBB "7	BBL(3???(3@LLL%0=DJhVVVV  $\2=III$\2=JVVV!,/:GNT      #<<<-.>??? =<#<<<-.>?????s   EE6 6	E?c                    ddl m} t          |d<   	 t                      }t          d          }t	          |d          }|                    |           |                                }|d	         d
         d         }|d         d         dk    sJ |d         d         d
         d         }|d         d         dk    sJ t          j        |          }|j        j	        J |j        j	        j
        J |j        j	        j
        j        j        dk    sJ |j        d         j	        J |j        d         j	        j
        J |j        d         j	        j
        j        j        dk    sJ 	 d|v r|d= dS dS # d|v r|d= w xY w)zTTest that explicit space parameter overrides the embedding function's default space.r   r   rO   override_testr   rV   r   r   r8   r_   rd   re   r5   r   rn   r^   NrP  rQ  s	            r!   8test_explicit_space_overrides_embedding_function_defaultzFTestNewSchema.test_explicit_space_overrides_embedding_function_default  s    	QPPPPP6K!"23-	@XXF
 .IIII-#,  M }555 0022I (
3LA.QO)'2d::::  )0>|L  !*73t;;;; "7	BBL(3???(3@LLL(3@GMQUUUUU$\2=III$\2=JVVV!,/:GNT      #<<<-.>??? =<#<<<-.>?????s   EE7 7	F c                    t                      }t          dd          }|                    |           |                                }|d         d         d         }|d         d	         dk    sJ |d         d
         d         dk    sJ |d         d         d         d         }|d         d	         dk    sJ |d         d
         d         dk    sJ t          j        |          }|j        j        J |j        j        j        J |j        j        j        j        j	        dk    sJ |j        j        j        j        j
        	 J dS )zITest space handling when no embedding function is provided (legacy mode).NrW   rU  r8   r_   rd   re   r5   r   r   r   r   rn   r^   )r   r   rx   r   r   r_   rd   re   r5   r   r   )r    rr   r   r   r   r   r   s          r!   /test_space_inference_with_no_embedding_functionz=TestNewSchema.test_space_inference_with_no_embedding_function-	  s    *#
 
 
 	=111 ,,..	 $J/=nMx(1T9999x()=>vF(RRRR$V,\:<HX)'2d::::)*>?G8SSSS 3I>>$/;;;$/<HHH$/<CITQQQQ!,9@S    r#   c                    ddl m} t          |d<   	 t                      }t          d          }t	          |          }|                    |           |                                }|d         d	         d
         d         d         dk    sJ t          j        |          }|                                }|d         d	         d
         d         d         dk    sJ t          j        |          }|                                }	|	d         d	         d
         d         d         dk    sJ ||fD ]D}
|
j        j	        J |
j        j	        j
        J |
j        j	        j
        j        j        dk    sJ E	 d|v r|d= dS dS # d|v r|d= w xY w)zQTest that inferred space remains stable across multiple serialization roundtrips.r   r   rO   roundtrip_space_testr   rO  r8   r_   rd   re   r5   r   rS   N)r   r   rA   r   r   rx   r   r   r_   rd   re   r5   r   )r    r   r   r   r   r)  r*  r+  r,  r-  rr   s              r!   (test_space_inference_multiple_roundtripsz6TestNewSchema.test_space_inference_multiple_roundtripsN	  s    	QPPPPP6K!"23)	@xxH-9OPPPI-#,  M !!!777 ..00Ej!,/?I'R    2599G --//Ej!,/?I'R    2599G --//Ej!,/?I'R   
 #G, X X1===1>JJJ1>EKxWWWWWX  #<<<-.>??? =<#<<<-.>?????s   E#F 	F
c                 T   t                      }t          dt                                }|                    |d           d|j        v sJ |j        d         }|j        J |j        j        J |j        j        j        du sJ |j        j        j        j	        dk    sJ t                      }|                    |d           d|j        v sJ |j        d         }|j        J |j        j        J |j        j        j        du sJ |j        j        j        j	        dk    sJ dS )zZTest that each key override has its own independent config (no inheritance from defaults).default_sourcer   rD  rv   NTrE  )r   r   r   rx   rn   rf   rg   rb   r5   rp   r   r`   rc   )r    rr   r   rD  r   rE  s         r!   "test_keys_have_independent_configsz0TestNewSchema.test_keys_have_independent_configs	  s{    0':<<
 
 
 	=h??? 6;&&&&X&#///#7CCC#7?4GGGG 4;F       
 233=h??? 6;&&&&X&}(((}2>>>}2:dBBBB  4;F           r#   c                    ddl m} t          |d<   	 t                      }t          d          }t	          dd          }t          |d	|
          }|                    |           |j        d         j        j	        j
        j        }|J |j        dk    sJ |j        dk    sJ t          d          }t	          dd          }t          |d|
          }	|                    |	           |j        j        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        dk    sJ |j        j        j	        j
        j        j        dk    sJ |j        d         j        J |j        d         j        j	        J |j        d         j        j	        j
        j        }
|
J |
j        dk    sJ |
j        dk    sJ |j        d         j        j	        j
        j        dk    sJ 	 d|v r|d= dS dS # d|v r|d= w xY w)zPTest that changes to global defaults don't affect already-created key overrides.r   r   rO   initial_modelr   r      r  rS   r   r8   r^   Nupdated_modelr   r   rV   )r   r   rA   r   r   r   rx   rn   rd   re   r5   r   r   r   r_   r   )r    r   rr   ef1hnsw1vector_config1initial_embedding_hnswef2hnsw2r   updated_embedding_hnsws              r!   :test_global_default_changes_dont_affect_existing_overrideszHTestNewSchema.test_global_default_changes_dont_affect_existing_overrides	  s    	QPPPPP6K!"238	@XXF (?CCCC#CrJJJE.#&hU  N ~666 &,[&fT # *555)9S@@@@)72==== (?CCCC#CrJJJE.#&d  N ~666 ?-999?-:FFF?-:AG4OOOO?-:AFRRR*7>CS    *7>CQUWWWWW ;|,7CCC;|,7DPPP%+[&fT # *555)9S@@@@)72====L)4AHNRVVVVVV
  #<<<-.>??? =<#<<<-.>?????s   HH; ;	Ic                    t                      }|                    t          dt                                d           |                    t	                      d           |                    t	                      d           |j        d         j        j        j        j	        dk    sJ |j        d         j
        j        j        du sJ |j        d         j
        j        j        du sJ |                    t	                      d           |j        d         j
        j        j        du sJ |j        d         }|j        J |j        j        J |j        j        j        du sJ |j        j        j        j	        dk    sJ |j        d         }|j
        J |j
        j        J |j
        j        j        du sJ |                                }t          j        |          }|j        d         j        j        j        j	        dk    sJ |j        d         j
        j        j        du sJ |j        d         j
        j        j        du sJ d	S )
zBTest that modifying one key's overrides doesn't affect other keys.source_ar   key_arv   key_bkey_cTFN)r   rx   r   r   r   rn   rf   rg   r5   rp   r`   rc   rb   r   r   r   )r    rr   rm  ro  r   r   s         r!   +test_key_specific_overrides_are_independentz9TestNewSchema.test_key_specific_overrides_are_independent	  s    	*%:U:W:W   	 	 	
 	
 	
 	#<#>#>GLLL#<#>#>GLLL K .BIT    {7#*@HDPPPP{7#*@HDPPPP 	#<#>#>GLLL {7#*@HEQQQQ G$"..."6BBB"6>$FFFF"6=HJVVVVG$|'''|1===|19TAAAA ,,..	3I>> /z   
  )0FNRWWWWW )0FNRVVVVVVVr#   c                 T   t                      }|j        j        J |j        j        j        J |j        j        j        j        du sJ |                    t                                 |j        j        j        j        du sJ |                    t                      d           |                    t                      d           |j        j        j        j        du sJ |j        d         }|j        J |j        j        J |j        j        j        du sJ |j        d         }|j        J |j        j        J |j        j        j        du sJ |	                                }d|d         v sJ d|d         v sJ d	|d         v sJ d
|d         v sJ d|d         vsJ dS )zDTest disabling an index globally, then enabling it on specific keys.NTr8   Fimportant_fieldrv   searchable_fieldrn   r]   r^   other_field)
r   r_   r`   rc   rb   r   r   rx   rn   r   )r    rr   	important
searchabler   s        r!   +test_global_default_disable_then_key_enablez9TestNewSchema.test_global_default_disable_then_key_enable
  s	    %111%;GGG%;CtKKKK 	#<#>#>???%;CuLLLL 	#<#>#>DUVVV#<#>#>DVWWW %;CuLLLL K 12	+++5AAA5=EEEE[!34
 ,,, 6BBB 6>$FFFF ,,..	 !If$55555!Yv%66666i/////y00000 If$5555555r#   c                    t                      }|                    t          dt                                d           |j        d         }|j        J |j        j        J |j        j        j        du sJ |j        J |j	        J |j
        J |j        J |j        J |                                }|d         d         }d|v sJ d	|vsJ d
|vsJ d|vsJ d|vsJ d|vsJ t          j        |          }|j        d         }|j        J |j        j        J |j        j        j        du sJ |j        J |j	        J dS )z\Test that when you override one aspect of a value type, other indexes still follow defaults.	my_sourcer   multi_index_fieldrv   NTrn   rf   r`   r   r   r   rd   )r   rx   r   r   rn   rf   rg   rb   r`   rh   rj   rl   rd   r   r   )r    rr   fieldr   
field_jsonr   	des_fields          r!   )test_partial_override_fills_from_defaultsz7TestNewSchema.test_partial_override_fills_from_defaultsJ
  s    	*&;V;X;X   $	 	 	
 	
 	
 /0 "..."6BBB"6>$FFFF |###&&& (((}$$$''' ,,..	v&':;
 *,,,,z))))J&&&&j((((Z'''':---- 3I>> %&9:	 &222&:FFF&:BdJJJJ '''"*****r#   c                     t          j        d          }|j        t          j        k    sJ |j        dk    sJ |                                du sJ t          j        d          }|                                du sJ dS )z(Test basic CMEK creation and validation.zRprojects/test-project/locations/us-central1/keyRings/test-ring/cryptoKeys/test-keyTzinvalid-formatFN)r   gcpproviderr   GCPresourcevalidate_pattern)r    cmekinvalid_cmeks      r!   test_cmek_basic_creationz&TestNewSchema.test_cmek_basic_creation~
  s     x`
 
 } 00000Mcd d d d
 $$&&$.... x 011,,..%777777r#   c                    t          j        d          }|                                }|ddik    sJ d|v sJ |d         dk    sJ t          j        |          }|j        t
          j        k    sJ |j        |j        k    sJ dS )z,Test CMEK serialization and deserialization..projects/p/locations/l/keyRings/r/cryptoKeys/kr  N)r   r  to_dict	from_dictr  r   r  r  )r    r  	cmek_dictrestoreds       r!   test_cmek_serializationz%TestNewSchema.test_cmek_serialization
  s    xHII LLNN	U$TUUUUU	!!!!#SSSSS >),, L$44444 DM111111r#   c                    t                      }|j        J t          j        d          }|                    |          }||u sJ |j        J |j        j        t          j        k    sJ |j        j        dk    sJ |                    d           |j        J t          j        d          }t                                          |          }|j        J |j        j        dk    sJ dS )z:Test CMEK integration with Schema using set_cmek() method.Nz7projects/test/locations/us/keyRings/ring/cryptoKeys/keyr  )	r   r  r   r  set_cmekr  r   r  r  )r    rr   r  rz   cmek2r,  s         r!   test_cmek_in_schemaz!TestNewSchema.test_cmek_in_schema
  s    {""" xQRR&&  {&&&{#|'77777K HI I I I
 	{""" IJJ((##E**|'''|$(XXXXXXXr#   c                    t          j        d          }t                                          |          }|                                }d|v sJ |d         ddik    sJ d|d         v sJ |d         d         dk    sJ t          j        |          }|j        J |j        j        t          j	        k    sJ |j        j
        |j
        k    sJ dS )z$Test Schema serialization with CMEK.r  r  r  N)r   r  r   r  r   r   r  r  r   r  r  )r    r  rr   r   r   s        r!   test_cmek_schema_serializationz,TestNewSchema.test_cmek_schema_serialization
  s   xHII""4(( ,,..	 """" C%
 
 
 
 
 	&)))))fe$(XXXXX 3I>> ,,, )\-===== )T]::::::r#   c                     t                      }|                                }d|vsJ t          j        |          }|j        J dS )z@Test Schema serialization without CMEK (backward compatibility).r  N)r   r   r   r  )r    rr   r   r   s       r!   +test_cmek_schema_without_cmek_serializationz9TestNewSchema.test_cmek_schema_without_cmek_serialization
  sX     ,,..	 Y&&&& 3I>> (((((r#   c                 8   t          j        t          d          5  t          j        i i i d           ddd           n# 1 swxY w Y   t          j        t          d          5  t          j        i i ddid           ddd           dS # 1 swxY w Y   dS )zCTest that invalid CMEK data raises a warning and sets cmek to None.z,Unsupported or missing CMEK provider in datar   )r_   rn   r  Ninvalid_providerzsome-resource)r   r   r   r   r   r3   s    r!   !test_cmek_invalid_deserializationz/TestNewSchema.test_cmek_invalid_deserialization
  s8   ]:-[\\\ 	 	(R88  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 ]:-[\\\ 	 	( "/A   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s#   AAA'BBBr%   N).r:   r;   r<   r=   rs   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r"  r1  rB  rH  rL  rR  rV  rX  r[  r^  rj  rp  rw  r~  r  r  r  r  r  r  r/   r#   r!   rZ   rZ   L   s       ..G
 G
 G
 G
R+
 +
 +
 +
Z1
 1
 1
 1
f(
 (
 (
 (
Tc
 c
 c
 c
J5I 5I 5I 5In1
 1
 1
 1
f&U &U &U &UPH H H H<. . . . #N #N #N #NJ
 
 
 
4%Q %Q %Q %QN)@ )@ )@ )@Vj
 j
 j
 j
XG
 G
 G
 G
Rr@ r@ r@ r@hI@ I@ I@ I@VW= W= W= W=r
2L 2L 2L 2Lh&L &L &L &LPAG AG AG AGF*1 *1 *1 *1X\@ \@ \@ \@|JJ JJ JJ JJX+D +D +D +DZ:
 :
 :
 :
x2@ 2@ 2@ 2@h4@ 4@ 4@ 4@l
 
 
 
B0@ 0@ 0@ 0@d%
 %
 %
 %
N?@ ?@ ?@ ?@B4W 4W 4W 4Wl*6 *6 *6 *6X2+ 2+ 2+ 2+h8 8 8 8&2 2 2 2Y Y Y Y@; ; ; ;0) ) ) )     r#   rZ   r%   c                      t                      } t                      }t          j        t          d          5  |                     |           ddd           dS # 1 swxY w Y   dS )zITest that sparse vector index cannot be created globally (without a key).z5Sparse vector index must be created on a specific keyr   r8   N)r   r   r   r   r   rx   rr   r   s     r!   -test_sparse_vector_cannot_be_created_globallyr  
  s    XXF+--M 
Q
 
 
 2 2 	=1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   AA #A c                     t                      } t                      }|                     |d           | j        d         j        J | j        d         j        j        J | j        d         j        j        j        du sJ t          j        t          d          5  | 
                    |d           ddd           dS # 1 swxY w Y   dS )zITest that sparse vector index cannot be deleted (temporarily disallowed).r   rv   NTz7Deleting sparse vector index is not currently supportedr   )r   r   rx   rn   rf   rg   rb   r   r   r   r   r  s     r!   $test_sparse_vector_cannot_be_deletedr    s3   XXF+--M }(;;;;x .:::;x .BNNN;x .BJdRRRR 
S
 
 
 @ @ 	=h???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   CCCc                  
   t                      } t                      }|                     |d           d| j        v sJ | j        d         j        J | j        d         j        j        J | j        d         j        j        j        du sJ t                      }|                     |t          d                     d| j        v sJ | j        d         j	        J | j        d         j	        j
        J | j        d         j	        j
        j        du sJ t                      }|                    |d           t                      }|                    |t          d                     |j        d         j        J |j        d         j        j        J |j        d         j        J |j        d         j        j        J |j        d         j        j        j        |j        d         j        j        j        k    sJ dS )zLTest that create_index accepts both str and Key types for the key parameter.test_field_strrv   NTtest_field_key
same_field)r   r   rx   rn   r`   rc   rb   r   r   rh   ri   rr   r   r   r,  r.  s        r!   "test_create_index_accepts_key_typer    s+   XXF .//M
}2BCCC v{****;'(/;;;;'(/EQQQ;'(/EMQUUUUU ())J
zs3C/D/DEEE v{****;'(2>>>;'(2EQQQ;'(2EMQUUUUU hhG<@@@hhG3|3D3DEEE <%,888<%,BNNN<%,888<%,BNNN\")?G<%,BJ	K 	K 	K 	K 	K 	Kr#   c                  
   t                      } t                      }t                      }|                     |d           d| j        v sJ | j        d         j        J | j        d         j        j        J | j        d         j        j        j        du sJ |                     |t          d                     d| j        v sJ | j        d         j	        J | j        d         j	        j
        J | j        d         j	        j
        j        du sJ t                      }|                    |d           t                      }|                    |t          d                     |j        d         j        J |j        d         j        j        J |j        d         j        J |j        d         j        j        J |j        d         j        j        j        |j        d         j        j        j        k    sJ dS )zLTest that delete_index accepts both str and Key types for the key parameter.r  rv   NFr  r  )r   r   r   r   rn   r`   rc   rb   r   rh   ri   r  s        r!   "test_delete_index_accepts_key_typer  ?  s-   XXF .//M'))J }2BCCC v{****;'(/;;;;'(/EQQQ;'(/EMQVVVVV zs3C/D/DEEE v{****;'(2>>>;'(2EQQQ;'(2EMQVVVVV hhG<@@@hhG3|3D3DEEE <%,888<%,BNNN<%,888<%,BNNN\")?G<%,BJ	K 	K 	K 	K 	K 	Kr#   c                  f   t                      } t                      }t          j        t          d          5  |                     |t          j                   ddd           n# 1 swxY w Y   t          j        t          d          5  |                     |t          j                   ddd           n# 1 swxY w Y   t          j        t          d          5  |                     |d           ddd           n# 1 swxY w Y   t          j        t          d          5  |                     |d           ddd           n# 1 swxY w Y   t          j        t          d          5  |                     |t          d	                     ddd           dS # 1 swxY w Y   dS )
zPTest that create_index rejects special keys like Key.DOCUMENT and Key.EMBEDDING.r   r   rv   Nr   r]   key cannot begin with '#'#custom_key#custom)	r   r   r   r   r   rx   r   DOCUMENT	EMBEDDINGrr   r   s     r!   &test_create_index_rejects_special_keysr  k  s@   XXF-//M 
J
 
 
 D D 	=clCCCD D D D D D D D D D D D D D D 
K
 
 
 E E 	=cmDDDE E E E E E E E E E E E E E E 
J
 
 
 C C 	=kBBBC C C C C C C C C C C C C C C 
z)D	E	E	E E E=mDDDE E E E E E E E E E E E E E E 
z)D	E	E	E F F=c)nnEEEF F F F F F F F F F F F F F F F F FY   "A&&A*-A*"B::B>B> DDD*EEE4%F&&F*-F*c                  f   t                      } t                      }t          j        t          d          5  |                     |t          j                   ddd           n# 1 swxY w Y   t          j        t          d          5  |                     |t          j                   ddd           n# 1 swxY w Y   t          j        t          d          5  |                     |d           ddd           n# 1 swxY w Y   t          j        t          d          5  |                     |d           ddd           n# 1 swxY w Y   t          j        t          d          5  |                     |t          d	                     ddd           dS # 1 swxY w Y   dS )
zPTest that delete_index rejects special keys like Key.DOCUMENT and Key.EMBEDDING.z.Cannot delete index on special key '#document'r   rv   NzCannot modify #embeddingr^   r  r  r  )	r   r   r   r   r   r   r   r  r  r  s     r!   &test_delete_index_rejects_special_keysr    s@   XXF-//M 
J
 
 
 D D 	=clCCCD D D D D D D D D D D D D D D 
4
 
 
 E E 	=cmDDDE E E E E E E E E E E E E E E 
4
 
 
 D D 	=lCCCD D D D D D D D D D D D D D D 
z)D	E	E	E E E=mDDDE E E E E E E E E E E E E E E 
z)D	E	E	E F F=c)nnEEEF F F F F F F F F F F F F F F F F Fr  c                     t          d          } | j        dk    sJ t          | j        t                    sJ t          t	          d                    }|j        dk    sJ t          |j        t                    sJ t          t          j                  }|j        dk    sJ t          |j        t                    sJ t          d          }t          t	          d                    }|j        |j        k    sJ t          d          }|j        J t          t	          d                    }|                                }|d         dk    sJ t          |d         t                    sJ dS )zFTest that VectorIndexConfig.source_key accepts both str and Key types.my_fieldrp   r]   testNserialize_testrp   )r   rp   r   r>   r   r  
model_dumpconfig1config2config3config4config5config6config7config_dicts           r!   4test_vector_index_config_source_key_accepts_key_typer    s     :666G++++g(#.....  3z??;;;G++++g(#.....  3<888G,,,,g(#.....  6222G3v;;777G!33333  4000G%%%  3/?+@+@AAAG$$&&K|$(88888k,/5555555r#   c                     t          d          } | j        dk    sJ t          | j        t                    sJ t          t	          d                    }|j        dk    sJ t          |j        t                    sJ t          t          j                  }|j        dk    sJ t          |j        t                    sJ t          d          }t          t	          d                    }|j        |j        k    sJ t          d          }|j        J t          t	          d                    }|                                }|d         dk    sJ t          |d         t                    sJ dS )zLTest that SparseVectorIndexConfig.source_key accepts both str and Key types.r  r  r]   r  Nr  rp   )r   rp   r   r>   r   r  r  r  s           r!   ;test_sparse_vector_index_config_source_key_accepts_key_typer    s    &<<<G++++g(#..... &ZAAAG++++g(#..... &>>>G,,,,g(#..... &888G%V===G!33333 &666G%%% &5E1F1FGGGG$$&&K|$(88888k,/5555555r#   c                  (   t          j        t          d          5  t          d           ddd           n# 1 swxY w Y   t          j        t          d          5  t          ddg           ddd           n# 1 swxY w Y   t          j        t          d          5  t	          d           ddd           n# 1 swxY w Y   t          j        t          d          5  t	          ddi           ddd           dS # 1 swxY w Y   dS )z@Test that config validators reject invalid types for source_key.zsource_key must be str or Keyr   {   r  Nnotvalid)r   r   r   r   r   r/   r#   r!   ,test_config_source_key_rejects_invalid_typesr    s    
z)H	I	I	I * *S))))* * * * * * * * * * * * * * * 
z)H	I	I	I 7 7eW%566667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 
z)H	I	I	I 0 03////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
z)H	I	I	I = =E7+;<<<<= = = = = = = = = = = = = = = = = =sC   9= =A>>BB$CCC'DDDc                     t          d          } | j        dk    sJ t          t          j                  }|j        dk    sJ t	          j        t          d          5  t          d           ddd           n# 1 swxY w Y   t	          j        t          d          5  t          t          j                   ddd           n# 1 swxY w Y   t	          j        t          d          5  t          d           ddd           n# 1 swxY w Y   t	          j        t          d          5  t          d           ddd           n# 1 swxY w Y   t	          j        t          d          5  t          d	           ddd           n# 1 swxY w Y   t          d
          }|j        d
k    sJ t          d          }|j        dk    sJ t          t          j                  }|j        dk    sJ t	          j        t          d          5  t          d           ddd           n# 1 swxY w Y   t	          j        t          d          5  t          t          j                   ddd           n# 1 swxY w Y   t	          j        t          d          5  t          d           ddd           n# 1 swxY w Y   t          d
          }|j        d
k    sJ dS )zGTest that source_key only allows #document, rejects other special keys.r]   r  z source_key cannot begin with '#'r   r^   Nz	#metadataz#scorer  r  )	r   rp   r   r  r   r   r   r  r   )r  r  r  r  r  r  s         r!   -test_config_source_key_validates_special_keysr    s     ;777G,,,,  3<888G,,,, 
z)K	L	L	L 3 3\22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 
z)K	L	L	L 4 4S]33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
z)K	L	L	L 2 2[11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
z)K	L	L	L / /X..../ / / / / / / / / / / / / / / 
z)K	L	L	L 0 0Y////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  :666G++++ &===G,,,, &>>>G,,,, 
z)K	L	L	L 9 9<88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 
z)K	L	L	L : :3=9999: : : : : : : : : : : : : : : 
z)K	L	L	L 8 8;77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 &<<<G++++++s    A==BB#C

CC0DDD3EEE6FFFH77H;>H;JJJ*KKKc                  V   t                      } t          j        t                    5 }|                     dt          d                     ddd           n# 1 swxY w Y   t          |j                  }d|                                v sJ d|                                v sJ dS )zkTest that SparseVectorIndexConfig raises ValueError when source_key is provided without embedding_function.invalid_sparser  r  )rw   r5   Nrp   r   )	r   r   r   r   rx   r   r>   valuelower)rr   exc_info	error_msgs      r!   5test_sparse_vector_config_requires_ef_with_source_keyr  ;  s    XXF 
z	"	" 
h *'   	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 HN##I9??,,,,,,9??#4#4444444s   &AA!Ac            	      T   t          j        t          t          f          5 } t	          t
          j                   ddd           n# 1 swxY w Y   t          | j                  }d|	                                v sJ d|	                                v sd|	                                v sJ t          j        t          t          f          5 } t          d           ddd           n# 1 swxY w Y   t          | j                  }d|	                                v sJ d|	                                v sd|	                                v sJ t          j        t          t          f          5 } t          d           ddd           n# 1 swxY w Y   t          | j                  }d|	                                v sJ d|	                                v sd|	                                v sJ t          j        t          t          f          5 } t          d           ddd           n# 1 swxY w Y   t          | j                  }d|	                                v sJ d|	                                v sd|	                                v sJ t          j        t          t          f          5 } t          d	           ddd           n# 1 swxY w Y   t          | j                  }d|	                                v sJ d|	                                v sd|	                                v sJ t          j        t          t          f          5 } t          d
           ddd           n# 1 swxY w Y   t          | j                  }d|	                                v sJ d|	                                v sd|	                                v sJ t          j        t          t          f          5 } t          d           ddd           n# 1 swxY w Y   t          | j                  }d|	                                v sJ d|	                                v sd|	                                v sJ t          j        t          t          f          5 } t!          d	           ddd           n# 1 swxY w Y   t          | j                  }d|	                                v sJ t!          ddddddd          }|j        dk    sJ |j        dk    sJ t          j        t          t          f          5 } t'          d	           ddd           n# 1 swxY w Y   t          | j                  }d|	                                v sJ t'          d,i dddddddddddddddd d!dd"d#d$dd%d&d'dd(d)d*d)d+d}|j        dk    sJ |j        dk    sJ |j        d)k    sJ t-          |d          rJ t-          |d          rJ t-          |d!          rJ dS )-z;Test that all config classes reject invalid/unknown fields.r   Nrw   extra	permittedr  )invalid_fieldr  r  gGz?Tr   ra     i  g333333?)r   r   r   num_threads
batch_sizesync_thresholdresize_factorr   r   search_rng_factorr)   search_rng_epsilong      $@nreplica_count   r   r   write_rng_factorwrite_rng_epsilong      @split_thresholdr   num_samples_kmeansinitial_lambdag      Y@reassign_neighbor_countmerge_threshold   num_centers_to_merge_tor   r   r   r   r/   )r   r   r   r   r   r   r  r>   r  r  r   r   r   r   r	   r
   r   r   r   r   r   r   hasattr)r  r  r5   r   s       r!   )test_config_classes_reject_invalid_fieldsr  O  s    

O4	5	5 2CL11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 HN##IIOO%%%%%%ioo'''';)//:K:K+K+K+K+K 

O4	5	5 0////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 HN##Iioo//////ioo'''';)//:K:K+K+K+K+K 

O4	5	5 -V,,,,- - - - - - - - - - - - - - - HN##Iioo//////ioo'''';)//:K:K+K+K+K+K 

O4	5	5 8!77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 HN##Iioo//////ioo'''';)//:K:K+K+K+K+K 

O4	5	5 2S11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 HN##Iioo//////ioo'''';)//:K:K+K+K+K+K 

O4	5	5 5 t44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 HN##Iioo//////ioo'''';)//:K:K+K+K+K+K 

O4	5	5 4d33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 HN##Iioo//////ioo'''';)//:K:K+K+K+K+K 

O4	5	5 +c****+ + + + + + + + + + + + + + + HN##Iioo//////   F !S((((2%%%% 

O4	5	5 ,s++++, , , , , , , , , , , , , , , HN##Iioo////// $   b#  4 q	
 R  #   4 u !#  !"  #  b!L& %++++$****'3....|%899999|%566666|%9:::::::s   AAAC**C.1C./FFFH..H25H23KKKM22M69M67PPPR66R:=R:=UU!Ur  )*chromadb.api.typesr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   &chromadb.execution.expression.operatorr   typingr   r   r   pydanticr   r   r>   r   rA   rZ   r  r  r  r  r  r  r  r  r  r  r  r  r/   r#   r!   <module>r     s                                     $ 7 6 6 6 6 6 " " " " " " " " " " $ $ $ $ $ $ N N N N N"9$s)"D N N N*& & & & &-d3i8 & & &<i* i* i* i* i* i* i* i*VU	2 	2 	2 	2@ @ @ @$' ' ' 'T) ) ) )XF F F F@F F F F@6 6 6 6B6 6 6 6B= = = =":, :, :, :,z5 5 5 5(q; q; q; q; q; q;r#   