Ë
    lQêjÜ– ã                   óô  — 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 „ZBe7j†                  j‰                  e e¬!«      	 	 	 	 d[d"„«       ZEe7j†                  j‰                  ee¬!«      	 	 	 	 d[d#„«       ZF	 	 	 	 d[d$„ZG	 	 	 	 d[d%„ZHe7j†                  j‰                  ee¬!«      	 	 	 	 d[d&„«       ZIe7j†                  j‰                  ee¬!«      	 	 	 	 d[d'„«       ZJe7j†                  j‰                  ee¬!«      	 	 	 	 d[d(„«       ZK	 	 	 	 d[d)„ZL	 	 	 	 d[d*„ZMe7j†                  j‰                  ee¬!«      	 	 	 	 d[d+„«       ZN	 	 	 	 d[d,„ZO	 	 	 	 d[d-„ZP e«       e7j†                  j‰                  ee¬!«      	 	 	 	 d[d.„«       «       ZQe7j†                  j‰                  ee¬!«      	 	 	 	 d[d/„«       ZR	 	 	 	 d[d0„ZSe7j†                  j‰                  ee¬!«      	 	 	 	 d[d1„«       ZTe7j†                  j‰                  ee¬!«      	 	 	 	 d[d2„«       ZUe7j†                  j‰                  ee¬!«      	 	 	 	 d[d3„«       ZVe7j†                  j‰                  ee¬!«      	 	 	 	 d[d4„«       ZWe7j†                  j‰                  ee¬!«      	 	 	 	 d[d5„«       ZXe7j†                  j‰                  ee¬!«      	 	 	 	 d[d6„«       ZYe7j†                  j‰                  ee¬!«      	 	 	 	 d[d7„«       ZZe7j†                  j‰                  ee¬!«      	 	 	 	 d[d8„«       Z[e7j†                  j‰                  ee¬!«      	 	 	 	 d[d9„«       Z\e7j†                  j‰                  ee¬!«      	 	 	 	 d[d:„«       Z]e7j†                  j‰                  ee¬!«      	 	 	 	 d[d;„«       Z^e7j†                  j‰                  ee¬!«      	 	 	 	 d[d<„«       Z_	 	 	 	 d[d=„Z`	 	 	 	 d[d>„Za	 	 	 	 d[d?„Zb	 	 	 	 d[d@„Zce7j†                  j‰                  ee¬!«      	 	 	 	 d[dA„«       Zde7j†                  j‰                  ee¬!«      	 	 	 	 d[dB„«       Zee7j†                  j‰                  ee¬!«      	 	 	 	 d[dC„«       Zfe7j†                  j‰                  ee¬!«      	 	 	 	 d[dD„«       Zgd]dE„Zhd]dF„Zid]dG„Zje7j†                  j‰                  ee¬!«      	 	 	 	 d[dH„«       Zke7j†                  j‰                  ee¬!«      	 	 	 	 d[dI„«       Zle7j†                  j‰                  ee¬!«      dJeddfdK„«       Zme7j†                  j‰                  e dL¬!«      dJeddfdM„«       Zne7j†                  j‰                  ee¬!«      dJeddfdN„«       Zoe7j†                  j‰                  ee¬!«      dJeddfdO„«       Zpe7j†                  j‰                  ee¬!«      dJeddfdP„«       Zqd]dQ„Zre G dR„ dSee.e8      «      «       Zse7j†                  j‰                  ee¬!«      deddfdT„«       Zt	 	 	 	 d[dU„Zu	 	 	 	 d[dV„Zv	 	 	 	 d[dW„Zw	 	 	 	 d[dX„Zx	 	 	 	 d[dY„Zye7j†                  j‰                  ee¬!«      	 	 	 	 d[dZ„«       Zzy)^é    )Ú	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y)ÚSimpleEmbeddingFunctionzJSimple embedding function with stable configuration for persistence tests.Údimc                 ó   — || _         y ©N©Ú_dim)Úselfr,   s     úf/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/test/api/test_schema_e2e.pyÚ__init__z SimpleEmbeddingFunction.__init__0   s	   € Øˆ�	ó    ÚinputÚreturnc                 ó¨   — t        | j                  «      D �cg c]  }t        |«      ‘Œ }}t        t        |D �cg c]  }|‘Œ c}«      S c c}w c c}w r.   )Úranger0   Úfloatr(   r   )r1   r5   ÚiÚvectorÚ_s        r2   Ú__call__z SimpleEmbeddingFunction.__call__3   sB   € Ü$)¨$¯)©)Ó$4Ö5˜q”%˜•(Ð5ˆÐ5Ü”J°Ö 7¨A¢Ò 7Ó8Ð8ùò 6ùÚ 7s
   ˜A
º	A
c                   ó   — y)NÚ	simple_ef© r@   r4   r2   ÚnamezSimpleEmbeddingFunction.name7   s   € àr4   c                 ó   — d| j                   iS )Nr,   r/   ©r1   s    r2   Ú
get_configz"SimpleEmbeddingFunction.get_config;   s   € Ø�t—y‘yÐ!Ð!r4   Úconfigc                 ó    — t        | d   ¬«      S )Nr,   ©r,   )r+   ©rE   s    r2   Úbuild_from_configz)SimpleEmbeddingFunction.build_from_config>   s   € ä&¨6°%©=Ô9Ð9r4   c                  ó   — y)NÚcosiner@   rC   s    r2   Údefault_spacez%SimpleEmbeddingFunction.default_spaceB   s   € Ør4   N)é   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr3   r$   Ústrr   r=   ÚstaticmethodrA   r#   r!   rD   rI   rL   r@   r4   r2   r+   r+   ,   sŽ   „ áTñ˜Có ð9˜d 3™ið 9¨Jó 9ð ð�#ò ó ðð"˜D  c ™Nó "ð ð: $ s¨C x¡.ð :Ð5Nò :ó ð:ð˜sô r4   r+   c                   óž   — e Zd ZdZddeddfd„Zdee   defd„Zdee   defd„Z	e
defd	„«       Zdeeef   fd
„Ze
deeef   dd fd„«       Zy)Ú RecordingSearchEmbeddingFunctionzBEmbedding function that records inputs for search embedding tests.Úlabelr6   Nc                 ó.   — || _         g | _        g | _        y r.   )Ú_labelÚcall_inputsÚquery_inputs©r1   rW   s     r2   r3   z)RecordingSearchEmbeddingFunction.__init__J   s   € ØˆŒØ,.ˆÔØ-/ˆÕr4   r5   c           	      óä   — | j                   j                  t        |«      «       |D �cg c]-  }t        t	        |«      «      t        t	        |«      «      dz   g‘Œ/ }}t        t        |«      S c c}w )Ng      à?)rZ   ÚappendÚlistr9   Úlenr(   r   ©r1   r5   ÚtextÚvectorss       r2   r=   z)RecordingSearchEmbeddingFunction.__call__O   s\   € Ø×Ñ×Ñ¤ U£Ô,ØJOÖPÀ$”Eœ#˜d›)Ó$¤e¬C°«IÓ&6¸Ñ&<Ò=ÐPˆÐPÜ”J Ó(Ð(ùò Qó   ©2A-c           	      óä   — | j                   j                  t        |«      «       |D �cg c]-  }t        t	        |«      «      t        t	        |«      «      dz   g‘Œ/ }}t        t        |«      S c c}w )Ng      ø?)r[   r^   r_   r9   r`   r(   r   ra   s       r2   Úembed_queryz,RecordingSearchEmbeddingFunction.embed_queryT   s\   € Ø×Ñ× Ñ ¤ e£Ô-ØJOÖPÀ$”Eœ#˜d›)Ó$¤e¬C°«IÓ&6¸Ñ&<Ò=ÐPˆÐPÜ”J Ó(Ð(ùò Qrd   c                   ó   — y)NÚrecording_search_efr@   r@   r4   r2   rA   z%RecordingSearchEmbeddingFunction.nameY   s   € à$r4   c                 ó   — d| j                   iS ©NrW   ©rY   rC   s    r2   rD   z+RecordingSearchEmbeddingFunction.get_config]   ó   € Ø˜Ÿ™Ð%Ð%r4   rE   c                 ó8   — t        | j                  dd«      «      S )NrW   Údefault)rV   ÚgetrH   s    r2   rI   z2RecordingSearchEmbeddingFunction.build_from_config`   s   € ä/°·
±
¸7ÀIÓ0NÓOÐOr4   )rn   )rN   rO   rP   rQ   rS   r3   r$   r   r=   rf   rT   rA   r#   r!   rD   rI   r@   r4   r2   rV   rV   F   s¤   „ áLñ0˜cð 0°$ó 0ð
)˜d 3™ið )¨Jó )ð
)  c¡ð )¨zó )ð
 ð%�#ò %ó ð%ð&˜D  c ™Nó &ð ðP $ s¨C x¡.ð PÐ5Wò Pó ñPr4   rV   Úclient_factoriesr   r6   c                 óŽ  — | j                  «       }|j                  «        dt        «       j                  › �}t	        «       }|j                  t        dt        dddd¬«      ¬«      ¬	«       |j                  ||¬
«      }|j                  }|€J ‚t        |j                  «       «       |j                  d   j                  }|€J ‚|j                  }|€J ‚|j                  du sJ ‚|j                   €J ‚|j                   j"                  €J ‚|j                   j"                  dk(  sJ ‚| j                  «       }|j%                  |¬«      }	|	j                  }
|
€J ‚|
j                  d   j                  }|€J ‚|j                  }|€J ‚|j                   €J ‚|j                   j"                  €J ‚|j                   j"                  dk(  sJ ‚y)úEEnsure schema-provided SPANN settings persist across client restarts.Úschema_spann_rK   é   é    éx   é   ©Úsearch_nprobeÚwrite_nprobeÚef_constructionÚmax_neighbors)ÚspaceÚspannrH   ©rA   ÚschemaNú
#embeddingT©rA   )Úcreate_client_from_systemÚresetr)   Úhexr   Úcreate_indexr   r   Úget_or_create_collectionr€   ÚprintÚserialize_to_jsonÚkeysÚ
float_listÚvector_indexÚenabledrE   r}   Úget_collection)rp   ÚclientÚcollection_namer€   Ú
collectionÚpersisted_schemaÚembedding_overriderŒ   Úclient_reloadedÚreloaded_collectionÚreloaded_schemaÚreloaded_embedding_overrideÚreloaded_vector_indexs                r2   Ú%test_schema_vector_config_persistencer™   e   s   € ð
 ×7Ñ7Ó9€FØ
‡L�L„Nà%¤e£g§k¡k ]Ð3€Oä‹X€FØ
×ÑÜ ØÜ"Ø ØØ #Ø ô	ô
ð ô 
ð ×0Ñ0ØØð 1ó €Jð
 "×(Ñ(ÐØÐ'Ð'Ð'ä	Ð
×
,Ñ
,Ó
.Ô/à)×.Ñ.¨|Ñ<×GÑGÐØÐ)Ð)Ð)Ø%×2Ñ2€LØÐ#Ð#Ð#Ø×Ñ 4Ñ'Ð'Ð'Ø×ÑÐ*Ð*Ð*Ø×Ñ×$Ñ$Ð0Ð0Ð0Ø×Ñ×$Ñ$¨Ò0Ð0Ð0à&×@Ñ@ÓB€OØ)×8Ñ8Øð 9ó Ðð *×0Ñ0€OØÐ&Ð&Ð&Ø"1×"6Ñ"6°|Ñ"D×"OÑ"OÐØ&Ð2Ð2Ð2Ø7×DÑDÐØ Ð,Ð,Ð,Ø ×'Ñ'Ð3Ð3Ð3Ø ×'Ñ'×-Ñ-Ð9Ð9Ð9Ø ×'Ñ'×-Ñ-°Ò9Ð9Ñ9r4   c                 óâ	  — | j                  «       }|j                  «        dt        «       j                  › �}t	        «       }t        d¬«      }|j                  t        d|t        dddd¬	«      ¬
«      ¬«       |j                  ||¬«      }|j                  }|€J ‚t        |j                  «       «       |j                  d   j                  }|€J ‚|j                  }|€J ‚|j                   du sJ ‚|j"                  €J ‚|j"                  j$                  €J ‚|j"                  j$                  dk(  sJ ‚t&        sr|j"                  j(                  €J ‚|j"                  j(                  }	|	j*                  dk(  sJ ‚|	j,                  dk(  sJ ‚|	j.                  dk(  sJ ‚|	j0                  dk(  sŒJ ‚|j"                  j(                  �J ‚|j"                  j2                  €J ‚|j"                  j2                  }
|
j.                  dk(  sJ ‚|
j4                  dk(  sJ ‚|
j0                  dk(  sJ ‚|
j6                  dk(  sJ ‚|j"                  j8                  }|€J ‚|j;                  «       dk(  sJ ‚|j=                  «       ddik(  sJ ‚|j                  «       }t&        s(|d   d   d   d   d   d   }|d   dk(  sJ ‚|d   dk(  s4J ‚|d   d   d   d   d   d   }|d   dk(  sJ ‚|d   dk(  sJ ‚|d   dk(  sJ ‚| j                  «       }|j?                  |¬«      }|j                  }|€J ‚|j                  d   j                  }|€J ‚|j                  }|€J ‚|j"                  €J ‚|j"                  j$                  €J ‚|j"                  j$                  dk(  sJ ‚t&        sb|j"                  j(                  €J ‚|j"                  j(                  j*                  dk(  sJ ‚|j"                  j(                  j,                  dk(  s®J ‚|j"                  j2                  €J ‚|j"                  j2                  j.                  dk(  sJ ‚|j"                  j2                  j4                  dk(  sJ ‚|j"                  j2                  j0                  dk(  sJ ‚|j"                  j2                  j6                  dk(  sJ ‚|j@                  }|€J ‚|jC                  d «      }|€J ‚|j;                  «       dk(  sJ ‚|j=                  «       ddik(  sJ ‚y)!rr   rs   é   rG   rK   rt   ru   rv   rw   rx   )r}   Úembedding_functionr~   rH   r   Nr�   Téd   g333333ó?r?   r,   rŠ   r‹   rŒ   rE   r~   ry   rz   Úhnswr{   Ú	ef_searchr|   r‚   rœ   )"rƒ   r„   r)   r…   r   r+   r†   r   r   r‡   r€   rˆ   r‰   rŠ   r‹   rŒ   r�   rE   r}   r   r~   ry   rz   r{   r|   rž   rŸ   Úresize_factorrœ   rA   rD   rŽ   Úconfigurationro   )rp   r�   r�   r€   rœ   r‘   r’   r“   rŒ   Úspann_configÚhnsw_configÚefÚpersisted_jsonÚ
spann_jsonÚ	hnsw_jsonr”   r•   r–   r—   r˜   rE   Ú	config_efs                         r2   Ú-test_schema_vector_config_persistence_with_efr©   Ÿ   s~  € ð
 ×7Ñ7Ó9€FØ
‡L�L„Nà%¤e£g§k¡k ]Ð3€Oä‹X€FÜ0°QÔ7ÐØ
×ÑÜ ØØ1Ü"Ø ØØ #Ø ô	ô	
ð ô ð ×0Ñ0ØØð 1ó €Jð
 "×(Ñ(ÐØÐ'Ð'Ð'ä	Ð
×
,Ñ
,Ó
.Ô/à)×.Ñ.¨|Ñ<×GÑGÐØÐ)Ð)Ð)Ø%×2Ñ2€LØÐ#Ð#Ð#Ø×Ñ 4Ñ'Ð'Ð'Ø×ÑÐ*Ð*Ð*Ø×Ñ×$Ñ$Ð0Ð0Ð0Ø×Ñ×$Ñ$¨Ò0Ð0Ð0å!Ø×"Ñ"×(Ñ(Ð4Ð4Ð4Ø#×*Ñ*×0Ñ0ˆØ×)Ñ)¨RÒ/Ð/Ð/Ø×(Ñ(¨BÒ.Ð.Ð.Ø×+Ñ+¨sÒ2Ð2Ð2Ø×)Ñ)¨RÒ/Ð/Ð/à×"Ñ"×(Ñ(Ð0Ð0Ð0Ø×"Ñ"×'Ñ'Ð3Ð3Ð3Ø"×)Ñ)×.Ñ.ˆØ×*Ñ*¨cÒ1Ð1Ð1Ø×$Ñ$¨Ò+Ð+Ð+Ø×(Ñ(¨BÒ.Ð.Ð.Ø×(Ñ(¨CÒ/Ð/Ð/à	×	Ñ	×	/Ñ	/€BØˆ>Ðˆ>Ø�7‰7‹9˜Ò#Ð#Ð#Ø�=‰=‹?˜u a˜jÒ(Ð(Ð(à%×7Ñ7Ó9€NÝ!Ø# FÑ+¨LÑ9¸,ÑGÈÑWØñ
à
ñˆ
ð ˜/Ñ*¨bÒ0Ð0Ð0Ø˜.Ñ)¨RÒ/Ð/Ð/à" 6Ñ*¨<Ñ8¸ÑFÀ~ÑVØñ
à
ñˆ	ð Ð*Ñ+¨sÒ2Ð2Ð2Ø˜Ñ%¨Ò,Ð,Ð,Ø˜Ñ)¨RÒ/Ð/Ð/à&×@Ñ@ÓB€OØ)×8Ñ8Øð 9ó Ðð *×0Ñ0€OØÐ&Ð&Ð&Ø"1×"6Ñ"6°|Ñ"D×"OÑ"OÐØ&Ð2Ð2Ð2Ø7×DÑDÐØ Ð,Ð,Ð,Ø ×'Ñ'Ð3Ð3Ð3Ø ×'Ñ'×-Ñ-Ð9Ð9Ð9Ø ×'Ñ'×-Ñ-°Ò9Ð9Ð9Ý!Ø$×+Ñ+×1Ñ1Ð=Ð=Ð=Ø$×+Ñ+×1Ñ1×?Ñ?À2ÒEÐEÐEØ$×+Ñ+×1Ñ1×>Ñ>À"ÒDÐDÐDà$×+Ñ+×0Ñ0Ð<Ð<Ð<Ø$×+Ñ+×0Ñ0×@Ñ@ÀCÒGÐGÐGØ$×+Ñ+×0Ñ0×:Ñ:¸cÒAÐAÐAØ$×+Ñ+×0Ñ0×>Ñ>À"ÒDÐDÐDØ$×+Ñ+×0Ñ0×>Ñ>À#ÒEÐEÐEà ×.Ñ.€FØÐÐÐØ—
‘
Ð/Ó0€IØÐ Ð Ð Ø�>‰>Ó˜{Ò*Ð*Ð*Ø×ÑÓ! e¨Q ZÒ/Ð/Ñ/r4   c                   óŠ   — e Zd ZdZddefd„Zdee   dee   fd„Ze	defd„«       Z
deeef   fd„Ze	d	eeef   dd fd
„«       Zy)Ú$DeterministicSparseEmbeddingFunctionzCSparse embedding function that emits predictable token/value pairs.rW   c                 ó   — || _         y r.   rk   r\   s     r2   r3   z-DeterministicSparseEmbeddingFunction.__init__  ó	   € Øˆ�r4   r5   r6   c                 óŽ   — t        |«      D ��cg c])  \  }}t        |gt        t        |«      |z   «      g¬«      ‘Œ+ c}}S c c}}w ©N©ÚindicesÚvalues©Ú	enumerater	   r9   r`   ©r1   r5   Úidxrb   s       r2   r=   z-DeterministicSparseEmbeddingFunction.__call__  óF   € ô ' uÓ-÷
á��Tô  # ´´c¸$³iÀ#±oÓ0FÐ/GÖHó
ð 	
ùó 
ó   �.Ac                   ó   — y)NÚ
det_sparser@   r@   r4   r2   rA   z)DeterministicSparseEmbeddingFunction.name  s   € àr4   c                 ó   — d| j                   iS rj   rk   rC   s    r2   rD   z/DeterministicSparseEmbeddingFunction.get_config!  rl   r4   rE   c                 ó8   — t        | j                  dd«      «      S )NrW   rº   )r«   ro   rH   s    r2   rI   z6DeterministicSparseEmbeddingFunction.build_from_config$  s   € ô 4°F·J±J¸wÈÓ4UÓVÐVr4   N)rº   )rN   rO   rP   rQ   rS   r3   r$   r	   r=   rT   rA   r#   r!   rD   rI   r@   r4   r2   r«   r«     sŒ   „ áMñ˜có ð
˜d 3™ið 
¨D°Ñ,>ó 
ð ð�#ò ó ðð&˜D  c ™Nó &ð ðWØ�S˜#�X‘ðWà	/òWó ñWr4   r«   r€   rœ   c                 ó   — | j                  «       }|j                  «        dt        «       j                  › �}|�|j	                  ||¬«      }||fS |�|j	                  ||¬«      }||fS |j	                  |¬«      }||fS )zKProvision a new temporary collection and return it with the backing client.Úschema_e2e_r   ©rA   rœ   r‚   )rƒ   r„   r)   r…   r‡   )rp   r€   rœ   r�   r�   r‘   s         r2   Ú_create_isolated_collectionrÀ   +  s²   € ð ×7Ñ7Ó9€FØ
‡L�L„Nà#¤E£G§K¡K =Ð1€OØÐØ×4Ñ4Ø Øð 5ó 
ˆ
ð �vÐÐð Ð)Ø×8Ñ8Ø$Ø#5ð 9ó ˆJð �vÐÐð	  ×8Ñ8Ø$ð 9ó ˆJð �vÐÐr4   Úrankc                 ó¢  — | €g S t        | t        «      r| j                  gS g }t        | dd «      }|�|j	                  t        |«      «       t        | dd «      }|�|j	                  t        |«      «       t        | dd «      }|�|j	                  t        |«      «       t        | dd «      }|r!|D ]  }|j	                  t        |«      «       Œ |S )NrÁ   ÚleftÚrightÚranks)Ú
isinstancer   ÚqueryÚgetattrÚextendÚ_collect_knn_queries)rÁ   ÚqueriesÚ
child_rankÚ	left_rankÚ
right_rankrÅ   Úchilds          r2   rÊ   rÊ   H  sÒ   € Ø€|Øˆ	ä�$œÔØ—
‘
ˆ|Ðà€Gä˜˜v tÓ,€JØÐØ�‰Ô+¨JÓ7Ô8ä˜˜f dÓ+€IØÐØ�‰Ô+¨IÓ6Ô7ä˜˜w¨Ó-€JØÐØ�‰Ô+¨JÓ7Ô8ä�D˜' 4Ó(€EÙØò 	8ˆEØ�N‰NÔ/°Ó6Õ7ð	8ð €Nr4   c                 óÌ  — t        | «      \  }}|j                  }|€J ‚|j                  €J ‚|j                  j                  €J ‚|j                  j                  j                  }|€J ‚|j
                  du sJ ‚|j                  j                  €J ‚|j                  j                  j                  }|€J ‚|j
                  du sJ ‚|j                  j                  €J ‚|j                  j                  j                  }|€J ‚|j
                  du sJ ‚|j                  j                  €J ‚|j                  j                  j                  }|€J ‚|j
                  du sJ ‚|j                  d   j                  }|€J ‚|j                  }	|	€J ‚|	j
                  du sJ ‚|j                  d   j                  }
|
€J ‚|
j                  }|€J ‚|j
                  du sJ ‚g d¢}g d¢}ddd	dd
œddddd
œddddd
œg}|j!                  |||¬«       |j#                  ddi¬«      }t%        |d   «      dhk(  sJ ‚|j#                  ddi¬«      }t%        |d   «      dhk(  sJ ‚|j#                  ddi¬«      }t%        |d   «      dhk(  sJ ‚|j'                  dgdddœg¬«       |j#                  ddi¬«      }t%        |d   «      dhk(  sJ ‚|j)                  dgdgdddœg¬«       |j#                  dgd g¬!«      }|d    €J ‚t+        |d    «      d"k(  sJ ‚|j-                  |j.                  «      }|j                  €J ‚t0        s.|j                  j3                  «       |j3                  «       k(  sJ ‚yy)#zKValidate default schema indexes support filtering, updates, and embeddings.NTú	#documentr�   )údoc-1údoc-2údoc-3)ÚalphaÚbetaÚgammaÚnewsé   g      #@)ÚcategoryÚratingÚpriceÚ	is_activeÚscienceé   g      @Fé   g      @©ÚidsÚ	documentsÚ	metadatasrÚ   ©Úwhererâ   rÓ   rÛ   rÔ   rÝ   rÒ   r›   Úupdates)rÛ   rÚ   ©râ   rä   zbeta-updated)rÜ   rÚ   Ú
embeddings©râ   Úincludeé   )rÀ   r€   ÚdefaultsÚstringÚstring_inverted_indexr�   Ú	int_valueÚint_inverted_indexÚfloat_valueÚfloat_inverted_indexÚbooleanÚbool_inverted_indexrŠ   Ú	fts_indexr‹   rŒ   Úaddro   ÚsetÚupdateÚupsertr`   rŽ   rA   r   r‰   )rp   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                        r2   Ú.test_schema_defaults_enable_indexed_operationsr  e  sÞ  € ô 5Ð5EÓFÑ€J�à×Ñ€FØÐÐÐØ�?‰?Ð&Ð&Ð&Ø�?‰?×!Ñ!Ð-Ð-Ð-Ø—?‘?×)Ñ)×?Ñ?€LØÐ#Ð#Ð#Ø×Ñ 4Ñ'Ð'Ð'Ø�?‰?×$Ñ$Ð0Ð0Ð0Ø—‘×)Ñ)×<Ñ<€IØÐ Ð Ð Ø×Ñ Ñ$Ð$Ð$Ø�?‰?×&Ñ&Ð2Ð2Ð2Ø—/‘/×-Ñ-×BÑB€KØÐ"Ð"Ð"Ø×Ñ $Ñ&Ð&Ð&Ø�?‰?×"Ñ"Ð.Ð.Ð.Ø—‘×(Ñ(×<Ñ<€JØÐ!Ð!Ð!Ø×Ñ Ñ%Ð%Ð%àŸ™ KÑ0×7Ñ7ÐØÐ(Ð(Ð(Ø!×+Ñ+€IØÐ Ð Ð Ø×Ñ Ñ$Ð$Ð$àŸ™ \Ñ2×=Ñ=ÐØÐ)Ð)Ð)Ø%×2Ñ2€LØÐ#Ð#Ð#Ø×Ñ 4Ñ'Ð'Ð'â
%€CÚ*€Ià q°3ÀTÑJØ¨!°cÈÑNØ q°3ÀTÑJð*€Ið ‡N�N�s i¸9€NÔEà�~‰~ Z°Ð$;ˆ~Ó<€HÜˆx˜‰Ó G 9Ò,Ð,Ð,à—^‘^¨8°Q¨-�^Ó8€NÜˆ~˜eÑ$Ó%¨'¨Ò2Ð2Ð2à—.‘.¨°UÐ';�.Ó<€KÜˆ{˜5Ñ!Ó" w iÒ/Ð/Ð/à×Ñ˜7˜)¸1È)Ñ0TÐ/UÐÔVØ$Ÿ.™.°¸!¨}˜.Ó=ÐÜÐ" 5Ñ)Ó*¨w¨iÒ7Ð7Ð7à×ÑØˆIØ!Ð"Ø ¨iÑ8Ð9ð ô ð $Ÿ™¨W¨IÀ¸~˜ÓNÐØ˜lÑ+Ð7Ð7Ð7ÜÐ! ,Ñ/Ó0°AÒ5Ð5Ð5ð ×$Ñ$ Z§_¡_Ó5€HØ�?‰?Ð&Ð&Ð&Ý!Ø�‰×0Ñ0Ó2°f×6NÑ6NÓ6PÒPÐPÑPð "r4   c                 óÀ  — t        «       }|j                  dt        «       ¬«       |j                  dt        «       ¬«       t	        | |¬«      \  }}|j
                  €J ‚|j
                  j                  «       }d|d   v sJ ‚d|d   v sJ ‚|j                  |j                  ¬«      }|j
                  €J ‚|j
                  j                  «       |k(  sJ ‚|j                  |j                  ¬«      }|j
                  €J ‚|j
                  j                  «       |k(  sJ ‚|j                  dgd	gd
ddœg¬«       |j                  dd
i¬«      }t        |d   «      dhk(  sJ ‚y)zIEnsure repeated collection lookups reuse the persisted schema definition.Ú
custom_tag©ÚkeyrE   Ú
importance©r€   NrŠ   r‚   zschema-preserveÚdocrÕ   é
   )r  r  rá   rå   râ   )r   r†   r
   r   rÀ   r€   r‰   r‡   rA   rŽ   r÷   ro   rø   )rp   Úbase_schemar‘   r�   Úinitial_schema_jsonÚsecond_referenceÚfetchedÚstoreds           r2   Ú5test_get_or_create_and_get_collection_preserve_schemar  ³  s“  € ô “(€KØ×ÑØÜ(Ó*ð ô ð ×ÑØÜ%Ó'ð ô ô
 5ØØôÑ€J�ð
 ×ÑÐ(Ð(Ð(Ø$×+Ñ+×=Ñ=Ó?ÐØÐ.¨vÑ6Ñ6Ð6Ð6ØÐ.¨vÑ6Ñ6Ð6Ð6à×6Ñ6¸J¿O¹OÐ6ÓLÐØ×"Ñ"Ð.Ð.Ð.Ø×"Ñ"×4Ñ4Ó6Ð:MÒMÐMÐMà×#Ñ#¨¯©Ð#Ó9€GØ�>‰>Ð%Ð%Ð%Ø�>‰>×+Ñ+Ó-Ð1DÒDÐDÐDà×ÑØÐØ�'Ø")¸Ñ<Ð=ð ô ð �[‰[ ¨gÐ6ˆ[Ó7€FÜˆv�e‰}ÓÐ"3Ð!4Ò4Ð4Ñ4r4   c                 ó6  — t        «       }|j                  dt        «       ¬«       t        | |¬«      \  }}|j                  €J ‚d|j                  j
                  v sJ ‚|j                  |j                  ¬«       |j                  |j                  ¬«      }|j                  €J ‚|j                  j                  «       }t        «       j                  «       }d|d   vsJ ‚t        |d   j                  «       «      t        |d   j                  «       «      k(  sJ ‚y)zHDeleting and recreating a collection should drop prior schema overrides.Útransient_keyr	  r  Nr‚   rŠ   )r   r†   r
   rÀ   r€   rŠ   Údelete_collectionrA   Úcreate_collectionr‰   rø   )rp   r€   r‘   r�   Ú	recreatedÚrecreated_jsonÚbaseline_jsons          r2   Ú2test_delete_collection_resets_schema_configurationr  Ý  s  € ô ‹X€FØ
×ÑØÜ(Ó*ð ô ô
 5ØØôÑ€J�ð
 ×ÑÐ(Ð(Ð(Ø˜j×/Ñ/×4Ñ4Ñ4Ð4Ð4à
×Ñ *§/¡/ÐÔ2à×(Ñ(¨j¯o©oÐ(Ó>€IØ×ÑÐ'Ð'Ð'Ø×%Ñ%×7Ñ7Ó9€NÜ“H×.Ñ.Ó0€MØ .°Ñ"8Ñ8Ð8Ð8Üˆ~˜fÑ%×*Ñ*Ó,Ó-´°]À6Ñ5J×5OÑ5OÓ5QÓ1RÒRÐRÑRr4   )Úreasonc                 óÈ   — t        «       }|j                  dt        «       ¬«       t        j                  t
        d¬«      5  t        | |¬«       ddd«       y# 1 sw Y   yxY w)z<Sparse vector configs are not allowed to be created locally.Úsparse_metadatar	  z.Sparse vector indexing is not enabled in local©Úmatchr  N)r   r†   r   ÚpytestÚraisesr   rÀ   )rp   r€   s     r2   Ú&test_sparse_vector_not_allowed_locallyr$  ù  s[   € ô
 ‹X€FØ
×ÑÐ-Ô6MÓ6OÐÔPÜ	�‰ÜÐ$Tô
ñ Eô 	$Ð$4¸VÕD÷E÷ Eñ Eús   ÁAÁA!c                 ó€  — t        d¬«      }t        «       }|j                  dt        d|¬«      ¬«       |j                  dt	        «       ¬«       |j                  dt	        «       ¬«       t        | |¬	«      \  }}|j                  €J ‚d|j                  j                  v sJ ‚d|j                  j                  v sJ ‚d|j                  j                  v sJ ‚|j                  dgdgddddœg¬«       |j                  dgdg¬«      }|d   €J ‚|d   d   }|€J ‚|d   dk(  sJ ‚|d   dk(  sJ ‚|d   dk(  sJ ‚d|v sJ ‚t        t        |d   «      }| |dg«      d   k(  sJ ‚|j                  t        «       j                  t        dt        t         |«      ¬«      «      «      }t#        |d   «      dk(  sJ ‚d|d   d   v sJ ‚t%        j&                  t(        «      5  |j                  j                  dt        d¬«      ¬«       d
d
d
«       |j                  ddi¬«      }	t+        |	d   «      dhk(  sJ ‚y
# 1 sw Y   Œ2xY w)zNSparse vector configs honor source key embedding and single-index enforcement.zsource-test©rW   r  Úraw_text©Ú
source_keyrœ   r	  Útag_aÚtag_br  Nzsparse-1zsource documentÚorangesÚcitrusÚfruit)r'  r*  r+  rá   rä   rê   r   ©r
  rÇ   râ   rì   Úanother_sparse©r)  rå   )r«   r   r†   r   r
   rÀ   r€   rŠ   r÷   ro   r(   r	   Úsearchr    rÁ   r   r!   r`   r"  r#  Ú
ValueErrorrø   )
rp   Ú	sparse_efr€   r‘   r<   r  ÚmetadataÚsparse_payloadÚsearch_resultÚstring_filters
             r2   Ú3test_sparse_vector_source_key_and_index_constraintsr9    s�  € ô
 5¸=ÔI€Iä‹X€FØ
×ÑØÜ&Ø!Ø(ô
ð ô ð ×Ñ˜GÔ,EÓ,GÐÔHØ
×Ñ˜GÔ,EÓ,GÐÔHä/Ð0@ÈÔP�M€J�à×ÑÐ(Ð(Ð(Ø 
× 1Ñ 1× 6Ñ 6Ñ6Ð6Ð6Ø�j×'Ñ'×,Ñ,Ñ,Ð,Ð,Ø�j×'Ñ'×,Ñ,Ñ,Ð,Ð,à‡N�NØˆLØ$Ð%Ø )°HÀwÑOÐPð ô ð �^‰^  °{°mˆ^ÓD€FØ�+ÑÐ*Ð*Ð*Ø�kÑ" 1Ñ%€HØÐÐÐØ�GÑ Ò(Ð(Ð(Ø�GÑ Ò'Ð'Ð'Ø�JÑ 9Ò,Ð,Ð,Ø Ñ(Ð(Ð(Üœ,¨Ð1BÑ(CÓD€NØ™Y¨	 {Ó3°AÑ6Ò6Ð6Ð6à×%Ñ%Ü‹�‰”cÐ/´t¼CÀÓ7PÔQÓRó€Mô ˆ}˜UÑ#Ó$¨Ò)Ð)Ð)Ø˜ uÑ-¨aÑ0Ñ0Ð0Ð0ä	�‰”zÓ	"ñ 
Ø×Ñ×&Ñ&Ø Ü*°jÔAð 	'ô 	
÷
ð —N‘N¨'°7Ð);�NÓ<€MÜˆ}˜UÑ#Ó$¨¨Ò4Ð4Ñ4÷
ð 
ús   Ç(H4È4H=c           	      ó¦  — t        «       }|j                  dt        «       ¬«       |j                  dt        «       ¬«       |j                  dt	        «       ¬«       |j                  dt        «       ¬«       t        | |¬«      \  }}|j                  dgdgd	d
dddœg¬«       |j                  €J ‚|j                  j                  «       }| j                  «       }|j                  |j                  ¬«      }|j                  €J ‚t        s|j                  j                  «       |k(  sJ ‚|j                  dd	i¬«      }t        |d   «      dhk(  sJ ‚y)z<Custom schema overrides persist across new client instances.Útitler	  Úpublished_yearÚscoreÚis_featuredr  z	persist-1zpersistent doczSchema Persistenceiè  g      @T)r;  r<  r=  r>  rá   Nr‚   rå   râ   )r   r†   r
   r   r   r   rÀ   r÷   r€   r‰   rƒ   rŽ   rA   r   ro   rø   )rp   r€   r‘   r�   Úexpected_schema_jsonÚreloaded_clientr•   r  s           r2   Ú-test_schema_persistence_with_custom_overridesrA  @  sg  € ô ‹X€FØ
×Ñ˜GÔ,EÓ,GÐÔHØ
×ÑÐ,Ô5KÓ5MÐÔNØ
×Ñ˜GÔ,DÓ,FÐÔGØ
×Ñ˜MÔ2IÓ2KÐÔLä4ØØôÑ€J�ð
 ‡N�NØˆMØ#Ð$ð .Ø"&ØØ#ñ	ð
ð ô ð ×ÑÐ(Ð(Ð(Ø%×,Ñ,×>Ñ>Ó@Ðà&×@Ñ@ÓB€OØ)×8Ñ8¸j¿o¹oÐ8ÓNÐØ×%Ñ%Ð1Ð1Ð1Ý!Ø"×)Ñ)×;Ñ;Ó=ÐAUÒUÐUÐUà!×%Ñ%¨WÐ6JÐ,KÐ%ÓL€GÜˆw�u‰~Ó ; -Ò/Ð/Ñ/r4   c                 óˆ  — t        d¬«      }t        «       j                  t        |¬«      ¬«      }t	        | |¬«      \  }}|j                  dg«      }|€J ‚t        j                  |d   g d	¢«      sJ ‚t        d
¬«      }t	        | |¬«      \  }}|j                  dg«      }|€J ‚t        j                  |d   g d¢«      sJ ‚y)zE_embed should respect schema-provided and direct embedding functions.rÙ   rG   ©rœ   rH   r  zschema documentNr   ©ç        ç      ð?ç       @ç      @g      @rà   zdirect document)rE  rF  rG  )r+   r   r†   r   rÀ   Ú_embedÚnpÚallclose)	rp   Úschema_emb_fnr€   Úschema_collectionr<   Úschema_embeddingsÚdirect_emb_fnÚdirect_collectionÚdirect_embeddingss	            r2   ÚBtest_collection_embed_uses_schema_or_collection_embedding_functionrR  i  sà   € ô
 ,°Ô2€MÜ‹X×"Ñ"Ü °MÔBð #ó €Fô 7ØØôÑÐ�qð
 *×0Ñ0Ð2CÐ1DÓEÐØÐ(Ð(Ð(Ü�;‰;Ð(¨Ñ+Ò-FÔGÐGÐGä+°Ô2€MÜ6ØØ(ôÑÐ�qð
 *×0Ñ0Ð2CÐ1DÓEÐØÐ(Ð(Ð(Ü�;‰;Ð(¨Ñ+ª_Ô=Ð=Ñ=r4   c                 óà  — t        d¬«      }t        | |¬«      \  }}t        «       j                  t	        d¬«      «      }t        |j                  «       |j                  |«      }|j                  dggk(  sJ ‚|j                  rJ ‚t        |j                  t        «      sJ ‚|j                  j                  dk(  sJ ‚|j                  }t        |t        «      sJ ‚|j                  ddgk(  sJ ‚y)	úQ_embed_search_string_queries should embed string KNN queries using collection EF.Úprimaryr&  rC  úhello world©rÇ   ç      &@g      )@N)rV   rÀ   r    rÁ   r   rˆ   r€   Ú_embed_search_string_queriesr[   rZ   rÆ   Ú_rankrÇ   )rp   Úembedding_fnr‘   r<   r2  Úembedded_searchÚembedded_ranks          r2   Ú%test_search_embeds_string_knn_queriesr^  †  sÝ   € ô 4¸)ÔD€LÜ/Ø¨\ô�M€J�ô ‹X�]‰]œ3 ]Ô3Ó4€Fä	ˆ*×
Ñ
Ôà ×=Ñ=¸fÓE€Oà×$Ñ$¨-¨Ð(9Ò9Ð9Ð9Ø×'Ò'Ð'Ð'ä�f—l‘l¤CÔ(Ð(Ð(Ø�<‰<×Ñ Ò.Ð.Ð.à#×)Ñ)€MÜ�m¤SÔ)Ð)Ð)Ø×Ñ 4¨ ,Ò.Ð.Ñ.r4   c                 óZ  — t        d¬«      }t        «       j                  dt        d|¬«      ¬«      }t	        | |¬«      \  }}t        «       j                  t        dd¬	«      «      }|j                  |«      }t        |j                  t        «      sJ ‚|j                  j                  dk(  sJ ‚|j                  j                  dk(  sJ ‚|j                  }t        |t        «      sJ ‚|j                  dk(  sJ ‚t        |j                  «       |j                  t        d
gdg¬«      k(  sJ ‚y)rT  Úsparser&  r  r'  r(  r	  r  rV  r/  r   rX  r°   N)r«   r   r†   r   rÀ   r    rÁ   r   rY  rÆ   rZ  r
  rÇ   rˆ   r	   )rp   r4  r€   r‘   r<   r2  r\  r]  s           r2   ÚDtest_search_embeds_string_knn_queries_with_sparse_embedding_functionra  ¢  s  € ô 5¸8ÔD€IÜ‹X×"Ñ"ØÜ&Ø!°iô
ð #ó €Fô 0Ð0@ÈÔP�M€J�ä‹X�]‰]œ3Ð#4¸MÔJÓK€Fà ×=Ñ=¸fÓE€Oä�f—l‘l¤CÔ(Ð(Ð(Ø�<‰<×ÑÐ0Ò0Ð0Ð0Ø�<‰<×Ñ Ò.Ð.Ð.à#×)Ñ)€MÜ�m¤SÔ)Ð)Ð)Ø×ÑÐ 1Ò1Ð1Ð1Ü	ˆ-×
Ñ
ÔØ×Ñ¤,¸°sÀDÀ6Ô"JÒJÐJÑJr4   c                 ól  — t        d¬«      }t        | |¬«      \  }}t        d¬«      t        d¬«      z   j                  t        d¬«      «      }t        d¬«      d	z  j	                  «       }t        «       j                  |«      t        «       j                  |«      g}|D �cg c]  }|j                  |«      ‘Œ }}dgdgdgdgg}	|j                  |	k(  sJ ‚g }
|D ]&  }|
j                  t        |j                  «      «       Œ( |
sJ ‚t        d
„ |
D «       «      sJ ‚t        d„ |
D «       «      sJ ‚yc c}w )z>String queries in composite rank trees should all be embedded.Únestedr&  rC  rÕ   rW  rÖ   r×   Údeltaé   c              3   ó>   K  — | ]  }t        |t        «       –— Œ y ­wr.   )rÆ   rS   ©Ú.0rÇ   s     r2   ú	<genexpr>zDtest_search_embeds_string_queries_in_nested_ranks.<locals>.<genexpr>Ù  s   è ø€ ÒC¨e”:˜e¤SÓ)Ô)ÑCùs   ‚c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr.   )rÆ   r_   rg  s     r2   ri  zDtest_search_embeds_string_queries_in_nested_ranks.<locals>.<genexpr>Ú  s   è ø€ Ò@¨5Œz˜%¤×&Ñ@ùs   ‚N)rV   rÀ   r   ÚmaxÚabsr    rÁ   rY  r[   rÉ   rÊ   rZ  Úall)rp   r[  r‘   r<   Úrank_oneÚrank_twoÚsearchesÚsÚembedded_searchesÚexpected_queriesÚall_queriesr\  s               r2   Ú1test_search_embeds_string_queries_in_nested_ranksru  À  s2  € ô 4¸(ÔC€LÜ/Ø¨\ô�M€J�ô ˜'Ô"¤S¨vÔ%6Ñ6×;Ñ;¼CÀgÔ<NÓO€HÜ˜'Ô" QÑ&×+Ñ+Ó-€Hä“—‘˜hÓ'¬«¯©°xÓ)@ÐA€HØMUÖVÈ˜×@Ñ@ÀÕCÐVÐÐVà ˜	 F 8¨g¨Y¸¸	ÐBÐØ×$Ñ$Ð(8Ò8Ð8Ð8à€KØ,ò HˆØ×ÑÔ/°×0EÑ0EÓFÕGðHñ Ðˆ;ÜÑC°{ÔCÔCÐCÐCÜÑ@°KÔ@Ô@Ð@Ñ@ùò Ws   Â"D1c                 óø  — t        «       j                  t        «       ¬«      }t        | |¬«      \  }}|j	                  dgdgddig¬«       t        j                  t        «      5  |j                  ddi¬«       d	d	d	«       |j                  |j                  ¬
«       t        «       j                  t        «       ¬«      j                  dt        «       ¬«      }|j                  |j                  |¬«      }|j	                  dgdgddig¬«       t        j                  t        «      5  |j                  ddi¬«       d	d	d	«       |j                  |j                  ¬
«       t        «       j                  dt        «       ¬«      }|j                  |j                  |¬«      }|j	                  dgdgddig¬«       |j                  ddi¬«      }t        |d   «      dhk(  sJ ‚y	# 1 sw Y   �ŒkxY w# 1 sw Y   Œ´xY w)z>Toggling inverted index enablement reflects in query behavior.rH   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#  Ú	Exceptionro   r  rA   r†   r‡   rø   )	rp   Údisabled_defaultsr‘   r�   Údisabled_key_schemar  Úrestored_schemaÚrestoredr2  s	            r2   Ú$test_schema_delete_index_and_restorer  Ý  s  € ô ›×-Ñ-Ô5NÓ5PÐ-ÓQÐÜ4ØØ ôÑ€J�ð
 ‡N�NØˆLØ�'Ø" GÐ,Ð-ð ô ô 
�‰”yÓ	!ñ 8Ø�‰˜n¨gÐ6ˆÔ7÷8ð ×Ñ *§/¡/ÐÔ2ô 	‹ß	‰Ô6Ó8ˆÓ	9ß	‰˜*Ô-FÓ-HˆÓ	Ið ð
 ×/Ñ/Ø�_‰_Ð%8ð 0ó €Ið ‡M�MØÐØ�'Ø Ð'Ð(ð ô ô 
�‰”yÓ	!ñ 2Ø�‰˜Z¨Ð0ˆÔ1÷2ð ×Ñ *§/¡/ÐÔ2ä“h×+Ñ+ØÔ8Ó:ð ,ó €Oð ×.Ñ.Ø�_‰_ _ð /ó €Hð ‡L�LØˆOØ�'Ø Ð'Ð(ð ô ð �\‰\ ¨VÐ 4ˆ\Ó5€FÜˆv�e‰}Ó - Ò0Ð0Ñ0÷K8ñ 8ú÷&2ð 2ús   Á%G#Ä(G0Ç#G-Ç0G9c                 óà  ‡‡	— t        «       j                  dt        «       ¬«      }t        | |¬«      \  Š}‰j	                  dgt        t        g d¢g«      ddigdg¬«       ‰j                  €J ‚‰j                  j                  d   j                  }|€J ‚|j                  }|€J ‚|j                  d
u sJ ‚ddiŠ	dt        g t        f   dd	fd„}ˆˆ	fd„ˆˆ	fd„ˆˆ	fd„g}|D ]
  } ||«       Œ y	)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Ú	operationr6   c                 ó    — t        j                  t        «      5 } | «        d d d «       dt        j                  «      v sJ ‚y # 1 sw Y   Œ#xY w©Nz1Cannot filter using metadata key 'restricted_tag'©r"  r#  r   rS   rx  ©r†  Úexc_infos     r2   Ú_expect_disabled_errorzetest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>._expect_disabled_error.  óL   € Ü�]‰]Ô/Ó0ð 	°HÙŒK÷	àBÄcØ�N‰NóG
ñ 
ð 	
ñ 
÷	ð 	úó   šAÁAc                  ó(   •— ‰ j                  ‰¬«      S ©Nrå   ©ro   ©r‘   Úfilter_payloads   €€r2   ú<lambda>zWtest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>.<lambda>6  ó   ø€ �
—‘ ^�Ó4€ r4   c                  óN   •— ‰ j                  t        t        g d¢g«      d‰¬«      S ©Nrƒ  rì   )Úquery_embeddingsÚ	n_resultsræ   ©rÇ   r(   r   r’  s   €€r2   r”  zWtest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>.<lambda>7  ó+   ø€ �
× Ñ Ü!¤*Ò/CÐ.DÓEØØ ð !ó 
€ r4   c                  ó(   •— ‰ j                  ‰¬«      S r�  ©Údeleter’  s   €€r2   r”  zWtest_disabled_metadata_index_filters_raise_invalid_argument_all_modes.<locals>.<lambda><  ó   ø€ �
×!Ñ!¨Ð!Ó7€ r4   )r   ry  r
   rÀ   r÷   r(   r   r€   rŠ   rî   rï   r�   r"   r!   )
rp   r€   r<   Úschema_entryÚindex_configrŒ  Ú
operationsr†  r‘   r“  s
           @@r2   ÚEtest_disabled_metadata_index_filters_raise_invalid_argument_all_modesr£    s*  ù€ ô ‹X×"Ñ"ØÔ%>Ó%@ð #ó €Fô 0Ð0@ÈÔP�M€J�à‡N�NØÐÜœ
Ò%9Ð$:Ó;Ø$ iÐ0Ð1Ø�'ð	 ô ð ×ÑÐ(Ð(Ð(Ø×$Ñ$×)Ñ)Ð*:Ñ;×BÑB€LØÐ#Ð#Ð#Ø×5Ñ5€LØÐ#Ð#Ð#Ø×Ñ 5Ñ(Ð(Ð(à&6¸	Ð%B€Nð
¬(°2´s°7Ñ*;ð 
Àó 
ô 	5ô	
ô
 	8ð+€Jð  ò *ˆ	Ù˜yÕ)ñ*r4   c                 ó  ‡‡	‡
— t        «       j                  dt        «       ¬«      }t        | |¬«      \  Š}‰j	                  dgt        t        g d¢g«      ddigdg¬«       ‰j                  €J ‚‰j                  j                  d   j                  }|€J ‚|j                  }|€J ‚|j                  d
u sJ ‚ddiŠ	t        ‰	¬«      Š
dt        g t        f   dd	fd„}ˆˆ	fd„ˆˆ	fd„ˆˆ
fd„ˆˆ	fd„g}|D ]
  } ||«       Œ y	)zFDisabled metadata inverted index should block filter-based operations.r�  r	  r  r‚  rƒ  r„  r  r…  NFrå   r†  r6   c                 ó    — t        j                  t        «      5 } | «        d d d «       dt        j                  «      v sJ ‚y # 1 sw Y   Œ#xY wrˆ  r‰  rŠ  s     r2   rŒ  z[test_disabled_metadata_index_filters_raise_invalid_argument.<locals>._expect_disabled_error^  r�  rŽ  c                  ó(   •— ‰ j                  ‰¬«      S r�  r‘  r’  s   €€r2   r”  zMtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>f  r•  r4   c                  óN   •— ‰ j                  t        t        g d¢g«      d‰¬«      S r—  rš  r’  s   €€r2   r”  zMtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>g  r›  r4   c                  ó&   •— ‰ j                  ‰«      S r.   )r2  )r‘   Úsearch_requests   €€r2   r”  zMtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>l  s   ø€ �
×!Ñ! .Ó1€ r4   c                  ó(   •— ‰ j                  ‰¬«      S r�  r�  r’  s   €€r2   r”  zMtest_disabled_metadata_index_filters_raise_invalid_argument.<locals>.<lambda>m  rŸ  r4   )r   ry  r
   rÀ   r÷   r(   r   r€   rŠ   rî   rï   r�   r    r"   r!   )rp   r€   r<   r   r¡  rŒ  r¢  r†  r‘   r“  r©  s           @@@r2   Ú;test_disabled_metadata_index_filters_raise_invalid_argumentr«  C  s7  ú€ ô
 ‹X×"Ñ"ØÔ%>Ó%@ð #ó €Fô 0Ð0@ÈÔP�M€J�à‡N�NØÐÜœ
Ò%9Ð$:Ó;Ø$ iÐ0Ð1Ø�'ð	 ô ð ×ÑÐ(Ð(Ð(Ø×$Ñ$×)Ñ)Ð*:Ñ;×BÑB€LØÐ#Ð#Ð#Ø×5Ñ5€LØÐ#Ð#Ð#Ø×Ñ 5Ñ(Ð(Ð(à&6¸	Ð%B€NÜ .Ô1€Nð
¬(°2´s°7Ñ*;ð 
Àó 
ô 	5ô	
ô
 	2Ü7ð	+€Jð  ò *ˆ	Ù˜yÕ)ñ*r4   c                 ón  — t        | «      \  }}t        ||j                  «      }d}t        |«      D �cg c]  }d|› �‘Œ	 }}t        |«      D �cg c]  }d|› �‘Œ	 }}t        |«      D �cg c]	  }dd|› �i‘Œ }}|j	                  |||¬«       t
        st        ||j                  |«       |j                  |j                  «      }	|	j                  €J ‚d|	j                  j                  v sJ ‚|	j                  j                  d   j                  }
|
€J ‚|
j                  }|€J ‚|j                  du sJ ‚t        ||j                  «      }d	}t        |«      D �cg c]  }d
|› �‘Œ	 }}t        |«      D �cg c]  }d|› �‘Œ	 }}t        |«      D �cg c]	  }dd|› �i‘Œ }}|j                  |||¬«       t
        st        ||j                  |«       |j                  |j                  «      }|j                  €J ‚d|j                  j                  v sJ ‚|j                  j                  d   j                  }|€J ‚|j                  }|€J ‚|j                  du sJ ‚|j                  ddi¬«      }t        |d   «      dhk(  sJ ‚|j                  ddi¬«      }t        |d   «      dhk(  sJ ‚| j!                  «       }|j                  |j                  «      }|j                  €J ‚d|j                  j                  v sJ ‚d|j                  j                  v sJ ‚yc c}w c c}w c c}w c c}w c c}w c c}w )zJCompaction promotes unseen metadata keys into discoverable schema entries.éû   zdiscover-add-údoc Údiscover_addÚtopic_rá   NTé  zdiscover-upsert-zupsert doc Údiscover_upsertÚtopic_42rå   râ   zdiscover-add-42zdiscover-upsert-42)rÀ   r   rA   r8   r÷   r   r   rŽ   r€   rŠ   rî   rï   r�   rú   ro   rø   rƒ   )rp   r‘   r�   Úinitial_versionÚ
batch_sizer:   râ   rã   rä   r  Údiscover_add_configrï   Únext_versionÚupsert_countÚ
upsert_idsÚupsert_docsÚupsert_metadatasÚpost_upsertÚdiscover_upsert_configÚupsert_inverted_indexÚresultÚresult_upsertÚreload_clientÚ	persisteds                           r2   Ú/test_schema_discovers_new_keys_after_compactionrÃ  t  su  € ô 5Ð5EÓFÑ€J�ä,¨V°Z·_±_ÓE€Oà€JÜ(-¨jÓ(9Ö
: 1ˆ]˜1˜#ÒÐ
:€CÐ
:Ü%*¨:Ó%6Ö7 �4˜�s’Ð7€IÐ7ä05°jÓ0Aö*Ø+,ˆ˜6 ! ˜Ò&ð*€Ið *ð ‡N�N�s i¸9€NÔEå!Ü! &¨*¯/©/¸?ÔKà×$Ñ$ Z§_¡_Ó5€HØ�?‰?Ð&Ð&Ð&Ø˜XŸ_™_×1Ñ1Ñ1Ð1Ð1Ø"Ÿ/™/×.Ñ.¨~Ñ>×EÑEÐØÐ*Ð*Ð*Ø/×EÑEÐØ Ð,Ð,Ð,Ø ×(Ñ(¨DÑ0Ð0Ð0ä)¨&°*·/±/ÓB€Là€LÜ27¸Ó2EÖF¨QÐ$ Q CÒ(ÐF€JÐFÜ.3°LÓ.AÖB¨�[  Ò$ÐB€KÐBä38¸Ó3Fö1Ø./Ð	˜f Q C˜LÒ)ð1Ðð 1ð ×ÑØØØ"ð ô õ "Ü! &¨*¯/©/¸<ÔHà×'Ñ'¨
¯©Ó8€KØ×ÑÐ)Ð)Ð)Ø × 2Ñ 2× 7Ñ 7Ñ7Ð7Ð7Ø(×/Ñ/×4Ñ4Ð5FÑG×NÑNÐØ!Ð-Ð-Ð-Ø2×HÑHÐØ Ð,Ð,Ð,Ø ×(Ñ(¨DÑ0Ð0Ð0à�^‰^ >°:Ð">ˆ^Ó?€FÜˆv�e‰}ÓÐ"3Ð!4Ò4Ð4Ð4à—N‘NÐ*;¸ZÐ)H�NÓI€MÜˆ}˜UÑ#Ó$Ð)=Ð(>Ò>Ð>Ð>à$×>Ñ>Ó@€MØ×,Ñ,¨Z¯_©_Ó=€IØ×ÑÐ'Ð'Ð'Ø˜Y×-Ñ-×2Ñ2Ñ2Ð2Ð2Ø 	× 0Ñ 0× 5Ñ 5Ñ5Ð5Ñ5ùòs ;ùÚ7ùò*ùò* GùÚBùò1s#   ´LÁLÁ*L#ÅL(Å5L-ÆL2c                 óÄ  — t        | «      \  }}t        ||j                  «      }t        d«      D �cg c]  }d|› �‘Œ	 }}t        d«      D �cg c]	  }dd|› �i‘Œ }}t        d«      D �cg c]  }d|› �‘Œ	 }}|j	                  |||¬«       t
        st        ||j                  |«       |j                  dgdgdd	ig¬«       |j                  d
gddig¬«       |j                  |j                  «      j                  }|€J ‚d|j                  v sJ ‚|j                  d   }	|	j                  �:|	j                  j                  �$|	j                  j                  j                  du sJ ‚|j                  ddi¬«      }
t!        |
d   «      dhk(  sJ ‚|j                  dgdg¬«      }|d   €J ‚|d   d   }|€J ‚t#        |d   t$        t&        f«      sJ ‚yc c}w c c}w c c}w )zGConflicting value types should not corrupt discoverable schema entries.r­  z	conflict-Úconflict_keyÚvalue_r®  rá   zconflict-badzbad docr�   z
conflict-0éÈ   rè   NTÚvalue_10rå   râ   zconflict-10rä   rê   r   )rÀ   r   rA   r8   r÷   r   r   rú   rù   rŽ   r€   rŠ   rî   rï   r�   ro   rø   rÆ   rR   r9   )rp   r‘   r�   r´  r:   râ   rä   rã   r€   Úconflict_entryÚfetchÚconflict_bad_metaÚbad_metadatas                r2   Ú6test_schema_rejects_conflicting_discoverable_key_typesrÍ  ¹  s  € ô 5Ð5EÓFÑ€J�ä,¨V°Z·_±_ÓE€Oä$)¨#£JÖ
/˜qˆY�q�cŠ?Ð
/€CÐ
/ä05°c³
ö*Ø+,ˆ˜6 ! ˜Ò&ð*€Ið *ô &+¨3£ZÖ0 �4˜�s’Ð0€IÐ0Ø‡N�N�s i¸9€NÔEå!Ü! &¨*¯/©/¸?ÔKà×ÑØÐØ�+Ø" CÐ(Ð)ð ô ð ×ÑØˆNØ" CÐ(Ð)ð ô ð
 ×"Ñ" :§?¡?Ó3×:Ñ:€FØÐÐÐØ˜VŸ[™[Ñ(Ð(Ð(Ø—[‘[ Ñ0€Nà×ÑÐ)Ø×!Ñ!×7Ñ7ÐCà×$Ñ$×:Ñ:×BÑBÀdÑJÐJÐJà�N‰N .°*Ð!=ˆNÓ>€EÜˆu�U‰|Ó  Ò/Ð/Ð/à"Ÿ™¨NÐ+;ÀkÀ]˜ÓSÐØ˜[Ñ)Ð5Ð5Ð5Ø$ [Ñ1°!Ñ4€LØÐ#Ð#Ð#Ü�l >Ñ2´S¼%°LÔAÐAÑAùòM 0ùò*ùò 1s   ²GÁGÁ*Gc                 ó   — t        «       }|j                  dt        «       ¬«       t        | |¬«      \  }}t	        ||j
                  «      }t        d«      D �cg c]  }d|› �‘Œ	 }}t        d«      D �cg c]  }d|› �‘Œ	 }}t        d«      D �cg c]	  }dd|› �i‘Œ }}|j                  |||¬«       t        ||j
                  |«       |j                  €J ‚|j                  j                  «       }	|j
                  › d
�}
|j                  |
«      }|j                  €J ‚|j                  j                  «       |	k(  sJ ‚t	        ||j
                  «      }t        d«      D �cg c]  }d|› �‘Œ	 }}t        d«      D �cg c]  }d|› �‘Œ	 }}t        d«      D �cg c]
  }dd|› �dœ‘Œ }}|j                  |||¬«       t        ||j
                  |«       |j                  |j
                  «      }|j                  €J ‚d|j                  j                  v sJ ‚|j                  j                  d   j                  }|€J ‚|j                   }|€J ‚|j"                  du sJ ‚|j                  |j
                  «      }|j                  €J ‚d|j                  j                  vsJ ‚|j%                  ddi¬«      }t'        |d   «      dhk(  sJ ‚|j%                  ddi¬«      }t'        |d   «      dhk(  sJ ‚y	c c}w c c}w c c}w c c}w c c}w c c}w )zPAssert forked collections inherit schema and evolve independently of the parent.Ú
shared_keyr	  r  r­  zparent-zparent doc Úparent_rá   NÚ_forkzfork-z	fork doc ÚparentrÆ  )rÏ  Ú
child_onlyrÓ  TÚ	parent_10rå   râ   z	parent-10rÈ  zfork-10)r   r†   r
   rÀ   r   rA   r8   r÷   r   r€   r‰   Úforkrú   rŽ   rŠ   rî   rï   r�   ro   rø   )rp   r€   r‘   r�   Úparent_version_before_addr:   Ú
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                         r2   Ú1test_collection_fork_inherits_and_isolates_schemarç  ê  s8  € ô ‹X€FØ
×Ñ˜LÔ1JÓ1LÐÔMä4ØØôÑ€J�ô
 !7°v¸z¿¹Ó OÐä).¨s«Ö4 A�G˜A˜3’-Ð4€JÐ4Ü.3°C«jÖ9¨�[  Ò$Ð9€KÐ9ä/4°S«zö1Ø*+ˆ˜  �}Ò%ð1Ðð 1ð ‡N�NØØØ"ð ô ô ˜f j§o¡oÐ7PÔQà×ÑÐ(Ð(Ð(Ø#×*Ñ*×<Ñ<Ó>Ðà—?‘?Ð# 5Ð)€IØ�_‰_˜YÓ'€Fà�=‰=Ð$Ð$Ð$Ø�=‰=×*Ñ*Ó,Ð0BÒBÐBÐBä)¨&°&·+±+Ó>€Lä%*¨3£ZÖ0 �%˜�s’Ð0€HÐ0Ü*/°«*Ö5 Q�9˜Q˜C’Ð5€IÐ5äFKÈCÃjö/ØAB�x°¸°s¨|Ó<ð/€Nð /ð ‡M�M�h¨)¸~€MÔNä˜f f§k¡k°<Ô@à×)Ñ)¨&¯+©+Ó6€MØ×ÑÐ+Ð+Ð+Ø˜=×/Ñ/×4Ñ4Ñ4Ð4Ð4Ø%×,Ñ,×1Ñ1°,Ñ?×FÑFÐØÐ(Ð(Ð(Ø,×BÑBÐØÐ+Ð+Ð+Ø×'Ñ'¨4Ñ/Ð/Ð/à×+Ñ+¨J¯O©OÓ<€OØ×!Ñ!Ð-Ð-Ð-Ø˜×5Ñ5×:Ñ:Ñ:Ð:Ð:à$×(Ñ(°¸kÐ/JÐ(ÓK€NÜˆ~˜eÑ$Ó%¨+¨Ò6Ð6Ð6à—J‘J l°JÐ%?�JÓ@€MÜˆ}˜UÑ#Ó$¨¨Ò3Ð3Ñ3ùòm 5ùÚ9ùò1ùò4 1ùÚ5ùò/s$   ÁK2Á4K7ÂK<Å"LÅ=LÆLc                 óà  — t        «       j                  t        t        d¬«      ¬«      ¬«      }t	        | |t        d¬«      ¬«      \  }}|j                  dgdg¬«       |j                  dgd	g¬
«      }|d	   €J ‚t        j                  |d	   d   g d¢«      sJ ‚t        «       }t        «       j                  dt        d|¬«      ¬«      }t	        | |¬«      \  }}|j                  dgdgddig¬«        |dg«      d   }|j                  dgdg¬
«      }	|	d   €J ‚|	d   d   }
|
€J ‚d|
v sJ ‚t        t        |
d   «      }||k(  sJ ‚|j                  t        «       j                  t!        dt        t"        |«      ¬«      «      «      }t%        |d   «      dk(  sJ ‚d|d   d   v sJ ‚|j                  dgdgddig¬«       |j                  dgdg¬
«      }|d   €J ‚|d   d   }|€J ‚d|vsJ ‚y)zKSchema-provided embedding functions drive both dense and sparse embeddings.rÙ   rG   rC  rH   ©r€   rœ   zembed-1zembedding document©râ   rã   ré   rê   Nr   rD  Úsparse_autoÚtext_to_embedr(  r	  r  zsparse-textr  zschema embeddingrá   rä   r/  râ   rì   zsparse-numeric)r   r†   r   r+   rÀ   r÷   ro   rJ  rK  r«   r   r(   r	   r2  r    rÁ   r   r!   r`   )rp   Úvector_schemaÚvector_collectionr<   Úembeddedr4  Úsparse_schemaÚsparse_collectionÚsparse_queryÚsparse_resultÚsparse_metar6  Úsparse_searchÚnumeric_metaÚnumeric_metadatas                  r2   Ú,test_schema_embedding_configuration_enforcedrø  3  s�  € ô
 “H×)Ñ)Ü Ô4KÐPQÔ4RÔSð *ó €Mô 7ØØÜ2°qÔ9ôÑÐ�qð ×ÑØˆKØ'Ð(ð ô ð
 !×$Ñ$¨)¨¸|¸nÐ$ÓM€HØ�LÑ!Ð-Ð-Ð-Ü�;‰;�x Ñ-¨aÑ0Ò2KÔLÐLÐLä4Ó6€IÜ“H×)Ñ)ØÜ&Ø&Ø(ô
ð *ó €Mô 7ØØôÑÐ�qð
 ×ÑØˆOØ�'Ø#Ð%7Ð8Ð9ð ô ñ
 Ð0Ð1Ó2°1Ñ5€LØ%×)Ñ)¨}¨oÈÀ}Ð)ÓU€MØ˜Ñ%Ð1Ð1Ð1Ø Ñ,¨QÑ/€KØÐ"Ð"Ð"Ø˜KÑ'Ð'Ð'Üœ,¨°MÑ(BÓC€NØ˜\Ò)Ð)Ð)à%×,Ñ,Ü‹�‰”c˜m´4¼¸^Ó3LÔMÓNó€Mô ˆ}˜UÑ#Ó$¨Ò)Ð)Ð)Ø˜M¨%Ñ0°Ñ3Ñ3Ð3Ð3à×ÑØÐØ�'Ø# QÐ'Ð(ð ô ð %×(Ñ(Ð.>Ð-?È+ÈÐ(ÓW€LØ˜Ñ$Ð0Ð0Ð0Ø# KÑ0°Ñ3ÐØÐ'Ð'Ð'ØÐ 0Ñ0Ð0Ñ0r4   c                 óX  — t        «       j                  t        «       ¬«      j                  dt        «       ¬«      }t	        | |¬«      \  }}t        d«      D �cg c]  }d|› �‘Œ	 }}t        d«      D �cg c]  }d|› �‘Œ	 }}t        d«      D �cg c]
  }dd	|› �d
œ‘Œ }}t        ||j                  «      }|j                  |||¬«       t        st        ||j                  |«       |j                  |j                  «      j                  }	|	€J ‚d|	j                  v sJ ‚|	j                  d   j                  }
|
€J ‚|
j                  }|€J ‚|j                   du sJ ‚d|	j                  v sJ ‚|	j                  d   j                  }|€J ‚|j                  }|€J ‚|j                   du sJ ‚|j#                  ddi¬«      }t%        |d   «      t%        |«      k(  sJ ‚t'        j(                  t*        «      5  |j#                  ddi¬«       ddd«       yc c}w c c}w c c}w # 1 sw Y   yxY w)zLExplicit overrides take precedence over disabled defaults and discoverables.rH   Úexplicit_keyr	  r  r±  zprecedence-r®  ÚexplicitÚ	discover_)rú  Údiscover_keyrá   NTrý  Frå   râ   Ú
discover_5)r   ry  r
   r†   rÀ   r8   r   rA   r÷   r   r   rŽ   r€   rŠ   rî   rï   r�   ro   rø   r"  r#  rz  )rp   r€   r‘   r�   r:   râ   rã   rä   r´  Úschema_stateÚexplicit_key_stringÚexplicit_inverted_indexÚdiscover_key_stringÚdiscover_inverted_indexÚexplicit_results                  r2   Ú?test_schema_precedence_for_overrides_discoverables_and_defaultsr  x  sM  € ô
 	‹ß	‰Ô6Ó8ˆÓ	9ß	‰˜.Ô1JÓ1LˆÓ	Mð ô 5ØØôÑ€J�ô
 ',¨C£jÖ
1 ˆ[˜˜ÒÐ
1€CÐ
1Ü%*¨3£ZÖ0 �4˜�s’Ð0€IÐ0ô �s“ö*àð $°yÀÀ°_ÓEð*€Ið *ô
 -¨V°Z·_±_ÓE€OØ‡N�N�s i¸9€NÔEå!Ü! &¨*¯/©/¸?ÔKà×(Ñ(¨¯©Ó9×@Ñ@€LØÐ#Ð#Ð#Ø˜\×.Ñ.Ñ.Ð.Ð.Ø&×+Ñ+¨NÑ;×BÑBÐØÐ*Ð*Ð*Ø1×GÑGÐØ"Ð.Ð.Ð.Ø"×*Ñ*¨dÑ2Ð2Ð2à˜\×.Ñ.Ñ.Ð.Ð.Ø&×+Ñ+¨NÑ;×BÑBÐØÐ*Ð*Ð*Ø1×GÑGÐØ"Ð.Ð.Ð.Ø"×*Ñ*¨eÑ3Ð3Ð3à —n‘n¨N¸JÐ+G�nÓH€OÜˆ˜uÑ%Ó&¬#¨c«(Ò2Ð2Ð2ä	�‰”yÓ	!ñ =Ø�‰˜n¨lÐ;ˆÔ<÷=ð =ùòA 2ùÚ0ùò*÷<=ð =ús   ÁHÁ4HÂHÇ3H È H)c                 óð  — t        d¬«      }t        «       j                  dt        d|¬«      ¬«      }t	        | |¬«      \  }}|j                  g d¢g d	¢¬
«       |j                  g d¢dg¬«      }|d   €J ‚ |g d	¢«      }t        g d¢«      D ]f  \  }}|d   |   }	|	€J ‚d|	v sJ ‚t        t        |	d   «      }
|
j                  ||   j                  k(  sJ ‚|
j                  ||   j                  k(  rŒfJ ‚ y)zQTest sparse embedding auto-generation using #document as source with no metadata.Údoc_no_metar&  Úauto_sparserÑ   r(  r	  r  ©Údoc1Údoc2Údoc3)rV  útest documentÚshortrê  rä   rê   N)r«   r   r†   r   rÀ   r÷   ro   r´   r(   r	   r±   r²   )rp   r4  r€   r‘   r<   r¿  Úexpected_batchr:   Údoc_idr5  Úactuals              r2   Ú;test_sparse_auto_embedding_with_document_source_no_metadatar  «  s&  € ô
 5¸=ÔI€Iä‹X×"Ñ"ØÜ&Ø"Ø(ô
ð #ó €Fô 0Ð0@ÈÔP�M€J�ð ‡N�NÚ$Ú;ð ô ð �^‰^Ò 8À;À-ˆ^ÓP€FØ�+ÑÐ*Ð*Ð*ñ ÒHÓI€NäÒ7Ó8ò 9‰	ˆˆ6Ø˜+Ñ& qÑ)ˆØÐ#Ð#Ð#Ø Ñ(Ð(Ð(ô ”l H¨]Ñ$;Ó<ˆØ�~‰~ °Ñ!2×!:Ñ!:Ò:Ð:Ð:Ø�}‰} ¨qÑ 1× 8Ñ 8Ó8Ð8Ð8ñ9r4   c                 ó4  — t        d¬«      }t        «       j                  dt        d|¬«      ¬«      }t	        | |¬«      \  }}|j                  dd	gd
dgdddœdddœg¬«       |j                  dd	gdg¬«      }|d   €J ‚|d   d   d   dk(  sJ ‚|d   d   d   dk(  sJ ‚|d   d   d   dk(  sJ ‚|d   d   d   dk(  sJ ‚d|d   d   v sJ ‚d|d   d   v sJ ‚ |d
dg«      }t        t        |d   d   d   «      }|j                  |d   j                  k(  sJ ‚y)zKTest sparse embedding with #document source when metadata is also provided.Údoc_with_metar&  Ú
doc_sparserÑ   r(  r	  r  Úm1Úm2rÕ   rÖ   Útesté*   )rÚ   rx  Úprodéc   rá   rä   rê   Nr   rÚ   rx  rì   ©
r«   r   r†   r   rÀ   r÷   ro   r(   r	   r±   )rp   r4  r€   r‘   r<   r¿  r  Ú	actual_m1s           r2   Ú<test_sparse_auto_embedding_with_document_source_and_metadatar  Ô  sž  € ô
 5¸?ÔK€Iä‹X×"Ñ"ØÜ&Ø"Ø(ô
ð #ó €Fô 0Ð0@ÈÔP�M€J�ð ‡N�NØ�4ˆLØ˜FÐ#à¨"Ñ-Ø¨"Ñ-ð
ð ô ð �^‰^  t °{°mˆ^ÓD€FØ�+ÑÐ*Ð*Ð*ð �+Ñ˜qÑ! *Ñ-°Ò7Ð7Ð7Ø�+Ñ˜qÑ! 'Ñ*¨bÒ0Ð0Ð0Ø�+Ñ˜qÑ! *Ñ-°Ò7Ð7Ð7Ø�+Ñ˜qÑ! 'Ñ*¨bÒ0Ð0Ð0ð ˜6 +Ñ.¨qÑ1Ñ1Ð1Ð1Ø˜6 +Ñ.¨qÑ1Ñ1Ð1Ð1ñ  ¨Ð0Ó1€NÜ”\ 6¨+Ñ#6°qÑ#9¸,Ñ#GÓH€IØ×Ñ ¨qÑ 1× 9Ñ 9Ò9Ð9Ñ9r4   c                 ó  — t        d¬«      }t        «       j                  dt        d|¬«      ¬«      }t	        | |¬«      \  }}|j                  g d¢g d	¢dd
iddiddig¬«       |j                  g d¢dg¬«      }|d   €J ‚ |g d¢«      }t        d«      D ]i  }|d   |   }|€J ‚d|v sJ ‚d|v sJ ‚t        t        |d   «      }	|	j                  ||   j                  k(  sJ ‚|	j                  ||   j                  k(  rŒiJ ‚ y)z7Test sparse embedding using a metadata field as source.Úmeta_sourcer&  Úcontent_sparseÚcontentr(  r	  r  ©Ús1Ús2Ús3r	  úsparse content oneúsparse content twoúsparse content threerá   rä   rê   N)r'  r(  r)  rà   )r«   r   r†   r   rÀ   r÷   ro   r8   r(   r	   r±   r²   ©
rp   r4  r€   r‘   r<   r¿  r  r:   r5  r  s
             r2   Ú3test_sparse_auto_embedding_with_metadata_source_keyr+    sU  € ô
 5¸=ÔI€Iä‹X×"Ñ"ØÜ&Ø Ø(ô
ð #ó €Fô 0Ð0@ÈÔP�M€J�ð ‡N�NÚÚ*àÐ,Ð-ØÐ,Ð-ØÐ.Ð/ð
ð ô ð �^‰^Ò 2¸[¸Mˆ^ÓJ€FØ�+ÑÐ*Ð*Ð*ñ ÚLó€Nô �1‹Xò 9ˆØ˜+Ñ& qÑ)ˆØÐ#Ð#Ð#Ø 8Ñ+Ð+Ð+ð ˜HÑ$Ð$Ð$ô ”l HÐ-=Ñ$>Ó?ˆØ�~‰~ °Ñ!2×!:Ñ!:Ò:Ð:Ð:Ø�}‰} ¨qÑ 1× 8Ñ 8Ó8Ð8Ð8ñ9r4   c                 óÔ  — t        d¬«      }t        «       j                  dt        d|¬«      ¬«      }t	        | |¬«      \  }}|j                  g d¢g d	¢d
d
ddid
g¬«       |j                  g d¢dg¬«      }|d   €J ‚ |g d	¢«      }t        |d   «      D ]@  \  }}|€J ‚d|v sJ ‚t        t        |d   «      }	|	j                  ||   j                  k(  rŒ@J ‚ |d   d   d   dk(  sJ ‚y
)z@Test sparse embedding with mixed metadata (None, empty, filled).Ú
mixed_metar&  Úmixed_sparserÑ   r(  r	  r  )Ún1Ún2Ún3Ún4)zdoc onezdoc twoz	doc threezdoc fourNÚexistingÚdatará   rä   rê   re  )r«   r   r†   r   rÀ   r÷   ro   r´   r(   r	   r±   r*  s
             r2   Ú>test_sparse_auto_embedding_with_mixed_metadata_none_and_filledr5  4  s5  € ô
 5¸<ÔH€Iä‹X×"Ñ"ØÜ&Ø"Ø(ô
ð #ó €Fô 0Ð0@ÈÔP�M€J�ð ‡N�NÚ$ÚAàØØ˜Ð Øð	
ð ô 	ð �^‰^Ò 8À;À-ˆ^ÓP€FØ�+ÑÐ*Ð*Ð*ñ ÒNÓO€Nô ! ¨Ñ!4Ó5ò ;‰ˆˆ8ØÐ#Ð#Ð#Ø Ñ)Ð)Ð)ô ”l H¨^Ñ$<Ó=ˆØ�~‰~ °Ñ!2×!:Ñ!:Ó:Ð:Ð:ð;ð �+Ñ˜qÑ! *Ñ-°Ò7Ð7Ñ7r4   c                 ó6  — t        d¬«      }t        «       j                  dt        d|¬«      ¬«      }t	        | |¬«      \  }}t        dgd	g¬
«      }|j                  ddgddgdd|ig¬«       |j                  ddgdg¬«      }|d   €J ‚|d   d   }|€J ‚d|v sJ ‚ |dg«      d   }t        t
        |d   «      }	|	j                  |j                  k(  sJ ‚|d   d   }
|
€J ‚t        t
        |
d   «      }|j                  dgk(  sJ ‚|j                  d	gk(  sJ ‚y)zBTest that sparse auto-embedding doesn't overwrite existing values.Úpreserver&  Úpreserve_sparserÑ   r(  r	  r  iç  gw¾Ÿ/Ý^@r°   Ú	preserve1Ú	preserve2zauto documentzmanual documentNrá   rä   rê   r   rì   )r«   r   r†   r   rÀ   r	   r÷   ro   r(   r±   r²   )rp   r4  r€   r‘   r<   Úexisting_sparser¿  Ú	auto_metaÚexpected_autoÚactual_autoÚmanual_metaÚactual_manuals               r2   Ú0test_sparse_auto_embedding_skips_existing_valuesrA  d  s}  € ô
 5¸:ÔF€Iä‹X×"Ñ"ØÜ&Ø"Ø(ô
ð #ó €Fô 0Ð0@ÈÔP�M€J�ô #¨C¨5¸'¸ÔC€Oà‡N�NØ˜+Ð&Ø"Ð$5Ð6àØ Ð0ð
ð ô ð �^‰^ ¨kÐ :À[ÀMˆ^ÓR€FØ�+ÑÐ*Ð*Ð*ð �{Ñ# AÑ&€IØÐ Ð Ð Ø 	Ñ)Ð)Ð)Ù˜Ð/Ó0°Ñ3€MÜ”| YÐ/@Ñ%AÓB€KØ×Ñ -×"7Ñ"7Ò7Ð7Ð7ð ˜Ñ% aÑ(€KØÐ"Ð"Ð"Üœ {Ð3DÑ'EÓF€MØ× Ñ  S EÒ)Ð)Ð)Ø×Ñ G 9Ò,Ð,Ñ,r4   c                 óâ  — t        d¬«      }t        «       j                  dt        d|¬«      ¬«      }t	        | |¬«      \  }}|j                  g d¢g d	¢dd
iddiddidg¬«       |j                  g d¢dg¬«      }|d   €J ‚d|d   d   v sJ ‚ |d
g«      d   }t        t        |d   d   d   «      }|j                  |j                  k(  sJ ‚d|d   d   vsJ ‚d|d   d   vsJ ‚|d   d   �J ‚y)zJTest sparse embedding when source metadata field is missing or wrong type.Úmissing_fieldr&  Úfield_sparseÚ
text_fieldr(  r	  r  )Úf1Úf2Úf3Úf4)r
  r  r  Údoc4z
valid texté{   Úother_fieldrx  Nrá   rä   rê   r   rì   re  rà   r  )rp   r4  r€   r‘   r<   r¿  Úexpectedr  s           r2   Ú4test_sparse_auto_embedding_with_missing_source_fieldrN  ”  sN  € ô
 5¸?ÔK€Iä‹X×"Ñ"ØÜ&Ø#Ø(ô
ð #ó €Fô 0Ð0@ÈÔP�M€J�à‡N�NÚ$Ú2à˜<Ð(Ø˜3ÐØ˜GÐ$Øð	
ð ô 	ð �^‰^Ò 8À;À-ˆ^ÓP€FØ�+ÑÐ*Ð*Ð*ð ˜V KÑ0°Ñ3Ñ3Ð3Ð3Ù˜,˜Ó(¨Ñ+€HÜ”,  {Ñ 3°AÑ 6°~Ñ FÓG€FØ�>‰>˜X×-Ñ-Ò-Ð-Ð-ð  ¨Ñ!4°QÑ!7Ñ7Ð7Ð7Ø ¨Ñ!4°QÑ!7Ñ7Ð7Ð7Ø�+Ñ˜qÑ!Ð)Ð)Ñ)r4   c                 óN  — t        d¬«      }t        «       }|j                  dt        «       ¬«       |j                  dt	        d|¬«      ¬«       t        | |¬«      \  }}|j                  d	d
gddgdddœdddœg¬«       |j                  d	d
gdg¬«      }|d   €J ‚ |ddg«      }t        |d   «      D ]F  \  }}|€J ‚d|v sJ ‚t        t        |d   «      }	|	j                  ||   j                  k(  sJ ‚d|v rŒFJ ‚ |j                  ddi¬«      }
t        |
d   «      d	hk(  sJ ‚y)zCTest sparse auto-embedding works alongside string inverted indexes.Úwith_string_indexr&  rÚ   r	  Úsparse_fieldÚcustom_textr(  r  Úmulti1Úmulti2zmain documentzanother documentzfield contentÚcat1)rR  rÚ   zdifferent contentÚcat2rá   rä   rê   Nrå   râ   )r«   r   r†   r
   r   rÀ   r÷   ro   r´   r(   r	   r±   rø   )rp   r4  r€   r‘   r<   r¿  r  r:   r5  Úactual_fieldr   s              r2   Ú5test_sparse_auto_embedding_with_string_inverted_indexrX  ¿  s‹  € ô
 5Ð;NÔO€Iä‹X€FØ
×ÑØÜ(Ó*ð ô ð ×ÑØÜ&Ø$Ø(ô
ð ô ô 0Ð0@ÈÔP�M€J�à‡N�NØ�xÐ Ø"Ð$6Ð7à+¸Ñ@Ø/¸VÑDð
ð ô ð �^‰^ ¨8Ð 4¸{¸mˆ^ÓL€FØ�+ÑÐ*Ð*Ð*ñ  Ð1DÐEÓF€Nä  ¨Ñ!4Ó5ò &‰ˆˆ8ØÐ#Ð#Ð#ð  Ñ)Ð)Ð)ô œL¨(°>Ñ*BÓCˆØ×#Ñ# ~°aÑ'8×'@Ñ'@Ò@Ð@Ð@ð ˜XÒ%Ð%Ð%ð&ð �~‰~ Z°Ð$8ˆ~Ó9€HÜˆx˜‰Ó H :Ò-Ð-Ñ-r4   c                 óÐ  — t        d¬«      }t        d¬«      }t        «       }|j                  t	        |¬«      ¬«       |j                  dt        d|¬	«      ¬
«       t        | ||¬«      \  }}|j                  ddgddg¬«       |j                  ddgddg¬«      }|d   €J ‚t        |d   «      dk(  sJ ‚t        |d   d   «      dk(  sJ ‚|d   €J ‚|d   D ]  }|€J ‚d|v rŒJ ‚ y)z9Test that dense and sparse auto-embeddings work together.rM   rG   Ú
with_denser&  rC  rH   Ú
sparse_keyrÑ   r(  r	  ré  Úboth1Úboth2zcombined documentzanother docrê  ré   rä   rê   Nre  r   )
r+   r«   r   r†   r   r   rÀ   r÷   ro   r`   )rp   Údense_efr4  r€   r‘   r<   r¿  r5  s           r2   Ú.test_dense_and_sparse_auto_embeddings_togetherr_  ö  sD  € ô
 '¨1Ô-€HÜ4¸<ÔH€Iä‹X€FØ
×ÑÔ0ÀHÔMÐÔNØ
×ÑØÜ&Ø"Ø(ô
ð ô ô 0ØØØ#ô�M€J�ð ‡N�NØ�gÐØ&¨Ð6ð ô ð
 �^‰^Ø�gÐØ˜{Ð+ð ó €Fð �,ÑÐ+Ð+Ð+Üˆv�lÑ#Ó$¨Ò)Ð)Ð)Üˆv�lÑ# AÑ&Ó'¨1Ò,Ð,Ð,ð �+ÑÐ*Ð*Ð*Ø˜;Ñ'ò (ˆØÐ#Ð#Ð#Ø˜xÒ'Ð'Ð'ñ(r4   c                 óÐ  — t        d¬«      }t        «       j                  dt        d|¬«      ¬«      }t	        | |¬«      \  }}|j                  dgd	g¬
«       |j                  dgdg¬
«       |j                  dgddg¬«      }|d   €J ‚|d   €J ‚|d   d   dk(  sJ ‚d|d   d   v sJ ‚ |dg«      d   }t        t        |d   d   d   «      }|j                  |j                  k(  sJ ‚|j                  dgdg¬
«       |j                  dgdg¬«      }|d   €J ‚d|d   d   v sJ ‚ |dg«      d   }	t        t        |d   d   d   «      }
|
j                  |	j                  k(  sJ ‚y)z=Test sparse auto-embedding with update and upsert operations.Úupdate_upsertr&  Úupdate_sparserÑ   r(  r	  r  Úup1zoriginal docrê  zupdated docrä   rã   rê   Nr   Úup2zupserted doc)r«   r   r†   r   rÀ   r÷   rù   ro   r(   r	   r±   rú   )rp   r4  r€   r‘   r<   Úresult_updaterM  r  rÀ  Úexpected_upsertÚactual_upserts              r2   Ú1test_sparse_auto_embedding_with_update_and_upsertrh  $  sã  € ô
 5¸?ÔK€Iä‹X×"Ñ"ØÜ&Ø"Ø(ô
ð #ó €Fô 0Ð0@ÈÔP�M€J�ð ‡N�NØˆGØ!Ð"ð ô ð ×ÑØˆGØ �/ð ô ð
 —N‘N¨ w¸ÀkÐ8R�NÓS€MØ˜Ñ%Ð1Ð1Ð1Ø˜Ñ%Ð1Ð1Ð1Ø˜Ñ% aÑ(¨MÒ9Ð9Ð9Ø˜m¨KÑ8¸Ñ;Ñ;Ð;Ð;ñ ˜-˜Ó)¨!Ñ,€HÜ”, ¨kÑ :¸1Ñ =¸oÑ NÓO€FØ�>‰>˜X×-Ñ-Ò-Ð-Ð-ð ×ÑØˆGØ!Ð"ð ô ð
 —N‘N¨ w¸¸�NÓF€MØ˜Ñ%Ð1Ð1Ð1Ø˜m¨KÑ8¸Ñ;Ñ;Ð;Ð;ñ   Ð 0Ó1°!Ñ4€OÜœ }°[Ñ'AÀ!Ñ'DÀ_Ñ'UÓV€MØ× Ñ  O×$;Ñ$;Ò;Ð;Ñ;r4   c                 óò  — t        d¬«      }t        «       j                  dt        d|¬«      ¬«      }t	        | |¬«      \  }}|j
                  }|j                  dgd	g¬
«       | j                  «       }|j                  |¬«      }|j                  €J ‚d|j                  j                  v sJ ‚|j                  dgdg¬
«       |j                  ddgdg¬«      }|d   €J ‚d|d   d   v sJ ‚d|d   d   v sJ ‚y)zFTest that sparse auto-embedding config persists across client reloads.Úpersist_testr&  Úpersist_sparserÑ   r(  r	  r  Úpersist1zpersistent documentrê  r‚   NÚpersist2znew document after reloadrä   rê   r   rì   )r«   r   r†   r   rÀ   rA   r÷   rƒ   rŽ   r€   rŠ   ro   )	rp   r4  r€   r‘   r�   r�   r@  r•   r¿  s	            r2   Ú;test_sparse_auto_embedding_persistence_across_client_reloadrn  \  sN  € ô
 5¸>ÔJ€Iä‹X×"Ñ"ØÜ&Ø"Ø(ô
ð #ó €Fô 5Ð5EÈfÔUÑ€J�Ø —o‘o€Oà‡N�NØˆLØ(Ð)ð ô ð '×@Ñ@ÓB€OØ)×8Ñ8Øð 9ó Ðð
 ×%Ñ%Ð1Ð1Ð1ØÐ2×9Ñ9×>Ñ>Ñ>Ð>Ð>ð ×ÑØˆLØ.Ð/ð ô ð !×$Ñ$Ø˜Ð$Ø�ð %ó €Fð �+ÑÐ*Ð*Ð*Ø˜v kÑ2°1Ñ5Ñ5Ð5Ð5Ø˜v kÑ2°1Ñ5Ñ5Ð5Ñ5r4   c                 ó   — t        d¬«      }t        «       j                  dt        d|¬«      ¬«      }t	        | |¬«      \  }}d}t        |«      D �cg c]  }d	|› �‘Œ	 }}t        |«      D �cg c]  }d
|› �‘Œ	 }}|j                  ||¬«       |j                  |dd dg¬«      }	|	d   €J ‚ ||«      }
t        |	d   «      D ]@  \  }}|€J ‚d|v sJ ‚t        t        |d   «      }|j                  |
|   j                  k(  rŒ@J ‚ yc c}w c c}w )z9Test sparse auto-embedding with large batch of documents.Ú
batch_testr&  Úbatch_sparserÑ   r(  r	  r  r�   zbatch-zdocument number rê  Nr  rä   rê   )r«   r   r†   r   rÀ   r8   r÷   ro   r´   r(   r	   r±   )rp   r4  r€   r‘   r<   rµ  r:   râ   rã   r¿  r  r5  r  s                r2   Ú0test_sparse_auto_embedding_with_batch_operationsrr  �  sD  € ô
 5¸<ÔH€Iä‹X×"Ñ"ØÜ&Ø"Ø(ô
ð #ó €Fô 0Ð0@ÈÔP�M€J�ð €JÜ!& zÓ!2Ö
3˜AˆV�A�3Š<Ð
3€CÐ
3Ü16°zÓ1BÖC¨AÐ# A 3Ò'ÐC€IÐCà‡N�N�s i€NÔ0ð �^‰^  C R °;°-ˆ^Ó@€FØ�+ÑÐ*Ð*Ð*ñ ˜yÓ)€Nä  ¨Ñ!4Ó5ò ;‰ˆˆ8ØÐ#Ð#Ð#Ø Ñ)Ð)Ð)ä”l H¨^Ñ$<Ó=ˆØ�~‰~ °Ñ!2×!:Ñ!:Ó:Ð:Ð:ñ;ùò 4ùÚCs   ÁDÁ-Dc                 ó  — t        d¬«      }t        «       j                  dt        d|¬«      ¬«      }t	        | |¬«      \  }}|j                  dgd	g¬
«       |j                  dgdg¬«      }|d   €J ‚|d   d   }|€J ‚d|v sJ ‚y)zCTest sparse auto-embedding handles empty/None documents gracefully.Ú
empty_testr&  Úempty_sparserÑ   r(  r	  r  Úempty1Ú rê  rä   rê   Nr   )r«   r   r†   r   rÀ   r÷   ro   )rp   r4  r€   r‘   r<   r¿  r5  s          r2   Ú/test_sparse_auto_embedding_with_empty_documentsrx  ´  sº   € ô
 5¸<ÔH€Iä‹X×"Ñ"ØÜ&Ø"Ø(ô
ð #ó €Fô 0Ð0@ÈÔP�M€J�ð ‡N�NØˆJØ�$ð ô ð
 �^‰^  
°[°Mˆ^ÓB€FØ�+ÑÐ*Ð*Ð*ð �kÑ" 1Ñ%€HØÐÐÐØ˜XÑ%Ð%Ñ%r4   c                 ó2  — t        | «      \  }}|j                  }|€J ‚d|j                  v sJ ‚|j                  d   j                  }|€J ‚|j                  }|€J ‚|j
                  du sJ ‚|j                  €J ‚|j                  j                  €J ‚|j                  j                  dk(  sJ ‚|j                  j                  }|€J ‚|j                  «       dk(  sJ ‚|j                  }|€J ‚|j                  d«      }|€J ‚|j                  «       dk(  sJ ‚|j                  «       }	|	d   d   d   d	   }
|
d
   d   }|d   dk(  sJ ‚|d   dk(  sJ ‚|	d   d   d	   }|d
   d   }|d   dk(  sJ ‚|d   dk(  sJ ‚|	d   d   d   }|€J ‚|d
   d   }|d   dk(  sJ ‚y)zbVerify that when no schema is provided, the collection uses DefaultEmbeddingFunction (not legacy).Nr�   TÚl2rn   rœ   rŠ   r‹   rŒ   rE   ÚtypeÚknownrA   rí   Úsparse_vectorÚsparse_vector_indexÚunknown)rÀ   r€   rŠ   r‹   rŒ   r�   rE   r}   rœ   rA   r¡   ro   r‰   )rp   r‘   r�   r€   r“   rŒ   r¤   rE   r¨   Ú	json_dataÚembedding_vectorÚ	ef_configÚdefaults_vectorÚdefaults_ef_configÚdefaults_sparseÚsparse_ef_configs                   r2   Ú7test_default_embedding_function_when_no_schema_providedr‡  Ô  sA  € ô
 5Ð5EÓFÑ€J�ð ×Ñ€FØÐÐÐð ˜6Ÿ;™;Ñ&Ð&Ð&ØŸ™ \Ñ2×=Ñ=ÐØÐ)Ð)Ð)Ø%×2Ñ2€LØÐ#Ð#Ð#Ø×Ñ 4Ñ'Ð'Ð'Ø×ÑÐ*Ð*Ð*Ø×Ñ×$Ñ$Ð0Ð0Ð0Ø×Ñ×$Ñ$¨Ò,Ð,Ð,ð 
×	Ñ	×	/Ñ	/€BØˆ>Ðˆ>ð �7‰7‹9˜	Ò!Ð!Ð!à×%Ñ%€FØÐÐÐØ—
‘
Ð/Ó0€IØÐ Ð Ð Ø�>‰>Ó˜yÒ(Ð(Ð(ð ×(Ñ(Ó*€IØ  Ñ(¨Ñ6°|ÑDÀ^ÑTÐØ  Ñ*Ð+?Ñ@€Ið �VÑ Ò'Ð'Ð'Ø�VÑ 	Ò)Ð)Ð)ð   
Ñ+¨LÑ9¸.ÑI€OØ(¨Ñ2Ð3GÑHÐØ˜fÑ%¨Ò0Ð0Ð0Ø˜fÑ%¨Ò2Ð2Ð2ð   
Ñ+¨OÑ<Ð=RÑS€OØÐ&Ð&Ð&Ø& xÑ0Ð1EÑFÐØ˜FÑ# yÒ0Ð0Ñ0r4   c                 ó  — | j                  «       }|j                  «        dt        «       j                  › �}t	        d¬«      }|j                  ||¬«       |j                  ||¬«      }|j                  }|€J ‚d|j                  v sJ ‚|j                  d   j                  }|€J ‚|j                  }|€J ‚|j                  du sJ ‚|j                  €J ‚|j                  j                  €J ‚|j                  j                  dk(  sJ ‚|j                  j                  }|€J ‚|j                  «       d	k(  sJ ‚|j!                  «       d
dik(  sJ ‚|j#                  «       }	|	d   d   d   d   }
|
d   d   }|d   dk(  sJ ‚|d   d	k(  sJ ‚|d   d
dik(  sJ ‚|	d   d   d   }|d   d   }|d   dk(  sJ ‚|d   d	k(  sJ ‚|d   d
dik(  sJ ‚|j%                  dgdg¬«       |j'                  dgdg¬«      }|d   €J ‚t)        |d   d   «      dk(  sJ ‚y)zXVerify that custom embedding function is reflected in schema when no schema is provided.Úcustom_ef_no_schema_é   rG   r¿   Nr�   TrK   r?   r,   rŠ   r‹   rŒ   rE   rœ   r{  r|  rA   rí   Útest1r  rê  ré   rê   r   )rƒ   r„   r)   r…   r+   r  rŽ   r€   rŠ   r‹   rŒ   r�   rE   r}   rœ   rA   rD   r‰   r÷   ro   r`   ©rp   r�   r�   Ú	custom_efr‘   r€   r“   rŒ   r¤   r€  r�  r‚  rƒ  r„  r¿  s                  r2   Ú-test_custom_embedding_function_without_schemarŽ    sº  € ð ×7Ñ7Ó9€FØ
‡L�L„Nà,¬U«W¯[©[¨MÐ:€Oô (¨AÔ.€Ið ×ÑØØ$ð ô ð ×&Ñ&ØØ$ð 'ó €Jð ×Ñ€FØÐÐÐð ˜6Ÿ;™;Ñ&Ð&Ð&ØŸ™ \Ñ2×=Ñ=ÐØÐ)Ð)Ð)Ø%×2Ñ2€LØÐ#Ð#Ð#Ø×Ñ 4Ñ'Ð'Ð'Ø×ÑÐ*Ð*Ð*Ø×Ñ×$Ñ$Ð0Ð0Ð0Ø×Ñ×$Ñ$¨Ò0Ð0Ð0ð 
×	Ñ	×	/Ñ	/€BØˆ>Ðˆ>ð �7‰7‹9˜Ò#Ð#Ð#Ø�=‰=‹?˜u a˜jÒ(Ð(Ð(ð ×(Ñ(Ó*€IØ  Ñ(¨Ñ6°|ÑDÀ^ÑTÐØ  Ñ*Ð+?Ñ@€Ið �VÑ Ò'Ð'Ð'Ø�VÑ Ò+Ð+Ð+Ø�XÑ 5¨! *Ò,Ð,Ð,ð   
Ñ+¨LÑ9¸.ÑI€OØ(¨Ñ2Ð3GÑHÐØ˜fÑ%¨Ò0Ð0Ð0Ø˜fÑ%¨Ò4Ð4Ð4Ø˜hÑ'¨E°1¨:Ò5Ð5Ð5ð ‡N�NØˆIØ"Ð#ð ô ð
 �^‰^  	°L°>ˆ^ÓB€FØ�,ÑÐ+Ð+Ð+äˆv�lÑ# AÑ&Ó'¨1Ò,Ð,Ñ,r4   c                 ó0  — | j                  «       }|j                  «        dt        «       j                  › �}t	        d¬«      }|j                  ||t        «       ¬«       |j                  ||¬«      }|j                  }|€J ‚d|j                  v sJ ‚|j                  d   j                  }|€J ‚|j                  }|€J ‚|j                  du sJ ‚|j                  €J ‚|j                  j                  €J ‚|j                  j                  d	k(  sJ ‚|j                  j                  }|€J ‚|j!                  «       d
k(  sJ ‚|j#                  «       ddik(  sJ ‚|j%                  «       }	|	d   d   d   d   }
|
d   d   }|d   dk(  sJ ‚|d   d
k(  sJ ‚|d   ddik(  sJ ‚|	d   d   d   }|d   d   }|d   dk(  sJ ‚|d   d
k(  sJ ‚|d   ddik(  sJ ‚|j'                  dgdg¬«       |j)                  dgdg¬«      }|d   €J ‚t+        |d   d   «      dk(  sJ ‚y)z_Verify that custom embedding function is reflected in schema when default Schema() is provided.Úcustom_ef_default_schema_rŠ  rG   ©rA   rœ   r€   r¿   Nr�   TrK   r?   r,   rŠ   r‹   rŒ   rE   rœ   r{  r|  rA   rí   r‹  r  rê  ré   rê   r   )rƒ   r„   r)   r…   r+   r  r   rŽ   r€   rŠ   r‹   rŒ   r�   rE   r}   rœ   rA   rD   r‰   r÷   ro   r`   rŒ  s                  r2   Ú2test_custom_embedding_function_with_default_schemar’  Y  s¿  € ð ×7Ñ7Ó9€FØ
‡L�L„Nà1´%³'·+±+°Ð?€Oô (¨AÔ.€Ið ×ÑØØ$Ü‹xð ô ð ×&Ñ&ØØ$ð 'ó €Jð ×Ñ€FØÐÐÐð ˜6Ÿ;™;Ñ&Ð&Ð&ØŸ™ \Ñ2×=Ñ=ÐØÐ)Ð)Ð)Ø%×2Ñ2€LØÐ#Ð#Ð#Ø×Ñ 4Ñ'Ð'Ð'Ø×ÑÐ*Ð*Ð*Ø×Ñ×$Ñ$Ð0Ð0Ð0Ø×Ñ×$Ñ$¨Ò0Ð0Ð0ð 
×	Ñ	×	/Ñ	/€BØˆ>Ðˆ>ð �7‰7‹9˜Ò#Ð#Ð#Ø�=‰=‹?˜u a˜jÒ(Ð(Ð(ð ×(Ñ(Ó*€IØ  Ñ(¨Ñ6°|ÑDÀ^ÑTÐØ  Ñ*Ð+?Ñ@€Ið �VÑ Ò'Ð'Ð'Ø�VÑ Ò+Ð+Ð+Ø�XÑ 5¨! *Ò,Ð,Ð,ð   
Ñ+¨LÑ9¸.ÑI€OØ(¨Ñ2Ð3GÑHÐØ˜fÑ%¨Ò0Ð0Ð0Ø˜fÑ%¨Ò4Ð4Ð4Ø˜hÑ'¨E°1¨:Ò5Ð5Ð5ð ‡N�NØˆIØ"Ð#ð ô ð
 �^‰^  	°L°>ˆ^ÓB€FØ�,ÑÐ+Ð+Ð+äˆv�lÑ# AÑ&Ó'¨1Ò,Ð,Ñ,r4   c                 óæ  — | j                  «       }|j                  «        dt        «       j                  › �}t	        d¬«      }t	        d¬«      }t        «       j                  t        |¬«      ¬«      }t        j                  t        «      5 }|j                  |||¬«       ddd«       t        j                  «      }d	|j                  «       v sd
|j                  «       v sJ ‚yy# 1 sw Y   ŒFxY w)zTVerify that setting different custom embedding functions in schema and config fails.Úconflict_ef_rM   rG   r›   rC  rH   r‘  Nr€   Úconflict)rƒ   r„   r)   r…   r+   r   r†   r   r"  r#  rz  r  rS   rx  Úlower)rp   r�   r�   r¨   Ú	schema_efr€   r‹  Ú	error_msgs           r2   Ú?test_conflicting_embedding_functions_in_schema_and_config_failsr™  ¦  sÞ   € ð ×7Ñ7Ó9€FØ
‡L�L„Nà$¤U£W§[¡[ MÐ2€Oô (¨AÔ.€IÜ'¨AÔ.€Iô ‹X×"Ñ"Ü °IÔ>ð #ó €Fô 
�‰”yÓ	!ð 
 XØ× Ñ Ø Ø(Øð 	!ô 	
÷
ô �H—N‘NÓ#€IØ�y—‘Ó(Ñ(¨J¸)¿/¹/Ó:KÑ,KÐKÐKÐ,KÐ(÷
ð 
ús   ÂC'Ã'C0c                 ó  — t        «       }|j                  t        «       d¬«       |j                  t        «       t	        d«      ¬«       t        | |¬«      \  }}|j                  €J ‚d|j                  j                  v sJ ‚d|j                  j                  v sJ ‚|j                  dgdgdd	d
œg¬«       |j                  ddi¬«      }t        |d   «      dhk(  sJ ‚|j                  dd	i¬«      }t        |d   «      dhk(  sJ ‚y)z6Test that create_index accepts both str and Key types.Ú	field_str©rE   r
  Ú	field_keyr  Nz
key-test-1útest docÚvalue1r  )r›  r�  rá   rå   râ   )r   r†   r
   r   r   rÀ   r€   rŠ   r÷   ro   rø   )rp   r€   r‘   r<   Ú
str_resultÚ
int_results         r2   Útest_create_index_with_key_typer¢  Æ  s!  € ô ‹X€FØ
×ÑÔ8Ó:ÀÐÔLØ
×ÑÔ5Ó7¼SÀÓ=MÐÔNä/Ð0@ÈÔP�M€J�ð ×ÑÐ(Ð(Ð(Ø˜*×+Ñ+×0Ñ0Ñ0Ð0Ð0Ø˜*×+Ñ+×0Ñ0Ñ0Ð0Ð0ð ‡N�NØˆNØ�,Ø!)¸Ñ;Ð<ð ô ð —‘ {°HÐ&=�Ó>€JÜˆz˜%Ñ Ó! l ^Ò3Ð3Ð3ð —‘ {°BÐ&7�Ó8€JÜˆz˜%Ñ Ó! l ^Ò3Ð3Ñ3r4   c                 óv  — t        «       }|j                  t        «       d¬«       |j                  t        «       t	        d«      ¬«       t        | |¬«      \  }}|j                  €J ‚d|j                  j                  v sJ ‚d|j                  j                  v sJ ‚|j                  dgdgdd	d
œg¬«       t        j                  t        «      5  |j                  ddi¬«       ddd«       t        j                  t        «      5  |j                  dd	i¬«       ddd«       y# 1 sw Y   Œ@xY w# 1 sw Y   yxY w)z6Test that delete_index accepts both str and Key types.Údisabled_strrœ  Údisabled_keyr  Nzdisable-test-1rž  rx  r�   )r¤  r¥  rá   rå   )r   ry  r
   r   r   rÀ   r€   rŠ   r÷   r"  r#  rz  ro   )rp   r€   r‘   r<   s       r2   Útest_delete_index_with_key_typer¦  ç  s1  € ô ‹X€FØ
×ÑÔ8Ó:ÀÐÔOØ
×ÑÔ5Ó7¼SÀÓ=PÐÔQä/Ð0@ÈÔP�M€J�ð ×ÑÐ(Ð(Ð(Ø˜Z×.Ñ.×3Ñ3Ñ3Ð3Ð3Ø˜Z×.Ñ.×3Ñ3Ñ3Ð3Ð3ð ‡N�NØÐØ�,Ø$+¸SÑAÐBð ô ô 
�‰”yÓ	!ñ 8Ø�‰˜n¨gÐ6ˆÔ7÷8ô 
�‰”yÓ	!ñ 4Ø�‰˜n¨cÐ2ˆÔ3÷4ð 4÷8ð 8ú÷4ð 4ús   ÃD#ÄD/Ä#D,Ä/D8c                 ód  — t        «       }|j                  t        t        j                  t        d¬«      ¬«      ¬«       t        | |t        d¬«      ¬«      \  }}|j                  €J ‚|j                  j                  d   j                  }|€J ‚|j                  €J ‚|j                  j                  j                  €J ‚|j                  j                  j                  dk(  sJ ‚|j                  j                  j                  d	k(  sJ ‚|j                  g d
¢g d¢¬«       |j                  dgdg¬«      }|d   €J ‚t!        |d   d   «      dk(  sJ ‚|j#                  t%        «       j'                  t)        g d¢d¬«      «      «      }t!        |d   «      dkD  sJ ‚t!        |d   d   «      dk  sJ ‚y)z<Test that VectorIndexConfig source_key accepts Key.DOCUMENT.rÙ   rG   r(  rH   ré  Nr�   rK   rÑ   )úvec-1zvec-2zvec-3)zapple fruitzbanana fruitzcar vehiclerê  r¨  ré   rê   r   rD  re  )rÇ   Úlimitrâ   )r   r†   r   r   ÚDOCUMENTr+   rÀ   r€   rŠ   r‹   rŒ   rE   r}   r)  r÷   ro   r`   r2  r    rÁ   r   )rp   r€   r‘   r<   Úembedding_configr¿  r7  s          r2   Ú1test_vector_index_config_with_key_document_sourcer¬    s¾  € ô
 ‹X€FØ
×ÑÜ Ü—|‘|Ü6¸1Ô=ô
ð ô ô 0ØØÜ2°qÔ9ô�M€J�ð ×ÑÐ(Ð(Ð(Ø!×(Ñ(×-Ñ-¨lÑ;×FÑFÐØÐ'Ð'Ð'Ø×(Ñ(Ð4Ð4Ð4Ø×(Ñ(×/Ñ/×5Ñ5ÐAÐAÐAØ×(Ñ(×/Ñ/×5Ñ5¸ÒAÐAÐAØ×(Ñ(×/Ñ/×:Ñ:¸kÒIÐIÐIð ‡N�NÚ'Ú@ð ô ð �^‰^  	°L°>ˆ^ÓB€FØ�,ÑÐ+Ð+Ð+Üˆv�lÑ# AÑ&Ó'¨1Ò,Ð,Ð,ð ×%Ñ%Ü‹�‰”cÒ 9ÀÔCÓDó€Mô ˆ}˜UÑ#Ó$ qÒ(Ð(Ð(Üˆ}˜UÑ# AÑ&Ó'¨1Ò,Ð,Ñ,r4   c                 óÎ  — t        d¬«      }t        «       j                  dt        t        j
                  |¬«      ¬«      }t        | |¬«      \  }}|j                  €J ‚|j                  j                  d   j                  }|€J ‚|j                  €J ‚|j                  j                  j                  dk(  sJ ‚|j                  g d	¢g d
¢¬«       |j                  dgdg¬«      }|d   €J ‚d|d   d   v sJ ‚t        t         |d   d   d   «      }|j#                  t%        «       j'                  t)        dt        t*        |«      d¬«      «      «      }t-        |d   «      dkD  sJ ‚d|d   d   v sJ ‚t        «       j                  dt        t	        d«      |¬«      ¬«      }	t        | |	¬«      \  }
}|
j                  €J ‚|
j                  j                  d   j                  }|€J ‚|j                  €J ‚|j                  j                  j                  dk(  sJ ‚|
j                  ddgddgddiddig¬«       |
j                  ddgdg¬«      }|d   €J ‚d|d   d   v sJ ‚d|d   d   v sJ ‚t        t         |d   d   d   «      }|
j#                  t%        «       j'                  t)        dt        t*        |«      d¬«      «      «      }t-        |d   «      dkD  sJ ‚d|d   d   v sJ ‚y)zLTest that SparseVectorIndexConfig source_key accepts both str and Key types.Ú	key_typesr&  Úsparse1r(  r	  r  NrÑ   r#  )ÚappleÚbananaÚorangerê  r$  rä   rê   r   re  )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~  rE   r)  r÷   ro   r(   r	   r2  r    rÁ   r   r!   r`   )rp   r4  Úschema1Úcollection1r<   Úsparse1_configÚresult1Ú
sparse_vecÚsearch_result1Úschema2Úcollection2Úsparse2_configÚresult2rò  Úsearch_result2s                  r2   Ú.test_sparse_vector_index_config_with_key_typesr¿  6  sX  € ô
 5¸;ÔG€Iô ‹h×#Ñ#ØÜ&Ü—|‘|Ø(ô
ð $ó €Gô 1Ð1AÈ'ÔR�N€K�Ø×ÑÐ)Ð)Ð)Ø ×'Ñ'×,Ñ,¨YÑ7×EÑE€NØÐ%Ð%Ð%Ø×-Ñ-Ð9Ð9Ð9Ø×-Ñ-×4Ñ4×?Ñ?À;ÒNÐNÐNð ‡O�OÚÚ/ð ô ð �o‰o 4 &°;°-ˆoÓ@€GØ�;ÑÐ+Ð+Ð+Ø˜ Ñ,¨QÑ/Ñ/Ð/Ð/Ü”l G¨KÑ$8¸Ñ$;¸IÑ$FÓG€Jð !×'Ñ'Ü‹�‰”c˜i¬t´C¸Ó/DÈAÔNÓOó€Nô ˆ~˜eÑ$Ó%¨Ò)Ð)Ð)Ø�> %Ñ(¨Ñ+Ñ+Ð+Ð+ô ‹h×#Ñ#ØÜ&Ü˜<Ó(Ø(ô
ð $ó €Gô 1Ð1AÈ'ÔR�N€K�Ø×ÑÐ)Ð)Ð)Ø ×'Ñ'×,Ñ,¨YÑ7×EÑE€NØÐ%Ð%Ð%Ø×-Ñ-Ð9Ð9Ð9Ø×-Ñ-×4Ñ4×?Ñ?À<ÒOÐOÐOð ‡O�OØ˜^Ð,Ø˜6Ð"Ø  -Ð0°<ÀÐ2OÐPð ô ð �o‰oØ˜^Ð,°{°mð ó €Gð �;ÑÐ+Ð+Ð+Ø˜ Ñ,¨QÑ/Ñ/Ð/Ð/Ø˜ Ñ,¨QÑ/Ñ/Ð/Ð/ô œ g¨kÑ&:¸1Ñ&=¸iÑ&HÓI€Lð !×'Ñ'Ü‹�‰”c˜i¬t´C¸Ó/FÈaÔPÓQó€Nô ˆ~˜eÑ$Ó%¨Ò)Ð)Ð)Ø˜^¨EÑ2°1Ñ5Ñ5Ð5Ñ5r4   c                  ó`  — t        «       } t        j                  t        d¬«      5  | j	                  t        «       d¬«       ddd«       t        j                  t        d¬«      5  | j	                  t        «       t        j                  ¬«       ddd«       y# 1 sw Y   ŒWxY w# 1 sw Y   yxY w)zITest that create_index rejects keys starting with # (except system keys).úkey cannot begin with '#'r   ú#custom_fieldrœ  Nz/Cannot create index on special key '#embedding')r   r"  r#  r3  r†   r
   r   Ú	EMBEDDINGr  s    r2   Ú/test_schema_rejects_special_key_in_create_indexrÄ  Š  sš   € ô ‹X€FÜ	�‰”zÐ)DÔ	Eñ UØ×ÑÔ#<Ó#>ÀOÐÔT÷Uô 
�‰ÜÐKô
ñ Sð 	×ÑÔ#<Ó#>ÄCÇMÁMÐÔR÷Sð S÷	Uð Uú÷Sð Súó   ¦BÁ%*B$ÂB!Â$B-c                  ó`  — t        «       } t        j                  t        d¬«      5  | j	                  t        «       d¬«       ddd«       t        j                  t        d¬«      5  | j	                  t        «       t        j                  ¬«       ddd«       y# 1 sw Y   ŒWxY w# 1 sw Y   yxY w)zITest that delete_index rejects keys starting with # (except system keys).rÁ  r   rÂ  rœ  Nz.Cannot delete index on special key '#document')r   r"  r#  r3  ry  r
   r   rª  r  s    r2   Ú/test_schema_rejects_special_key_in_delete_indexrÇ  ˜  sš   € ô ‹X€FÜ	�‰”zÐ)DÔ	Eñ UØ×ÑÔ#<Ó#>ÀOÐÔT÷Uô 
�‰ÜÐJô
ñ Rð 	×ÑÔ#<Ó#>ÄCÇLÁLÐÔQ÷Rð R÷	Uð Uú÷Rð RúrÅ  c                  ó”  — t        j                  t        d¬«      5  t        d¬«       ddd«       t        j                  t        d¬«      5  t        t        j
                  ¬«       ddd«       t        j                  t        d¬«      5  t        d¬«       ddd«       t        j                  t        d¬«      5  t        t        j
                  ¬«       ddd«       t        j                  t        d¬«      5  t        d¬«       ddd«       y# 1 sw Y   ŒæxY w# 1 sw Y   Œ´xY w# 1 sw Y   Œ�xY w# 1 sw Y   Œ^xY w# 1 sw Y   yxY w)z=Test that config validators reject invalid source_key values.z source_key cannot begin with '#'r   r�   r1  Nz	#metadata)r"  r#  r3  r   r   rÃ  r   r@   r4   r2   Ú1test_schema_rejects_invalid_source_key_in_configsrÉ  ¦  sõ   € ô 
�‰”zÐ)KÔ	Lñ 3Ü \Õ2÷3ô 
�‰”zÐ)KÔ	Lñ 4Ü¤S§]¡]Õ3÷4ô 
�‰”zÐ)KÔ	Lñ 9Ü¨<Õ8÷9ô 
�‰”zÐ)KÔ	Lñ :Ü¬3¯=©=Õ9÷:ô 
�‰”zÐ)KÔ	Lñ 8Ü¨;Õ7÷8ð 8÷3ð 3ú÷4ð 4ú÷9ð 9ú÷:ð :ú÷8ð 8ús;   œDÁDÂ
D&Â:D2Ã8D>ÄDÄD#Ä&D/Ä2D;Ä>Ec           	      óö  — | j                  «       }|j                  «        dt        «       j                  › �}t	        «       }ddlm}m}m}m	}  | | |d |«       ¬«      ¬«      ¬«      |j                  d<   t        j                  t        «      5 }|j                  ||¬	«       d
d
d
«       t        j                   «      }	d|	v s(d|	j#                  «       v sd|	j#                  «       v sJ ‚y
y
y
# 1 sw Y   ŒKxY w)zKTest that server-side validation rejects schemas with invalid special keys.Úserver_validate_r   )Ú
ValueTypesÚStringValueTypeÚStringInvertedIndexTyper
   T©r�   rE   )rï   )rî   z#invalid_keyr   Nú#r
  Úinvalid)rƒ   r„   r)   r…   r   Úchromadb.api.typesrÌ  rÍ  rÎ  r
   rŠ   r"  r#  rz  r  rS   rx  r–  )
rp   r�   r�   r€   rÌ  rÍ  rÎ  r
   r‹  r˜  s
             r2   Ú.test_server_validates_schema_with_special_keysrÓ  º  sï   € ð
 ×7Ñ7Ó9€FØ
‡L�L„Nà(¬«¯©¨Ð6€Oô ‹X€F÷ó ñ #-ÙÙ"9ØÙ0Ó2ô#ô
ô#€F‡K�K�Ñô 
�‰”yÓ	!ð F XØ× Ñ  o¸fÐ ÔE÷Fô �H—N‘NÓ#€IàˆyÑ˜E Y§_¡_Ó%6Ñ6¸)ÀyÇÁÓGXÑ:XðØXÐ:XÐ6Ð÷Fð Fús   ÂC/Ã/C8c                 ó  — | j                  «       }|j                  «        dt        «       j                  › �}ddlm}m}m} t        «       }t        j                  ddd¬«      } | | |d|¬«      ¬	«      ¬
«      |j                  d<   t        j                  t        «      5 }|j                  ||¬«       ddd«       t!        j"                  «      }	d|	j%                  «       v sd|	v sd|	j%                  «       v sJ ‚yyy# 1 sw Y   ŒKxY w)zWTest that server-side validation rejects invalid source_key in SparseVectorIndexConfig.Úserver_source_key_r   )rÌ  ÚSparseVectorValueTypeÚSparseVectorIndexTypeNr�   )rœ   r)  Úbm25TrÏ  )r~  )r}  Útest_sparser   r)  rÐ  Údocument)rƒ   r„   r)   r…   rÒ  rÌ  rÖ  r×  r   r   Úmodel_constructrŠ   r"  r#  rz  r  rS   rx  r–  )
rp   r�   r�   rÌ  rÖ  r×  r€   Úinvalid_configr‹  r˜  s
             r2   Ú@test_server_validates_invalid_source_key_in_sparse_vector_configrÝ  ã  s  € ð
 ×7Ñ7Ó9€FØ
‡L�L„Nà*¬5«7¯;©;¨-Ð8€O÷ñ ô ‹X€Fä,×<Ñ<ØØØô€Nñ ",Ù+Ù 5ØØ%ô!ô
ô"€F‡K�K�Ñô 
�‰”yÓ	!ð F XØ× Ñ  o¸fÐ ÔE÷Fô �H—N‘NÓ#€Ià˜	Ÿ™Ó)Ñ)Ø�)ÑØ˜Ÿ™Ó*Ñ*ðð	+à*ð ð 	*÷Fð Fús   Â"D Ä D	r�   c                 óh  — dt        «       › �}| j                  |¬«      }|j                  }|€J ‚|j                  j                  €J ‚|j                  j                  j
                  €J ‚|j                  j                  j
                  j                  j                  €J ‚|j                  dddii¬«       |j                  }|€J ‚|j                  j                  j
                  j                  j                  j                  dk(  sJ ‚|j                  d   j                  j
                  j                  j                  j                  dk(  sJ ‚| j                  |«      }|j                  }|€J ‚|j                  j                  j
                  j                  j                  j                  dk(  sJ ‚y)	úbTest that modifying a collection without initial config/schema creates and updates default schema.Útest_modify_no_init_r‚   Nr~   ry   ru   ©r¡   r�   )r)   r  r€   rí   r‹   rŒ   rE   r~   Úmodifyry   rŠ   rŽ   ©r�   r�   r‘   r€   Úupdated_schemaÚcollection_refreshedÚrefreshed_schemas          r2   Ú?test_modify_collection_no_initial_config_creates_default_schemarç  	  s™  € ð
 -¬U«W¨IÐ6€Oð ×)Ñ)¨Ð)Ó?€Jð ×Ñ€FØÐÐÐØ�?‰?×%Ñ%Ð1Ð1Ð1Ø�?‰?×%Ñ%×2Ñ2Ð>Ð>Ð>à�?‰?×%Ñ%×2Ñ2×9Ñ9×?Ñ?ÐKÐKÐKð ×Ñ W¨ÀÐ.CÐ$DÐÔEð  ×&Ñ&€NØÐ%Ð%Ð%Ø×"Ñ"×-Ñ-×:Ñ:×AÑA×GÑG×UÑUÐY[Ò[Ð[Ð[Ø×Ñ˜|Ñ,×7Ñ7×DÑD×KÑK×QÑQ×_Ñ_ÐceÒeÐeÐeð "×0Ñ0°ÓAÐØ+×2Ñ2ÐØÐ'Ð'Ð'Ø×$Ñ$×/Ñ/×<Ñ<×CÑC×IÑI×WÑWÐ[]Ò]Ð]Ñ]r4   zSPANN is disabledc                 óh  — dt        «       › �}| j                  |¬«      }|j                  }|€J ‚|j                  j                  €J ‚|j                  j                  j
                  €J ‚|j                  j                  j
                  j                  j                  €J ‚|j                  dddii¬«       |j                  }|€J ‚|j                  j                  j
                  j                  j                  j                  dk(  sJ ‚|j                  d   j                  j
                  j                  j                  j                  dk(  sJ ‚| j                  |«      }|j                  }|€J ‚|j                  j                  j
                  j                  j                  j                  dk(  sJ ‚y)	rß  rà  r‚   Nrž   rŸ   r�   rá  r�   )r)   r  r€   rí   r‹   rŒ   rE   rž   râ  rŸ   rŠ   rŽ   rã  s          r2   ÚEtest_modify_collection_no_initial_config_creates_default_schema_localré  5	  s™  € ð
 -¬U«W¨IÐ6€Oð ×)Ñ)¨Ð)Ó?€Jð ×Ñ€FØÐÐÐØ�?‰?×%Ñ%Ð1Ð1Ð1Ø�?‰?×%Ñ%×2Ñ2Ð>Ð>Ð>à�?‰?×%Ñ%×2Ñ2×9Ñ9×>Ñ>ÐJÐJÐJð ×Ñ V¨k¸3Ð-?Ð$@ÐÔAð  ×&Ñ&€NØÐ%Ð%Ð%Ø×"Ñ"×-Ñ-×:Ñ:×AÑA×FÑF×PÑPÐTWÒWÐWÐWØ×Ñ˜|Ñ,×7Ñ7×DÑD×KÑK×PÑP×ZÑZÐ^aÒaÐaÐað "×0Ñ0°ÓAÐØ+×2Ñ2ÐØÐ'Ð'Ð'Ø×$Ñ$×/Ñ/×<Ñ<×CÑC×HÑH×RÑRÐVYÒYÐYÑYr4   c                 ó¤  — dt        «       › �}| j                  |ddddœi¬«      }|j                  }|€J ‚|j                  j                  j
                  j                  j                  €J ‚|j                  j                  j
                  j                  j                  j                  dk(  sJ ‚|j                  j                  j
                  j                  j                  j                  dk(  sJ ‚|j                  ddd	ii¬
«       |j                  }|€J ‚|j                  j                  j
                  j                  j                  j                  d	k(  sJ ‚|j                  j                  j
                  j                  j                  j                  dk(  sJ ‚|j                  d   j                  j
                  j                  j                  j                  d	k(  sJ ‚|j                  d   j                  j
                  j                  j                  j                  dk(  sJ ‚| j                  |«      }|j                  }|€J ‚|j                  j                  j
                  j                  j                  j                  d	k(  sJ ‚|j                  j                  j
                  j                  j                  j                  dk(  sJ ‚y)zQTest creating collection with SPANN schema within server limits and modifying it.Útest_modify_with_schema_r~   r  é2   ©ry   rŸ   ©rA   r¡   Nry   é   rá  r�   )r)   r  r€   rí   r‹   rŒ   rE   r~   ry   rŸ   râ  rŠ   rŽ   rã  s          r2   Ú0test_modify_collection_with_initial_spann_schemarð  W	  s€  € ð 1´³°	Ð:€Oð ×)Ñ)ØàØ!#Øñð
ð *ó €Jð ×Ñ€FØÐÐÐØ�?‰?×%Ñ%×2Ñ2×9Ñ9×?Ñ?ÐKÐKÐKØ�?‰?×%Ñ%×2Ñ2×9Ñ9×?Ñ?×MÑMÐQSÒSÐSÐSØ�?‰?×%Ñ%×2Ñ2×9Ñ9×?Ñ?×IÑIÈRÒOÐOÐOð ×Ñ W¨ÀÐ.CÐ$DÐÔEð  ×&Ñ&€NØÐ%Ð%Ð%Ø×"Ñ"×-Ñ-×:Ñ:×AÑA×GÑG×UÑUÐY[Ò[Ð[Ð[à×"Ñ"×-Ñ-×:Ñ:×AÑA×GÑG×QÑQÐUWÒWÐWÐWð ×Ñ˜|Ñ,×7Ñ7×DÑD×KÑK×QÑQ×_Ñ_ÐceÒeÐeÐeØ×Ñ˜|Ñ,×7Ñ7×DÑD×KÑK×QÑQ×[Ñ[Ð_aÒaÐaÐað "×0Ñ0°ÓAÐØ+×2Ñ2ÐØÐ'Ð'Ð'Ø×$Ñ$×/Ñ/×<Ñ<×CÑC×IÑI×WÑWÐ[]Ò]Ð]Ð]Ø×$Ñ$×/Ñ/×<Ñ<×CÑC×IÑI×SÑSÐWYÒYÐYÑYr4   c                 ó  — dt        «       › �}| j                  |ddddœi¬«      }|j                  ddddœi¬	«       |j                  }|€J ‚|j                  j
                  j                  j                  j                  j                  dk(  sJ ‚|j                  j
                  j                  j                  j                  j                  dk(  sJ ‚|j                  j
                  j                  j                  j                  j                  dk(  sJ ‚|j                  d   j
                  j                  j                  j                  j                  dk(  sJ ‚|j                  d   j
                  j                  j                  j                  j                  dk(  sJ ‚| j                  |«      }|j                  }|€J ‚|j                  j
                  j                  j                  j                  j                  dk(  sJ ‚|j                  j
                  j                  j                  j                  j                  dk(  sJ ‚|j                  j
                  j                  j                  j                  j                  dk(  sJ ‚y
)zCTest that modifying multiple SPANN fields updates schema correctly.Útest_modify_schema_multi_r~   é@   r�   rí  rî  é€   rÇ  rá  Nru   r�   )r)   r  râ  r€   rí   r‹   rŒ   rE   r~   ry   rŸ   rz   rŠ   rŽ   )r�   r�   r‘   r€   rå  ræ  s         r2   Ú;test_modify_collection_updates_schema_spann_multiple_fieldsrõ  „	  s@  € ð
 2´%³'°Ð;€Oð ×)Ñ)ØØ°"À3Ñ GÐHð *ó €Jð ×ÑàØ!$Ø ñð
ð ô ð ×Ñ€FØÐÐÐØ�?‰?×%Ñ%×2Ñ2×9Ñ9×?Ñ?×MÑMÐQTÒTÐTÐTØ�?‰?×%Ñ%×2Ñ2×9Ñ9×?Ñ?×IÑIÈSÒPÐPÐPð �?‰?×%Ñ%×2Ñ2×9Ñ9×?Ñ?×LÑLÐPRÒRÐRÐRð �;‰;�|Ñ$×/Ñ/×<Ñ<×CÑC×IÑI×WÑWÐ[^Ò^Ð^Ð^Ø�;‰;�|Ñ$×/Ñ/×<Ñ<×CÑC×IÑI×SÑSÐWZÒZÐZÐZð "×0Ñ0°ÓAÐØ+×2Ñ2ÐØÐ'Ð'Ð'Ø×$Ñ$×/Ñ/×<Ñ<×CÑC×IÑI×WÑWÐ[^Ò^Ð^Ð^Ø×$Ñ$×/Ñ/×<Ñ<×CÑC×IÑI×SÑSÐWZÒZÐZÐZØ×$Ñ$×/Ñ/×<Ñ<×CÑC×IÑI×VÑVÐZ\Ò\Ð\Ñ\r4   c                 ó>  — dt        «       › �}| j                  |dddii¬«      }|j                  }|€J ‚|j                  j                  €J ‚|j                  j
                  €J ‚|j                  j                  €J ‚|j                  j                  €J ‚|j                  j                  €J ‚|j                  d   €J ‚|j                  dddii¬	«       |j                  }|€J ‚|j                  j                  €J ‚|j                  j                  j                  €J ‚|j                  j                  j                  €J ‚|j                  j
                  €J ‚|j                  j
                  j                  €J ‚|j                  j                  €J ‚|j                  j                  j                  €J ‚|j                  j                  €J ‚|j                  j                  j                  €J ‚|j                  j                  €J ‚|j                  j                  j                   €J ‚|j                  d   €J ‚|j                  d   j                  €J ‚|j                  d   j                  j                  €J ‚|j                  d   j                  j                  j"                  d
u sJ ‚|j                  j$                  j&                  j(                  j*                  j,                  dk(  sJ ‚| j/                  |«      }|j                  }|€J ‚|j                  j$                  j&                  j(                  j*                  j,                  dk(  sJ ‚|j                  j                  €J ‚|j                  j                  j                  €J ‚|j                  j                  j                  €J ‚|j                  j
                  €J ‚|j                  j                  €J ‚|j                  j                  €J ‚|j                  j                  €J ‚|j                  d   €J ‚y)zJTest that modifying configuration doesn't affect other schema value types.Útest_modify_schema_preserve_r~   ry   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Œ   rE   r~   ry   rŽ   )r�   r�   r‘   Úinitial_schemarä  rå  ræ  s          r2   Ú4test_modify_collection_preserves_other_schema_fieldsrù  ±	  s+  € ð 5´U³W°IÐ>€Oð ×)Ñ)ØØ °"Ð 5Ð6ð *ó €Jð  ×&Ñ&€NØÐ%Ð%Ð%Ø×"Ñ"×)Ñ)Ð5Ð5Ð5Ø×"Ñ"×,Ñ,Ð8Ð8Ð8Ø×"Ñ"×.Ñ.Ð:Ð:Ð:Ø×"Ñ"×*Ñ*Ð6Ð6Ð6Ø×"Ñ"×0Ñ0Ð<Ð<Ð<Ø×Ñ˜{Ñ+Ð7Ð7Ð7ð ×Ñ W¨ÀÐ.DÐ$EÐÔFð  ×&Ñ&€NØÐ%Ð%Ð%ð ×"Ñ"×)Ñ)Ð5Ð5Ð5Ø×"Ñ"×)Ñ)×?Ñ?ÐKÐKÐKØ×"Ñ"×)Ñ)×3Ñ3Ð?Ð?Ð?à×"Ñ"×,Ñ,Ð8Ð8Ð8Ø×"Ñ"×,Ñ,×?Ñ?ÐKÐKÐKà×"Ñ"×.Ñ.Ð:Ð:Ð:Ø×"Ñ"×.Ñ.×CÑCÐOÐOÐOà×"Ñ"×*Ñ*Ð6Ð6Ð6Ø×"Ñ"×*Ñ*×>Ñ>ÐJÐJÐJà×"Ñ"×0Ñ0Ð<Ð<Ð<Ø×"Ñ"×0Ñ0×DÑDÐPÐPÐPð ×Ñ˜{Ñ+Ð7Ð7Ð7Ø×Ñ˜{Ñ+×2Ñ2Ð>Ð>Ð>Ø×Ñ˜{Ñ+×2Ñ2×<Ñ<ÐHÐHÐHØ×Ñ˜{Ñ+×2Ñ2×<Ñ<×DÑDÈÑLÐLÐLð ×"Ñ"×-Ñ-×:Ñ:×AÑA×GÑG×UÑUÐY\Ò\Ð\Ð\ð "×0Ñ0°ÓAÐØ+×2Ñ2ÐØÐ'Ð'Ð'ð ×$Ñ$×/Ñ/×<Ñ<×CÑC×IÑI×WÑWÐ[^Ò^Ð^Ð^ð ×$Ñ$×+Ñ+Ð7Ð7Ð7Ø×$Ñ$×+Ñ+×AÑAÐMÐMÐMØ×$Ñ$×+Ñ+×5Ñ5ÐAÐAÐAØ×$Ñ$×.Ñ.Ð:Ð:Ð:Ø×$Ñ$×0Ñ0Ð<Ð<Ð<Ø×$Ñ$×,Ñ,Ð8Ð8Ð8Ø×$Ñ$×2Ñ2Ð>Ð>Ð>Ø× Ñ  Ñ-Ð9Ð9Ñ9r4   c                  óÒ  — t        «       j                  t        t        «       ¬«      ¬«      } t	        t        «       di | j                  «       dddddd¬	«
      }t        t        t        t        «       «      |d¬
«      }|j                  �J ‚|j                  €J ‚|j                  j                  d«      �J ‚|j                  dg«      }|€J ‚t        j                   |d   g d¢«      sJ ‚y)z=Test that embeddings are using the schema embedding function.rC  rH   Úschema_only_collectionNrM   ÚtenantÚdatabaser   )
ÚidrA   Úconfiguration_jsonÚserialized_schemar5  Ú	dimensionrü  rý  ÚversionÚlog_position)r�   Úmodelrœ   rœ   rV  )rE  rF  rG  rH  )r   r†   r   r+   ÚCollectionModelr)   r‰   r   r(   r   ÚobjectÚ_embedding_functionr¡   ro   rI  rJ  rK  )r€   Úcollection_modelr‘   ré   s       r2   Ú+test_embeds_using_schema_embedding_functionr	  ú	  sô   € ä‹X×"Ñ"Ü Ô4KÓ4MÔNð #ó €Fô 'Ü‹7Ø%ØØ ×2Ñ2Ó4ØØØØØØôÐô "Ü”Iœv›xÓ(ØØô€Jð ×)Ñ)Ð1Ð1Ð1Ø×#Ñ#Ð/Ð/Ð/Ø×#Ñ#×'Ñ'Ð(<Ó=ÐEÐEÐEà×"Ñ" M ?Ó3€JØÐ!Ð!Ð!Ü�;‰;�z !‘}Ò&:Ô;Ð;Ñ;r4   c                   ó¦   — e Zd ZdZddefd„Zdee   dee   fd„Zdee   dee   fd„Z	e
defd„«       Zdeeef   fd	„Ze
d
eeef   dd fd„«       Zy)ÚTestSparseEmbeddingFunctionzESparse embedding function for testing search API with string queries.rW   c                 ó   — || _         y r.   rk   r\   s     r2   r3   z$TestSparseEmbeddingFunction.__init__ 
  r­   r4   r5   r6   c                 óŽ   — t        |«      D ��cg c])  \  }}t        |gt        t        |«      |z   «      g¬«      ‘Œ+ c}}S c c}}w r¯   r³   rµ   s       r2   r=   z$TestSparseEmbeddingFunction.__call__#
  r·   r¸   c                 ó”   — t        |«      D ��cg c],  \  }}t        |gt        t        |«      |z   dz   «      g¬«      ‘Œ. c}}S c c}}w )Nrì   r°   r³   rµ   s       r2   rf   z'TestSparseEmbeddingFunction.embed_query)
  sK   € ô ' uÓ-÷
á��Tô  # ´´c¸$³iÀ#±oÈÑ6IÓ0JÐ/KÖLó
ð 	
ùó 
s   �1Ac                   ó   — y)NÚtest_sparse_efr@   r@   r4   r2   rA   z TestSparseEmbeddingFunction.name/
  s   € àr4   c                 ó   — d| j                   iS rj   rk   rC   s    r2   rD   z&TestSparseEmbeddingFunction.get_config3
  rl   r4   rE   c                 ó8   — t        | j                  dd«      «      S )NrW   rÙ  )r  ro   rH   s    r2   rI   z-TestSparseEmbeddingFunction.build_from_config6
  s   € ä*¨6¯:©:°g¸}Ó+MÓNÐNr4   N)rÙ  )rN   rO   rP   rQ   rS   r3   r$   r	   r=   rf   rT   rA   r#   r!   rD   rI   r@   r4   r2   r  r  
  s§   „ áOñ˜có ð
˜d 3™ið 
¨D°Ñ,>ó 
ð
  c¡ð 
¨t°LÑ/Aó 
ð ð �#ò  ó ð ð&˜D  c ™Nó &ð ðO $ s¨C x¡.ð OÐ5Rò Oó ñOr4   r  c                 ó  — t        d¬«      }t        «       j                  dt        t        j
                  |¬«      ¬«      }t        | |¬«      \  }}|j                  ddgd	d
g¬«       |j                  «       }|€J ‚|d   €J ‚t        |d   «      dk(  sJ ‚t        «       j                  t        dd	¬«      «      }|j                  |«      }|d   €J ‚t        |d   «      dk(  sJ ‚t        |d   d   «      dkD  sJ ‚d|d   d   v sJ ‚y)zMTest that search API uses embedded_searches when string queries are embedded.Úsearch_testr&  rQ  r(  r	  r  r
  r  rV  r  rê  Nrã   re  r/  râ   rì   r   )r  r   r†   r   r   rª  rÀ   r÷   ro   r`   r    rÁ   r   r2  )rp   r4  r€   r‘   r<   r¿  r2  Úresultss           r2   Ú=test_search_api_uses_embedded_searches_with_sparse_embeddingsr  ;
  s2  € ô ,°-Ô@€IÜ‹X×"Ñ"ØÜ&Ü—|‘|Ø(ô
ð #ó €Fô 0Ð0@ÈÔP�M€J�à‡N�NØ�VÐØ  /Ð2ð ô ð
 �^‰^Ó€FØÐÐÐØ�+ÑÐ*Ð*Ð*Üˆv�kÑ"Ó# qÒ(Ð(Ð(ä‹X�]‰]œ3 >¸ÔGÓH€Fà×Ñ Ó'€Gà�5‰>Ð%Ð%Ð%Üˆw�u‰~Ó !Ò#Ð#Ð#Üˆw�u‰~˜aÑ Ó! AÒ%Ð%Ð%Ø�W˜U‘^ AÑ&Ñ&Ð&Ñ&r4   c                 ó:  — t        «       }|j                  t        «       d¬«       t        | |¬«      \  }}|j                  €J ‚|j                  j
                  d   j                  }|€J ‚|j                  €J ‚|j                  j                  du sJ ‚|j                  g d¢g d¢dd	idd
idd	ig¬«       t        j                  t        «      5 }|j                  ddi¬«       ddd«       dt        j                  «      j!                  «       v sJ ‚t        j                  t        «      5 }|j#                  dgdddi¬«       ddd«       dt        |j                  «      j!                  «       v sJ ‚t        j                  t        «      5 }|j%                  ddi¬«       ddd«       dt        |j                  «      j!                  «       v sJ ‚|j                  dd	i¬«      }t'        |d   «      ddhk(  sJ ‚y# 1 sw Y   �ŒxY w# 1 sw Y   ŒÄxY w# 1 sw Y   ŒsxY w)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ì   rd  )Úquery_textsr™  r  Úetarå   râ   r  r  )r   ry  r   rÀ   r€   rŠ   rî   rö   r�   r÷   r"  r#  r   ro   rS   rx  r–  rÇ   rž  rø   )rp   r€   r‘   r<   Údoc_overrider‹  r   s          r2   Ú/test_fts_disabled_blocks_where_document_queriesr#  e
  s   € ô ‹X€FØ
×Ñœ~Ó/°[ÐÔAä/Ð0@ÈÔP�M€J�ð ×ÑÐ(Ð(Ð(Ø×$Ñ$×)Ñ)¨+Ñ6×=Ñ=€LØÐ#Ð#Ð#Ø×!Ñ!Ð-Ð-Ð-Ø×!Ñ!×)Ñ)¨UÑ2Ð2Ð2ð ‡N�NÚ3ÚNà˜Ð#Ø˜Ð#Ø˜Ð#ð
ð ô ô 
�‰Ô+Ó	,ð >°Ø�‰ {°GÐ&<ˆÔ=÷>à”C˜Ÿ™Ó'×-Ñ-Ó/Ñ/Ð/Ð/ä	�‰Ô+Ó	,ð 
°Ø×ÑØ*Ð+ØØ'¨Ð1ð 	ô 	
÷
ð ”C˜Ÿ™Ó'×-Ñ-Ó/Ñ/Ð/Ð/ä	�‰Ô+Ó	,ð ?°Ø×Ñ¨+°uÐ)=ÐÔ>÷?à”C˜Ÿ™Ó'×-Ñ-Ó/Ñ/Ð/Ð/ð �~‰~ Z°Ð$;ˆ~Ó<€HÜˆx˜‰Ó K°Ð#=Ò=Ð=Ñ=÷%>ñ >ú÷
ð 
ú÷?ð ?ús$   ÃG8Ä*HÆ
HÇ8HÈHÈHc                 ó¨  — t        | «      \  }}|j                  €J ‚|j                  j                  d   j                  }|€J ‚|j                  €J ‚|j                  j
                  du sJ ‚|j                  ddgddg¬«       |j                  d	d
i¬«      }t        |d   «      dhk(  sJ ‚|j                  d	di¬«      }t        |d   «      dhk(  sJ ‚y)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  Úfoxr  râ   Úlazy)	rÀ   r€   rŠ   rî   rö   r�   r÷   ro   rø   )rp   r‘   r<   r"  Úitemss        r2   Ú0test_fts_enabled_by_default_where_document_worksr(  –
  sû   € ô 0Ð0@ÓA�M€J�ð ×ÑÐ(Ð(Ð(Ø×$Ñ$×)Ñ)¨+Ñ6×=Ñ=€LØÐ#Ð#Ð#Ø×!Ñ!Ð-Ð-Ð-Ø×!Ñ!×)Ñ)¨TÑ1Ð1Ð1à‡N�NØ˜Ð$Ø(Ð*;Ð<ð ô ð
 �N‰N¨;¸Ð*>ˆNÓ?€EÜˆu�U‰|Ó  Ò,Ð,Ð,à�N‰N¨;¸Ð*?ˆNÓ@€EÜˆu�U‰|Ó  Ò,Ð,Ñ,r4   c                 ó2  — t        «       }|j                  t        «       d¬«       t        | |¬«      \  }}|j                  }|j                  dgdg¬«       | j                  «       }|j                  |¬«      }|j                  €J ‚|j                  j                  d   j                  }|€J ‚|j                  €J ‚|j                  j                  d	u sJ ‚t        j                  t        «      5  |j!                  d
di¬«       ddd«       y# 1 sw Y   yxY w)z9FTS-disabled schema should persist across client reloads.rÑ   rœ  r  zpersist-fts-1zpersistent doc for fts testrê  r‚   NFr  Ú
persistentr  )r   ry  r   rÀ   rA   r÷   rƒ   rŽ   r€   rŠ   rî   rö   r�   r"  r#  r   ro   )rp   r€   r‘   r�   r�   r@  r•   r"  s           r2   Ú$test_fts_disabled_schema_persistencer+  ¯
  s#  € ô ‹X€FØ
×Ñœ~Ó/°[ÐÔAä4Ð5EÈfÔUÑ€J�Ø —o‘o€Oà‡N�NØÐØ0Ð1ð ô ð '×@Ñ@ÓB€OØ)×8Ñ8¸oÐ8ÓNÐð ×%Ñ%Ð1Ð1Ð1Ø&×-Ñ-×2Ñ2°;Ñ?×FÑF€LØÐ#Ð#Ð#Ø×!Ñ!Ð-Ð-Ð-Ø×!Ñ!×)Ñ)¨UÑ2Ð2Ð2ô 
�‰Ô+Ó	,ñ LØ×Ñ°¸\Ð/JÐÔK÷L÷ Lñ Lús   Ã/DÄDc                 ó4  — t        «       }|j                  t        «       d¬«       t        | |¬«      \  }}|j	                  ddgddg¬«       |j                  ddgd	g¬
«      }|d	   €J ‚|d	   d   dk(  sJ ‚|d	   d   dk(  sJ ‚|j                  «       dk(  sJ ‚y)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ì   re  )r   ry  r   rÀ   r÷   ro   Úcount)rp   r€   r‘   r<   r¿  s        r2   Ú(test_fts_disabled_documents_still_storedr.  Î
  sË   € ô ‹X€FØ
×Ñœ~Ó/°[ÐÔAä/Ð0@ÈÔP�M€J�à‡N�NØ˜Ð$Ø)Ð+AÐBð ô ð �^‰^ ¨ZÐ 8À;À-ˆ^ÓP€FØ�+ÑÐ*Ð*Ð*Ø�+Ñ˜qÑ!Ð%;Ò;Ð;Ð;Ø�+Ñ˜qÑ!Ð%;Ò;Ð;Ð;ð ×ÑÓ Ò"Ð"Ñ"r4   c                 óö  — t        «       }|j                  t        «       d¬«       t        | |¬«      \  }}|j                  }|j                  dgdg¬«       t        j                  t        «      5  |j                  ddi¬	«       d
d
d
«       |j                  |¬«       |j                  |¬«      }|j                  dgdg¬«       |j                  ddi¬	«      }t        |d   «      dhk(  sJ ‚y
# 1 sw Y   ŒkxY w)zVDeleting a FTS-disabled collection and recreating with FTS enabled should restore FTS.rÑ   rœ  r  zfts-toggle-1zsearchable textrê  r  Ú
searchabler  Nr‚   zfts-toggle-2zsearchable text againrâ   )r   ry  r   rÀ   rA   r÷   r"  r#  r   ro   r  r‡   rø   )rp   Úschema_disabledr‘   r�   Úcol_namer~  r'  s          r2   Ú6test_fts_disabled_then_new_collection_with_fts_enabledr3  æ
  s  € ô
 “h€OØ× Ñ ¬Ó(8¸kÐ ÔJä4Ø ôÑ€J�ð �‰€Hà‡N�NØÐØ$Ð%ð ô ô
 
�‰Ô+Ó	,ñ CØ�‰ {°LÐ&AˆÔB÷Cð ×Ñ (ÐÔ+Ø×.Ñ.°HÐ.Ó=€Hà‡L�LØÐØ*Ð+ð ô ð
 �L‰L¨°lÐ(CˆLÓD€EÜˆu�U‰|Ó Ð 0Ò0Ð0Ñ0÷Cð Cús   Á0C/Ã/C8c                 ó¶  — t        «       }|j                  t        «       d¬«       t        | |¬«      \  }}|j	                  ddgddg¬«       t        j                  t        «      5 }|j                  t        t        j                  j                  d	«      ¬
«      «       ddd«       dt        j                  «      j                  «       v sJ ‚y# 1 sw Y   Œ1xY w)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å   Nr  )r   ry  r   rÀ   r÷   r"  r#  r   r2  r    r   rª  ÚcontainsrS   rx  r–  )rp   r€   r‘   r<   r‹  s        r2   Ú3test_fts_disabled_search_api_blocks_document_filterr6    sÀ   € ô
 ‹X€FØ
×Ñœ~Ó/°[ÐÔAä/Ð0@ÈÔP�M€J�à‡N�NØ˜^Ð,Ø" NÐ3ð ô ô
 
�‰Ô+Ó	,ð 
°Ø×ÑÜœŸ™×.Ñ.¨wÓ7Ô8ô	
÷
ð ”C˜Ÿ™Ó'×-Ñ-Ó/Ñ/Ð/Ñ/÷	
ð 
ús   Á&9CÃC)rp   r   r6   N)NN)r6   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)   ÚnumpyrJ  r"  rS   r+   rV   r™   r©   r«   rÀ   rÊ   r  r  r  ÚmarkÚskipifr$  r9  rA  rR  r^  ra  ru  r  r£  r«  rÃ  rÍ  rç  rø  r  r  r  r+  r5  rA  rN  rX  r_  rh  rn  rr  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.  r3  r6  r@   r4   r2   ú<module>rF     sC  ðß -÷÷ ÷ õ õ 7÷õ ÷÷õ 6Ý AÝ 0ß 5Ý 8ß L× LÓ LÝ Û Û ð ôÐ/°°S±	Ñ:ó ó ðð2 ôPÐ'8¸¸c¹Ñ'Có Pó ðPð<7:Ø'ð7:à	ó7:ðtn0Ø'ðn0à	ón0ðb $ôWÐ+BÀ4ÈÁ9Ñ+Mó Wó $ðWð8  $Ø;?ñØ'ðà�VÑðð !Ð!2°3Ñ!7Ñ8ðð ˆ:�yÐ Ñ!ó	ð:˜sð  t¨C¡yó ð:KQØ'ðKQà	óKQð\'5Ø'ð'5à	ó'5ðTSØ'ðSà	óSð8 ‡�×ÑÐ.Ð.Ð7PÐÓQð	EØ'ð	Eà	ò	Eó Rð	Eð ‡�×ÑÐ*Ð3MÐÓNð65Ø'ð65à	ò65ó Oð65ðr&0Ø'ð&0à	ó&0ðR>Ø'ð>à	ó>ð: ‡�×ÑÐ*Ð3MÐÓNð/Ø'ð/à	ò/ó Oð/ð6 ‡�×ÑÐ*Ð3MÐÓNðKØ'ðKà	òKó OðKð: ‡�×ÑÐ*Ð3MÐÓNðAØ'ðAà	òAó OðAð851Ø'ð51à	ó51ðp+*Ø'ð+*à	ó+*ð\ ‡�×ÑÐ*Ð3MÐÓNð-*Ø'ð-*à	ò-*ó Oð-*ð`B6Ø'ðB6à	óB6ðJ.BØ'ð.Bà	ó.Bñb ÓØ‡�×ÑÐ*Ð3MÐÓNðD4Ø'ðD4à	òD4ó Oó ðD4ðN ‡�×ÑÐ*Ð3MÐÓNðA1Ø'ðA1à	òA1ó OðA1ðH0=Ø'ð0=à	ó0=ðf ‡�×ÑÐ*Ð3MÐÓNð%9Ø'ð%9à	ò%9ó Oð%9ðP ‡�×ÑÐ*Ð3MÐÓNð*:Ø'ð*:à	ò*:ó Oð*:ðZ ‡�×ÑÐ*Ð3MÐÓNð.9Ø'ð.9à	ò.9ó Oð.9ðb ‡�×ÑÐ*Ð3MÐÓNð,8Ø'ð,8à	ò,8ó Oð,8ð^ ‡�×ÑÐ*Ð3MÐÓNð,-Ø'ð,-à	ò,-ó Oð,-ð^ ‡�×ÑÐ*Ð3MÐÓNð'*Ø'ð'*à	ò'*ó Oð'*ðT ‡�×ÑÐ*Ð3MÐÓNð3.Ø'ð3.à	ò3.ó Oð3.ðl ‡�×ÑÐ*Ð3MÐÓNð*(Ø'ð*(à	ò*(ó Oð*(ðZ ‡�×ÑÐ*Ð3MÐÓNð4<Ø'ð4<à	ò4<ó Oð4<ðn ‡�×ÑÐ*Ð3MÐÓNð-6Ø'ð-6à	ò-6ó Oð-6ð` ‡�×ÑÐ*Ð3MÐÓNð#;Ø'ð#;à	ò#;ó Oð#;ðL ‡�×ÑÐ*Ð3MÐÓNð&Ø'ð&à	ò&ó Oð&ð>61Ø'ð61à	ó61ðrI-Ø'ðI-à	óI-ðXJ-Ø'ðJ-à	óJ-ðZLØ'ðLà	óLð@ ‡�×ÑÐ*Ð3MÐÓNð4Ø'ð4à	ò4ó Oð4ð@ ‡�×ÑÐ*Ð3MÐÓNð4Ø'ð4à	ò4ó Oð4ð> ‡�×ÑÐ*Ð3MÐÓNð+-Ø'ð+-à	ò+-ó Oð+-ð\ ‡�×ÑÐ*Ð3MÐÓNðP6Ø'ðP6à	òP6ó OðP6ófSóRó8ð( ‡�×ÑÐ*Ð3MÐÓNð%Ø'ð%à	ò%ó Oð%ðP ‡�×ÑÐ*Ð3MÐÓNð,Ø'ð,à	ò,ó Oð,ð^ ‡�×ÑÐ*Ð3MÐÓNð^Øð^à	ò^ó Oð^ðB ‡�×ÑÐ.Ð.Ð7JÐÓKðZØðZà	òZó LðZðB ‡�×ÑÐ*Ð3MÐÓNð)Z¸Yð )ZÈ4ò )Zó Oð)ZðX ‡�×ÑÐ*Ð3MÐÓNð)]Øð)]à	ò)]ó Oð)]ðX ‡�×ÑÐ*Ð3MÐÓNðE:Àð E:Ètò E:ó OðE:óP<ðD $ôOÐ"9¸$¸s¹)Ñ"Dó Oó $ðOð< ‡�×ÑÐ*Ð3MÐÓNð!'Ø%ð!'à	ò!'ó Oð!'ðR.>Ø'ð.>à	ó.>ðb-Ø'ð-à	ó-ð2LØ'ðLà	óLð>#Ø'ð#à	ó#ð01Ø'ð1à	ó1ðD ‡�×ÑÐ*Ð3MÐÓNð0Ø'ð0à	ò0ó Oñ0r4   