§
    ˜ŠtjÜ– ã                   ó  — d dl mZmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZ d dlmZ d dlmZmZmZmZmZ d dlmZmZ d dlmZmZ d dlm Z  d dl!m"Z" d d	l#m$Z$ d d
l%m&Z&m'Z' d dl(m Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5Z6d dl7Z7e G d„ dee.e8                  ¦  «        ¦   «         Z9e G d„ dee.e8                  ¦  «        ¦   «         Z:	 	 	 	 d[d„Z;	 	 	 	 d[d„Z<e G d„ dee.e8                  ¦  «        ¦   «         Z=	 	 d\ddde0e         de0ee+                  de1e ef         fd„Z>de+de.e+         fd„Z?	 	 	 	 d[d„Z@	 	 	 	 d[d„ZA	 	 	 	 d[d „ZBe7jC         D                    e e¬!¦  «        	 	 	 	 d[d"„¦   «         ZEe7jC         D                    ee¬!¦  «        	 	 	 	 d[d#„¦   «         ZF	 	 	 	 d[d$„ZG	 	 	 	 d[d%„ZHe7jC         D                    ee¬!¦  «        	 	 	 	 d[d&„¦   «         ZIe7jC         D                    ee¬!¦  «        	 	 	 	 d[d'„¦   «         ZJe7jC         D                    ee¬!¦  «        	 	 	 	 d[d(„¦   «         ZK	 	 	 	 d[d)„ZL	 	 	 	 d[d*„ZMe7jC         D                    ee¬!¦  «        	 	 	 	 d[d+„¦   «         ZN	 	 	 	 d[d,„ZO	 	 	 	 d[d-„ZP e¦   «         e7jC         D                    ee¬!¦  «        	 	 	 	 d[d.„¦   «         ¦   «         ZQe7jC         D                    ee¬!¦  «        	 	 	 	 d[d/„¦   «         ZR	 	 	 	 d[d0„ZSe7jC         D                    ee¬!¦  «        	 	 	 	 d[d1„¦   «         ZTe7jC         D                    ee¬!¦  «        	 	 	 	 d[d2„¦   «         ZUe7jC         D                    ee¬!¦  «        	 	 	 	 d[d3„¦   «         ZVe7jC         D                    ee¬!¦  «        	 	 	 	 d[d4„¦   «         ZWe7jC         D                    ee¬!¦  «        	 	 	 	 d[d5„¦   «         ZXe7jC         D                    ee¬!¦  «        	 	 	 	 d[d6„¦   «         ZYe7jC         D                    ee¬!¦  «        	 	 	 	 d[d7„¦   «         ZZe7jC         D                    ee¬!¦  «        	 	 	 	 d[d8„¦   «         Z[e7jC         D                    ee¬!¦  «        	 	 	 	 d[d9„¦   «         Z\e7jC         D                    ee¬!¦  «        	 	 	 	 d[d:„¦   «         Z]e7jC         D                    ee¬!¦  «        	 	 	 	 d[d;„¦   «         Z^e7jC         D                    ee¬!¦  «        	 	 	 	 d[d<„¦   «         Z_	 	 	 	 d[d=„Z`	 	 	 	 d[d>„Za	 	 	 	 d[d?„Zb	 	 	 	 d[d@„Zce7jC         D                    ee¬!¦  «        	 	 	 	 d[dA„¦   «         Zde7jC         D                    ee¬!¦  «        	 	 	 	 d[dB„¦   «         Zee7jC         D                    ee¬!¦  «        	 	 	 	 d[dC„¦   «         Zfe7jC         D                    ee¬!¦  «        	 	 	 	 d[dD„¦   «         Zgd]dE„Zhd]dF„Zid]dG„Zje7jC         D                    ee¬!¦  «        	 	 	 	 d[dH„¦   «         Zke7jC         D                    ee¬!¦  «        	 	 	 	 d[dI„¦   «         Zle7jC         D                    ee¬!¦  «        dJeddfdK„¦   «         Zme7jC         D                    e dL¬!¦  «        dJeddfdM„¦   «         Zne7jC         D                    ee¬!¦  «        dJeddfdN„¦   «         Zoe7jC         D                    ee¬!¦  «        dJeddfdO„¦   «         Zpe7jC         D                    ee¬!¦  «        dJeddfdP„¦   «         Zqd]dQ„Zre G dR„ dSee.e8                  ¦  «        ¦   «         Zse7jC         D                    ee¬!¦  «        deddfdT„¦   «         Zt	 	 	 	 d[dU„Zu	 	 	 	 d[dV„Zv	 	 	 	 d[dW„Zw	 	 	 	 d[dX„Zx	 	 	 	 d[dY„Zye7jC         D                    ee¬!¦  «        	 	 	 	 d[dZ„¦   «         ZzdS )^é    )Ú	ClientAPIÚ	ServerAPI)ÚSchemaÚFtsIndexConfigÚSparseVectorIndexConfigÚSparseEmbeddingFunctionÚSparseVectorÚStringInvertedIndexConfigÚIntInvertedIndexConfigÚFloatInvertedIndexConfigÚBoolInvertedIndexConfigÚVectorIndexConfigÚSpannIndexConfigÚEmbeddingFunctionÚ
Embeddings)ÚKey)ÚClientFactoriesÚis_spann_disabled_modeÚskip_if_not_clusterÚskip_reason_spann_disabledÚskip_reason_spann_enabled)Úget_collection_versionÚwait_for_version_increase)Úregister_embedding_functionÚ"register_sparse_embedding_function)Ú
Collection)ÚCollectionCommon)ÚInvalidArgumentError)ÚKnnÚSearch)ÚAnyÚCallableÚDictÚListÚMappingÚOptionalÚTupleÚcast)Úuuid4Nc                   ó°   — e Zd ZdZddefd„Zdee         defd„Z	e
defd„¦   «         Zdeeef         fd	„Ze
d
eeef         dd fd„¦   «         Zdefd„ZdS )ÚSimpleEmbeddingFunctionzJSimple embedding function with stable configuration for persistence tests.é   Údimc                 ó   — || _         d S ©N©Ú_dim)Úselfr-   s     ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/chromadb/test/api/test_schema_e2e.pyÚ__init__z SimpleEmbeddingFunction.__init__0   s   € ØˆŒ	ˆ	ˆ	ó    ÚinputÚreturnc                 ó‚   ‡— d„ t          | j        ¦  «        D ¦   «         Št          t          ˆfd„|D ¦   «         ¦  «        S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS © )Úfloat©Ú.0Úis     r3   ú
<listcomp>z4SimpleEmbeddingFunction.__call__.<locals>.<listcomp>4   s   € Ð5Ð5Ð5˜q•%˜‘(”(Ð5Ð5Ð5r5   c                 ó   •— g | ]}‰‘ŒS r:   r:   )r=   Ú_Úvectors     €r3   r?   z4SimpleEmbeddingFunction.__call__.<locals>.<listcomp>5   s   ø€ Ð 7Ð 7Ð 7¨A Ð 7Ð 7Ð 7r5   )Úranger1   r(   r   )r2   r6   rB   s     @r3   Ú__call__z SimpleEmbeddingFunction.__call__3   sE   ø€ Ø5Ð5¥E¨$¬)Ñ$4Ô$4Ð5Ñ5Ô5ˆÝ•JÐ 7Ð 7Ð 7Ð 7°Ð 7Ñ 7Ô 7Ñ8Ô8Ð8r5   c                  ó   — dS )NÚ	simple_efr:   r:   r5   r3   ÚnamezSimpleEmbeddingFunction.name7   s   € àˆ{r5   c                 ó   — d| j         iS )Nr-   r0   ©r2   s    r3   Ú
get_configz"SimpleEmbeddingFunction.get_config;   s   € Ø�t”yÐ!Ð!r5   Úconfigc                 ó.   — t          | d         ¬¦  «        S )Nr-   ©r-   )r+   ©rK   s    r3   Úbuild_from_configz)SimpleEmbeddingFunction.build_from_config>   s   € å&¨6°%¬=Ð9Ñ9Ô9Ð9r5   c                 ó   — dS )NÚcosiner:   rI   s    r3   Údefault_spacez%SimpleEmbeddingFunction.default_spaceB   s   € Øˆxr5   N)r,   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr4   r$   Ústrr   rD   ÚstaticmethodrG   r#   r!   rJ   rO   rR   r:   r5   r3   r+   r+   ,   sü   € € € € € àTÐTðð ˜Cð ð ð ð ð9˜d 3œið 9¨Jð 9ð 9ð 9ð 9ð ð�#ð ð ð ñ „\ðð"˜D  c œNð "ð "ð "ð "ð ð: $ s¨C x¤.ð :Ð5Nð :ð :ð :ñ „\ð:ð˜sð ð ð ð ð ð r5   r+   c                   óÄ   — e Zd ZdZddeddfd„Zdee         defd„Zdee         defd	„Z	e
defd
„¦   «         Zdeeef         fd„Ze
deeef         dd fd„¦   «         ZdS )Ú RecordingSearchEmbeddingFunctionzBEmbedding function that records inputs for search embedding tests.ÚdefaultÚlabelr7   Nc                 ó0   — || _         g | _        g | _        d S r/   )Ú_labelÚcall_inputsÚquery_inputs©r2   r]   s     r3   r4   z)RecordingSearchEmbeddingFunction.__init__J   s   € ØˆŒØ,.ˆÔØ-/ˆÔÐÐr5   r6   c                 ó’   — | j                              t          |¦  «        ¦  «         d„ |D ¦   «         }t          t          |¦  «        S )Nc                 ó„   — g | ]=}t          t          |¦  «        ¦  «        t          t          |¦  «        ¦  «        d z   g‘Œ>S )g      à?©r;   Úlen©r=   Útexts     r3   r?   z=RecordingSearchEmbeddingFunction.__call__.<locals>.<listcomp>Q   ó>   € ÐPÐPÐPÀ$•E�#˜d™)œ)Ñ$Ô$¥e­C°©I¬IÑ&6Ô&6¸Ñ&<Ð=ÐPÐPÐPr5   )r`   ÚappendÚlistr(   r   ©r2   r6   Úvectorss      r3   rD   z)RecordingSearchEmbeddingFunction.__call__O   sB   € ØÔ×Ò¥ U¡¤Ñ,Ô,Ð,ØPÐPÈ%ÐPÑPÔPˆÝ•J Ñ(Ô(Ð(r5   c                 ó’   — | j                              t          |¦  «        ¦  «         d„ |D ¦   «         }t          t          |¦  «        S )Nc                 ó„   — g | ]=}t          t          |¦  «        ¦  «        t          t          |¦  «        ¦  «        d z   g‘Œ>S )g      ø?re   rg   s     r3   r?   z@RecordingSearchEmbeddingFunction.embed_query.<locals>.<listcomp>V   ri   r5   )ra   rj   rk   r(   r   rl   s      r3   Úembed_queryz,RecordingSearchEmbeddingFunction.embed_queryT   sB   € ØÔ× Ò ¥ e¡¤Ñ-Ô-Ð-ØPÐPÈ%ÐPÑPÔPˆÝ•J Ñ(Ô(Ð(r5   c                  ó   — dS )NÚrecording_search_efr:   r:   r5   r3   rG   z%RecordingSearchEmbeddingFunction.nameY   s   € à$Ð$r5   c                 ó   — d| j         iS ©Nr]   ©r_   rI   s    r3   rJ   z+RecordingSearchEmbeddingFunction.get_config]   ó   € Ø˜œÐ%Ð%r5   rK   c                 óH   — t          |                      dd¦  «        ¦  «        S )Nr]   r\   )r[   ÚgetrN   s    r3   rO   z2RecordingSearchEmbeddingFunction.build_from_config`   s   € å/°·
²
¸7ÀIÑ0NÔ0NÑOÔOÐOr5   )r\   )rS   rT   rU   rV   rX   r4   r$   r   rD   rp   rY   rG   r#   r!   rJ   rO   r:   r5   r3   r[   r[   F   s  € € € € € àLÐLð0ð 0˜cð 0°$ð 0ð 0ð 0ð 0ð
)˜d 3œið )¨Jð )ð )ð )ð )ð
)  c¤ð )¨zð )ð )ð )ð )ð
 ð%�#ð %ð %ð %ñ „\ð%ð&˜D  c œNð &ð &ð &ð &ð ðP $ s¨C x¤.ð PÐ5Wð Pð Pð Pñ „\ðPð Pð Pr5   r[   Úclient_factoriesr   r7   c                 ó8  — |                       ¦   «         }|                     ¦   «          dt          ¦   «         j        › �}t	          ¦   «         }|                     t          dt          dddd¬¦  «        ¬¦  «        ¬	¦  «         |                     ||¬
¦  «        }|j	        }|€J ‚t          |                     ¦   «         ¦  «         |j        d         j        }|€J ‚|j        }|€J ‚|j        du sJ ‚|j        €J ‚|j        j        €J ‚|j        j        dk    sJ ‚|                       ¦   «         }|                     |¬¦  «        }	|	j	        }
|
€J ‚|
j        d         j        }|€J ‚|j        }|€J ‚|j        €J ‚|j        j        €J ‚|j        j        dk    sJ ‚dS )úEEnsure schema-provided SPANN settings persist across client restarts.Úschema_spann_rQ   é   é    éx   é   ©Úsearch_nprobeÚwrite_nprobeÚef_constructionÚmax_neighbors)ÚspaceÚspannrN   ©rG   ÚschemaNú
#embeddingT©rG   )Úcreate_client_from_systemÚresetr)   Úhexr   Úcreate_indexr   r   Úget_or_create_collectionr‰   ÚprintÚserialize_to_jsonÚkeysÚ
float_listÚvector_indexÚenabledrK   r†   Úget_collection)ry   ÚclientÚcollection_namer‰   Ú
collectionÚpersisted_schemaÚembedding_overrider•   Úclient_reloadedÚreloaded_collectionÚreloaded_schemaÚreloaded_embedding_overrideÚreloaded_vector_indexs                r3   Ú%test_schema_vector_config_persistencer¢   e   s  € ð
 ×7Ò7Ñ9Ô9€FØ
‡L‚L�N„N€Nà3¥e¡g¤g¤kÐ3Ð3€Oå‰XŒX€FØ
×ÒÝ ØÝ"Ø ØØ #Ø ð	ñ ô ð
ñ 
ô 
ð ñ 
ô 
ð 
ð ×0Ò0ØØð 1ñ ô €Jð
 "Ô(ÐØÐ'Ð'Ð'å	Ð
×
,Ò
,Ñ
.Ô
.Ñ/Ô/Ð/à)Ô.¨|Ô<ÔGÐØÐ)Ð)Ð)Ø%Ô2€LØÐ#Ð#Ð#ØÔ 4Ð'Ð'Ð'Ð'ØÔÐ*Ð*Ð*ØÔÔ$Ð0Ð0Ð0ØÔÔ$¨Ò0Ð0Ð0Ð0à&×@Ò@ÑBÔB€OØ)×8Ò8Øð 9ñ ô Ðð *Ô0€OØÐ&Ð&Ð&Ø"1Ô"6°|Ô"DÔ"OÐØ&Ð2Ð2Ð2Ø7ÔDÐØ Ð,Ð,Ð,Ø Ô'Ð3Ð3Ð3Ø Ô'Ô-Ð9Ð9Ð9Ø Ô'Ô-°Ò9Ð9Ð9Ð9Ð9Ð9r5   c                 ó¶  — |                       ¦   «         }|                     ¦   «          dt          ¦   «         j        › �}t	          ¦   «         }t          d¬¦  «        }|                     t          d|t          dddd¬	¦  «        ¬
¦  «        ¬¦  «         | 	                    ||¬¦  «        }|j
        }|€J ‚t          |                     ¦   «         ¦  «         |j        d         j        }|€J ‚|j        }|€J ‚|j        du sJ ‚|j        €J ‚|j        j        €J ‚|j        j        dk    sJ ‚t&          sO|j        j        €J ‚|j        j        }	|	j        dk    sJ ‚|	j        dk    sJ ‚|	j        dk    sJ ‚|	j        dk    sJ ‚n\|j        j        �J ‚|j        j        €J ‚|j        j        }
|
j        dk    sJ ‚|
j        dk    sJ ‚|
j        dk    sJ ‚|
j        dk    sJ ‚|j        j        }|€J ‚|                     ¦   «         dk    sJ ‚|                     ¦   «         ddik    sJ ‚|                     ¦   «         }t&          sC|d         d         d         d         d         d         }|d         dk    sJ ‚|d         dk    sJ ‚nP|d         d         d         d         d         d         }|d         dk    sJ ‚|d         dk    sJ ‚|d         dk    sJ ‚|                       ¦   «         }|                     |¬¦  «        }|j
        }|€J ‚|j        d         j        }|€J ‚|j        }|€J ‚|j        €J ‚|j        j        €J ‚|j        j        dk    sJ ‚t&          s=|j        j        €J ‚|j        j        j        dk    sJ ‚|j        j        j        dk    sJ ‚nj|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        j        dk    sJ ‚|j         }|€J ‚| !                    d ¦  «        }|€J ‚|                     ¦   «         dk    sJ ‚|                     ¦   «         ddik    sJ ‚dS )!r{   r|   é   rM   rQ   r}   r~   r   r€   r�   )r†   Úembedding_functionr‡   rN   rˆ   NrŠ   Téd   g333333ó?rF   r-   r“   r”   r•   rK   r‡   r‚   rƒ   Úhnswr„   Ú	ef_searchr…   r‹   r¥   )"rŒ   r�   r)   rŽ   r   r+   r�   r   r   r�   r‰   r‘   r’   r“   r”   r•   r–   rK   r†   r   r‡   r‚   rƒ   r„   r…   r§   r¨   Úresize_factorr¥   rG   rJ   r—   Úconfigurationrx   )ry   r˜   r™   r‰   r¥   rš   r›   rœ   r•   Úspann_configÚhnsw_configÚefÚpersisted_jsonÚ
spann_jsonÚ	hnsw_jsonr�   rž   rŸ   r    r¡   rK   Ú	config_efs                         r3   Ú-test_schema_vector_config_persistence_with_efr²   Ÿ   s„  € ð
 ×7Ò7Ñ9Ô9€FØ
‡L‚L�N„N€Nà3¥e¡g¤g¤kÐ3Ð3€Oå‰XŒX€FÝ0°QÐ7Ñ7Ô7ÐØ
×ÒÝ ØØ1Ý"Ø ØØ #Ø ð	ñ ô ð	
ñ 	
ô 	
ð ñ ô ð ð ×0Ò0ØØð 1ñ ô €Jð
 "Ô(ÐØÐ'Ð'Ð'å	Ð
×
,Ò
,Ñ
.Ô
.Ñ/Ô/Ð/à)Ô.¨|Ô<ÔGÐØÐ)Ð)Ð)Ø%Ô2€LØÐ#Ð#Ð#ØÔ 4Ð'Ð'Ð'Ð'ØÔÐ*Ð*Ð*ØÔÔ$Ð0Ð0Ð0ØÔÔ$¨Ò0Ð0Ð0Ð0å!ð 0ØÔ"Ô(Ð4Ð4Ð4Ø#Ô*Ô0ˆØÔ)¨RÒ/Ð/Ð/Ð/ØÔ(¨BÒ.Ð.Ð.Ð.ØÔ+¨sÒ2Ð2Ð2Ð2ØÔ)¨RÒ/Ð/Ð/Ð/Ð/àÔ"Ô(Ð0Ð0Ð0ØÔ"Ô'Ð3Ð3Ð3Ø"Ô)Ô.ˆØÔ*¨cÒ1Ð1Ð1Ð1ØÔ$¨Ò+Ð+Ð+Ð+ØÔ(¨BÒ.Ð.Ð.Ð.ØÔ(¨CÒ/Ð/Ð/Ð/à	Ô	Ô	/€BØˆ>ˆ>ˆ>Ø�7Š7‰9Œ9˜Ò#Ð#Ð#Ð#Ø�=Š=‰?Œ?˜u a˜jÒ(Ð(Ð(Ð(à%×7Ò7Ñ9Ô9€NÝ!ð 0Ø# FÔ+¨LÔ9¸,ÔGÈÔWØô
à
ôˆ
ð ˜/Ô*¨bÒ0Ð0Ð0Ð0Ø˜.Ô)¨RÒ/Ð/Ð/Ð/Ð/à" 6Ô*¨<Ô8¸ÔFÀ~ÔVØô
à
ôˆ	ð Ð*Ô+¨sÒ2Ð2Ð2Ð2Ø˜Ô%¨Ò,Ð,Ð,Ð,Ø˜Ô)¨RÒ/Ð/Ð/Ð/à&×@Ò@ÑBÔB€OØ)×8Ò8Øð 9ñ ô Ðð *Ô0€OØÐ&Ð&Ð&Ø"1Ô"6°|Ô"DÔ"OÐØ&Ð2Ð2Ð2Ø7ÔDÐØ Ð,Ð,Ð,Ø Ô'Ð3Ð3Ð3Ø Ô'Ô-Ð9Ð9Ð9Ø Ô'Ô-°Ò9Ð9Ð9Ð9Ý!ð 	FØ$Ô+Ô1Ð=Ð=Ð=Ø$Ô+Ô1Ô?À2ÒEÐEÐEÐEØ$Ô+Ô1Ô>À"ÒDÐDÐDÐDÐDà$Ô+Ô0Ð<Ð<Ð<Ø$Ô+Ô0Ô@ÀCÒGÐGÐGÐGØ$Ô+Ô0Ô:¸cÒAÐAÐAÐAØ$Ô+Ô0Ô>À"ÒDÐDÐDÐDØ$Ô+Ô0Ô>À#ÒEÐEÐEÐEà Ô.€FØÐÐÐØ—
’
Ð/Ñ0Ô0€IØÐ Ð Ð Ø�>Š>ÑÔ˜{Ò*Ð*Ð*Ð*Ø×ÒÑ!Ô! e¨Q ZÒ/Ð/Ð/Ð/Ð/Ð/r5   c                   ó°   — e Zd ZdZddefd„Zdee         dee         fd„Ze	defd„¦   «         Z
deeef         fd	„Ze	d
eeef         dd fd„¦   «         ZdS )Ú$DeterministicSparseEmbeddingFunctionzCSparse embedding function that emits predictable token/value pairs.Ú
det_sparser]   c                 ó   — || _         d S r/   ru   rb   s     r3   r4   z-DeterministicSparseEmbeddingFunction.__init__  ó   € ØˆŒˆˆr5   r6   r7   c                 ó4   — d„ t          |¦  «        D ¦   «         S )Nc           
      ót   — g | ]5\  }}t          |gt          t          |¦  «        |z   ¦  «        g¬ ¦  «        ‘Œ6S ©©ÚindicesÚvalues©r	   r;   rf   ©r=   Úidxrh   s      r3   r?   zADeterministicSparseEmbeddingFunction.__call__.<locals>.<listcomp>  óP   € ð 
ð 
ð 
á��Tõ  # µµc¸$±i´iÀ#±oÑ0FÔ0FÐ/GÐHÑHÔHð
ð 
ð 
r5   ©Ú	enumerate©r2   r6   s     r3   rD   z-DeterministicSparseEmbeddingFunction.__call__  ó+   € ð
ð 
å& uÑ-Ô-ð
ñ 
ô 
ð 	
r5   c                  ó   — dS )Nrµ   r:   r:   r5   r3   rG   z)DeterministicSparseEmbeddingFunction.name  s   € àˆ|r5   c                 ó   — d| j         iS rt   ru   rI   s    r3   rJ   z/DeterministicSparseEmbeddingFunction.get_config!  rv   r5   rK   c                 óH   — t          |                      dd¦  «        ¦  «        S )Nr]   rµ   )r´   rx   rN   s    r3   rO   z6DeterministicSparseEmbeddingFunction.build_from_config$  s    € õ 4°F·J²J¸wÈÑ4UÔ4UÑVÔVÐVr5   N)rµ   )rS   rT   rU   rV   rX   r4   r$   r	   rD   rY   rG   r#   r!   rJ   rO   r:   r5   r3   r´   r´     sï   € € € € € àMÐMðð ˜cð ð ð ð ð
˜d 3œið 
¨D°Ô,>ð 
ð 
ð 
ð 
ð ð�#ð ð ð ñ „\ðð&˜D  c œNð &ð &ð &ð &ð ðWØ�S˜#�X”ðWà	/ðWð Wð Wñ „\ðWð Wð Wr5   r´   r‰   r¥   c                 ó  — |                       ¦   «         }|                     ¦   «          dt          ¦   «         j        › �}|�|                     ||¬¦  «        }n0|�|                     ||¬¦  «        }n|                     |¬¦  «        }||fS )zKProvision a new temporary collection and return it with the backing client.Úschema_e2e_Nrˆ   ©rG   r¥   r‹   )rŒ   r�   r)   rŽ   r�   )ry   r‰   r¥   r˜   r™   rš   s         r3   Ú_create_isolated_collectionrÌ   +  s³   € ð ×7Ò7Ñ9Ô9€FØ
‡L‚L�N„N€Nà1¥E¡G¤G¤KÐ1Ð1€OØÐØ×4Ò4Ø Øð 5ñ 
ô 
ˆ
ˆ
ð
 Ð)Ø×8Ò8Ø$Ø#5ð 9ñ ô ˆJˆJð
  ×8Ò8Ø$ð 9ñ ô ˆJð �vÐÐr5   Úrankc                 óþ  — | €g S t          | t          ¦  «        r| j        gS g }t          | dd ¦  «        }|�"|                     t          |¦  «        ¦  «         t          | dd ¦  «        }|�"|                     t          |¦  «        ¦  «         t          | dd ¦  «        }|�"|                     t          |¦  «        ¦  «         t          | dd ¦  «        }|r'|D ]$}|                     t          |¦  «        ¦  «         Œ%|S )NrÍ   ÚleftÚrightÚranks)Ú
isinstancer   ÚqueryÚgetattrÚextendÚ_collect_knn_queries)rÍ   ÚqueriesÚ
child_rankÚ	left_rankÚ
right_rankrÑ   Úchilds          r3   rÖ   rÖ   H  s  € Ø€|Øˆ	å�$�ÑÔð Ø”
ˆ|Ðà€Gå˜˜v tÑ,Ô,€JØÐØ�ŠÕ+¨JÑ7Ô7Ñ8Ô8Ð8å˜˜f dÑ+Ô+€IØÐØ�ŠÕ+¨IÑ6Ô6Ñ7Ô7Ð7å˜˜w¨Ñ-Ô-€JØÐØ�ŠÕ+¨JÑ7Ô7Ñ8Ô8Ð8å�D˜' 4Ñ(Ô(€EØð 8Øð 	8ð 	8ˆEØ�NŠNÕ/°Ñ6Ô6Ñ7Ô7Ð7Ð7à€Nr5   c                 ó$  — t          | ¦  «        \  }}|j        }|€J ‚|j        €J ‚|j        j        €J ‚|j        j        j        }|€J ‚|j        du sJ ‚|j        j        €J ‚|j        j        j        }|€J ‚|j        du sJ ‚|j        j        €J ‚|j        j        j	        }|€J ‚|j        du sJ ‚|j        j
        €J ‚|j        j
        j        }|€J ‚|j        du sJ ‚|j        d         j        }|€J ‚|j        }	|	€J ‚|	j        du sJ ‚|j        d         j        }
|
€J ‚|
j        }|€J ‚|j        du sJ ‚g d¢}g d¢}ddd	dd
œddddd
œddddd
œg}|                     |||¬¦  «         |                     ddi¬¦  «        }t%          |d         ¦  «        dhk    sJ ‚|                     ddi¬¦  «        }t%          |d         ¦  «        dhk    sJ ‚|                     ddi¬¦  «        }t%          |d         ¦  «        dhk    sJ ‚|                     dgdddœg¬¦  «         |                     ddi¬¦  «        }t%          |d         ¦  «        dhk    sJ ‚|                     dgdgdddœg¬¦  «         |                     dgd g¬!¦  «        }|d          €J ‚t+          |d          ¦  «        d"k    sJ ‚|                     |j        ¦  «        }|j        €J ‚t0          s1|j                             ¦   «         |                     ¦   «         k    sJ ‚dS dS )#zKValidate default schema indexes support filtering, updates, and embeddings.NTú	#documentrŠ   )údoc-1údoc-2údoc-3)ÚalphaÚbetaÚgammaÚnewsé   g      #@)ÚcategoryÚratingÚpriceÚ	is_activeÚscienceé   g      @Fé   g      @©ÚidsÚ	documentsÚ	metadatasræ   ©Úwhererî   rß   rç   rà   ré   rÞ   r¤   Úupdates)rç   ræ   ©rî   rð   zbeta-updated)rè   ræ   Ú
embeddings©rî   Úincludeé   )rÌ   r‰   ÚdefaultsÚstringÚstring_inverted_indexr–   Ú	int_valueÚint_inverted_indexÚfloat_valueÚfloat_inverted_indexÚbooleanÚbool_inverted_indexr“   Ú	fts_indexr”   r•   Úaddrx   ÚsetÚupdateÚupsertrf   r—   rG   r   r’   )ry   rš   r˜   r‰   Ústring_indexÚ	int_indexÚfloat_indexÚ
bool_indexÚdocument_overrider  rœ   r•   rî   rï   rð   ÚfilteredÚnumeric_filterÚbool_filterÚrating_after_updateÚembeddings_payloadÚreloadeds                        r3   Ú.test_schema_defaults_enable_indexed_operationsr  e  s  € õ 5Ð5EÑFÔFÑ€J�àÔ€FØÐÐÐØŒ?Ð&Ð&Ð&ØŒ?Ô!Ð-Ð-Ð-Ø”?Ô)Ô?€LØÐ#Ð#Ð#ØÔ 4Ð'Ð'Ð'Ð'ØŒ?Ô$Ð0Ð0Ð0Ø”Ô)Ô<€IØÐ Ð Ð ØÔ Ð$Ð$Ð$Ð$ØŒ?Ô&Ð2Ð2Ð2Ø”/Ô-ÔB€KØÐ"Ð"Ð"ØÔ $Ð&Ð&Ð&Ð&ØŒ?Ô"Ð.Ð.Ð.Ø”Ô(Ô<€JØÐ!Ð!Ð!ØÔ Ð%Ð%Ð%Ð%àœ KÔ0Ô7ÐØÐ(Ð(Ð(Ø!Ô+€IØÐ Ð Ð ØÔ Ð$Ð$Ð$Ð$àœ \Ô2Ô=ÐØÐ)Ð)Ð)Ø%Ô2€LØÐ#Ð#Ð#ØÔ 4Ð'Ð'Ð'Ð'à
%Ð
%Ð
%€CØ*Ð*Ð*€Ià q°3ÀTÐJÐJØ¨!°cÈÐNÐNØ q°3ÀTÐJÐJð*€Ið ‡N‚N�s i¸9€NÑEÔEÐEà�~Š~ Z°Ð$;ˆ~Ñ<Ô<€HÝˆx˜ŒÑÔ G 9Ò,Ð,Ð,Ð,à—^’^¨8°Q¨-�^Ñ8Ô8€NÝˆ~˜eÔ$Ñ%Ô%¨'¨Ò2Ð2Ð2Ð2à—.’.¨°UÐ';�.Ñ<Ô<€KÝˆ{˜5Ô!Ñ"Ô" w iÒ/Ð/Ð/Ð/à×Ò˜7˜)¸1È)Ð0TÐ0TÐ/UÐÑVÔVÐVØ$Ÿ.š.°¸!¨}˜.Ñ=Ô=ÐÝÐ" 5Ô)Ñ*Ô*¨w¨iÒ7Ð7Ð7Ð7à×ÒØˆIØ!Ð"Ø ¨iÐ8Ð8Ð9ð ñ ô ð ð $Ÿš¨W¨IÀ¸~˜ÑNÔNÐØ˜lÔ+Ð7Ð7Ð7ÝÐ! ,Ô/Ñ0Ô0°AÒ5Ð5Ð5Ð5ð ×$Ò$ Z¤_Ñ5Ô5€HØŒ?Ð&Ð&Ð&Ý!ð QØŒ×0Ò0Ñ2Ô2°f×6NÒ6NÑ6PÔ6PÒPÐPÐPÐPðQð QØPÐPr5   c                 óú  — t          ¦   «         }|                     dt          ¦   «         ¬¦  «         |                     dt          ¦   «         ¬¦  «         t	          | |¬¦  «        \  }}|j        €J ‚|j                             ¦   «         }d|d         v sJ ‚d|d         v sJ ‚|                     |j        ¬¦  «        }|j        €J ‚|j                             ¦   «         |k    sJ ‚| 	                    |j        ¬¦  «        }|j        €J ‚|j                             ¦   «         |k    sJ ‚| 
                    dgd	gd
ddœg¬¦  «         |                     dd
i¬¦  «        }t          |d         ¦  «        dhk    sJ ‚dS )zIEnsure repeated collection lookups reuse the persisted schema definition.Ú
custom_tag©ÚkeyrK   Ú
importance©r‰   Nr“   r‹   zschema-preserveÚdocrá   é
   )r  r  rí   rñ   rî   )r   r�   r
   r   rÌ   r‰   r’   r�   rG   r—   r  rx   r  )ry   Úbase_schemarš   r˜   Úinitial_schema_jsonÚsecond_referenceÚfetchedÚstoreds           r3   Ú5test_get_or_create_and_get_collection_preserve_schemar   ³  sÜ  € õ ‘(”(€KØ×ÒØÝ(Ñ*Ô*ð ñ ô ð ð ×ÒØÝ%Ñ'Ô'ð ñ ô ð õ
 5ØØðñ ô Ñ€J�ð
 ÔÐ(Ð(Ð(Ø$Ô+×=Ò=Ñ?Ô?ÐØÐ.¨vÔ6Ð6Ð6Ð6Ð6ØÐ.¨vÔ6Ð6Ð6Ð6Ð6à×6Ò6¸J¼OÐ6ÑLÔLÐØÔ"Ð.Ð.Ð.ØÔ"×4Ò4Ñ6Ô6Ð:MÒMÐMÐMÐMà×#Ò#¨¬Ð#Ñ9Ô9€GØŒ>Ð%Ð%Ð%ØŒ>×+Ò+Ñ-Ô-Ð1DÒDÐDÐDÐDà×ÒØÐØ�'Ø")¸Ð<Ð<Ð=ð ñ ô ð ð �[Š[ ¨gÐ6ˆ[Ñ7Ô7€FÝˆv�eŒ}ÑÔÐ"3Ð!4Ò4Ð4Ð4Ð4Ð4Ð4r5   c                 ón  — t          ¦   «         }|                     dt          ¦   «         ¬¦  «         t          | |¬¦  «        \  }}|j        €J ‚d|j        j        v sJ ‚|                     |j        ¬¦  «         |                     |j        ¬¦  «        }|j        €J ‚|j         	                    ¦   «         }t          ¦   «          	                    ¦   «         }d|d         vsJ ‚t          |d                              ¦   «         ¦  «        t          |d                              ¦   «         ¦  «        k    sJ ‚dS )zHDeleting and recreating a collection should drop prior schema overrides.Útransient_keyr  r  Nr‹   r“   )r   r�   r
   rÌ   r‰   r“   Údelete_collectionrG   Úcreate_collectionr’   r  )ry   r‰   rš   r˜   Ú	recreatedÚrecreated_jsonÚbaseline_jsons          r3   Ú2test_delete_collection_resets_schema_configurationr(  Ý  sG  € õ ‰XŒX€FØ
×ÒØÝ(Ñ*Ô*ð ñ ô ð õ
 5ØØðñ ô Ñ€J�ð
 ÔÐ(Ð(Ð(Ø˜jÔ/Ô4Ð4Ð4Ð4Ð4à
×Ò *¤/ÐÑ2Ô2Ð2à×(Ò(¨j¬oÐ(Ñ>Ô>€IØÔÐ'Ð'Ð'ØÔ%×7Ò7Ñ9Ô9€NÝ‘H”H×.Ò.Ñ0Ô0€MØ .°Ô"8Ð8Ð8Ð8Ð8Ýˆ~˜fÔ%×*Ò*Ñ,Ô,Ñ-Ô-µ°]À6Ô5J×5OÒ5OÑ5QÔ5QÑ1RÔ1RÒRÐRÐRÐRÐRÐRr5   )Úreasonc                 óò   — t          ¦   «         }|                     dt          ¦   «         ¬¦  «         t          j        t
          d¬¦  «        5  t          | |¬¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z<Sparse vector configs are not allowed to be created locally.Úsparse_metadatar  z.Sparse vector indexing is not enabled in local©Úmatchr  N)r   r�   r   ÚpytestÚraisesr   rÌ   )ry   r‰   s     r3   Ú&test_sparse_vector_not_allowed_locallyr0  ù  sÙ   € õ
 ‰XŒX€FØ
×ÒÐ-Õ6MÑ6OÔ6OÐÑPÔPÐPÝ	ŒÝÐ$Tð
ñ 
ô 
ð Eð Eõ 	$Ð$4¸VÐDÑDÔDÐDðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eð Eð Es   ÁA,Á,A0Á3A0c                 óF  — t          d¬¦  «        }t          ¦   «         }|                     dt          d|¬¦  «        ¬¦  «         |                     dt	          ¦   «         ¬¦  «         |                     dt	          ¦   «         ¬¦  «         t          | |¬	¦  «        \  }}|j        €J ‚d|j        j        v sJ ‚d|j        j        v sJ ‚d|j        j        v sJ ‚|                     dgdgddddœg¬¦  «         | 	                    dgdg¬¦  «        }|d         €J ‚|d         d         }|€J ‚|d         dk    sJ ‚|d         dk    sJ ‚|d         dk    sJ ‚d|v sJ ‚t          t          |d         ¦  «        }| |dg¦  «        d         k    sJ ‚|                     t          ¦   «                              t          dt          t           |¦  «        ¬¦  «        ¦  «        ¦  «        }t#          |d         ¦  «        dk    sJ ‚d|d         d         v sJ ‚t%          j        t(          ¦  «        5  |j                             dt          d¬¦  «        ¬¦  «         d
d
d
¦  «         n# 1 swxY w Y   | 	                    ddi¬¦  «        }	t+          |	d         ¦  «        dhk    sJ ‚d
S )zNSparse vector configs honor source key embedding and single-index enforcement.zsource-test©r]   r+  Úraw_text©Ú
source_keyr¥   r  Útag_aÚtag_br  Nzsparse-1zsource documentÚorangesÚcitrusÚfruit)r3  r6  r7  rí   rð   rö   r   ©r  rÓ   rî   rø   Úanother_sparse©r5  rñ   )r´   r   r�   r   r
   rÌ   r‰   r“   r  rx   r(   r	   Úsearchr    rÍ   r   r!   rf   r.  r/  Ú
ValueErrorr  )
ry   Ú	sparse_efr‰   rš   rA   r  ÚmetadataÚsparse_payloadÚsearch_resultÚstring_filters
             r3   Ú3test_sparse_vector_source_key_and_index_constraintsrE    sZ  € õ
 5¸=ÐIÑIÔI€Iå‰XŒX€FØ
×ÒØÝ&Ø!Ø(ð
ñ 
ô 
ð ñ ô ð ð ×Ò˜GÕ,EÑ,GÔ,GÐÑHÔHÐHØ
×Ò˜GÕ,EÑ,GÔ,GÐÑHÔHÐHå/Ð0@ÈÐPÑPÔP�M€J�àÔÐ(Ð(Ð(Ø 
Ô 1Ô 6Ð6Ð6Ð6Ð6Ø�jÔ'Ô,Ð,Ð,Ð,Ð,Ø�jÔ'Ô,Ð,Ð,Ð,Ð,à‡N‚NØˆLØ$Ð%Ø )°HÀwÐOÐOÐPð ñ ô ð ð �^Š^  °{°mˆ^ÑDÔD€FØ�+ÔÐ*Ð*Ð*Ø�kÔ" 1Ô%€HØÐÐÐØ�GÔ Ò(Ð(Ð(Ð(Ø�GÔ Ò'Ð'Ð'Ð'Ø�JÔ 9Ò,Ð,Ð,Ð,Ø Ð(Ð(Ð(Ð(Ý�,¨Ð1BÔ(CÑDÔD€NØ˜Y˜Y¨	 {Ñ3Ô3°AÔ6Ò6Ð6Ð6Ð6à×%Ò%Ý‰Œ�Š•cÐ/µt½CÀÑ7PÔ7PÐQÑQÔQÑRÔRñô €Mõ ˆ}˜UÔ#Ñ$Ô$¨Ò)Ð)Ð)Ð)Ø˜ uÔ-¨aÔ0Ð0Ð0Ð0Ð0å	Œ•zÑ	"Ô	"ð 
ð 
ØÔ×&Ò&Ø Ý*°jÐAÑAÔAð 	'ñ 	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð —N’N¨'°7Ð);�NÑ<Ô<€MÝˆ}˜UÔ#Ñ$Ô$¨¨Ò4Ð4Ð4Ð4Ð4Ð4s   È++I"É"I&É)I&c           	      ó
  — t          ¦   «         }|                     dt          ¦   «         ¬¦  «         |                     dt          ¦   «         ¬¦  «         |                     dt	          ¦   «         ¬¦  «         |                     dt          ¦   «         ¬¦  «         t          | |¬¦  «        \  }}|                     dgdgd	d
dddœg¬¦  «         |j        €J ‚|j         	                    ¦   «         }|  
                    ¦   «         }|                     |j        ¬¦  «        }|j        €J ‚t          s|j         	                    ¦   «         |k    sJ ‚|                     dd	i¬¦  «        }t          |d         ¦  «        dhk    sJ ‚dS )z<Custom schema overrides persist across new client instances.Útitler  Úpublished_yearÚscoreÚis_featuredr  z	persist-1zpersistent doczSchema Persistenceiè  g      @T)rG  rH  rI  rJ  rí   Nr‹   rñ   rî   )r   r�   r
   r   r   r   rÌ   r  r‰   r’   rŒ   r—   rG   r   rx   r  )ry   r‰   rš   r˜   Úexpected_schema_jsonÚreloaded_clientrž   r  s           r3   Ú-test_schema_persistence_with_custom_overridesrM  @  s¼  € õ ‰XŒX€FØ
×Ò˜GÕ,EÑ,GÔ,GÐÑHÔHÐHØ
×ÒÐ,Õ5KÑ5MÔ5MÐÑNÔNÐNØ
×Ò˜GÕ,DÑ,FÔ,FÐÑGÔGÐGØ
×Ò˜MÕ2IÑ2KÔ2KÐÑLÔLÐLå4ØØðñ ô Ñ€J�ð
 ‡N‚NØˆMØ#Ð$ð .Ø"&ØØ#ð	ð ð
ð ñ ô ð ð ÔÐ(Ð(Ð(Ø%Ô,×>Ò>Ñ@Ô@Ðà&×@Ò@ÑBÔB€OØ)×8Ò8¸j¼oÐ8ÑNÔNÐØÔ%Ð1Ð1Ð1Ý!ð VØ"Ô)×;Ò;Ñ=Ô=ÐAUÒUÐUÐUÐUà!×%Ò%¨WÐ6JÐ,KÐ%ÑLÔL€GÝˆw�uŒ~ÑÔ ; -Ò/Ð/Ð/Ð/Ð/Ð/r5   c                 óÚ  — t          d¬¦  «        }t          ¦   «                              t          |¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}|                     dg¦  «        }|€J ‚t          j        |d         g d	¢¦  «        sJ ‚t          d
¬¦  «        }t	          | |¬¦  «        \  }}|                     dg¦  «        }|€J ‚t          j        |d         g d¢¦  «        sJ ‚dS )zE_embed should respect schema-provided and direct embedding functions.rå   rM   ©r¥   rN   r  zschema documentNr   ©ç        ç      ð?ç       @ç      @g      @rì   zdirect document)rQ  rR  rS  )r+   r   r�   r   rÌ   Ú_embedÚnpÚallclose)	ry   Úschema_emb_fnr‰   Úschema_collectionrA   Úschema_embeddingsÚdirect_emb_fnÚdirect_collectionÚdirect_embeddingss	            r3   ÚBtest_collection_embed_uses_schema_or_collection_embedding_functionr^  i  s+  € õ
 ,°Ð2Ñ2Ô2€MÝ‰XŒX×"Ò"Ý °MÐBÑBÔBð #ñ ô €Fõ 7ØØðñ ô ÑÐ�qð
 *×0Ò0Ð2CÐ1DÑEÔEÐØÐ(Ð(Ð(ÝŒ;Ð(¨Ô+Ð-FÐ-FÐ-FÑGÔGÐGÐGÐGå+°Ð2Ñ2Ô2€MÝ6ØØ(ðñ ô ÑÐ�qð
 *×0Ò0Ð2CÐ1DÑEÔEÐØÐ(Ð(Ð(ÝŒ;Ð(¨Ô+¨_¨_¨_Ñ=Ô=Ð=Ð=Ð=Ð=Ð=r5   c                 óä  — t          d¬¦  «        }t          | |¬¦  «        \  }}t          ¦   «                              t	          d¬¦  «        ¦  «        }t          |j        ¦  «         |                     |¦  «        }|j        dggk    sJ ‚|j	        rJ ‚t          |j        t          ¦  «        sJ ‚|j        j        dk    sJ ‚|j        }t          |t          ¦  «        sJ ‚|j        ddgk    sJ ‚dS )	úQ_embed_search_string_queries should embed string KNN queries using collection EF.Úprimaryr2  rO  úhello world©rÓ   ç      &@g      )@N)r[   rÌ   r    rÍ   r   r‘   r‰   Ú_embed_search_string_queriesra   r`   rÒ   Ú_rankrÓ   )ry   Úembedding_fnrš   rA   r>  Úembedded_searchÚembedded_ranks          r3   Ú%test_search_embeds_string_knn_queriesrj  †  s	  € õ 4¸)ÐDÑDÔD€LÝ/Ø¨\ðñ ô �M€J�õ ‰XŒX�]Š]�3 ]Ð3Ñ3Ô3Ñ4Ô4€Få	ˆ*Ô
ÑÔÐà ×=Ò=¸fÑEÔE€OàÔ$¨-¨Ð(9Ò9Ð9Ð9Ð9ØÔ'Ð'Ð'Ð'å�f”l¥CÑ(Ô(Ð(Ð(Ð(ØŒ<Ô Ò.Ð.Ð.Ð.à#Ô)€MÝ�m¥SÑ)Ô)Ð)Ð)Ð)ØÔ 4¨ ,Ò.Ð.Ð.Ð.Ð.Ð.r5   c                 óv  — t          d¬¦  «        }t          ¦   «                              dt          d|¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}t          ¦   «                              t          dd¬	¦  «        ¦  «        }|                     |¦  «        }t          |j
        t          ¦  «        sJ ‚|j
        j        dk    sJ ‚|j
        j        dk    sJ ‚|j
        }t          |t          ¦  «        sJ ‚|j        dk    sJ ‚t          |j        ¦  «         |j        t          d
gdg¬¦  «        k    sJ ‚dS )r`  Úsparser2  r+  r3  r4  r  r  rb  r;  r   rd  r»   N)r´   r   r�   r   rÌ   r    rÍ   r   re  rÒ   rf  r  rÓ   r‘   r	   )ry   r@  r‰   rš   rA   r>  rh  ri  s           r3   ÚDtest_search_embeds_string_knn_queries_with_sparse_embedding_functionrm  ¢  sO  € õ 5¸8ÐDÑDÔD€IÝ‰XŒX×"Ò"ØÝ&Ø!°ið
ñ 
ô 
ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�å‰XŒX�]Š]�3Ð#4¸MÐJÑJÔJÑKÔK€Fà ×=Ò=¸fÑEÔE€Oå�f”l¥CÑ(Ô(Ð(Ð(Ð(ØŒ<ÔÐ0Ò0Ð0Ð0Ð0ØŒ<Ô Ò.Ð.Ð.Ð.à#Ô)€MÝ�m¥SÑ)Ô)Ð)Ð)Ð)ØÔÐ 1Ò1Ð1Ð1Ð1Ý	ˆ-Ô
ÑÔÐØÔ¥,¸°sÀDÀ6Ð"JÑ"JÔ"JÒJÐJÐJÐJÐJÐJr5   c                 ó¼  ‡
— t          d¬¦  «        }t          | |¬¦  «        \  Š
}t          d¬¦  «        t          d¬¦  «        z                        t          d¬¦  «        ¦  «        }t          d¬¦  «        d	z                       ¦   «         }t          ¦   «                              |¦  «        t          ¦   «                              |¦  «        g}ˆ
fd
„|D ¦   «         }dgdgdgdgg}|j        |k    sJ ‚g }|D ])}	|                     t          |	j
        ¦  «        ¦  «         Œ*|sJ ‚t          d„ |D ¦   «         ¦  «        sJ ‚t          d„ |D ¦   «         ¦  «        sJ ‚dS )z>String queries in composite rank trees should all be embedded.Únestedr2  rO  rá   rc  râ   rã   Údeltaé   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r:   )re  )r=   Úsrš   s     €r3   r?   zEtest_search_embeds_string_queries_in_nested_ranks.<locals>.<listcomp>Ï  s'   ø€ ÐVÐVÐVÈ˜×@Ò@ÀÑCÔCÐVÐVÐVr5   c              3   óB   K  — | ]}t          |t          ¦  «         V — Œd S r/   )rÒ   rX   ©r=   rÓ   s     r3   ú	<genexpr>zDtest_search_embeds_string_queries_in_nested_ranks.<locals>.<genexpr>Ù  s/   è è € ÐCÐC¨e•:˜e¥SÑ)Ô)Ð)ÐCÐCÐCÐCÐCÐCr5   c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r/   )rÒ   rk   ru  s     r3   rv  zDtest_search_embeds_string_queries_in_nested_ranks.<locals>.<genexpr>Ú  s,   è è € Ð@Ð@¨5�z˜%¥Ñ&Ô&Ð@Ð@Ð@Ð@Ð@Ð@r5   N)r[   rÌ   r   ÚmaxÚabsr    rÍ   ra   rÕ   rÖ   rf  Úall)ry   rg  rA   Úrank_oneÚrank_twoÚsearchesÚembedded_searchesÚexpected_queriesÚall_queriesrh  rš   s             @r3   Ú1test_search_embeds_string_queries_in_nested_ranksr�  À  sŽ  ø€ õ 4¸(ÐCÑCÔC€LÝ/Ø¨\ðñ ô �M€J�õ ˜'Ð"Ñ"Ô"¥S¨vÐ%6Ñ%6Ô%6Ñ6×;Ò;½CÀgÐ<NÑ<NÔ<NÑOÔO€HÝ˜'Ð"Ñ"Ô" QÑ&×+Ò+Ñ-Ô-€Hå‘”—’˜hÑ'Ô'­©¬¯ª°xÑ)@Ô)@ÐA€HØVÐVÐVÐVÈXÐVÑVÔVÐà ˜	 F 8¨g¨Y¸¸	ÐBÐØÔ$Ð(8Ò8Ð8Ð8Ð8à€KØ,ð Hð HˆØ×ÒÕ/°Ô0EÑFÔFÑGÔGÐGÐGàÐÐˆ;ÝÐCÐC°{ÐCÑCÔCÑCÔCÐCÐCÐCÝÐ@Ð@°KÐ@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@r5   c                 óœ  — t          ¦   «                              t          ¦   «         ¬¦  «        }t          | |¬¦  «        \  }}|                     dgdgddig¬¦  «         t          j        t          ¦  «        5  |                     ddi¬¦  «         d	d	d	¦  «         n# 1 swxY w Y   | 	                    |j
        ¬
¦  «         t          ¦   «                              t          ¦   «         ¬¦  «                             dt          ¦   «         ¬¦  «        }|                     |j
        |¬¦  «        }|                     dgdgddig¬¦  «         t          j        t          ¦  «        5  |                     ddi¬¦  «         d	d	d	¦  «         n# 1 swxY w Y   | 	                    |j
        ¬
¦  «         t          ¦   «                              dt          ¦   «         ¬¦  «        }|                     |j
        |¬¦  «        }|                     dgdgddig¬¦  «         |                     ddi¬¦  «        }t          |d         ¦  «        dhk    sJ ‚d	S )z>Toggling inverted index enablement reflects in query behavior.rN   r  zno-indexr  Úglobal_fieldÚvaluerí   rñ   Nr‹   ræ   r  rˆ   zkey-disabledrä   zkey-enabledrî   )r   Údelete_indexr
   rÌ   r  r.  r/  Ú	Exceptionrx   r#  rG   r�   r�   r  )	ry   Údisabled_defaultsrš   r˜   Údisabled_key_schemar%  Úrestored_schemaÚrestoredr>  s	            r3   Ú$test_schema_delete_index_and_restorer‹  Ý  sþ  € õ ™œ×-Ò-Õ5NÑ5PÔ5PÐ-ÑQÔQÐÝ4ØØ ðñ ô Ñ€J�ð
 ‡N‚NØˆLØ�'Ø" GÐ,Ð-ð ñ ô ð õ 
Œ•yÑ	!Ô	!ð 8ð 8Ø�Š˜n¨gÐ6ˆÑ7Ô7Ð7ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð ×Ò *¤/ÐÑ2Ô2Ð2õ 	‰Œß	ŠÕ6Ñ8Ô8ˆÑ	9Ô	9ß	Š˜*Õ-FÑ-HÔ-HˆÑ	IÔ	Ið ð
 ×/Ò/ØŒ_Ð%8ð 0ñ ô €Ið ‡M‚MØÐØ�'Ø Ð'Ð(ð ñ ô ð õ 
Œ•yÑ	!Ô	!ð 2ð 2Ø�Š˜Z¨Ð0ˆÑ1Ô1Ð1ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð ×Ò *¤/ÐÑ2Ô2Ð2å‘h”h×+Ò+ØÕ8Ñ:Ô:ð ,ñ ô €Oð ×.Ò.ØŒ_ _ð /ñ ô €Hð ‡L‚LØˆOØ�'Ø Ð'Ð(ð ñ ô ð ð �\Š\ ¨VÐ 4ˆ\Ñ5Ô5€FÝˆv�eŒ}ÑÔ - Ò0Ð0Ð0Ð0Ð0Ð0s$   Á9BÂB"Â%B"Å%F
Æ
FÆFc                 óê  ‡‡	— t          ¦   «                              dt          ¦   «         ¬¦  «        }t          | |¬¦  «        \  Š}‰                     dgt          t          g d¢g¦  «        ddigdg¬¦  «         ‰j        €J ‚‰j        j        d         j	        }|€J ‚|j
        }|€J ‚|j        d
u sJ ‚ddiŠ	dt          g t          f         dd	fd„}ˆˆ	fd„ˆˆ	fd„ˆˆ	fd„g}|D ]} ||¦  «         Œd	S )zˆDisabled metadata inverted index should block filter-based operations in get, query, and delete for local, single node, and distributed.Úrestricted_tagr  r  úrestricted-doc©gš™™™™™¹?gš™™™™™É?g333333Ó?gš™™™™™Ù?Úblockedr  ©rî   rõ   rð   rï   NFÚ	operationr7   c                 ó¬   — t          j        t          ¦  «        5 } | ¦   «          d d d ¦  «         n# 1 swxY w Y   dt          |j        ¦  «        v sJ ‚d S ©Nz1Cannot filter using metadata key 'restricted_tag'©r.  r/  r   rX   r„  ©r’  Úexc_infos     r3   Ú_expect_disabled_errorzetest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>._expect_disabled_error.  ó¤   € ÝŒ]Õ/Ñ0Ô0ð 	°HØˆI‰KŒKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	àBÅcØŒNñG
ô G
ð 
ð 
ð 
ð 
ð 
ð 
ó   š1±5¸5c                  ó0   •— ‰                       ‰¬¦  «        S ©Nrñ   ©rx   ©rš   Úfilter_payloads   €€r3   ú<lambda>zWtest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>.<lambda>6  ó   ø€ �
—’ ^�Ñ4Ô4€ r5   c                  ó`   •— ‰                       t          t          g d¢g¦  «        d‰¬¦  «        S ©Nr�  rø   )Úquery_embeddingsÚ	n_resultsrò   ©rÓ   r(   r   rž  s   €€r3   r   zWtest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>.<lambda>7  ó9   ø€ �
× Ò Ý!¥*Ð/CÐ/CÐ/CÐ.DÑEÔEØØ ð !ñ 
ô 
€ r5   c                  ó0   •— ‰                       ‰¬¦  «        S rœ  ©Údeleterž  s   €€r3   r   zWtest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>.<lambda><  ó   ø€ �
×!Ò!¨Ð!Ñ7Ô7€ r5   )r   r…  r
   rÌ   r  r(   r   r‰   r“   rú   rû   r–   r"   r!   )
ry   r‰   rA   Úschema_entryÚindex_configr˜  Ú
operationsr’  rš   rŸ  s
           @@r3   ÚEtest_disabled_metadata_index_filters_raise_invalid_argument_all_modesr¯    s�  øø€ õ ‰XŒX×"Ò"ØÕ%>Ñ%@Ô%@ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�à‡N‚NØÐÝ�
Ð%9Ð%9Ð%9Ð$:Ñ;Ô;Ø$ iÐ0Ð1Ø�'ð	 ñ ô ð ð ÔÐ(Ð(Ð(ØÔ$Ô)Ð*:Ô;ÔB€LØÐ#Ð#Ð#ØÔ5€LØÐ#Ð#Ð#ØÔ 5Ð(Ð(Ð(Ð(à&6¸	Ð%B€Nð
­(°2µs°7Ô*;ð 
Àð 
ð 
ð 
ð 
ð 	5Ð4Ð4Ð4Ð4ð	
ð 	
ð 	
ð 	
ð 	
ð
 	8Ð7Ð7Ð7Ð7ð+€Jð  ð *ð *ˆ	ØÐ˜yÑ)Ô)Ð)Ð)ð*ð *r5   c                 ó  ‡‡	‡
— t          ¦   «                              dt          ¦   «         ¬¦  «        }t          | |¬¦  «        \  Š}‰                     dgt          t          g d¢g¦  «        ddigdg¬¦  «         ‰j        €J ‚‰j        j        d         j	        }|€J ‚|j
        }|€J ‚|j        d
u sJ ‚ddiŠ	t          ‰	¬¦  «        Š
dt          g t          f         dd	fd„}ˆˆ	fd„ˆˆ	fd„ˆˆ
fd„ˆˆ	fd„g}|D ]} ||¦  «         Œd	S )zFDisabled metadata inverted index should block filter-based operations.r�  r  r  rŽ  r�  r�  r  r‘  NFrñ   r’  r7   c                 ó¬   — t          j        t          ¦  «        5 } | ¦   «          d d d ¦  «         n# 1 swxY w Y   dt          |j        ¦  «        v sJ ‚d S r”  r•  r–  s     r3   r˜  z[test_disabled_metadata_index_filters_raise_invalid_argument.<locals>._expect_disabled_error^  r™  rš  c                  ó0   •— ‰                       ‰¬¦  «        S rœ  r�  rž  s   €€r3   r   zMtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>f  r¡  r5   c                  ó`   •— ‰                       t          t          g d¢g¦  «        d‰¬¦  «        S r£  r¦  rž  s   €€r3   r   zMtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>g  r§  r5   c                  ó.   •— ‰                       ‰¦  «        S r/   )r>  )rš   Úsearch_requests   €€r3   r   zMtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>l  s   ø€ �
×!Ò! .Ñ1Ô1€ r5   c                  ó0   •— ‰                       ‰¬¦  «        S rœ  r©  rž  s   €€r3   r   zMtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>m  r«  r5   )r   r…  r
   rÌ   r  r(   r   r‰   r“   rú   rû   r–   r    r"   r!   )ry   r‰   rA   r¬  r­  r˜  r®  r’  rš   rŸ  rµ  s           @@@r3   Ú;test_disabled_metadata_index_filters_raise_invalid_argumentr·  C  s°  øøø€ õ
 ‰XŒX×"Ò"ØÕ%>Ñ%@Ô%@ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�à‡N‚NØÐÝ�
Ð%9Ð%9Ð%9Ð$:Ñ;Ô;Ø$ iÐ0Ð1Ø�'ð	 ñ ô ð ð ÔÐ(Ð(Ð(ØÔ$Ô)Ð*:Ô;ÔB€LØÐ#Ð#Ð#ØÔ5€LØÐ#Ð#Ð#ØÔ 5Ð(Ð(Ð(Ð(à&6¸	Ð%B€NÝ .Ð1Ñ1Ô1€Nð
­(°2µs°7Ô*;ð 
Àð 
ð 
ð 
ð 
ð 	5Ð4Ð4Ð4Ð4ð	
ð 	
ð 	
ð 	
ð 	
ð
 	2Ð1Ð1Ð1Ð1Ø7Ð7Ð7Ð7Ð7ð	+€Jð  ð *ð *ˆ	ØÐ˜yÑ)Ô)Ð)Ð)ð*ð *r5   c                 ó”  — t          | ¦  «        \  }}t          ||j        ¦  «        }d}d„ t          |¦  «        D ¦   «         }d„ t          |¦  «        D ¦   «         }d„ t          |¦  «        D ¦   «         }|                     |||¬¦  «         t
          st          ||j        |¦  «         |                     |j        ¦  «        }|j        €J ‚d|j        j	        v sJ ‚|j        j	        d         j
        }	|	€J ‚|	j        }
|
€J ‚|
j        du sJ ‚t          ||j        ¦  «        }d	}d
„ t          |¦  «        D ¦   «         }d„ t          |¦  «        D ¦   «         }d„ t          |¦  «        D ¦   «         }|                     |||¬¦  «         t
          st          ||j        |¦  «         |                     |j        ¦  «        }|j        €J ‚d|j        j	        v sJ ‚|j        j	        d         j
        }|€J ‚|j        }|€J ‚|j        du sJ ‚|                     ddi¬¦  «        }t          |d         ¦  «        dhk    sJ ‚|                     ddi¬¦  «        }t          |d         ¦  «        dhk    sJ ‚|                      ¦   «         }|                     |j        ¦  «        }|j        €J ‚d|j        j	        v sJ ‚d|j        j	        v sJ ‚dS )zJCompaction promotes unseen metadata keys into discoverable schema entries.éû   c                 ó   — g | ]}d |› �‘ŒS )zdiscover-add-r:   r<   s     r3   r?   zCtest_schema_discovers_new_keys_after_compaction.<locals>.<listcomp>}  s!   € Ð
:Ð
:Ð
: 1Ð˜1ÐÐÐ
:Ð
:Ð
:r5   c                 ó   — g | ]}d |› �‘ŒS ©zdoc r:   r<   s     r3   r?   zCtest_schema_discovers_new_keys_after_compaction.<locals>.<listcomp>~  s   € Ð7Ð7Ð7 �˜��Ð7Ð7Ð7r5   c                 ó   — g | ]	}d d|› �i‘Œ
S )Údiscover_addÚtopic_r:   r<   s     r3   r?   zCtest_schema_discovers_new_keys_after_compaction.<locals>.<listcomp>  ó0   € ð *ð *ð *Ø+,ˆ˜ !˜˜Ð&ð*ð *ð *r5   rí   Nr¾  Té  c                 ó   — g | ]}d |› �‘ŒS )zdiscover-upsert-r:   r<   s     r3   r?   zCtest_schema_discovers_new_keys_after_compaction.<locals>.<listcomp>”  s!   € ÐFÐFÐF¨QÐ( QÐ(Ð(ÐFÐFÐFr5   c                 ó   — g | ]}d |› �‘ŒS )zupsert doc r:   r<   s     r3   r?   zCtest_schema_discovers_new_keys_after_compaction.<locals>.<listcomp>•  s!   € ÐBÐBÐB¨Ð$ Ð$Ð$ÐBÐBÐBr5   c                 ó   — g | ]	}d d|› �i‘Œ
S )Údiscover_upsertr¿  r:   r<   s     r3   r?   zCtest_schema_discovers_new_keys_after_compaction.<locals>.<listcomp>–  s1   € ð 1ð 1ð 1Ø./Ð	˜L Q˜L˜LÐ)ð1ð 1ð 1r5   rÅ  Útopic_42rñ   rî   zdiscover-add-42zdiscover-upsert-42)rÌ   r   rG   rC   r  r   r   r—   r‰   r“   rú   rû   r–   r  rx   r  rŒ   )ry   rš   r˜   Úinitial_versionÚ
batch_sizerî   rï   rð   r  Údiscover_add_configrû   Únext_versionÚupsert_countÚ
upsert_idsÚupsert_docsÚupsert_metadatasÚpost_upsertÚdiscover_upsert_configÚupsert_inverted_indexÚresultÚresult_upsertÚreload_clientÚ	persisteds                          r3   Ú/test_schema_discovers_new_keys_after_compactionrÖ  t  s]  € õ 5Ð5EÑFÔFÑ€J�å,¨V°Z´_ÑEÔE€Oà€JØ
:Ð
:­¨jÑ(9Ô(9Ð
:Ñ
:Ô
:€CØ7Ð7¥U¨:Ñ%6Ô%6Ð7Ñ7Ô7€Ið*ð *Ý05°jÑ0AÔ0Að*ñ *ô *€Ið ‡N‚N�s i¸9€NÑEÔEÐEå!ð LÝ! &¨*¬/¸?ÑKÔKÐKà×$Ò$ Z¤_Ñ5Ô5€HØŒ?Ð&Ð&Ð&Ø˜Xœ_Ô1Ð1Ð1Ð1Ð1Ø"œ/Ô.¨~Ô>ÔEÐØÐ*Ð*Ð*Ø/ÔEÐØ Ð,Ð,Ð,Ø Ô(¨DÐ0Ð0Ð0Ð0å)¨&°*´/ÑBÔB€Là€LØFÐFµ%¸Ñ2EÔ2EÐFÑFÔF€JØBÐB­e°LÑ.AÔ.AÐBÑBÔB€Kð1ð 1Ý38¸Ñ3FÔ3Fð1ñ 1ô 1Ðð ×ÒØØØ"ð ñ ô ð õ "ð IÝ! &¨*¬/¸<ÑHÔHÐHà×'Ò'¨
¬Ñ8Ô8€KØÔÐ)Ð)Ð)Ø Ô 2Ô 7Ð7Ð7Ð7Ð7Ø(Ô/Ô4Ð5FÔGÔNÐØ!Ð-Ð-Ð-Ø2ÔHÐØ Ð,Ð,Ð,Ø Ô(¨DÐ0Ð0Ð0Ð0à�^Š^ >°:Ð">ˆ^Ñ?Ô?€FÝˆv�eŒ}ÑÔÐ"3Ð!4Ò4Ð4Ð4Ð4à—N’NÐ*;¸ZÐ)H�NÑIÔI€MÝˆ}˜UÔ#Ñ$Ô$Ð)=Ð(>Ò>Ð>Ð>Ð>à$×>Ò>Ñ@Ô@€MØ×,Ò,¨Z¬_Ñ=Ô=€IØÔÐ'Ð'Ð'Ø˜YÔ-Ô2Ð2Ð2Ð2Ð2Ø 	Ô 0Ô 5Ð5Ð5Ð5Ð5Ð5Ð5r5   c                 ó¤  — t          | ¦  «        \  }}t          ||j        ¦  «        }d„ t          d¦  «        D ¦   «         }d„ t          d¦  «        D ¦   «         }d„ t          d¦  «        D ¦   «         }|                     |||¬¦  «         t
          st          ||j        |¦  «         |                     dgdgdd	ig¬¦  «         |                     d
gddig¬¦  «         | 	                    |j        ¦  «        j
        }|€J ‚d|j        v sJ ‚|j        d         }|j        �!|j        j        �|j        j        j        du sJ ‚|                     ddi¬¦  «        }	t!          |	d         ¦  «        dhk    sJ ‚|                     dgdg¬¦  «        }
|
d         €J ‚|
d         d         }|€J ‚t#          |d         t$          t&          f¦  «        sJ ‚dS )zGConflicting value types should not corrupt discoverable schema entries.c                 ó   — g | ]}d |› �‘ŒS )z	conflict-r:   r<   s     r3   r?   zJtest_schema_rejects_conflicting_discoverable_key_types.<locals>.<listcomp>Á  s   € Ð
/Ð
/Ð
/˜qˆ?�qˆ?ˆ?Ð
/Ð
/Ð
/r5   r¹  c                 ó   — g | ]	}d d|› �i‘Œ
S )Úconflict_keyÚvalue_r:   r<   s     r3   r?   zJtest_schema_rejects_conflicting_discoverable_key_types.<locals>.<listcomp>Â  rÀ  r5   c                 ó   — g | ]}d |› �‘ŒS r¼  r:   r<   s     r3   r?   zJtest_schema_rejects_conflicting_discoverable_key_types.<locals>.<listcomp>Å  ó   € Ð0Ð0Ð0 �˜��Ð0Ð0Ð0r5   rí   zconflict-badzbad docrÚ  r¦   z
conflict-0éÈ   rô   NTÚvalue_10rñ   rî   zconflict-10rð   rö   r   )rÌ   r   rG   rC   r  r   r   r  r  r—   r‰   r“   rú   rû   r–   rx   r  rÒ   rW   r;   )ry   rš   r˜   rÇ  rî   rð   rï   r‰   Úconflict_entryÚfetchÚconflict_bad_metaÚbad_metadatas               r3   Ú6test_schema_rejects_conflicting_discoverable_key_typesrä  ¹  s.  € õ 5Ð5EÑFÔFÑ€J�å,¨V°Z´_ÑEÔE€Oà
/Ð
/¥E¨#¡J¤JÐ
/Ñ
/Ô
/€Cð*ð *Ý05°c±
´
ð*ñ *ô *€Ið 1Ð0¥U¨3¡Z¤ZÐ0Ñ0Ô0€IØ‡N‚N�s i¸9€NÑEÔEÐEå!ð LÝ! &¨*¬/¸?ÑKÔKÐKà×ÒØÐØ�+Ø" CÐ(Ð)ð ñ ô ð ð ×ÒØˆNØ" CÐ(Ð)ð ñ ô ð ð
 ×"Ò" :¤?Ñ3Ô3Ô:€FØÐÐÐØ˜Vœ[Ð(Ð(Ð(Ð(Ø”[ Ô0€NàÔÐ)ØÔ!Ô7ÐCàÔ$Ô:ÔBÀdÐJÐJÐJÐJà�NŠN .°*Ð!=ˆNÑ>Ô>€EÝˆu�UŒ|ÑÔ  Ò/Ð/Ð/Ð/à"Ÿš¨NÐ+;ÀkÀ]˜ÑSÔSÐØ˜[Ô)Ð5Ð5Ð5Ø$ [Ô1°!Ô4€LØÐ#Ð#Ð#Ý�l >Ô2µS½%°LÑAÔAÐAÐAÐAÐAÐAr5   c                 ó˜  — t          ¦   «         }|                     dt          ¦   «         ¬¦  «         t          | |¬¦  «        \  }}t	          ||j        ¦  «        }d„ t          d¦  «        D ¦   «         }d„ t          d¦  «        D ¦   «         }d„ t          d¦  «        D ¦   «         }|                     |||¬¦  «         t          ||j        |¦  «         |j	        €J ‚|j	         
                    ¦   «         }|j        › d
�}	|                     |	¦  «        }
|
j	        €J ‚|
j	         
                    ¦   «         |k    sJ ‚t	          ||
j        ¦  «        }d„ t          d¦  «        D ¦   «         }d„ t          d¦  «        D ¦   «         }d„ t          d¦  «        D ¦   «         }|
                     |||¬¦  «         t          ||
j        |¦  «         |                     |
j        ¦  «        }|j	        €J ‚d|j	        j        v sJ ‚|j	        j        d         j        }|€J ‚|j        }|€J ‚|j        du sJ ‚|                     |j        ¦  «        }|j	        €J ‚d|j	        j        vsJ ‚|                     ddi¬¦  «        }t'          |d         ¦  «        dhk    sJ ‚|
                     ddi¬¦  «        }t'          |d         ¦  «        dhk    sJ ‚d	S )zPAssert forked collections inherit schema and evolve independently of the parent.Ú
shared_keyr  r  c                 ó   — g | ]}d |› �‘ŒS )zparent-r:   r<   s     r3   r?   zEtest_collection_fork_inherits_and_isolates_schema.<locals>.<listcomp>ú  s   € Ð4Ð4Ð4 A�-˜A�-�-Ð4Ð4Ð4r5   r¹  c                 ó   — g | ]}d |› �‘ŒS )zparent doc r:   r<   s     r3   r?   zEtest_collection_fork_inherits_and_isolates_schema.<locals>.<listcomp>û  s!   € Ð9Ð9Ð9¨Ð$ Ð$Ð$Ð9Ð9Ð9r5   c                 ó   — g | ]	}d d|› �i‘Œ
S )ræ  Úparent_r:   r<   s     r3   r?   zEtest_collection_fork_inherits_and_isolates_schema.<locals>.<listcomp>ü  s0   € ð 1ð 1ð 1Ø*+ˆ�} �}�}Ð%ð1ð 1ð 1r5   rí   NÚ_forkc                 ó   — g | ]}d |› �‘ŒS )zfork-r:   r<   s     r3   r?   zEtest_collection_fork_inherits_and_isolates_schema.<locals>.<listcomp>  s   € Ð0Ð0Ð0 �˜��Ð0Ð0Ð0r5   c                 ó   — g | ]}d |› �‘ŒS )z	fork doc r:   r<   s     r3   r?   zEtest_collection_fork_inherits_and_isolates_schema.<locals>.<listcomp>  s   € Ð5Ð5Ð5 Q�˜Q��Ð5Ð5Ð5r5   c                 ó   — g | ]
}d d|› �dœ‘ŒS )ÚparentrÛ  )ræ  Ú
child_onlyr:   r<   s     r3   r?   zEtest_collection_fork_inherits_and_isolates_schema.<locals>.<listcomp>  s3   € ð /ð /ð /ØAB�x¨|¸¨|¨|Ð<Ð<ð/ð /ð /r5   rð  TÚ	parent_10rñ   rî   z	parent-10rß  zfork-10)r   r�   r
   rÌ   r   rG   rC   r  r   r‰   r’   Úforkr  r—   r“   rú   rû   r–   rx   r  )ry   r‰   rš   r˜   Úparent_version_before_addÚ
parent_idsÚparent_docsÚparent_metadatasÚparent_schema_jsonÚ	fork_nameÚforkedÚfork_versionÚfork_idsÚ	fork_docsÚfork_metadatasÚupdated_childÚchild_only_configÚchild_inverted_indexÚreloaded_parentÚparent_resultsÚchild_resultss                        r3   Ú1test_collection_fork_inherits_and_isolates_schemar  ê  s4  € õ ‰XŒX€FØ
×Ò˜LÕ1JÑ1LÔ1LÐÑMÔMÐMå4ØØðñ ô Ñ€J�õ
 !7°v¸z¼Ñ OÔ OÐà4Ð4­¨s©¬Ð4Ñ4Ô4€JØ9Ð9­e°C©j¬jÐ9Ñ9Ô9€Kð1ð 1Ý/4°S©z¬zð1ñ 1ô 1Ðð ‡N‚NØØØ"ð ñ ô ð õ ˜f j¤oÐ7PÑQÔQÐQàÔÐ(Ð(Ð(Ø#Ô*×<Ò<Ñ>Ô>Ðà”?Ð)Ð)Ð)€IØ�_Š_˜YÑ'Ô'€FàŒ=Ð$Ð$Ð$ØŒ=×*Ò*Ñ,Ô,Ð0BÒBÐBÐBÐBå)¨&°&´+Ñ>Ô>€Là0Ð0¥U¨3¡Z¤ZÐ0Ñ0Ô0€HØ5Ð5­%°©*¬*Ð5Ñ5Ô5€Ið/ð /ÝFKÈCÁjÄjð/ñ /ô /€Nð ‡M‚M�h¨)¸~€MÑNÔNÐNå˜f f¤k°<Ñ@Ô@Ð@à×)Ò)¨&¬+Ñ6Ô6€MØÔÐ+Ð+Ð+Ø˜=Ô/Ô4Ð4Ð4Ð4Ð4Ø%Ô,Ô1°,Ô?ÔFÐØÐ(Ð(Ð(Ø,ÔBÐØÐ+Ð+Ð+ØÔ'¨4Ð/Ð/Ð/Ð/à×+Ò+¨J¬OÑ<Ô<€OØÔ!Ð-Ð-Ð-Ø˜Ô5Ô:Ð:Ð:Ð:Ð:à$×(Ò(°¸kÐ/JÐ(ÑKÔK€NÝˆ~˜eÔ$Ñ%Ô%¨+¨Ò6Ð6Ð6Ð6à—J’J l°JÐ%?�JÑ@Ô@€MÝˆ}˜UÔ#Ñ$Ô$¨¨Ò3Ð3Ð3Ð3Ð3Ð3r5   c                 ó  — t          ¦   «                              t          t          d¬¦  «        ¬¦  «        ¬¦  «        }t	          | |t          d¬¦  «        ¬¦  «        \  }}|                     dgdg¬¦  «         |                     dgd	g¬
¦  «        }|d	         €J ‚t          j        |d	         d         g d¢¦  «        sJ ‚t          ¦   «         }t          ¦   «                              dt          d|¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}|                     dgdgddig¬¦  «          |dg¦  «        d         }|                     dgdg¬
¦  «        }	|	d         €J ‚|	d         d         }
|
€J ‚d|
v sJ ‚t          t          |
d         ¦  «        }||k    sJ ‚|                     t          ¦   «                              t!          dt          t"          |¦  «        ¬¦  «        ¦  «        ¦  «        }t%          |d         ¦  «        dk    sJ ‚d|d         d         v sJ ‚|                     dgdgddig¬¦  «         |                     dgdg¬
¦  «        }|d         €J ‚|d         d         }|€J ‚d|vsJ ‚dS )zKSchema-provided embedding functions drive both dense and sparse embeddings.rå   rM   rO  rN   ©r‰   r¥   zembed-1zembedding document©rî   rï   rõ   rö   Nr   rP  Úsparse_autoÚtext_to_embedr4  r  r  zsparse-textr  zschema embeddingrí   rð   r;  rî   rø   zsparse-numeric)r   r�   r   r+   rÌ   r  rx   rV  rW  r´   r   r(   r	   r>  r    rÍ   r   r!   rf   )ry   Úvector_schemaÚvector_collectionrA   Úembeddedr@  Úsparse_schemaÚsparse_collectionÚsparse_queryÚsparse_resultÚsparse_metarB  Úsparse_searchÚnumeric_metaÚnumeric_metadatas                  r3   Ú,test_schema_embedding_configuration_enforcedr  3  s4  € õ
 ‘H”H×)Ò)Ý Õ4KÐPQÐ4RÑ4RÔ4RÐSÑSÔSð *ñ ô €Mõ 7ØØÝ2°qÐ9Ñ9Ô9ðñ ô ÑÐ�qð ×ÒØˆKØ'Ð(ð ñ ô ð ð
 !×$Ò$¨)¨¸|¸nÐ$ÑMÔM€HØ�LÔ!Ð-Ð-Ð-ÝŒ;�x Ô-¨aÔ0Ð2KÐ2KÐ2KÑLÔLÐLÐLÐLå4Ñ6Ô6€IÝ‘H”H×)Ò)ØÝ&Ø&Ø(ð
ñ 
ô 
ð *ñ ô €Mõ 7ØØðñ ô ÑÐ�qð
 ×ÒØˆOØ�'Ø#Ð%7Ð8Ð9ð ñ ô ð ð
 �9Ð0Ð1Ñ2Ô2°1Ô5€LØ%×)Ò)¨}¨oÈÀ}Ð)ÑUÔU€MØ˜Ô%Ð1Ð1Ð1Ø Ô,¨QÔ/€KØÐ"Ð"Ð"Ø˜KÐ'Ð'Ð'Ð'Ý�,¨°MÔ(BÑCÔC€NØ˜\Ò)Ð)Ð)Ð)à%×,Ò,Ý‰Œ�Š•c˜mµ4½¸^Ñ3LÔ3LÐMÑMÔMÑNÔNñô €Mõ ˆ}˜UÔ#Ñ$Ô$¨Ò)Ð)Ð)Ð)Ø˜M¨%Ô0°Ô3Ð3Ð3Ð3Ð3à×ÒØÐØ�'Ø# QÐ'Ð(ð ñ ô ð ð %×(Ò(Ð.>Ð-?È+ÈÐ(ÑWÔW€LØ˜Ô$Ð0Ð0Ð0Ø# KÔ0°Ô3ÐØÐ'Ð'Ð'ØÐ 0Ð0Ð0Ð0Ð0Ð0Ð0r5   c                 ó,  — t          ¦   «                              t          ¦   «         ¬¦  «                             dt          ¦   «         ¬¦  «        }t	          | |¬¦  «        \  }}d„ t          d¦  «        D ¦   «         }d„ t          d¦  «        D ¦   «         }d„ t          d¦  «        D ¦   «         }t          ||j        ¦  «        }|                     |||¬	¦  «         t          st          ||j        |¦  «         |                     |j        ¦  «        j        }|€J ‚d|j        v sJ ‚|j        d         j        }	|	€J ‚|	j        }
|
€J ‚|
j        du sJ ‚d|j        v sJ ‚|j        d         j        }|€J ‚|j        }|€J ‚|j        du sJ ‚|                     ddi¬¦  «        }t%          |d         ¦  «        t%          |¦  «        k    sJ ‚t'          j        t*          ¦  «        5  |                     ddi¬¦  «         d
d
d
¦  «         d
S # 1 swxY w Y   d
S )zLExplicit overrides take precedence over disabled defaults and discoverables.rN   Úexplicit_keyr  r  c                 ó   — g | ]}d |› �‘ŒS )zprecedence-r:   r<   s     r3   r?   zStest_schema_precedence_for_overrides_discoverables_and_defaults.<locals>.<listcomp>‡  s!   € Ð
1Ð
1Ð
1 Ð˜ÐÐÐ
1Ð
1Ð
1r5   rÁ  c                 ó   — g | ]}d |› �‘ŒS r¼  r:   r<   s     r3   r?   zStest_schema_precedence_for_overrides_discoverables_and_defaults.<locals>.<listcomp>ˆ  rÝ  r5   c                 ó   — g | ]
}d d|› �dœ‘ŒS )ÚexplicitÚ	discover_)r  Údiscover_keyr:   r<   s     r3   r?   zStest_schema_precedence_for_overrides_discoverables_and_defaults.<locals>.<listcomp>‰  s6   € ð *ð *ð *àð $°_À°_°_ÐEÐEð*ð *ð *r5   rí   NTr  Fr  rñ   rî   Ú
discover_5)r   r…  r
   r�   rÌ   rC   r   rG   r  r   r   r—   r‰   r“   rú   rû   r–   rx   r  r.  r/  r†  )ry   r‰   rš   r˜   rî   rï   rð   rÇ  Úschema_stateÚexplicit_key_stringÚexplicit_inverted_indexÚdiscover_key_stringÚdiscover_inverted_indexÚexplicit_results                 r3   Ú?test_schema_precedence_for_overrides_discoverables_and_defaultsr%  x  s   € õ
 	‰Œß	ŠÕ6Ñ8Ô8ˆÑ	9Ô	9ß	Š˜.Õ1JÑ1LÔ1LˆÑ	MÔ	Mð õ 5ØØðñ ô Ñ€J�ð
 2Ð
1¥e¨C¡j¤jÐ
1Ñ
1Ô
1€CØ0Ð0¥U¨3¡Z¤ZÐ0Ñ0Ô0€Ið*ð *å�s‘”ð*ñ *ô *€Iõ
 -¨V°Z´_ÑEÔE€OØ‡N‚N�s i¸9€NÑEÔEÐEå!ð LÝ! &¨*¬/¸?ÑKÔKÐKà×(Ò(¨¬Ñ9Ô9Ô@€LØÐ#Ð#Ð#Ø˜\Ô.Ð.Ð.Ð.Ð.Ø&Ô+¨NÔ;ÔBÐØÐ*Ð*Ð*Ø1ÔGÐØ"Ð.Ð.Ð.Ø"Ô*¨dÐ2Ð2Ð2Ð2à˜\Ô.Ð.Ð.Ð.Ð.Ø&Ô+¨NÔ;ÔBÐØÐ*Ð*Ð*Ø1ÔGÐØ"Ð.Ð.Ð.Ø"Ô*¨eÐ3Ð3Ð3Ð3à —n’n¨N¸JÐ+G�nÑHÔH€OÝˆ˜uÔ%Ñ&Ô&­#¨c©(¬(Ò2Ð2Ð2Ð2å	Œ•yÑ	!Ô	!ð =ð =Ø�Š˜n¨lÐ;ˆÑ<Ô<Ð<ð=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =ð =ð =s   Ç#H	È	HÈHc                 ó>  — t          d¬¦  «        }t          ¦   «                              dt          d|¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}|                     g d¢g d	¢¬
¦  «         |                     g d¢dg¬¦  «        }|d         €J ‚ |g d	¢¦  «        }t          g d¢¦  «        D ]h\  }}|d         |         }	|	€J ‚d|	v sJ ‚t          t          |	d         ¦  «        }
|
j
        ||         j
        k    sJ ‚|
j        ||         j        k    sJ ‚ŒidS )zQTest sparse embedding auto-generation using #document as source with no metadata.Údoc_no_metar2  Úauto_sparserÝ   r4  r  r  ©Údoc1Údoc2Údoc3)rb  útest documentÚshortr  rð   rö   N)r´   r   r�   r   rÌ   r  rx   rÃ   r(   r	   r¼   r½   )ry   r@  r‰   rš   rA   rÒ  Úexpected_batchr>   Údoc_idrA  Úactuals              r3   Ú;test_sparse_auto_embedding_with_document_source_no_metadatar2  «  s…  € õ
 5¸=ÐIÑIÔI€Iå‰XŒX×"Ò"ØÝ&Ø"Ø(ð
ñ 
ô 
ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�ð ‡N‚NØ$Ð$Ð$Ø;Ð;Ð;ð ñ ô ð ð �^Š^Ð 8Ð 8Ð 8À;À-ˆ^ÑPÔP€FØ�+ÔÐ*Ð*Ð*ð �YÐHÐHÐHÑIÔI€NåÐ7Ð7Ð7Ñ8Ô8ð 9ð 9‰	ˆˆ6Ø˜+Ô& qÔ)ˆØÐ#Ð#Ð#Ø Ð(Ð(Ð(Ð(õ •l H¨]Ô$;Ñ<Ô<ˆØŒ~ °Ô!2Ô!:Ò:Ð:Ð:Ð:ØŒ} ¨qÔ 1Ô 8Ò8Ð8Ð8Ð8Ð8ð9ð 9r5   c                 óò  — t          d¬¦  «        }t          ¦   «                              dt          d|¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}|                     dd	gd
dgdddœdddœg¬¦  «         |                     dd	gdg¬¦  «        }|d         €J ‚|d         d         d         dk    sJ ‚|d         d         d         dk    sJ ‚|d         d         d         dk    sJ ‚|d         d         d         dk    sJ ‚d|d         d         v sJ ‚d|d         d         v sJ ‚ |d
dg¦  «        }t          t          |d         d         d         ¦  «        }|j	        |d         j	        k    sJ ‚dS )zKTest sparse embedding with #document source when metadata is also provided.Údoc_with_metar2  Ú
doc_sparserÝ   r4  r  r  Úm1Úm2rá   râ   Útesté*   )ræ   r„  Úprodéc   rí   rð   rö   Nr   ræ   r„  rø   ©
r´   r   r�   r   rÌ   r  rx   r(   r	   r¼   )ry   r@  r‰   rš   rA   rÒ  r/  Ú	actual_m1s           r3   Ú<test_sparse_auto_embedding_with_document_source_and_metadatar>  Ô  së  € õ
 5¸?ÐKÑKÔK€Iå‰XŒX×"Ò"ØÝ&Ø"Ø(ð
ñ 
ô 
ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�ð ‡N‚NØ�4ˆLØ˜FÐ#à¨"Ð-Ð-Ø¨"Ð-Ð-ð
ð ñ ô ð ð �^Š^  t °{°mˆ^ÑDÔD€FØ�+ÔÐ*Ð*Ð*ð �+Ô˜qÔ! *Ô-°Ò7Ð7Ð7Ð7Ø�+Ô˜qÔ! 'Ô*¨bÒ0Ð0Ð0Ð0Ø�+Ô˜qÔ! *Ô-°Ò7Ð7Ð7Ð7Ø�+Ô˜qÔ! 'Ô*¨bÒ0Ð0Ð0Ð0ð ˜6 +Ô.¨qÔ1Ð1Ð1Ð1Ð1Ø˜6 +Ô.¨qÔ1Ð1Ð1Ð1Ð1ð �Y ¨Ð0Ñ1Ô1€NÝ•\ 6¨+Ô#6°qÔ#9¸,Ô#GÑHÔH€IØÔ ¨qÔ 1Ô 9Ò9Ð9Ð9Ð9Ð9Ð9r5   c                 óT  — t          d¬¦  «        }t          ¦   «                              dt          d|¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}|                     g d¢g d	¢dd
iddiddig¬¦  «         |                     g d¢dg¬¦  «        }|d         €J ‚ |g d¢¦  «        }t          d¦  «        D ]k}|d         |         }|€J ‚d|v sJ ‚d|v sJ ‚t          t          |d         ¦  «        }	|	j
        ||         j
        k    sJ ‚|	j        ||         j        k    sJ ‚ŒldS )z7Test sparse embedding using a metadata field as source.Úmeta_sourcer2  Úcontent_sparseÚcontentr4  r  r  ©Ús1Ús2Ús3r)  úsparse content oneúsparse content twoúsparse content threerí   rð   rö   N)rG  rH  rI  rì   )r´   r   r�   r   rÌ   r  rx   rC   r(   r	   r¼   r½   ©
ry   r@  r‰   rš   rA   rÒ  r/  r>   rA  r1  s
             r3   Ú3test_sparse_auto_embedding_with_metadata_source_keyrK    s²  € õ
 5¸=ÐIÑIÔI€Iå‰XŒX×"Ò"ØÝ&Ø Ø(ð
ñ 
ô 
ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�ð ‡N‚NØÐÐØ*Ð*Ð*àÐ,Ð-ØÐ,Ð-ØÐ.Ð/ð
ð ñ ô ð ð �^Š^Ð 2Ð 2Ð 2¸[¸Mˆ^ÑJÔJ€FØ�+ÔÐ*Ð*Ð*ð �YØLÐLÐLñô €Nõ �1‰XŒXð 9ð 9ˆØ˜+Ô& qÔ)ˆØÐ#Ð#Ð#Ø 8Ð+Ð+Ð+Ð+ð ˜HÐ$Ð$Ð$Ð$õ •l HÐ-=Ô$>Ñ?Ô?ˆØŒ~ °Ô!2Ô!:Ò:Ð:Ð:Ð:ØŒ} ¨qÔ 1Ô 8Ò8Ð8Ð8Ð8Ð8ð9ð 9r5   c                 ó<  — t          d¬¦  «        }t          ¦   «                              dt          d|¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}|                     g d¢g d	¢d
d
ddid
g¬¦  «         |                     g d¢dg¬¦  «        }|d         €J ‚ |g d	¢¦  «        }t          |d         ¦  «        D ]B\  }}|€J ‚d|v sJ ‚t          t          |d         ¦  «        }	|	j
        ||         j
        k    sJ ‚ŒC|d         d         d         dk    sJ ‚d
S )z@Test sparse embedding with mixed metadata (None, empty, filled).Ú
mixed_metar2  Úmixed_sparserÝ   r4  r  r  )Ún1Ún2Ún3Ún4)zdoc onezdoc twoz	doc threezdoc fourNÚexistingÚdatarí   rð   rö   rq  )r´   r   r�   r   rÌ   r  rx   rÃ   r(   r	   r¼   rJ  s
             r3   Ú>test_sparse_auto_embedding_with_mixed_metadata_none_and_filledrU  4  s�  € õ
 5¸<ÐHÑHÔH€Iå‰XŒX×"Ò"ØÝ&Ø"Ø(ð
ñ 
ô 
ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�ð ‡N‚NØ$Ð$Ð$ØAÐAÐAàØØ˜Ð Øð	
ð ñ 	ô 	ð 	ð �^Š^Ð 8Ð 8Ð 8À;À-ˆ^ÑPÔP€FØ�+ÔÐ*Ð*Ð*ð �YÐNÐNÐNÑOÔO€Nõ ! ¨Ô!4Ñ5Ô5ð ;ð ;‰ˆˆ8ØÐ#Ð#Ð#Ø Ð)Ð)Ð)Ð)õ •l H¨^Ô$<Ñ=Ô=ˆØŒ~ °Ô!2Ô!:Ò:Ð:Ð:Ð:Ð:ð �+Ô˜qÔ! *Ô-°Ò7Ð7Ð7Ð7Ð7Ð7r5   c                 ó   — t          d¬¦  «        }t          ¦   «                              dt          d|¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}t          dgd	g¬
¦  «        }|                     ddgddgdd|ig¬¦  «         |                     ddgdg¬¦  «        }|d         €J ‚|d         d         }|€J ‚d|v sJ ‚ |dg¦  «        d         }t          t
          |d         ¦  «        }	|	j	        |j	        k    sJ ‚|d         d         }
|
€J ‚t          t
          |
d         ¦  «        }|j	        dgk    sJ ‚|j
        d	gk    sJ ‚dS )zBTest that sparse auto-embedding doesn't overwrite existing values.Úpreserver2  Úpreserve_sparserÝ   r4  r  r  iç  gw¾Ÿ/Ý^@r»   Ú	preserve1Ú	preserve2zauto documentzmanual documentNrí   rð   rö   r   rø   )r´   r   r�   r   rÌ   r	   r  rx   r(   r¼   r½   )ry   r@  r‰   rš   rA   Úexisting_sparserÒ  Ú	auto_metaÚexpected_autoÚactual_autoÚmanual_metaÚactual_manuals               r3   Ú0test_sparse_auto_embedding_skips_existing_valuesra  d  s¾  € õ
 5¸:ÐFÑFÔF€Iå‰XŒX×"Ò"ØÝ&Ø"Ø(ð
ñ 
ô 
ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�õ #¨C¨5¸'¸ÐCÑCÔC€Oà‡N‚NØ˜+Ð&Ø"Ð$5Ð6àØ Ð0ð
ð ñ ô ð ð �^Š^ ¨kÐ :À[ÀMˆ^ÑRÔR€FØ�+ÔÐ*Ð*Ð*ð �{Ô# AÔ&€IØÐ Ð Ð Ø 	Ð)Ð)Ð)Ð)Ø�I˜Ð/Ñ0Ô0°Ô3€MÝ•| YÐ/@Ô%AÑBÔB€KØÔ -Ô"7Ò7Ð7Ð7Ð7ð ˜Ô% aÔ(€KØÐ"Ð"Ð"Ý� {Ð3DÔ'EÑFÔF€MØÔ  S EÒ)Ð)Ð)Ð)ØÔ G 9Ò,Ð,Ð,Ð,Ð,Ð,r5   c                 óh  — t          d¬¦  «        }t          ¦   «                              dt          d|¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}|                     g d¢g d	¢dd
iddiddidg¬¦  «         |                     g d¢dg¬¦  «        }|d         €J ‚d|d         d         v sJ ‚ |d
g¦  «        d         }t          t          |d         d         d         ¦  «        }|j	        |j	        k    sJ ‚d|d         d         vsJ ‚d|d         d         vsJ ‚|d         d         �J ‚dS )zJTest sparse embedding when source metadata field is missing or wrong type.Úmissing_fieldr2  Úfield_sparseÚ
text_fieldr4  r  r  )Úf1Úf2Úf3Úf4)r*  r+  r,  Údoc4z
valid texté{   Úother_fieldr„  Nrí   rð   rö   r   rø   rq  rì   r<  )ry   r@  r‰   rš   rA   rÒ  Úexpectedr1  s           r3   Ú4test_sparse_auto_embedding_with_missing_source_fieldrn  ”  sŸ  € õ
 5¸?ÐKÑKÔK€Iå‰XŒX×"Ò"ØÝ&Ø#Ø(ð
ñ 
ô 
ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�à‡N‚NØ$Ð$Ð$Ø2Ð2Ð2à˜<Ð(Ø˜3ÐØ˜GÐ$Øð	
ð ñ 	ô 	ð 	ð �^Š^Ð 8Ð 8Ð 8À;À-ˆ^ÑPÔP€FØ�+ÔÐ*Ð*Ð*ð ˜V KÔ0°Ô3Ð3Ð3Ð3Ð3Øˆy˜,˜Ñ(Ô(¨Ô+€HÝ•,  {Ô 3°AÔ 6°~Ô FÑGÔG€FØŒ>˜XÔ-Ò-Ð-Ð-Ð-ð  ¨Ô!4°QÔ!7Ð7Ð7Ð7Ð7Ø ¨Ô!4°QÔ!7Ð7Ð7Ð7Ð7Ø�+Ô˜qÔ!Ð)Ð)Ð)Ð)Ð)r5   c                 óÊ  — t          d¬¦  «        }t          ¦   «         }|                     dt          ¦   «         ¬¦  «         |                     dt	          d|¬¦  «        ¬¦  «         t          | |¬¦  «        \  }}|                     d	d
gddgdddœdddœg¬¦  «         |                     d	d
gdg¬¦  «        }|d         €J ‚ |ddg¦  «        }t          |d         ¦  «        D ]H\  }}|€J ‚d|v sJ ‚t          t          |d         ¦  «        }	|	j        ||         j        k    sJ ‚d|v sJ ‚ŒI|                     ddi¬¦  «        }
t          |
d         ¦  «        d	hk    sJ ‚dS )zCTest sparse auto-embedding works alongside string inverted indexes.Úwith_string_indexr2  ræ   r  Úsparse_fieldÚcustom_textr4  r  Úmulti1Úmulti2zmain documentzanother documentzfield contentÚcat1)rr  ræ   zdifferent contentÚcat2rí   rð   rö   Nrñ   rî   )r´   r   r�   r
   r   rÌ   r  rx   rÃ   r(   r	   r¼   r  )ry   r@  r‰   rš   rA   rÒ  r/  r>   rA  Úactual_fieldr  s              r3   Ú5test_sparse_auto_embedding_with_string_inverted_indexrx  ¿  sí  € õ
 5Ð;NÐOÑOÔO€Iå‰XŒX€FØ
×ÒØÝ(Ñ*Ô*ð ñ ô ð ð ×ÒØÝ&Ø$Ø(ð
ñ 
ô 
ð ñ ô ð õ 0Ð0@ÈÐPÑPÔP�M€J�à‡N‚NØ�xÐ Ø"Ð$6Ð7à+¸Ð@Ð@Ø/¸VÐDÐDð
ð ñ ô ð ð �^Š^ ¨8Ð 4¸{¸mˆ^ÑLÔL€FØ�+ÔÐ*Ð*Ð*ð �Y Ð1DÐEÑFÔF€Nå  ¨Ô!4Ñ5Ô5ð &ð &‰ˆˆ8ØÐ#Ð#Ð#ð  Ð)Ð)Ð)Ð)õ �L¨(°>Ô*BÑCÔCˆØÔ# ~°aÔ'8Ô'@Ò@Ð@Ð@Ð@ð ˜XÐ%Ð%Ð%Ð%Ð%ð �~Š~ Z°Ð$8ˆ~Ñ9Ô9€HÝˆx˜ŒÑÔ H :Ò-Ð-Ð-Ð-Ð-Ð-r5   c                 óV  — t          d¬¦  «        }t          d¬¦  «        }t          ¦   «         }|                     t	          |¬¦  «        ¬¦  «         |                     dt          d|¬	¦  «        ¬
¦  «         t          | ||¬¦  «        \  }}|                     ddgddg¬¦  «         |                     ddgddg¬¦  «        }|d         €J ‚t          |d         ¦  «        dk    sJ ‚t          |d         d         ¦  «        dk    sJ ‚|d         €J ‚|d         D ]}|€J ‚d|v sJ ‚ŒdS )z9Test that dense and sparse auto-embeddings work together.r,   rM   Ú
with_denser2  rO  rN   Ú
sparse_keyrÝ   r4  r  r  Úboth1Úboth2zcombined documentzanother docr  rõ   rð   rö   Nrq  r   )
r+   r´   r   r�   r   r   rÌ   r  rx   rf   )ry   Údense_efr@  r‰   rš   rA   rÒ  rA  s           r3   Ú.test_dense_and_sparse_auto_embeddings_togetherr  ö  s§  € õ
 '¨1Ð-Ñ-Ô-€HÝ4¸<ÐHÑHÔH€Iå‰XŒX€FØ
×ÒÕ0ÀHÐMÑMÔMÐÑNÔNÐNØ
×ÒØÝ&Ø"Ø(ð
ñ 
ô 
ð ñ ô ð õ 0ØØØ#ðñ ô �M€J�ð ‡N‚NØ�gÐØ&¨Ð6ð ñ ô ð ð
 �^Š^Ø�gÐØ˜{Ð+ð ñ ô €Fð �,ÔÐ+Ð+Ð+Ýˆv�lÔ#Ñ$Ô$¨Ò)Ð)Ð)Ð)Ýˆv�lÔ# AÔ&Ñ'Ô'¨1Ò,Ð,Ð,Ð,ð �+ÔÐ*Ð*Ð*Ø˜;Ô'ð (ð (ˆØÐ#Ð#Ð#Ø˜xÐ'Ð'Ð'Ð'Ð'ð(ð (r5   c                 ó†  — t          d¬¦  «        }t          ¦   «                              dt          d|¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}|                     dgd	g¬
¦  «         |                     dgdg¬
¦  «         |                     dgddg¬¦  «        }|d         €J ‚|d         €J ‚|d         d         dk    sJ ‚d|d         d         v sJ ‚ |dg¦  «        d         }t          t          |d         d         d         ¦  «        }|j
        |j
        k    sJ ‚|                     dgdg¬
¦  «         |                     dgdg¬¦  «        }|d         €J ‚d|d         d         v sJ ‚ |dg¦  «        d         }	t          t          |d         d         d         ¦  «        }
|
j
        |	j
        k    sJ ‚dS )z=Test sparse auto-embedding with update and upsert operations.Úupdate_upsertr2  Úupdate_sparserÝ   r4  r  r  Úup1zoriginal docr  zupdated docrð   rï   rö   Nr   Úup2zupserted doc)r´   r   r�   r   rÌ   r  r  rx   r(   r	   r¼   r  )ry   r@  r‰   rš   rA   Úresult_updaterm  r1  rÓ  Úexpected_upsertÚactual_upserts              r3   Ú1test_sparse_auto_embedding_with_update_and_upsertrˆ  $  s>  € õ
 5¸?ÐKÑKÔK€Iå‰XŒX×"Ò"ØÝ&Ø"Ø(ð
ñ 
ô 
ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�ð ‡N‚NØˆGØ!Ð"ð ñ ô ð ð ×ÒØˆGØ �/ð ñ ô ð ð
 —N’N¨ w¸ÀkÐ8R�NÑSÔS€MØ˜Ô%Ð1Ð1Ð1Ø˜Ô%Ð1Ð1Ð1Ø˜Ô% aÔ(¨MÒ9Ð9Ð9Ð9Ø˜m¨KÔ8¸Ô;Ð;Ð;Ð;Ð;ð ˆy˜-˜Ñ)Ô)¨!Ô,€HÝ•, ¨kÔ :¸1Ô =¸oÔ NÑOÔO€FØŒ>˜XÔ-Ò-Ð-Ð-Ð-ð ×ÒØˆGØ!Ð"ð ñ ô ð ð
 —N’N¨ w¸¸�NÑFÔF€MØ˜Ô%Ð1Ð1Ð1Ø˜m¨KÔ8¸Ô;Ð;Ð;Ð;Ð;ð  �i Ð 0Ñ1Ô1°!Ô4€OÝ� }°[Ô'AÀ!Ô'DÀ_Ô'UÑVÔV€MØÔ  OÔ$;Ò;Ð;Ð;Ð;Ð;Ð;r5   c                 ó:  — t          d¬¦  «        }t          ¦   «                              dt          d|¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}|j        }|                     dgd	g¬
¦  «         |                      ¦   «         }|                     |¬¦  «        }|j	        €J ‚d|j	        j
        v sJ ‚|                     dgdg¬
¦  «         |                     ddgdg¬¦  «        }|d         €J ‚d|d         d         v sJ ‚d|d         d         v sJ ‚dS )zFTest that sparse auto-embedding config persists across client reloads.Úpersist_testr2  Úpersist_sparserÝ   r4  r  r  Úpersist1zpersistent documentr  r‹   NÚpersist2znew document after reloadrð   rö   r   rø   )r´   r   r�   r   rÌ   rG   r  rŒ   r—   r‰   r“   rx   )	ry   r@  r‰   rš   r˜   r™   rL  rž   rÒ  s	            r3   Ú;test_sparse_auto_embedding_persistence_across_client_reloadrŽ  \  s�  € õ
 5¸>ÐJÑJÔJ€Iå‰XŒX×"Ò"ØÝ&Ø"Ø(ð
ñ 
ô 
ð #ñ ô €Fõ 5Ð5EÈfÐUÑUÔUÑ€J�Ø ”o€Oà‡N‚NØˆLØ(Ð)ð ñ ô ð ð '×@Ò@ÑBÔB€OØ)×8Ò8Øð 9ñ ô Ðð
 Ô%Ð1Ð1Ð1ØÐ2Ô9Ô>Ð>Ð>Ð>Ð>ð ×ÒØˆLØ.Ð/ð ñ ô ð ð !×$Ò$Ø˜Ð$Ø�ð %ñ ô €Fð �+ÔÐ*Ð*Ð*Ø˜v kÔ2°1Ô5Ð5Ð5Ð5Ð5Ø˜v kÔ2°1Ô5Ð5Ð5Ð5Ð5Ð5Ð5r5   c                 ób  — t          d¬¦  «        }t          ¦   «                              dt          d|¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}d}d	„ t          |¦  «        D ¦   «         }d
„ t          |¦  «        D ¦   «         }|                     ||¬¦  «         |                     |dd…         dg¬¦  «        }|d         €J ‚ ||¦  «        }	t          |d         ¦  «        D ]B\  }
}|€J ‚d|v sJ ‚t          t          |d         ¦  «        }|j        |	|
         j        k    sJ ‚ŒCdS )z9Test sparse auto-embedding with large batch of documents.Ú
batch_testr2  Úbatch_sparserÝ   r4  r  r  r¦   c                 ó   — g | ]}d |› �‘ŒS )zbatch-r:   r<   s     r3   r?   zDtest_sparse_auto_embedding_with_batch_operations.<locals>.<listcomp>   s   € Ð
3Ð
3Ð
3˜Aˆ<�Aˆ<ˆ<Ð
3Ð
3Ð
3r5   c                 ó   — g | ]}d |› �‘ŒS )zdocument number r:   r<   s     r3   r?   zDtest_sparse_auto_embedding_with_batch_operations.<locals>.<listcomp>¡  s!   € ÐCÐCÐC¨AÐ' AÐ'Ð'ÐCÐCÐCr5   r  Nr  rð   rö   )r´   r   r�   r   rÌ   rC   r  rx   rÃ   r(   r	   r¼   )ry   r@  r‰   rš   rA   rÈ  rî   rï   rÒ  r/  r>   rA  r1  s                r3   Ú0test_sparse_auto_embedding_with_batch_operationsr”  �  su  € õ
 5¸<ÐHÑHÔH€Iå‰XŒX×"Ò"ØÝ&Ø"Ø(ð
ñ 
ô 
ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�ð €JØ
3Ð
3¥ zÑ!2Ô!2Ð
3Ñ
3Ô
3€CØCÐCµ°zÑ1BÔ1BÐCÑCÔC€Ià‡N‚N�s i€NÑ0Ô0Ð0ð �^Š^  C R C¤°;°-ˆ^Ñ@Ô@€FØ�+ÔÐ*Ð*Ð*ð �Y˜yÑ)Ô)€Nå  ¨Ô!4Ñ5Ô5ð ;ð ;‰ˆˆ8ØÐ#Ð#Ð#Ø Ð)Ð)Ð)Ð)å•l H¨^Ô$<Ñ=Ô=ˆØŒ~ °Ô!2Ô!:Ò:Ð:Ð:Ð:Ð:ð;ð ;r5   c                 óZ  — t          d¬¦  «        }t          ¦   «                              dt          d|¬¦  «        ¬¦  «        }t	          | |¬¦  «        \  }}|                     dgd	g¬
¦  «         |                     dgdg¬¦  «        }|d         €J ‚|d         d         }|€J ‚d|v sJ ‚dS )zCTest sparse auto-embedding handles empty/None documents gracefully.Ú
empty_testr2  Úempty_sparserÝ   r4  r  r  Úempty1Ú r  rð   rö   Nr   )r´   r   r�   r   rÌ   r  rx   )ry   r@  r‰   rš   rA   rÒ  rA  s          r3   Ú/test_sparse_auto_embedding_with_empty_documentsrš  ´  sí   € õ
 5¸<ÐHÑHÔH€Iå‰XŒX×"Ò"ØÝ&Ø"Ø(ð
ñ 
ô 
ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�ð ‡N‚NØˆJØ�$ð ñ ô ð ð
 �^Š^  
°[°Mˆ^ÑBÔB€FØ�+ÔÐ*Ð*Ð*ð �kÔ" 1Ô%€HØÐÐÐØ˜XÐ%Ð%Ð%Ð%Ð%Ð%r5   c                 ód  — t          | ¦  «        \  }}|j        }|€J ‚d|j        v sJ ‚|j        d         j        }|€J ‚|j        }|€J ‚|j        du sJ ‚|j        €J ‚|j        j        €J ‚|j        j        dk    sJ ‚|j        j        }|€J ‚| 	                    ¦   «         dk    sJ ‚|j
        }|€J ‚|                     d¦  «        }|€J ‚| 	                    ¦   «         dk    sJ ‚|                     ¦   «         }	|	d         d         d         d	         }
|
d
         d         }|d         dk    sJ ‚|d         dk    sJ ‚|	d         d         d	         }|d
         d         }|d         dk    sJ ‚|d         dk    sJ ‚|	d         d         d         }|€J ‚|d
         d         }|d         dk    sJ ‚dS )zbVerify that when no schema is provided, the collection uses DefaultEmbeddingFunction (not legacy).NrŠ   TÚl2r\   r¥   r“   r”   r•   rK   ÚtypeÚknownrG   rù   Úsparse_vectorÚsparse_vector_indexÚunknown)rÌ   r‰   r“   r”   r•   r–   rK   r†   r¥   rG   rª   rx   r’   )ry   rš   r˜   r‰   rœ   r•   r­   rK   r±   Ú	json_dataÚembedding_vectorÚ	ef_configÚdefaults_vectorÚdefaults_ef_configÚdefaults_sparseÚsparse_ef_configs                   r3   Ú7test_default_embedding_function_when_no_schema_providedr©  Ô  sJ  € õ
 5Ð5EÑFÔFÑ€J�ð Ô€FØÐÐÐð ˜6œ;Ð&Ð&Ð&Ð&Øœ \Ô2Ô=ÐØÐ)Ð)Ð)Ø%Ô2€LØÐ#Ð#Ð#ØÔ 4Ð'Ð'Ð'Ð'ØÔÐ*Ð*Ð*ØÔÔ$Ð0Ð0Ð0ØÔÔ$¨Ò,Ð,Ð,Ð,ð 
Ô	Ô	/€BØˆ>ˆ>ˆ>ð �7Š7‰9Œ9˜	Ò!Ð!Ð!Ð!àÔ%€FØÐÐÐØ—
’
Ð/Ñ0Ô0€IØÐ Ð Ð Ø�>Š>ÑÔ˜yÒ(Ð(Ð(Ð(ð ×(Ò(Ñ*Ô*€IØ  Ô(¨Ô6°|ÔDÀ^ÔTÐØ  Ô*Ð+?Ô@€Ið �VÔ Ò'Ð'Ð'Ð'Ø�VÔ 	Ò)Ð)Ð)Ð)ð   
Ô+¨LÔ9¸.ÔI€OØ(¨Ô2Ð3GÔHÐØ˜fÔ%¨Ò0Ð0Ð0Ð0Ø˜fÔ%¨Ò2Ð2Ð2Ð2ð   
Ô+¨OÔ<Ð=RÔS€OØÐ&Ð&Ð&Ø& xÔ0Ð1EÔFÐØ˜FÔ# yÒ0Ð0Ð0Ð0Ð0Ð0r5   c                 ó†  — |                       ¦   «         }|                     ¦   «          dt          ¦   «         j        › �}t	          d¬¦  «        }|                     ||¬¦  «         |                     ||¬¦  «        }|j        }|€J ‚d|j        v sJ ‚|j        d         j	        }|€J ‚|j
        }|€J ‚|j        du sJ ‚|j        €J ‚|j        j        €J ‚|j        j        dk    sJ ‚|j        j        }|€J ‚|                     ¦   «         d	k    sJ ‚|                     ¦   «         d
dik    sJ ‚|                     ¦   «         }	|	d         d         d         d         }
|
d         d         }|d         dk    sJ ‚|d         d	k    sJ ‚|d         d
dik    sJ ‚|	d         d         d         }|d         d         }|d         dk    sJ ‚|d         d	k    sJ ‚|d         d
dik    sJ ‚|                     dgdg¬¦  «         |                     dgdg¬¦  «        }|d         €J ‚t)          |d         d         ¦  «        dk    sJ ‚dS )zXVerify that custom embedding function is reflected in schema when no schema is provided.Úcustom_ef_no_schema_é   rM   rË   NrŠ   TrQ   rF   r-   r“   r”   r•   rK   r¥   r�  rž  rG   rù   Útest1r-  r  rõ   rö   r   )rŒ   r�   r)   rŽ   r+   r$  r—   r‰   r“   r”   r•   r–   rK   r†   r¥   rG   rJ   r’   r  rx   rf   ©ry   r˜   r™   Ú	custom_efrš   r‰   rœ   r•   r­   r¢  r£  r¤  r¥  r¦  rÒ  s                  r3   Ú-test_custom_embedding_function_without_schemar°    sò  € ð ×7Ò7Ñ9Ô9€FØ
‡L‚L�N„N€Nà:­U©W¬W¬[Ð:Ð:€Oõ (¨AÐ.Ñ.Ô.€Ið ×ÒØØ$ð ñ ô ð ð ×&Ò&ØØ$ð 'ñ ô €Jð Ô€FØÐÐÐð ˜6œ;Ð&Ð&Ð&Ð&Øœ \Ô2Ô=ÐØÐ)Ð)Ð)Ø%Ô2€LØÐ#Ð#Ð#ØÔ 4Ð'Ð'Ð'Ð'ØÔÐ*Ð*Ð*ØÔÔ$Ð0Ð0Ð0ØÔÔ$¨Ò0Ð0Ð0Ð0ð 
Ô	Ô	/€BØˆ>ˆ>ˆ>ð �7Š7‰9Œ9˜Ò#Ð#Ð#Ð#Ø�=Š=‰?Œ?˜u a˜jÒ(Ð(Ð(Ð(ð ×(Ò(Ñ*Ô*€IØ  Ô(¨Ô6°|ÔDÀ^ÔTÐØ  Ô*Ð+?Ô@€Ið �VÔ Ò'Ð'Ð'Ð'Ø�VÔ Ò+Ð+Ð+Ð+Ø�XÔ 5¨! *Ò,Ð,Ð,Ð,ð   
Ô+¨LÔ9¸.ÔI€OØ(¨Ô2Ð3GÔHÐØ˜fÔ%¨Ò0Ð0Ð0Ð0Ø˜fÔ%¨Ò4Ð4Ð4Ð4Ø˜hÔ'¨E°1¨:Ò5Ð5Ð5Ð5ð ‡N‚NØˆIØ"Ð#ð ñ ô ð ð
 �^Š^  	°L°>ˆ^ÑBÔB€FØ�,ÔÐ+Ð+Ð+åˆv�lÔ# AÔ&Ñ'Ô'¨1Ò,Ð,Ð,Ð,Ð,Ð,r5   c                 ó   — |                       ¦   «         }|                     ¦   «          dt          ¦   «         j        › �}t	          d¬¦  «        }|                     ||t          ¦   «         ¬¦  «         |                     ||¬¦  «        }|j        }|€J ‚d|j	        v sJ ‚|j	        d         j
        }|€J ‚|j        }|€J ‚|j        du sJ ‚|j        €J ‚|j        j        €J ‚|j        j        d	k    sJ ‚|j        j        }|€J ‚|                     ¦   «         d
k    sJ ‚|                     ¦   «         ddik    sJ ‚|                     ¦   «         }	|	d         d         d         d         }
|
d         d         }|d         dk    sJ ‚|d         d
k    sJ ‚|d         ddik    sJ ‚|	d         d         d         }|d         d         }|d         dk    sJ ‚|d         d
k    sJ ‚|d         ddik    sJ ‚|                     dgdg¬¦  «         |                     dgdg¬¦  «        }|d         €J ‚t+          |d         d         ¦  «        dk    sJ ‚dS )z_Verify that custom embedding function is reflected in schema when default Schema() is provided.Úcustom_ef_default_schema_r¬  rM   ©rG   r¥   r‰   rË   NrŠ   TrQ   rF   r-   r“   r”   r•   rK   r¥   r�  rž  rG   rù   r­  r-  r  rõ   rö   r   )rŒ   r�   r)   rŽ   r+   r$  r   r—   r‰   r“   r”   r•   r–   rK   r†   r¥   rG   rJ   r’   r  rx   rf   r®  s                  r3   Ú2test_custom_embedding_function_with_default_schemar´  Y  sù  € ð ×7Ò7Ñ9Ô9€FØ
‡L‚L�N„N€Nà?µ%±'´'´+Ð?Ð?€Oõ (¨AÐ.Ñ.Ô.€Ið ×ÒØØ$Ý‰xŒxð ñ ô ð ð ×&Ò&ØØ$ð 'ñ ô €Jð Ô€FØÐÐÐð ˜6œ;Ð&Ð&Ð&Ð&Øœ \Ô2Ô=ÐØÐ)Ð)Ð)Ø%Ô2€LØÐ#Ð#Ð#ØÔ 4Ð'Ð'Ð'Ð'ØÔÐ*Ð*Ð*ØÔÔ$Ð0Ð0Ð0ØÔÔ$¨Ò0Ð0Ð0Ð0ð 
Ô	Ô	/€BØˆ>ˆ>ˆ>ð �7Š7‰9Œ9˜Ò#Ð#Ð#Ð#Ø�=Š=‰?Œ?˜u a˜jÒ(Ð(Ð(Ð(ð ×(Ò(Ñ*Ô*€IØ  Ô(¨Ô6°|ÔDÀ^ÔTÐØ  Ô*Ð+?Ô@€Ið �VÔ Ò'Ð'Ð'Ð'Ø�VÔ Ò+Ð+Ð+Ð+Ø�XÔ 5¨! *Ò,Ð,Ð,Ð,ð   
Ô+¨LÔ9¸.ÔI€OØ(¨Ô2Ð3GÔHÐØ˜fÔ%¨Ò0Ð0Ð0Ð0Ø˜fÔ%¨Ò4Ð4Ð4Ð4Ø˜hÔ'¨E°1¨:Ò5Ð5Ð5Ð5ð ‡N‚NØˆIØ"Ð#ð ñ ô ð ð
 �^Š^  	°L°>ˆ^ÑBÔB€FØ�,ÔÐ+Ð+Ð+åˆv�lÔ# AÔ&Ñ'Ô'¨1Ò,Ð,Ð,Ð,Ð,Ð,r5   c                 ó<  — |                       ¦   «         }|                     ¦   «          dt          ¦   «         j        › �}t	          d¬¦  «        }t	          d¬¦  «        }t          ¦   «                              t          |¬¦  «        ¬¦  «        }t          j	        t          ¦  «        5 }|                     |||¬¦  «         ddd¦  «         n# 1 swxY w Y   t          |j        ¦  «        }d	|                     ¦   «         v sd
|                     ¦   «         v sJ ‚dS dS )zTVerify that setting different custom embedding functions in schema and config fails.Úconflict_ef_r,   rM   r¤   rO  rN   r³  Nr‰   Úconflict)rŒ   r�   r)   rŽ   r+   r   r�   r   r.  r/  r†  r$  rX   r„  Úlower)ry   r˜   r™   r±   Ú	schema_efr‰   r—  Ú	error_msgs           r3   Ú?test_conflicting_embedding_functions_in_schema_and_config_failsr»  ¦  s[  € ð ×7Ò7Ñ9Ô9€FØ
‡L‚L�N„N€Nà2¥U¡W¤W¤[Ð2Ð2€Oõ (¨AÐ.Ñ.Ô.€IÝ'¨AÐ.Ñ.Ô.€Iõ ‰XŒX×"Ò"Ý °IÐ>Ñ>Ô>ð #ñ ô €Fõ 
Œ•yÑ	!Ô	!ð 
 XØ× Ò Ø Ø(Øð 	!ñ 	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ �H”NÑ#Ô#€IØ�y—’Ñ(Ô(Ð(Ð(¨J¸)¿/º/Ñ:KÔ:KÐ,KÐ,KÐ,KÐKÐ(Ð(Ð,KÐ,Ks   Â(CÃCÃCc                 óN  — t          ¦   «         }|                     t          ¦   «         d¬¦  «         |                     t          ¦   «         t	          d¦  «        ¬¦  «         t          | |¬¦  «        \  }}|j        €J ‚d|j        j        v sJ ‚d|j        j        v sJ ‚|                     dgdgdd	d
œg¬¦  «         | 	                    ddi¬¦  «        }t          |d         ¦  «        dhk    sJ ‚| 	                    dd	i¬¦  «        }t          |d         ¦  «        dhk    sJ ‚dS )z6Test that create_index accepts both str and Key types.Ú	field_str©rK   r  Ú	field_keyr  Nz
key-test-1útest docÚvalue1r9  )r½  r¿  rí   rñ   rî   )r   r�   r
   r   r   rÌ   r‰   r“   r  rx   r  )ry   r‰   rš   rA   Ú
str_resultÚ
int_results         r3   Útest_create_index_with_key_typerÄ  Æ  sZ  € õ ‰XŒX€FØ
×ÒÕ8Ñ:Ô:ÀÐÑLÔLÐLØ
×ÒÕ5Ñ7Ô7½SÀÑ=MÔ=MÐÑNÔNÐNå/Ð0@ÈÐPÑPÔP�M€J�ð ÔÐ(Ð(Ð(Ø˜*Ô+Ô0Ð0Ð0Ð0Ð0Ø˜*Ô+Ô0Ð0Ð0Ð0Ð0ð ‡N‚NØˆNØ�,Ø!)¸Ð;Ð;Ð<ð ñ ô ð ð —’ {°HÐ&=�Ñ>Ô>€JÝˆz˜%Ô Ñ!Ô! l ^Ò3Ð3Ð3Ð3ð —’ {°BÐ&7�Ñ8Ô8€JÝˆz˜%Ô Ñ!Ô! l ^Ò3Ð3Ð3Ð3Ð3Ð3r5   c                 ó¤  — t          ¦   «         }|                     t          ¦   «         d¬¦  «         |                     t          ¦   «         t	          d¦  «        ¬¦  «         t          | |¬¦  «        \  }}|j        €J ‚d|j        j        v sJ ‚d|j        j        v sJ ‚|                     dgdgdd	d
œg¬¦  «         t          j
        t          ¦  «        5  |                     ddi¬¦  «         ddd¦  «         n# 1 swxY w Y   t          j
        t          ¦  «        5  |                     dd	i¬¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z6Test that delete_index accepts both str and Key types.Údisabled_strr¾  Údisabled_keyr  Nzdisable-test-1rÀ  r„  r¦   )rÆ  rÇ  rí   rñ   )r   r…  r
   r   r   rÌ   r‰   r“   r  r.  r/  r†  rx   )ry   r‰   rš   rA   s       r3   Útest_delete_index_with_key_typerÈ  ç  sð  € õ ‰XŒX€FØ
×ÒÕ8Ñ:Ô:ÀÐÑOÔOÐOØ
×ÒÕ5Ñ7Ô7½SÀÑ=PÔ=PÐÑQÔQÐQå/Ð0@ÈÐPÑPÔP�M€J�ð ÔÐ(Ð(Ð(Ø˜ZÔ.Ô3Ð3Ð3Ð3Ð3Ø˜ZÔ.Ô3Ð3Ð3Ð3Ð3ð ‡N‚NØÐØ�,Ø$+¸SÐAÐAÐBð ñ ô ð õ 
Œ•yÑ	!Ô	!ð 8ð 8Ø�Š˜n¨gÐ6ˆÑ7Ô7Ð7ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8õ 
Œ•yÑ	!Ô	!ð 4ð 4Ø�Š˜n¨cÐ2ˆÑ3Ô3Ð3ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð 4ð 4s$   ÃC;Ã;C?ÄC?ÄEÅE	ÅE	c                 ó~  — t          ¦   «         }|                     t          t          j        t          d¬¦  «        ¬¦  «        ¬¦  «         t          | |t          d¬¦  «        ¬¦  «        \  }}|j        €J ‚|j        j        d         j	        }|€J ‚|j
        €J ‚|j
        j        j        €J ‚|j
        j        j        dk    sJ ‚|j
        j        j        d	k    sJ ‚|                     g d
¢g d¢¬¦  «         |                     dgdg¬¦  «        }|d         €J ‚t!          |d         d         ¦  «        dk    sJ ‚|                     t%          ¦   «                              t)          g d¢d¬¦  «        ¦  «        ¦  «        }t!          |d         ¦  «        dk    sJ ‚t!          |d         d         ¦  «        dk    sJ ‚dS )z<Test that VectorIndexConfig source_key accepts Key.DOCUMENT.rå   rM   r4  rN   r  NrŠ   rQ   rÝ   )úvec-1zvec-2zvec-3)zapple fruitzbanana fruitzcar vehicler  rÊ  rõ   rö   r   rP  rq  )rÓ   Úlimitrî   )r   r�   r   r   ÚDOCUMENTr+   rÌ   r‰   r“   r”   r•   rK   r†   r5  r  rx   rf   r>  r    rÍ   r   )ry   r‰   rš   rA   Úembedding_configrÒ  rC  s          r3   Ú1test_vector_index_config_with_key_document_sourcerÎ    s  € õ
 ‰XŒX€FØ
×ÒÝ Ý”|Ý6¸1Ð=Ñ=Ô=ð
ñ 
ô 
ð ñ ô ð õ 0ØØÝ2°qÐ9Ñ9Ô9ðñ ô �M€J�ð ÔÐ(Ð(Ð(Ø!Ô(Ô-¨lÔ;ÔFÐØÐ'Ð'Ð'ØÔ(Ð4Ð4Ð4ØÔ(Ô/Ô5ÐAÐAÐAØÔ(Ô/Ô5¸ÒAÐAÐAÐAØÔ(Ô/Ô:¸kÒIÐIÐIÐIð ‡N‚NØ'Ð'Ð'Ø@Ð@Ð@ð ñ ô ð ð �^Š^  	°L°>ˆ^ÑBÔB€FØ�,ÔÐ+Ð+Ð+Ýˆv�lÔ# AÔ&Ñ'Ô'¨1Ò,Ð,Ð,Ð,ð ×%Ò%Ý‰Œ�Š•cÐ 9Ð 9Ð 9ÀÐCÑCÔCÑDÔDñô €Mõ ˆ}˜UÔ#Ñ$Ô$ qÒ(Ð(Ð(Ð(Ýˆ}˜UÔ# AÔ&Ñ'Ô'¨1Ò,Ð,Ð,Ð,Ð,Ð,r5   c                 óœ  — t          d¬¦  «        }t          ¦   «                              dt          t          j        |¬¦  «        ¬¦  «        }t          | |¬¦  «        \  }}|j        €J ‚|j        j        d         j	        }|€J ‚|j
        €J ‚|j
        j        j        dk    sJ ‚|                     g d	¢g d
¢¬¦  «         |                     dgdg¬¦  «        }|d         €J ‚d|d         d         v sJ ‚t          t           |d         d         d         ¦  «        }|                     t%          ¦   «                              t)          dt          t*          |¦  «        d¬¦  «        ¦  «        ¦  «        }t-          |d         ¦  «        dk    sJ ‚d|d         d         v sJ ‚t          ¦   «                              dt          t	          d¦  «        |¬¦  «        ¬¦  «        }	t          | |	¬¦  «        \  }
}|
j        €J ‚|
j        j        d         j	        }|€J ‚|j
        €J ‚|j
        j        j        dk    sJ ‚|
                     ddgddgddiddig¬¦  «         |
                     ddgdg¬¦  «        }|d         €J ‚d|d         d         v sJ ‚d|d         d         v sJ ‚t          t           |d         d         d         ¦  «        }|
                     t%          ¦   «                              t)          dt          t*          |¦  «        d¬¦  «        ¦  «        ¦  «        }t-          |d         ¦  «        dk    sJ ‚d|d         d         v sJ ‚dS )zLTest that SparseVectorIndexConfig source_key accepts both str and Key types.Ú	key_typesr2  Úsparse1r4  r  r  NrÝ   rC  )ÚappleÚbananaÚoranger  rD  rð   rö   r   rq  )r  rÓ   rË  rî   Úsparse2re  zsparse-key-1zsparse-key-2r*  r+  zcontent onezcontent tworí   rø   )r´   r   r�   r   r   rÌ  rÌ   r‰   r“   rŸ  r   rK   r5  r  rx   r(   r	   r>  r    rÍ   r   r!   rf   )ry   r@  Úschema1Úcollection1rA   Úsparse1_configÚresult1Ú
sparse_vecÚsearch_result1Úschema2Úcollection2Úsparse2_configÚresult2r  Úsearch_result2s                  r3   Ú.test_sparse_vector_index_config_with_key_typesrá  6  sØ  € õ
 5¸;ÐGÑGÔG€Iõ ‰hŒh×#Ò#ØÝ&Ý”|Ø(ð
ñ 
ô 
ð $ñ ô €Gõ 1Ð1AÈ'ÐRÑRÔR�N€K�ØÔÐ)Ð)Ð)Ø Ô'Ô,¨YÔ7ÔE€NØÐ%Ð%Ð%ØÔ-Ð9Ð9Ð9ØÔ-Ô4Ô?À;ÒNÐNÐNÐNð ‡O‚OØÐÐØ/Ð/Ð/ð ñ ô ð ð �oŠo 4 &°;°-ˆoÑ@Ô@€GØ�;ÔÐ+Ð+Ð+Ø˜ Ô,¨QÔ/Ð/Ð/Ð/Ð/Ý•l G¨KÔ$8¸Ô$;¸IÔ$FÑGÔG€Jð !×'Ò'Ý‰Œ�Š•c˜i­tµC¸Ñ/DÔ/DÈAÐNÑNÔNÑOÔOñô €Nõ ˆ~˜eÔ$Ñ%Ô%¨Ò)Ð)Ð)Ð)Ø�> %Ô(¨Ô+Ð+Ð+Ð+Ð+õ ‰hŒh×#Ò#ØÝ&Ý˜<Ñ(Ô(Ø(ð
ñ 
ô 
ð $ñ ô €Gõ 1Ð1AÈ'ÐRÑRÔR�N€K�ØÔÐ)Ð)Ð)Ø Ô'Ô,¨YÔ7ÔE€NØÐ%Ð%Ð%ØÔ-Ð9Ð9Ð9ØÔ-Ô4Ô?À<ÒOÐOÐOÐOð ‡O‚OØ˜^Ð,Ø˜6Ð"Ø  -Ð0°<ÀÐ2OÐPð ñ ô ð ð �oŠoØ˜^Ð,°{°mð ñ ô €Gð �;ÔÐ+Ð+Ð+Ø˜ Ô,¨QÔ/Ð/Ð/Ð/Ð/Ø˜ Ô,¨QÔ/Ð/Ð/Ð/Ð/õ � g¨kÔ&:¸1Ô&=¸iÔ&HÑIÔI€Lð !×'Ò'Ý‰Œ�Š•c˜i­tµC¸Ñ/FÔ/FÈaÐPÑPÔPÑQÔQñô €Nõ ˆ~˜eÔ$Ñ%Ô%¨Ò)Ð)Ð)Ð)Ø˜^¨EÔ2°1Ô5Ð5Ð5Ð5Ð5Ð5Ð5r5   c                  ó�  — t          ¦   «         } 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¦  «         dS # 1 swxY w Y   dS )zITest that create_index rejects keys starting with # (except system keys).úkey cannot begin with '#'r,  ú#custom_fieldr¾  Nz/Cannot create index on special key '#embedding')r   r.  r/  r?  r�   r
   r   Ú	EMBEDDINGr  s    r3   Ú/test_schema_rejects_special_key_in_create_indexræ  Š  sd  € õ ‰XŒX€FÝ	Œ•zÐ)DÐ	EÑ	EÔ	Eð Uð UØ×ÒÕ#<Ñ#>Ô#>ÀOÐÑTÔTÐTðUð Uð Uñ Uô Uð Uð Uð Uð Uð Uð Uøøøð Uð Uð Uð Uõ 
ŒÝÐKð
ñ 
ô 
ð Sð Sð 	×ÒÕ#<Ñ#>Ô#>ÅCÄMÐÑRÔRÐRðSð Sð Sñ Sô Sð Sð Sð Sð Sð Sð Sð Søøøð Sð Sð Sð Sð Sð Só#   ª$AÁAÁ!AÂ .B;Â;B?ÃB?c                  ó�  — t          ¦   «         } 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¦  «         dS # 1 swxY w Y   dS )zITest that delete_index rejects keys starting with # (except system keys).rã  r,  rä  r¾  Nz.Cannot delete index on special key '#document')r   r.  r/  r?  r…  r
   r   rÌ  r  s    r3   Ú/test_schema_rejects_special_key_in_delete_indexré  ˜  sd  € õ ‰XŒX€FÝ	Œ•zÐ)DÐ	EÑ	EÔ	Eð Uð UØ×ÒÕ#<Ñ#>Ô#>ÀOÐÑTÔTÐTðUð Uð Uñ Uô Uð Uð Uð Uð Uð Uð Uøøøð Uð Uð Uð Uõ 
ŒÝÐJð
ñ 
ô 
ð Rð Rð 	×ÒÕ#<Ñ#>Ô#>ÅCÄLÐÑQÔQÐQðRð Rð Rñ Rô Rð Rð Rð Rð Rð Rð Rð Røøøð Rð Rð Rð Rð Rð Rrç  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          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          t          j        ¬¦  «         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 )z=Test that config validators reject invalid source_key values.z source_key cannot begin with '#'r,  rŠ   r=  Nz	#metadata)r.  r/  r?  r   r   rå  r   r:   r5   r3   Ú1test_schema_rejects_invalid_source_key_in_configsrë  ¦  s‹  € õ 
Œ•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ð 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ð 8ð 8ð 8sU   œ9¹=Á =ÁBÂB
ÂB
Â,C	Ã	CÃCÃ/DÄDÄDÄ<EÅEÅ!Ec           	      ó<  — |                       ¦   «         }|                     ¦   «          dt          ¦   «         j        › �}t	          ¦   «         }ddlm}m}m}m	}  | | |d |¦   «         ¬¦  «        ¬¦  «        ¬¦  «        |j
        d<   t          j        t          ¦  «        5 }|                     ||¬	¦  «         d
d
d
¦  «         n# 1 swxY w Y   t          |j        ¦  «        }	d|	v s.d|	                     ¦   «         v sd|	                     ¦   «         v sJ ‚d
S d
S d
S )zKTest that server-side validation rejects schemas with invalid special keys.Úserver_validate_r   )Ú
ValueTypesÚStringValueTypeÚStringInvertedIndexTyper
   T©r–   rK   )rû   )rú   z#invalid_keyrˆ   Nú#r  Úinvalid)rŒ   r�   r)   rŽ   r   Úchromadb.api.typesrî  rï  rð  r
   r“   r.  r/  r†  r$  rX   r„  r¸  )
ry   r˜   r™   r‰   rî  rï  rð  r
   r—  rº  s
             r3   Ú.test_server_validates_schema_with_special_keysrõ  º  s¼  € ð
 ×7Ò7Ñ9Ô9€FØ
‡L‚L�N„N€Nà6­©¬¬Ð6Ð6€Oõ ‰XŒX€Fðð ð ð ð ð ð ð ð ð ð ð ð #- *ØˆØ"9Ð"9ØØ0Ð0Ñ2Ô2ð#ñ #ô #ð
ñ 
ô 
ð#ñ #ô #€F„K�Ñõ 
Œ•yÑ	!Ô	!ð F XØ× Ò  o¸fÐ ÑEÔEÐEðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fõ �H”NÑ#Ô#€IàˆyÐÐ˜E Y§_¢_Ñ%6Ô%6Ð6Ð6¸)ÀyÇÂÑGXÔGXÐ:XÐ:XÐ:XÐXÐÐÐ6Ð6Ð:XÐ:Xs   Â#CÃCÃCc                 óV  — |                       ¦   «         }|                     ¦   «          dt          ¦   «         j        › �}ddlm}m}m} t          ¦   «         }t          j
        ddd¬¦  «        } | | |d|¬¦  «        ¬	¦  «        ¬
¦  «        |j        d<   t          j        t          ¦  «        5 }|                     ||¬¦  «         ddd¦  «         n# 1 swxY w Y   t!          |j        ¦  «        }	d|	                     ¦   «         v sd|	v sd|	                     ¦   «         v sJ ‚dS dS dS )zWTest that server-side validation rejects invalid source_key in SparseVectorIndexConfig.Úserver_source_key_r   )rî  ÚSparseVectorValueTypeÚSparseVectorIndexTypeNrŠ   )r¥   r5  Úbm25Trñ  )r   )rŸ  Útest_sparserˆ   r5  rò  Údocument)rŒ   r�   r)   rŽ   rô  rî  rø  rù  r   r   Úmodel_constructr“   r.  r/  r†  r$  rX   r„  r¸  )
ry   r˜   r™   rî  rø  rù  r‰   Úinvalid_configr—  rº  s
             r3   Ú@test_server_validates_invalid_source_key_in_sparse_vector_configrÿ  ã  sÎ  € ð
 ×7Ò7Ñ9Ô9€FØ
‡L‚L�N„N€Nà8­5©7¬7¬;Ð8Ð8€Oðð ð ð ð ð ð ð ð ð õ ‰XŒX€Få,Ô<ØØØðñ ô €Nð ", Ø+Ð+Ø 5Ð 5ØØ%ð!ñ !ô !ð
ñ 
ô 
ð"ñ "ô "€F„K�Ñõ 
Œ•yÑ	!Ô	!ð F XØ× Ò  o¸fÐ ÑEÔEÐEðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fõ �H”NÑ#Ô#€Ià˜	ŸšÑ)Ô)Ð)Ð)Ø�)ÐÐØ˜ŸšÑ*Ô*Ð*Ð*Ð*ð	+Ð)Ð)ØÐØ*Ð*s   Â0CÃCÃCr˜   c                 ó`  — dt          ¦   «         › �}|                      |¬¦  «        }|j        }|€J ‚|j        j        €J ‚|j        j        j        €J ‚|j        j        j        j        j        €J ‚|                     dddii¬¦  «         |j        }|€J ‚|j        j        j        j        j        j	        dk    sJ ‚|j
        d         j        j        j        j        j	        dk    sJ ‚|                      |¦  «        }|j        }|€J ‚|j        j        j        j        j        j	        dk    sJ ‚dS )	úbTest that modifying a collection without initial config/schema creates and updates default schema.Útest_modify_no_init_r‹   Nr‡   r‚   r~   ©rª   rŠ   )r)   r$  r‰   rù   r”   r•   rK   r‡   Úmodifyr‚   r“   r—   ©r˜   r™   rš   r‰   Úupdated_schemaÚcollection_refreshedÚrefreshed_schemas          r3   Ú?test_modify_collection_no_initial_config_creates_default_schemar	  	  s]  € ð
 7­U©W¬WÐ6Ð6€Oð ×)Ò)¨Ð)Ñ?Ô?€Jð Ô€FØÐÐÐØŒ?Ô%Ð1Ð1Ð1ØŒ?Ô%Ô2Ð>Ð>Ð>àŒ?Ô%Ô2Ô9Ô?ÐKÐKÐKð ×Ò W¨ÀÐ.CÐ$DÐÑEÔEÐEð  Ô&€NØÐ%Ð%Ð%ØÔ"Ô-Ô:ÔAÔGÔUÐY[Ò[Ð[Ð[Ð[ØÔ˜|Ô,Ô7ÔDÔKÔQÔ_ÐceÒeÐeÐeÐeð "×0Ò0°ÑAÔAÐØ+Ô2ÐØÐ'Ð'Ð'ØÔ$Ô/Ô<ÔCÔIÔWÐ[]Ò]Ð]Ð]Ð]Ð]Ð]r5   zSPANN is disabledc                 ó`  — dt          ¦   «         › �}|                      |¬¦  «        }|j        }|€J ‚|j        j        €J ‚|j        j        j        €J ‚|j        j        j        j        j        €J ‚|                     dddii¬¦  «         |j        }|€J ‚|j        j        j        j        j        j	        dk    sJ ‚|j
        d         j        j        j        j        j	        dk    sJ ‚|                      |¦  «        }|j        }|€J ‚|j        j        j        j        j        j	        dk    sJ ‚dS )	r  r  r‹   Nr§   r¨   r¦   r  rŠ   )r)   r$  r‰   rù   r”   r•   rK   r§   r  r¨   r“   r—   r  s          r3   ÚEtest_modify_collection_no_initial_config_creates_default_schema_localr  5	  s]  € ð
 7­U©W¬WÐ6Ð6€Oð ×)Ò)¨Ð)Ñ?Ô?€Jð Ô€FØÐÐÐØŒ?Ô%Ð1Ð1Ð1ØŒ?Ô%Ô2Ð>Ð>Ð>àŒ?Ô%Ô2Ô9Ô>ÐJÐJÐJð ×Ò V¨k¸3Ð-?Ð$@ÐÑAÔAÐAð  Ô&€NØÐ%Ð%Ð%ØÔ"Ô-Ô:ÔAÔFÔPÐTWÒWÐWÐWÐWØÔ˜|Ô,Ô7ÔDÔKÔPÔZÐ^aÒaÐaÐaÐað "×0Ò0°ÑAÔAÐØ+Ô2ÐØÐ'Ð'Ð'ØÔ$Ô/Ô<ÔCÔHÔRÐVYÒYÐYÐYÐYÐYÐYr5   c                 ó²  — dt          ¦   «         › �}|                      |ddddœi¬¦  «        }|j        }|€J ‚|j        j        j        j        j        €J ‚|j        j        j        j        j        j        dk    sJ ‚|j        j        j        j        j        j	        dk    sJ ‚| 
                    ddd	ii¬
¦  «         |j        }|€J ‚|j        j        j        j        j        j        d	k    sJ ‚|j        j        j        j        j        j	        dk    sJ ‚|j        d         j        j        j        j        j        d	k    sJ ‚|j        d         j        j        j        j        j	        dk    sJ ‚|                      |¦  «        }|j        }|€J ‚|j        j        j        j        j        j        d	k    sJ ‚|j        j        j        j        j        j	        dk    sJ ‚dS )zQTest creating collection with SPANN schema within server limits and modifying it.Útest_modify_with_schema_r‡   r  é2   ©r‚   r¨   ©rG   rª   Nr‚   é   r  rŠ   )r)   r$  r‰   rù   r”   r•   rK   r‡   r‚   r¨   r  r“   r—   r  s          r3   Ú0test_modify_collection_with_initial_spann_schemar  W	  s  € ð ;µ±´Ð:Ð:€Oð ×)Ò)ØàØ!#Øðð ð
ð *ñ ô €Jð Ô€FØÐÐÐØŒ?Ô%Ô2Ô9Ô?ÐKÐKÐKØŒ?Ô%Ô2Ô9Ô?ÔMÐQSÒSÐSÐSÐSØŒ?Ô%Ô2Ô9Ô?ÔIÈRÒOÐOÐOÐOð ×Ò W¨ÀÐ.CÐ$DÐÑEÔEÐEð  Ô&€NØÐ%Ð%Ð%ØÔ"Ô-Ô:ÔAÔGÔUÐY[Ò[Ð[Ð[Ð[àÔ"Ô-Ô:ÔAÔGÔQÐUWÒWÐWÐWÐWð Ô˜|Ô,Ô7ÔDÔKÔQÔ_ÐceÒeÐeÐeÐeØÔ˜|Ô,Ô7ÔDÔKÔQÔ[Ð_aÒaÐaÐaÐað "×0Ò0°ÑAÔAÐØ+Ô2ÐØÐ'Ð'Ð'ØÔ$Ô/Ô<ÔCÔIÔWÐ[]Ò]Ð]Ð]Ð]ØÔ$Ô/Ô<ÔCÔIÔSÐWYÒYÐYÐYÐYÐYÐYr5   c                 ód  — dt          ¦   «         › �}|                      |ddddœi¬¦  «        }|                     ddddœi¬	¦  «         |j        }|€J ‚|j        j        j        j        j        j	        dk    sJ ‚|j        j        j        j        j        j
        dk    sJ ‚|j        j        j        j        j        j        dk    sJ ‚|j        d         j        j        j        j        j	        dk    sJ ‚|j        d         j        j        j        j        j
        dk    sJ ‚|                      |¦  «        }|j        }|€J ‚|j        j        j        j        j        j	        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
S )zCTest that modifying multiple SPANN fields updates schema correctly.Útest_modify_schema_multi_r‡   é@   r¦   r  r  é€   rÞ  r  Nr~   rŠ   )r)   r$  r  r‰   rù   r”   r•   rK   r‡   r‚   r¨   rƒ   r“   r—   )r˜   r™   rš   r‰   r  r  s         r3   Ú;test_modify_collection_updates_schema_spann_multiple_fieldsr  „	  sê  € ð
 <µ%±'´'Ð;Ð;€Oð ×)Ò)ØØ°"À3Ð GÐ GÐHð *ñ ô €Jð ×ÒàØ!$Ø ðð ð
ð ñ ô ð ð Ô€FØÐÐÐØŒ?Ô%Ô2Ô9Ô?ÔMÐQTÒTÐTÐTÐTØŒ?Ô%Ô2Ô9Ô?ÔIÈSÒPÐPÐPÐPð Œ?Ô%Ô2Ô9Ô?ÔLÐPRÒRÐRÐRÐRð Œ;�|Ô$Ô/Ô<ÔCÔIÔWÐ[^Ò^Ð^Ð^Ð^ØŒ;�|Ô$Ô/Ô<ÔCÔIÔSÐWZÒZÐZÐZÐZð "×0Ò0°ÑAÔAÐØ+Ô2ÐØÐ'Ð'Ð'ØÔ$Ô/Ô<ÔCÔIÔWÐ[^Ò^Ð^Ð^Ð^ØÔ$Ô/Ô<ÔCÔIÔSÐWZÒZÐZÐZÐZØÔ$Ô/Ô<ÔCÔIÔVÐZ\Ò\Ð\Ð\Ð\Ð\Ð\r5   c                 ó^  — dt          ¦   «         › �}|                      |dddii¬¦  «        }|j        }|€J ‚|j        j        €J ‚|j        j        €J ‚|j        j        €J ‚|j        j        €J ‚|j        j        €J ‚|j	        d         €J ‚| 
                    dddii¬	¦  «         |j        }|€J ‚|j        j        €J ‚|j        j        j        €J ‚|j        j        j        €J ‚|j        j        €J ‚|j        j        j        €J ‚|j        j        €J ‚|j        j        j        €J ‚|j        j        €J ‚|j        j        j        €J ‚|j        j        €J ‚|j        j        j        €J ‚|j	        d         €J ‚|j	        d         j        €J ‚|j	        d         j        j        €J ‚|j	        d         j        j        j        d
u sJ ‚|j        j        j        j        j        j        dk    sJ ‚|                      |¦  «        }|j        }|€J ‚|j        j        j        j        j        j        dk    sJ ‚|j        j        €J ‚|j        j        j        €J ‚|j        j        j        €J ‚|j        j        €J ‚|j        j        €J ‚|j        j        €J ‚|j        j        €J ‚|j	        d         €J ‚dS )zJTest that modifying configuration doesn't affect other schema value types.Útest_modify_schema_preserve_r‡   r‚   r  r  NrÝ   r  r  T)r)   r$  r‰   rù   rú   rü   rþ   r   rŸ  r“   r  rû   r  rý   rÿ   r  r   r–   r”   r•   rK   r‡   r‚   r—   )r˜   r™   rš   Úinitial_schemar  r  r  s          r3   Ú4test_modify_collection_preserves_other_schema_fieldsr  ±	  sX  € ð ?µU±W´WÐ>Ð>€Oð ×)Ò)ØØ °"Ð 5Ð6ð *ñ ô €Jð  Ô&€NØÐ%Ð%Ð%ØÔ"Ô)Ð5Ð5Ð5ØÔ"Ô,Ð8Ð8Ð8ØÔ"Ô.Ð:Ð:Ð:ØÔ"Ô*Ð6Ð6Ð6ØÔ"Ô0Ð<Ð<Ð<ØÔ˜{Ô+Ð7Ð7Ð7ð ×Ò W¨ÀÐ.DÐ$EÐÑFÔFÐFð  Ô&€NØÐ%Ð%Ð%ð Ô"Ô)Ð5Ð5Ð5ØÔ"Ô)Ô?ÐKÐKÐKØÔ"Ô)Ô3Ð?Ð?Ð?àÔ"Ô,Ð8Ð8Ð8ØÔ"Ô,Ô?ÐKÐKÐKàÔ"Ô.Ð:Ð:Ð:ØÔ"Ô.ÔCÐOÐOÐOàÔ"Ô*Ð6Ð6Ð6ØÔ"Ô*Ô>ÐJÐJÐJàÔ"Ô0Ð<Ð<Ð<ØÔ"Ô0ÔDÐPÐPÐPð Ô˜{Ô+Ð7Ð7Ð7ØÔ˜{Ô+Ô2Ð>Ð>Ð>ØÔ˜{Ô+Ô2Ô<ÐHÐHÐHØÔ˜{Ô+Ô2Ô<ÔDÈÐLÐLÐLÐLð Ô"Ô-Ô:ÔAÔGÔUÐY\Ò\Ð\Ð\Ð\ð "×0Ò0°ÑAÔAÐØ+Ô2ÐØÐ'Ð'Ð'ð Ô$Ô/Ô<ÔCÔIÔWÐ[^Ò^Ð^Ð^Ð^ð Ô$Ô+Ð7Ð7Ð7ØÔ$Ô+ÔAÐMÐMÐMØÔ$Ô+Ô5ÐAÐAÐAØÔ$Ô.Ð:Ð:Ð:ØÔ$Ô0Ð<Ð<Ð<ØÔ$Ô,Ð8Ð8Ð8ØÔ$Ô2Ð>Ð>Ð>ØÔ  Ô-Ð9Ð9Ð9Ð9Ð9r5   c                  ó  — t          ¦   «                              t          t          ¦   «         ¬¦  «        ¬¦  «        } t	          t          ¦   «         di |                      ¦   «         dddddd¬	¦
  «
        }t          t          t          t          ¦   «         ¦  «        |d¬
¦  «        }|j        �J ‚|j        €J ‚|j                             d¦  «        �J ‚|                     dg¦  «        }|€J ‚t          j        |d         g d¢¦  «        sJ ‚dS )z=Test that embeddings are using the schema embedding function.rO  rN   Úschema_only_collectionNr,   ÚtenantÚdatabaser   )
ÚidrG   Úconfiguration_jsonÚserialized_schemarA  Ú	dimensionr  r  ÚversionÚlog_position)r˜   Úmodelr¥   r¥   rb  )rQ  rR  rS  rT  )r   r�   r   r+   ÚCollectionModelr)   r’   r   r(   r   ÚobjectÚ_embedding_functionrª   rx   rU  rV  rW  )r‰   Úcollection_modelrš   rõ   s       r3   Ú+test_embeds_using_schema_embedding_functionr+  ú	  s/  € å‰XŒX×"Ò"Ý Õ4KÑ4MÔ4MÐNÑNÔNð #ñ ô €Fõ 'Ý‰7Œ7Ø%ØØ ×2Ò2Ñ4Ô4ØØØØØØðñ ô Ðõ "Ý•I�v™xœxÑ(Ô(ØØðñ ô €Jð Ô)Ð1Ð1Ð1ØÔ#Ð/Ð/Ð/ØÔ#×'Ò'Ð(<Ñ=Ô=ÐEÐEÐEà×"Ò" M ?Ñ3Ô3€JØÐ!Ð!Ð!ÝŒ;�z !”}Ð&:Ð&:Ð&:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;r5   c                   óØ   — e Zd ZdZddefd„Zdee         dee         fd„Zdee         dee         fd„Z	e
defd	„¦   «         Zdeeef         fd
„Ze
deeef         dd fd„¦   «         ZdS )ÚTestSparseEmbeddingFunctionzESparse embedding function for testing search API with string queries.rû  r]   c                 ó   — || _         d S r/   ru   rb   s     r3   r4   z$TestSparseEmbeddingFunction.__init__ 
  r·   r5   r6   r7   c                 ó4   — d„ t          |¦  «        D ¦   «         S )Nc           
      ót   — g | ]5\  }}t          |gt          t          |¦  «        |z   ¦  «        g¬ ¦  «        ‘Œ6S rº   r¾   r¿   s      r3   r?   z8TestSparseEmbeddingFunction.__call__.<locals>.<listcomp>$
  rÁ   r5   rÂ   rÄ   s     r3   rD   z$TestSparseEmbeddingFunction.__call__#
  rÅ   r5   c                 ó4   — d„ t          |¦  «        D ¦   «         S )Nc           
      óz   — g | ]8\  }}t          |gt          t          |¦  «        |z   d z   ¦  «        g¬¦  «        ‘Œ9S )rø   r»   r¾   r¿   s      r3   r?   z;TestSparseEmbeddingFunction.embed_query.<locals>.<listcomp>*
  sU   € ð 
ð 
ð 
á��Tõ  # µµc¸$±i´iÀ#±oÈÑ6IÑ0JÔ0JÐ/KÐLÑLÔLð
ð 
ð 
r5   rÂ   rÄ   s     r3   rp   z'TestSparseEmbeddingFunction.embed_query)
  rÅ   r5   c                  ó   — dS )NÚtest_sparse_efr:   r:   r5   r3   rG   z TestSparseEmbeddingFunction.name/
  s   € àÐr5   c                 ó   — d| j         iS rt   ru   rI   s    r3   rJ   z&TestSparseEmbeddingFunction.get_config3
  rv   r5   rK   c                 óH   — t          |                      dd¦  «        ¦  «        S )Nr]   rû  )r-  rx   rN   s    r3   rO   z-TestSparseEmbeddingFunction.build_from_config6
  s   € å*¨6¯:ª:°g¸}Ñ+MÔ+MÑNÔNÐNr5   N)rû  )rS   rT   rU   rV   rX   r4   r$   r	   rD   rp   rY   rG   r#   r!   rJ   rO   r:   r5   r3   r-  r-  
  s  € € € € € àOÐOðð ˜cð ð ð ð ð
˜d 3œið 
¨D°Ô,>ð 
ð 
ð 
ð 
ð
  c¤ð 
¨t°LÔ/Að 
ð 
ð 
ð 
ð ð �#ð  ð  ð  ñ „\ð ð&˜D  c œNð &ð &ð &ð &ð ðO $ s¨C x¤.ð OÐ5Rð Oð Oð Oñ „\ðOð Oð Or5   r-  c                 ó°  — t          d¬¦  «        }t          ¦   «                              dt          t          j        |¬¦  «        ¬¦  «        }t          | |¬¦  «        \  }}|                     ddgd	d
g¬¦  «         |                     ¦   «         }|€J ‚|d         €J ‚t          |d         ¦  «        dk    sJ ‚t          ¦   «                              t          dd	¬¦  «        ¦  «        }|                     |¦  «        }|d         €J ‚t          |d         ¦  «        dk    sJ ‚t          |d         d         ¦  «        dk    sJ ‚d|d         d         v sJ ‚dS )zMTest that search API uses embedded_searches when string queries are embedded.Úsearch_testr2  rq  r4  r  r  r*  r+  rb  r-  r  Nrï   rq  r;  rî   rø   r   )r-  r   r�   r   r   rÌ  rÌ   r  rx   rf   r    rÍ   r   r>  )ry   r@  r‰   rš   rA   rÒ  r>  Úresultss           r3   Ú=test_search_api_uses_embedded_searches_with_sparse_embeddingsr:  ;
  sƒ  € õ ,°-Ð@Ñ@Ô@€IÝ‰XŒX×"Ò"ØÝ&Ý”|Ø(ð
ñ 
ô 
ð #ñ ô €Fõ 0Ð0@ÈÐPÑPÔP�M€J�à‡N‚NØ�VÐØ  /Ð2ð ñ ô ð ð
 �^Š^ÑÔ€FØÐÐÐØ�+ÔÐ*Ð*Ð*Ýˆv�kÔ"Ñ#Ô# qÒ(Ð(Ð(Ð(å‰XŒX�]Š]�3 >¸ÐGÑGÔGÑHÔH€Fà×Ò Ñ'Ô'€Gà�5Œ>Ð%Ð%Ð%Ýˆw�uŒ~ÑÔ !Ò#Ð#Ð#Ð#Ýˆw�uŒ~˜aÔ Ñ!Ô! AÒ%Ð%Ð%Ð%Ø�W˜U”^ AÔ&Ð&Ð&Ð&Ð&Ð&Ð&r5   c                 óv  — t          ¦   «         }|                     t          ¦   «         d¬¦  «         t          | |¬¦  «        \  }}|j        €J ‚|j        j        d         j        }|€J ‚|j        €J ‚|j        j        du sJ ‚| 	                    g d¢g d¢dd	idd
idd	ig¬¦  «         t          j        t          ¦  «        5 }|                     ddi¬¦  «         ddd¦  «         n# 1 swxY w Y   dt          |j        ¦  «                             ¦   «         v sJ ‚t          j        t          ¦  «        5 }|                     dgdddi¬¦  «         ddd¦  «         n# 1 swxY w Y   dt          |j        ¦  «                             ¦   «         v sJ ‚t          j        t          ¦  «        5 }|                     ddi¬¦  «         ddd¦  «         n# 1 swxY w Y   dt          |j        ¦  «                             ¦   «         v sJ ‚|                     dd	i¬¦  «        }t'          |d         ¦  «        ddhk    sJ ‚dS )zWDisabling FTS via schema should block where_document queries on get, query, and delete.rÝ   r¾  r  NF)ú	fts-off-1z	fts-off-2ú	fts-off-3)zalpha beta gammazdelta epsilon zetazeta theta iotaræ   Úgroup_aÚgroup_brí   ú	$containsrá   ©Úwhere_documentÚftszsome query textrø   rp  )Úquery_textsr¥  rB  Úetarñ   rî   r<  r=  )r   r…  r   rÌ   r‰   r“   rú   r  r–   r  r.  r/  r   rx   rX   r„  r¸  rÓ   rª  r  )ry   r‰   rš   rA   Údoc_overrider—  r  s          r3   Ú/test_fts_disabled_blocks_where_document_queriesrG  e
  s,  € õ ‰XŒX€FØ
×Ò�~Ñ/Ô/°[ÐÑAÔAÐAå/Ð0@ÈÐPÑPÔP�M€J�ð ÔÐ(Ð(Ð(ØÔ$Ô)¨+Ô6Ô=€LØÐ#Ð#Ð#ØÔ!Ð-Ð-Ð-ØÔ!Ô)¨UÐ2Ð2Ð2Ð2ð ‡N‚NØ3Ð3Ð3ØNÐNÐNà˜Ð#Ø˜Ð#Ø˜Ð#ð
ð ñ ô ð õ 
ŒÕ+Ñ	,Ô	,ð >°Ø�Š {°GÐ&<ˆÑ=Ô=Ð=ð>ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >à•C˜œÑ'Ô'×-Ò-Ñ/Ô/Ð/Ð/Ð/Ð/å	ŒÕ+Ñ	,Ô	,ð 
°Ø×ÒØ*Ð+ØØ'¨Ð1ð 	ñ 	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð •C˜œÑ'Ô'×-Ò-Ñ/Ô/Ð/Ð/Ð/Ð/å	ŒÕ+Ñ	,Ô	,ð ?°Ø×Ò¨+°uÐ)=ÐÑ>Ô>Ð>ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?à•C˜œÑ'Ô'×-Ò-Ñ/Ô/Ð/Ð/Ð/Ð/ð �~Š~ Z°Ð$;ˆ~Ñ<Ô<€HÝˆx˜ŒÑÔ K°Ð#=Ò=Ð=Ð=Ð=Ð=Ð=s6   ÃC&Ã&C*Ã-C*Ä4EÅE Å#E Æ*GÇGÇGc                 óª  — t          | ¦  «        \  }}|j        €J ‚|j        j        d         j        }|€J ‚|j        €J ‚|j        j        du sJ ‚|                     ddgddg¬¦  «         |                     d	d
i¬¦  «        }t          |d         ¦  «        dhk    sJ ‚|                     d	di¬¦  «        }t          |d         ¦  «        dhk    sJ ‚dS )zNDefault schema should have FTS enabled and where_document queries should work.NrÝ   Tzfts-on-1zfts-on-2zthe quick brown foxzlazy dog sleepsr  r@  ÚfoxrA  rî   Úlazy)	rÌ   r‰   r“   rú   r  r–   r  rx   r  )ry   rš   rA   rF  Úitemss        r3   Ú0test_fts_enabled_by_default_where_document_worksrL  –
  s  € õ 0Ð0@ÑAÔA�M€J�ð ÔÐ(Ð(Ð(ØÔ$Ô)¨+Ô6Ô=€LØÐ#Ð#Ð#ØÔ!Ð-Ð-Ð-ØÔ!Ô)¨TÐ1Ð1Ð1Ð1à‡N‚NØ˜Ð$Ø(Ð*;Ð<ð ñ ô ð ð
 �NŠN¨;¸Ð*>ˆNÑ?Ô?€EÝˆu�UŒ|ÑÔ  Ò,Ð,Ð,Ð,à�NŠN¨;¸Ð*?ˆNÑ@Ô@€EÝˆu�UŒ|ÑÔ  Ò,Ð,Ð,Ð,Ð,Ð,r5   c                 ó2  — t          ¦   «         }|                     t          ¦   «         d¬¦  «         t          | |¬¦  «        \  }}|j        }|                     dgdg¬¦  «         |                      ¦   «         }|                     |¬¦  «        }|j        €J ‚|j        j	        d         j
        }|€J ‚|j        €J ‚|j        j        d	u sJ ‚t          j        t          ¦  «        5  |                     d
di¬¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z9FTS-disabled schema should persist across client reloads.rÝ   r¾  r  zpersist-fts-1zpersistent doc for fts testr  r‹   NFr@  Ú
persistentrA  )r   r…  r   rÌ   rG   r  rŒ   r—   r‰   r“   rú   r  r–   r.  r/  r   rx   )ry   r‰   rš   r˜   r™   rL  rž   rF  s           r3   Ú$test_fts_disabled_schema_persistencerO  ¯
  s™  € õ ‰XŒX€FØ
×Ò�~Ñ/Ô/°[ÐÑAÔAÐAå4Ð5EÈfÐUÑUÔUÑ€J�Ø ”o€Oà‡N‚NØÐØ0Ð1ð ñ ô ð ð '×@Ò@ÑBÔB€OØ)×8Ò8¸oÐ8ÑNÔNÐð Ô%Ð1Ð1Ð1Ø&Ô-Ô2°;Ô?ÔF€LØÐ#Ð#Ð#ØÔ!Ð-Ð-Ð-ØÔ!Ô)¨UÐ2Ð2Ð2Ð2õ 
ŒÕ+Ñ	,Ô	,ð Lð LØ×Ò°¸\Ð/JÐÑKÔKÐKðLð Lð Lñ Lô Lð Lð Lð Lð Lð Lð Lð Løøøð Lð Lð Lð Lð Lð Ls   Ã&DÄDÄDc                 ó’  — t          ¦   «         }|                     t          ¦   «         d¬¦  «         t          | |¬¦  «        \  }}|                     ddgddg¬¦  «         |                     ddgd	g¬
¦  «        }|d	         €J ‚|d	         d         dk    sJ ‚|d	         d         dk    sJ ‚|                     ¦   «         dk    sJ ‚dS )zFDocuments should still be stored and retrievable when FTS is disabled.rÝ   r¾  r  zstored-1zstored-2zdocument one contentzdocument two contentr  rï   rö   Nr   rø   rq  )r   r…  r   rÌ   r  rx   Úcount)ry   r‰   rš   rA   rÒ  s        r3   Ú(test_fts_disabled_documents_still_storedrR  Î
  sû   € õ ‰XŒX€FØ
×Ò�~Ñ/Ô/°[ÐÑAÔAÐAå/Ð0@ÈÐPÑPÔP�M€J�à‡N‚NØ˜Ð$Ø)Ð+AÐBð ñ ô ð ð �^Š^ ¨ZÐ 8À;À-ˆ^ÑPÔP€FØ�+ÔÐ*Ð*Ð*Ø�+Ô˜qÔ!Ð%;Ò;Ð;Ð;Ð;Ø�+Ô˜qÔ!Ð%;Ò;Ð;Ð;Ð;ð ×ÒÑÔ Ò"Ð"Ð"Ð"Ð"Ð"r5   c                 óT  — t          ¦   «         }|                     t          ¦   «         d¬¦  «         t          | |¬¦  «        \  }}|j        }|                     dgdg¬¦  «         t          j        t          ¦  «        5  | 	                    ddi¬	¦  «         d
d
d
¦  «         n# 1 swxY w Y   | 
                    |¬¦  «         |                     |¬¦  «        }|                     dgdg¬¦  «         | 	                    ddi¬	¦  «        }t          |d         ¦  «        dhk    sJ ‚d
S )zVDeleting a FTS-disabled collection and recreating with FTS enabled should restore FTS.rÝ   r¾  r  zfts-toggle-1zsearchable textr  r@  Ú
searchablerA  Nr‹   zfts-toggle-2zsearchable text againrî   )r   r…  r   rÌ   rG   r  r.  r/  r   rx   r#  r�   r  )ry   Úschema_disabledrš   r˜   Úcol_namerŠ  rK  s          r3   Ú6test_fts_disabled_then_new_collection_with_fts_enabledrW  æ
  s¢  € õ
 ‘h”h€OØ× Ò ­Ñ(8Ô(8¸kÐ ÑJÔJÐJå4Ø ðñ ô Ñ€J�ð Œ€Hà‡N‚NØÐØ$Ð%ð ñ ô ð õ
 
ŒÕ+Ñ	,Ô	,ð Cð CØ�Š {°LÐ&AˆÑBÔBÐBðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð ×Ò (ÐÑ+Ô+Ð+Ø×.Ò.°HÐ.Ñ=Ô=€Hà‡L‚LØÐØ*Ð+ð ñ ô ð ð
 �LŠL¨°lÐ(CˆLÑDÔD€EÝˆu�UŒ|ÑÔ Ð 0Ò0Ð0Ð0Ð0Ð0Ð0s   Á?B$Â$B(Â+B(c                 óü  — t          ¦   «         }|                     t          ¦   «         d¬¦  «         t          | |¬¦  «        \  }}|                     ddgddg¬¦  «         t          j        t          ¦  «        5 }|                     t          t          j                             d	¦  «        ¬
¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   dt          |j        ¦  «                             ¦   «         v sJ ‚dS )zDSearch API should also reject document filters when FTS is disabled.rÝ   r¾  r  zsearch-fts-1zsearch-fts-2zalpha contentzbeta contentr  rá   rñ   NrC  )r   r…  r   rÌ   r  r.  r/  r   r>  r    r   rÌ  ÚcontainsrX   r„  r¸  )ry   r‰   rš   rA   r—  s        r3   Ú3test_fts_disabled_search_api_blocks_document_filterrZ    s8  € õ
 ‰XŒX€FØ
×Ò�~Ñ/Ô/°[ÐÑAÔAÐAå/Ð0@ÈÐPÑPÔP�M€J�à‡N‚NØ˜^Ð,Ø" NÐ3ð ñ ô ð õ
 
ŒÕ+Ñ	,Ô	,ð 
°Ø×ÒÝ�œ×.Ò.¨wÑ7Ô7Ð8Ñ8Ô8ñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð •C˜œÑ'Ô'×-Ò-Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/s   Á:ACÃCÃC)ry   r   r7   N)NN)r7   N){Úchromadb.apir   r   rô  r   r   r   r   r	   r
   r   r   r   r   r   r   r   Ú&chromadb.execution.expression.operatorr   Úchromadb.test.conftestr   r   r   r   r   Ú-chromadb.test.utils.wait_for_version_increaser   r   Ú"chromadb.utils.embedding_functionsr   r   Úchromadb.api.models.Collectionr   Ú$chromadb.api.models.CollectionCommonr   Úchromadb.errorsr   Úchromadb.execution.expressionr   r    Úchromadb.typesr'  Útypingr!   r"   r#   r$   r%   r&   r'   r(   Úuuidr)   ÚnumpyrV  r.  rX   r+   r[   r¢   r²   r´   rÌ   rÖ   r  r   r(  ÚmarkÚskipifr0  rE  rM  r^  rj  rm  r�  r‹  r¯  r·  rÖ  rä  r  r  r%  r2  r>  rK  rU  ra  rn  rx  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:  rG  rL  rO  rR  rW  rZ  r:   r5   r3   ú<module>rj     sA  ðØ -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 7Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ø AÐ AÐ AÐ AÐ AÐ AØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€ð ðð ð ð ð Ð/°°S´	Ô:ñ ô ñ Ôðð2 ðPð Pð Pð Pð PÐ'8¸¸c¼Ô'Cñ Pô Pñ ÔðPð<7:Ø'ð7:à	ð7:ð 7:ð 7:ð 7:ðtn0Ø'ðn0à	ðn0ð n0ð n0ð n0ðb $ðWð Wð Wð Wð WÐ+BÀ4ÈÄ9Ô+Mñ Wô Wñ $Ô#ðWð8  $Ø;?ðð Ø'ðà�VÔðð !Ð!2°3Ô!7Ô8ðð ˆ:�yÐ Ô!ð	ð ð ð ð:˜sð  t¨C¤yð ð ð ð ð:KQØ'ðKQà	ðKQð KQð KQð KQð\'5Ø'ð'5à	ð'5ð '5ð '5ð '5ðTSØ'ðSà	ðSð Sð Sð Sð8 „×ÒÐ.Ð.Ð7PÐÑQÔQð	EØ'ð	Eà	ð	Eð 	Eð 	Eñ RÔQð	Eð „×ÒÐ*Ð3MÐÑNÔNð65Ø'ð65à	ð65ð 65ð 65ñ OÔNð65ðr&0Ø'ð&0à	ð&0ð &0ð &0ð &0ðR>Ø'ð>à	ð>ð >ð >ð >ð: „×ÒÐ*Ð3MÐÑNÔNð/Ø'ð/à	ð/ð /ð /ñ OÔNð/ð6 „×ÒÐ*Ð3MÐÑNÔNðKØ'ðKà	ðKð Kð Kñ OÔNðKð: „×ÒÐ*Ð3MÐÑNÔNðAØ'ðAà	ðAð Að Añ OÔNðAð851Ø'ð51à	ð51ð 51ð 51ð 51ðp+*Ø'ð+*à	ð+*ð +*ð +*ð +*ð\ „×ÒÐ*Ð3MÐÑNÔNð-*Ø'ð-*à	ð-*ð -*ð -*ñ OÔNð-*ð`B6Ø'ðB6à	ðB6ð B6ð B6ð B6ðJ.BØ'ð.Bà	ð.Bð .Bð .Bð .Bðb ÐÑÔØ„×ÒÐ*Ð3MÐÑNÔNðD4Ø'ðD4à	ðD4ð D4ð D4ñ OÔNñ ÔðD4ðN „×ÒÐ*Ð3MÐÑNÔNðA1Ø'ðA1à	ðA1ð A1ð A1ñ OÔNðA1ðH0=Ø'ð0=à	ð0=ð 0=ð 0=ð 0=ðf „×ÒÐ*Ð3MÐÑNÔNð%9Ø'ð%9à	ð%9ð %9ð %9ñ OÔNð%9ðP „×ÒÐ*Ð3MÐÑNÔNð*:Ø'ð*:à	ð*:ð *:ð *:ñ OÔNð*:ðZ „×ÒÐ*Ð3MÐÑNÔNð.9Ø'ð.9à	ð.9ð .9ð .9ñ OÔNð.9ðb „×ÒÐ*Ð3MÐÑNÔNð,8Ø'ð,8à	ð,8ð ,8ð ,8ñ OÔNð,8ð^ „×ÒÐ*Ð3MÐÑNÔNð,-Ø'ð,-à	ð,-ð ,-ð ,-ñ OÔNð,-ð^ „×ÒÐ*Ð3MÐÑNÔNð'*Ø'ð'*à	ð'*ð '*ð '*ñ OÔNð'*ðT „×ÒÐ*Ð3MÐÑNÔNð3.Ø'ð3.à	ð3.ð 3.ð 3.ñ OÔNð3.ðl „×ÒÐ*Ð3MÐÑNÔNð*(Ø'ð*(à	ð*(ð *(ð *(ñ OÔNð*(ðZ „×ÒÐ*Ð3MÐÑNÔNð4<Ø'ð4<à	ð4<ð 4<ð 4<ñ OÔNð4<ðn „×ÒÐ*Ð3MÐÑNÔNð-6Ø'ð-6à	ð-6ð -6ð -6ñ OÔNð-6ð` „×ÒÐ*Ð3MÐÑNÔNð#;Ø'ð#;à	ð#;ð #;ð #;ñ OÔNð#;ðL „×ÒÐ*Ð3MÐÑNÔNð&Ø'ð&à	ð&ð &ð &ñ OÔNð&ð>61Ø'ð61à	ð61ð 61ð 61ð 61ðrI-Ø'ðI-à	ðI-ð I-ð I-ð I-ðXJ-Ø'ðJ-à	ðJ-ð J-ð J-ð J-ðZLØ'ðLà	ðLð Lð Lð Lð@ „×ÒÐ*Ð3MÐÑNÔNð4Ø'ð4à	ð4ð 4ð 4ñ OÔNð4ð@ „×ÒÐ*Ð3MÐÑNÔNð4Ø'ð4à	ð4ð 4ð 4ñ OÔNð4ð> „×ÒÐ*Ð3MÐÑNÔNð+-Ø'ð+-à	ð+-ð +-ð +-ñ OÔNð+-ð\ „×ÒÐ*Ð3MÐÑNÔNðP6Ø'ðP6à	ðP6ð P6ð P6ñ OÔNðP6ðfSð Sð Sð SðRð Rð Rð Rð8ð 8ð 8ð 8ð( „×ÒÐ*Ð3MÐÑNÔNð%Ø'ð%à	ð%ð %ð %ñ OÔNð%ðP „×ÒÐ*Ð3MÐÑNÔNð,Ø'ð,à	ð,ð ,ð ,ñ OÔNð,ð^ „×ÒÐ*Ð3MÐÑNÔNð^Øð^à	ð^ð ^ð ^ñ OÔNð^ðB „×ÒÐ.Ð.Ð7JÐÑKÔKðZØðZà	ðZð Zð Zñ LÔKðZðB „×ÒÐ*Ð3MÐÑNÔNð)Z¸Yð )ZÈ4ð )Zð )Zð )Zñ OÔNð)ZðX „×ÒÐ*Ð3MÐÑNÔNð)]Øð)]à	ð)]ð )]ð )]ñ OÔNð)]ðX „×ÒÐ*Ð3MÐÑNÔNðE:Àð E:Ètð E:ð E:ð E:ñ OÔNðE:ðP<ð <ð <ð <ðD $ðOð Oð Oð Oð OÐ"9¸$¸s¼)Ô"Dñ Oô Oñ $Ô#ðOð< „×ÒÐ*Ð3MÐÑNÔNð!'Ø%ð!'à	ð!'ð !'ð !'ñ OÔNð!'ðR.>Ø'ð.>à	ð.>ð .>ð .>ð .>ðb-Ø'ð-à	ð-ð -ð -ð -ð2LØ'ðLà	ðLð Lð Lð Lð>#Ø'ð#à	ð#ð #ð #ð #ð01Ø'ð1à	ð1ð 1ð 1ð 1ðD „×ÒÐ*Ð3MÐÑNÔNð0Ø'ð0à	ð0ð 0ð 0ñ OÔNð0ð 0ð 0r5   