§
    ˜Štjå¥  ã                    ó"  — U d dl Z d dlZd dlZd dlZd dlZd dlZd dl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Zd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlZd dlm Z m!Z!m"Z" d d	l#m$Z$m%Z%m&Z& d d
l'm(Z( d dl)m*Z*m+Z+ d dl,m-Z.m/Z/ d dl0m1Z1m2Z3 d dl4m5Z5 d dl6Z6d dl7Z7d dl8Z9d dl:m;Z; d dlm<Z< d dl=m>Z>m?Z? d dlZ e6j@        eA¦  «        ZBg d¢ZC ejD        dd¦  «        ZE ejD        d¦  «        dk    ZFeEeCvr eGdeE› deC› d�¦  «        ‚dejH        jI        ejH        jJ        ejH        jK        gejL        jM        dœZNeOePef         eQd<   eFreejR        jS        hZT eUejR        dd¦  «        ZVeV�eT W                    eV¦  «         eN X                     eYd„ ejR        D ¦   «         ¦  «        d¬ ¦  «          ejZ        j[        d®i eN¤Ž ejZ         [                    dejZ         \                    d!¦  «        d"¬#¦  «         ejZ         [                    d$ejZ         \                    d!¦  «        d%¬#¦  «         ejZ         [                    d&ejZ         \                    d!¦  «        d'd%¬(¦  «         ejZ         ]                    eE¦  «          ejD        d)¦  «        dk    p ejD        d*¦  «        dk    Z^d+Z_d,Z`d-e"d.dfd/„Za	 	 	 d©deejZ                 d$eejZ                 d&eejZ                 d.eejZ                 fd0„Zb ejD        d1¦  «        dk    Zcec o ejD        d2¦  «        d3k    Zdd4Zeee› d5e$› �Zfd6Zgd.ejh        fd7„Zid¯d8„Zjd.ekfd9„Zl	 	 	 	 	 	 	 	 	 	 	 d°d;ekd<emd=eeP         d>eeP         d?eeP         d@eeP         dAeeP         dBeeP         dCeeP         dDeeP         dEeeP         dFeem         d.dfdG„Znd±d-e!dHekd.dfdI„Zo	 	 	 	 	 	 	 	 	 	 	 	 	 d²d<emdKePd>eeP         dLeeP         d?eeP         d@eeP         dMeeP         dAeeP         dBeeP         dCeeP         dDeeP         dEeeP         dFeem         d.ee&ddf         fdN„Zpd.ee&ddf         fdO„Zqd.ee&ddf         fdP„Zrd.ee&ddf         fdQ„Zsd.ee&ddf         fdR„Ztd.eePekf         fdS„Zu ejv        ¦   «         d.ee&ddf         fdT„¦   «         Zwd.ee&ddf         fdU„Zxd.ee&ddf         fdV„Zyd.ee&ddf         fdW„Zzd.ee&ddf         fdX„Z{	 d³dYePd.ee&ddf         fdZ„Z| ejv        ¦   «         d.ee&ddf         fd[„¦   «         Z} ejv        ¦   «         d.ee&ddf         fd\„¦   «         Z~ ejv        d]¬^¦  «        d.ee&ddf         fd_„¦   «         Z ejv        d]¬^¦  «        d.ee&ddf         fd`„¦   «         Z€ ejv        d]¬^¦  «        d.ee&ddf         fda„¦   «         Z� ejv        d]¬^¦  «        d.ee&ddf         fdb„¦   «         Z‚ ejv        d)ejƒ        v rdcgnddg¬e¦  «        dfej„        d.ee&ddf         fdg„¦   «         Z… ejv        d)ejƒ        v rdhgndig¬e¦  «        dfej„        d.ee&ddf         fdj„¦   «         Z†d.e
eP         fdk„Z‡d.e
eP         fdl„Zˆd.e
eg ee&ddf         f                  fdm„Z‰d.e
eg ee&ddf         f                  fdn„ZŠd.e
eg ee&ddf         f                  fdo„Z‹d.e
eg ee&ddf         f                  fdp„ZŒd.e
eg ee&ddf         f                  fdq„Z� ejv        dr eŒ¦   «         ¬s¦  «        dfej„        d.ee!ddf         fdt„¦   «         ZŽ ejv        dr eŠ¦   «         ¬s¦  «        dfej„        d.ee!ddf         fdu„¦   «         Z� ejv         eˆ¦   «         ¬e¦  «        dfej„        d.ee!ddf         fdv„¦   «         Z� ejv        d] e‡¦   «         ¬s¦  «        dfej„        d.ee!ddf         fdw„¦   «         Z‘ ejv        dr e�¦   «         ¬s¦  «        dfej„        d.ee!ddf         fdx„¦   «         Z’ ejv        dr e‰¦   «         ¬s¦  «        dfej„        d.ee!ddf         fdy„¦   «         Z“e5 G dz„ d{e3¦  «        ¦   «         Z”e5 G d|„ d}e1¦  «        ¦   «         Z• ejv        d]¬^¦  «        d~e&d.ee!ddf         fd„¦   «         Z– G d€„ d�¦  «        Z— ejv        d]¬^¦  «        d~e&d.ee—ddf         fd‚„¦   «         Z˜dƒePd.eeP         fd„„Z™d…e dƒePd.dfd†„Zšd…e d.dfd‡„Z› ejv        d]¬^¦  «        d~e&dƒePd.ee ddf         fdˆ„¦   «         Zœejv        dfej„        d.ePfd‰„¦   «         Z�dŠejž        d.dfd‹„ZŸdŒed�ef         d.efdŽ„Z e Z¡d�ej¢        d.dfd�„Z£ ejv        d]¬^¦  «        d‘e&dƒePd.ee ddf         fd’„¦   «         Z¤ ejv        d]¬^¦  «        d“e&d.ee ddf         fd”„¦   «         Z¥ ejv        d]¬^¦  «        d•e&d.ee!ddf         fd–„¦   «         Z¦ ejv        d]¬^¦  «        d—e&d.ee!ddf         fd˜„¦   «         Z§ ejv        d]¬^¦  «        d™e&d.ee!ddf         fdš„¦   «         Z¨ G d›„ dœe¦  «        Z©d�e(džedŸe	e+         d ekd.eee+         ee*         f         f
d¡„Zªd�e(džedŸe	e+         d ekd.eee+         ee*         f         f
d¢„Z«d.e
e©         fd£„Z¬ ejv        dr e¬¦   «         ¬s¦  «        dfej„        d.ee©ddf         fd¤„¦   «         Z­d¥ej®        d.dfd¦„Z¯d…e d.emfd§„Z° ejv        d¬¨¦  «        dfej„        d.ed©         fdª„¦   «         Z±ejv        d.ee>ge?f         fd«„¦   «         Z²ejv        d¬e<d.e<fd­„¦   «         Z³dS )´é    N)	ÚAnyÚ	GeneratorÚIteratorÚListÚOptionalÚSequenceÚTupleÚCallableÚcast)ÚUUID)ÚConnectError)ÚProtocol)ÚAsyncFastAPI)ÚFastAPI)Ú	ClientAPIÚ	ServerAPIÚBaseAPI)ÚDEFAULT_DATABASEÚSettingsÚSystem)ÚProducer)ÚSeqIdÚOperationRecord)ÚClientÚAdminClient)ÚAsyncAdminClientÚAsyncClient)Úasync_class_to_sync)Ú	MagicMock)ÚMonkeyPatch©Ú	DocumentsÚ
Embeddings©ÚfastÚnormalÚslowÚPROPERTY_TESTING_PRESETr%   Ú#CHROMA_HYPOTHESIS_CI_REPRODUCE_ONLYÚ1z!Invalid property testing preset: z. Must be one of ú.i�_ )ÚdeadlineÚsuppress_health_checkÚ	verbosityÚbase_hypothesis_settingsÚexplainc              #   ó,   K  — | ]}|t           v¯|V — Œd S ©N)Údisabled_phases)Ú.0Úphases     úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/chromadb/test/conftest.pyú	<genexpr>r7   K   s5   è è € ð 
ð 
Ø°5ÅÐ3OÐ3OˆEÐ3OÐ3OÐ3OÐ3Oð
ð 
ó    T)ÚphasesÚ
print_blobÚbaseé2   )Úmax_examplesr&   éd   r'   iô  )r=   Ústateful_step_countÚCHROMA_RUST_BINDINGS_TEST_ONLYÚCHROMA_INTEGRATION_TEST_ONLYzPSPANN creation/modification disallowed in Rust bindings or integration test modezMSPANN creation/modification allowed in Rust bindings or integration test modeÚapiÚreturnc                 ó.   — |                       ¦   «          d S r2   )Úreset)rB   s    r6   rE   rE   q   s   € Ø‡I‚I�K„K€K€K€Kr8   c                 ó.  ‡— g d¢Š| ||dœ}|                      t          ¦  «        }|�Fˆfd„|j                             ¦   «         D ¦   «         }t	          j        t          j        j        fi |¤ŽS t          t          j        t          j        j        ¦  «        S )a%  Override Hypothesis settings for specific profiles.

    For example, to override max_examples only when the current profile is 'fast':

    override_hypothesis_profile(
        fast=hypothesis.settings(max_examples=50),
    )

    Settings will be merged with the default/active profile.
    )r,   r=   r?   r-   r$   Nc                 ó$   •— i | ]\  }}|‰v ¯	||“ŒS © rH   )r4   ÚkeyÚvalueÚallowable_override_keyss      €r6   ú
<dictcomp>z/override_hypothesis_profile.<locals>.<dictcomp>•   s5   ø€ ð 
ð 
ð 
á��UØÐ-Ð-Ð-ð �à-Ð-Ð-r8   )ÚgetÚCURRENT_PRESETÚ__dict__ÚitemsÚ
hypothesisÚsettingsÚdefaultr   )r%   r&   r'   Úoverride_profilesÚoverriding_profileÚoverridden_settingsrK   s         @r6   Úoverride_hypothesis_profilerW   u   s¼   ø€ ð ð ð Ðð ØØðð Ðð +×.Ò.­~Ñ>Ô>ÐàÐ%ð
ð 
ð 
ð 
à0Ô9×?Ò?ÑAÔAð
ñ 
ô 
Ðõ Ô"¥:Ô#6Ô#>ÐVÐVÐBUÐVÐVÐVå•
Ô#¥ZÔ%8Ô%@ÑAÔAÐAr8   ÚCHROMA_CLUSTER_TEST_ONLYÚMULTI_REGIONÚtrueztilt-spanningú+éx   c                  óN   — t           j                             t          d¬¦  «        S )Nz5Requires Kubernetes to be running with a valid config)Úreason)ÚpytestÚmarkÚskipifÚNOT_CLUSTER_ONLYrH   r8   r6   Úskip_if_not_clusterrc   §   s'   € ÝŒ;×ÒÝØFð ñ ô ð r8   c                  ó’  — t           j                             t           j                             t           j                             t
          ¦  «        ¦  «        d¦  «        } t          d| › �¦  «         t           j                             | ¦  «        st          d| › �¦  «        ‚t          j
        dddddd	d
dddddddd| g¦  «         d S )Nzopenssl.cnfzConfig path: zConfig file not found at ÚopensslÚreqz-x509z-newkeyzrsa:4096z-keyoutzserverkey.pemz-outzservercert.pemz-daysÚ365z-nodesz-subjz/CN=localhostz-config)ÚosÚpathÚjoinÚdirnameÚabspathÚ__file__ÚprintÚexistsÚFileNotFoundErrorÚ
subprocessÚrun)Úconfig_paths    r6   Ú generate_self_signed_certificatert   ®   sÒ   € Ý”'—,’,Ý
Œ�Š�œŸš­Ñ1Ô1Ñ2Ô2°Mñô €Kõ 
Ð
'˜+Ð
'Ð
'Ñ(Ô(Ð(ÝŒ7�>Š>˜+Ñ&Ô&ð KÝÐ I¸KÐ IÐ IÑJÔJÐJÝ„NàØØØØØØØØØØØØØØØð!	
ñô ð ð ð r8   c                  ó<  — t          j         t           j        t           j        ¦  «        5 } |                      d¦  «         |                      t           j        t           j        d¦  «         |                      ¦   «         d         cd d d ¦  «         S # 1 swxY w Y   d S )N)Ú r   é   )ÚsocketÚAF_INETÚSOCK_STREAMÚbindÚ
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRÚgetsockname)Úss    r6   Úfind_free_portr�   Ë   sµ   € Ý	Œ•v”~¥vÔ'9Ñ	:Ô	:ð "¸aØ	�Šˆw‰ŒˆØ	�Š•VÔ&­Ô(;¸QÑ?Ô?Ð?Ø�}Š}‰Œ˜qÔ!ð"ð "ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð "ð "s   ªABÂBÂBFÚportÚis_persistentÚpersist_directoryÚchroma_server_authn_providerÚ$chroma_server_authn_credentials_fileÚchroma_server_authn_credentialsÚ"chroma_auth_token_transport_headerÚchroma_server_authz_providerÚchroma_server_authz_config_fileÚchroma_server_ssl_certfileÚchroma_server_ssl_keyfileÚ;chroma_overwrite_singleton_tenant_database_access_from_authc                 ó(  — |r!|rt          ddddd||d|||||||¬¦  «        }nt          ddddddd|||||||¬¦  «        }t          j        j                             |¦  «        }t          j        |                     ¦   «         d| d	d
|
|	¬¦  «         dS )zRun a Chroma server locallyúchromadb.api.segment.SegmentAPIú chromadb.db.impl.sqlite.SqliteDBú7chromadb.segment.impl.manager.local.LocalSegmentManagerT)Úchroma_api_implÚchroma_sysdb_implÚchroma_producer_implÚchroma_consumer_implÚchroma_segment_manager_implrƒ   r„   Úallow_resetr…   r†   r‡   rˆ   r‰   rŠ   r�   F)r’   r“   r”   r•   r–   rƒ   r—   r…   r†   r‡   rˆ   r‰   rŠ   r�   z0.0.0.0Úerroré   )Úhostr‚   Ú	log_levelÚtimeout_keep_aliveÚssl_keyfileÚssl_certfileN)r   ÚchromadbÚserverÚfastapir   Úuvicornrr   Úapp)r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rR   r    s                 r6   Ú_run_serverr¤   Ò   sù   € ð ð "
Ð*ð "
ÝØ=Ø@Ø!CØ!CØ(aØ'Ø/ØØ)EØ1UØ,KØ/QØ)EØ,Kð IDð
ñ 
ô 
ˆˆõ$ Ø=Ø@Ø!CØ!CØ(aØØØ)EØ1UØ,KØ/QØ)EØ,Kð IDð
ñ 
ô 
ˆõ  Œ_Ô$×,Ò,¨XÑ6Ô6€FÝ„KØ�
Š
‰ŒØØØØØ-Ø/ðñ ô ð ð ð r8   Úattemptsc                 ó¾   — 	 |                       ¦   «          d S # t          $ r:}|dk    r|‚t          j        d¦  «         t	          | |dz   ¦  «         Y d }~d S d }~ww xY w)Né   é   rw   )Ú	heartbeatr   ÚtimeÚsleepÚ_await_server)rB   r¥   Úes      r6   r¬   r¬     sx   € ð-Ø�Š‰ŒˆˆˆøÝð -ð -ð -Ø�bŠ=ˆ=ØˆGåŒJ�q‰MŒMˆMÝ˜#˜x¨!™|Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,øøøøð-øøøs   ‚ ˜
A¢/AÁAúchromadb.api.fastapi.FastAPIr’   Úchroma_client_auth_providerÚchroma_client_auth_credentialsc              #   óò  ‡‡‡‡‡
‡‡‡K  — t          ¦   «         Št          j        d¦  «        Š‰dd|||‰||	‰
|‰f}dt          dt          t
          ddf         fˆˆˆˆˆˆ
ˆˆfd„}| r€t          j        ¦   «         }‰| |j        |||‰||	‰
|‰f} ||¦  «        E d{V —† 	 | 	                    ¦   «          dS # t          t          f$ r}t          j        dk    rn|‚Y d}~dS d}~ww xY w ||¦  «        E d{V —† dS )zmFixture generator that launches a server in a separate process, and yields a
    fastapi client connect to itÚspawnFNÚargsrC   c              3   ó  •K  — ‰                      t          | d¬¦  «        }|                     ¦   «          t          ‰d‰d‰‰‰‰
‰
rdnd‰	¬¦
  «
        }t	          |¦  «        }|                     t          ¦  «        }|                     ¦   «          t          t          |t          ¦  «        r|nt          |¦  «        ¦  «         |V — |                     ¦   «          |                     ¦   «          |                     ¦   «          d S )NT)Útargetr³   ÚdaemonÚ	localhostF)
r’   Úchroma_server_hostÚchroma_server_http_portr—   r¯   r°   rˆ   Úchroma_server_ssl_verifyÚchroma_server_ssl_enabledr�   )ÚProcessr¤   Ústartr   r   Úinstancer   r¬   Ú
isinstancer   r   ÚstopÚkillrj   )r³   ÚprocrR   ÚsystemrB   r’   rˆ   r°   r¯   r�   r‹   Úctxr‚   s        €€€€€€€€r6   rr   z_fastapi_fixture.<locals>.runK  sõ   øè è € Ø�{Š{¥+°DÀˆ{ÑFÔFˆØ�
Š
‰ŒˆÝØ+Ø*Ø$(ØØ(CØ+IØ/QØ%?Ø.HÐ&S d dÈeð IDð
ñ 
ô 
ˆõ ˜Ñ!Ô!ˆØ�oŠo�iÑ(Ô(ˆØ�Š‰ŒˆÝ�Z¨­WÑ5Ô5ÐS�c�cÕ;NÈsÑ;SÔ;SÑTÔTÐTØˆˆˆØ�Š‰ŒˆØ�	Š	‰ŒˆØ�	Š	‰Œˆˆˆr8   Únt)r�   ÚmultiprocessingÚget_contextr   r   r   ÚtempfileÚTemporaryDirectoryÚnameÚcleanupÚPermissionErrorÚNotADirectoryErrorrh   )rƒ   r’   r…   r¯   r†   r‡   r°   rˆ   r‰   rŠ   r‹   rŒ   r�   r³   rr   r„   r­   rÄ   r‚   s    ` `  ``  ` `    @@r6   Ú_fastapi_fixturerÎ     s­  øøøøøøøøè è € õ$ ÑÔ€DÝ
Ô
% gÑ
.Ô
.€Cð 	ØØØ$Ø,Ø'Ø*Ø$Ø'Ø"Ø!ØCð	ð 	ð8•#ð �)¥F¨D°$Ð$6Ô7ð ð ð ð ð ð ð ð ð ð ð ð ð ð0 ð  Ý$Ô7Ñ9Ô9ÐàØØÔ"Ø(Ø0Ø+Ø.Ø(Ø+Ø&Ø%ØGð
ˆð �3�t‘9”9ÐÐÐÐÐÐÐð
	Ø×%Ò%Ñ'Ô'Ð'Ð'Ð'øõ  Õ!3Ð4ð 	ð 	ð 	åŒw˜$ŠˆØà�ð �����øøøøð	øøøð �3�t‘9”9ÐÐÐÐÐÐÐÐÐs   ÂB4 Â4C#ÃCÃC#c                  ó"   — t          d¬¦  «        S )NF©rƒ   ©rÎ   rH   r8   r6   r¡   r¡   †  s   € Ý¨%Ð0Ñ0Ô0Ð0r8   c                  ó$   — t          dd¬¦  «        S )NFú'chromadb.api.async_fastapi.AsyncFastAPI)rƒ   r’   rÑ   rH   r8   r6   Úasync_fastapirÔ   Š  s   € ÝØØAðñ ô ð r8   c                  ó"   — t          d¬¦  «        S )NTrÐ   rÑ   rH   r8   r6   Úfastapi_persistentrÖ   ‘  s   € Ý¨$Ð/Ñ/Ô/Ð/r8   c                  óB   — t          ¦   «          t          ddd¬¦  «        S )NFz./servercert.pemz./serverkey.pem)rƒ   r‹   rŒ   )rt   rÎ   rH   r8   r6   Úfastapi_sslrØ   •  s.   € Ý$Ñ&Ô&Ð&ÝØØ#5Ø"3ðñ ô ð r8   c                  ó  — d} d}t          j        d¦  «        rit          j        dd¦  «                             d¦  «        d         }t          t          j        dd¦  «                             d¦  «        d         ¦  «        } || fS )z³Get server host and port from CHROMA_SERVER_HOST environment variable.

    Returns:
        Tuple of (host, port) from environment, or defaults (localhost, 8000) if not set.
    i@  r·   ÚCHROMA_SERVER_HOSTrv   ú:r   rw   )rh   ÚgetenvÚsplitÚint)r‚   rš   s     r6   Ú_get_server_host_port_from_envrß   ž  s~   € ð €DØ€Då	„yÐ%Ñ&Ô&ð FÝŒyÐ-¨rÑ2Ô2×8Ò8¸Ñ=Ô=¸aÔ@ˆÝ•2”9Ð1°2Ñ6Ô6×<Ò<¸SÑAÔAÀ!ÔDÑEÔEˆà�ˆ:Ðr8   c               #   ó  K  — t          ¦   «         \  } }t          d|| d¬¦  «        }t          |¦  «        }|                     t          ¦  «        }t          |¦  «         |                     ¦   «          |V — |                     ¦   «          d S )Nr®   T)r’   r¹   r¸   r—   )rß   r   r   r¾   r   r¬   r½   rÀ   )rš   r‚   rR   rÃ   rB   s        r6   Úbasic_http_clientrá   ®  sŠ   è è € å/Ñ1Ô1�J€Dˆ$åØ6Ø $ØØð	ñ ô €Hõ �HÑÔ€FØ
�/Š/�)Ñ
$Ô
$€CÝ�#ÑÔÐØ
‡L‚L�N„N€NØ
€L€L€LØ
‡K‚K�M„M€M€M€Mr8   c               #   óþ   K  — t          j        ddd¬¦  «        5 } |                      d¦  «         |                      ¦   «          t	          dd| j        dd¬	¦  «        D ]}|V — Œ	 d d d ¦  «         d S # 1 swxY w Y   d S )
NÚwú	.htpasswdF©ÚsuffixÚdeleteúCadmin:$2y$05$e5sRb6NCcSH3YfbIxe1AGu2h5K7OOd982OXKmd8WyQ3DRQ4MvpnZS
ú;chromadb.auth.basic_authn.BasicAuthenticationServerProviderú1chromadb.auth.basic_authn.BasicAuthClientProviderúadmin:admin©rƒ   r…   r†   r¯   r°   ©rÈ   ÚNamedTemporaryFileÚwriteÚcloserÎ   rÊ   ©ÚfÚitems     r6   Ú0fastapi_server_basic_auth_valid_cred_single_userrô   À  sâ   è è € õ
 
Ô	$ S°ÀUÐ	KÑ	KÔ	Kð ÈqØ	�ŠÐVÑWÔWÐWØ	�Š‰	Œ	ˆ	å$ØØ)fØ12´Ø([Ø+8ð
ñ 
ô 
ð 	ð 	ˆDð ˆJˆJˆJˆJð	ð	ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð ó   šA
A2Á2A6Á9A6c               #   óJ  K  — ddddœ} t          j        ddd¬¦  «        5 }|                      ¦   «         D ] \  }}|                     |› d	|› d
�¦  «         Œ!|                     ¦   «          t          dd|j        dd¬¦  «        D ]}|V — Œ	 d d d ¦  «         d S # 1 swxY w Y   d S )Nz<$2y$10$kY9hn.Wlfcj7n1Cnjmy1kuIhEFIVBsfbNWLQ5ahoKmdc2HLA4oP6iz<$2y$10$CymQ63tic/DRj8dD82915eoM4ke3d6RaNKU4dj4IVJlHyea0yeGDSz<$2y$05$e5sRb6NCcSH3YfbIxe1AGu2h5K7OOd982OXKmd8WyQ3DRQ4MvpnZS)ÚuserÚuser2Úadminrã   rä   Frå   rÛ   ú
ré   rê   rë   rì   )rÈ   rî   rP   rï   rð   rÎ   rÊ   )Úcredsrò   r÷   Úcredró   s        r6   Ú3fastapi_server_basic_auth_valid_cred_multiple_usersrý   Ó  s(  è è € ð OØOØOðð €Eõ
 
Ô	$ S°ÀUÐ	KÑ	KÔ	Kð ÈqØŸ+š+™-œ-ð 	(ð 	(‰JˆD�$Ø�GŠG�tÐ&Ð&˜dÐ&Ð&Ð&Ñ'Ô'Ð'Ð'Ø	�Š‰	Œ	ˆ	å$ØØ)fØ12´Ø([Ø+8ð
ñ 
ô 
ð 	ð 	ˆDð ˆJˆJˆJˆJð	ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s    A*BÂBÂBc               #   óþ   K  — t          j        ddd¬¦  «        5 } |                      d¦  «         |                      ¦   «          t	          dd| j        dd¬	¦  «        D ]}|V — Œ	 d d d ¦  «         d S # 1 swxY w Y   d S )
Nrã   rä   Frå   rè   ré   rê   zadmin:admin1rì   rí   rñ   s     r6   Ú&fastapi_server_basic_auth_invalid_credrÿ   ê  sà   è è € Ý	Ô	$ S°ÀUÐ	KÑ	KÔ	Kð ÈqØ	�ŠÐVÑWÔWÐWØ	�Š‰	Œ	ˆ	å$ØØ)fØ12´Ø([Ø+9ð
ñ 
ô 
ð 	ð 	ˆDð ˆJˆJˆJˆJð	ð	ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð rõ   c               #   ó¼  K  — t          j        ddd¬¦  «        5 } |                      d¦  «         |                      ¦   «          t          j        ddd¬¦  «        5 }|                     d¦  «         |                     ¦   «          t	          ddd	d
| j        d|j        ¬¦  «        D ]}|V — Œ	 d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )Nrã   rä   Frå   rè   z.authzaL  
roles_mapping:
    admin:
        actions:
            [
                "system:reset",
                "tenant:create_tenant",
                "tenant:get_tenant",
                "db:create_database",
                "db:get_database",
                "db:list_collections",
                "db:create_collection",
                "db:get_or_create_collection",
                "collection:get_collection",
                "collection:delete_collection",
                "collection:update_collection",
                "collection:add",
                "collection:delete",
                "collection:get",
                "collection:query",
                "collection:peek",
                "collection:update",
                "collection:upsert",
                "collection:count",
            ]
users:
- id: admin
  role: admin
    rê   rë   ré   z?chromadb.auth.simple_rbac_authz.SimpleRBACAuthorizationProvider)rƒ   r¯   r°   r…   r†   r‰   rŠ   rí   )Úserver_authn_fileÚserver_authz_fileró   s      r6   Ú%fastapi_server_basic_authn_rbac_authzr  ù  s¥  è è € Ý	Ô	$Ø�K¨ð
ñ 
ô 
ð 5à	Ø×ÒØRñ	
ô 	
ð 	
ð 	×ÒÑ!Ô!Ð!åÔ(Ø˜¨ð
ñ 
ô 
ð -	àØ×#Ò#ðñô ð ð> ×#Ò#Ñ%Ô%Ð%å(Ø#Ø,_Ø/<Ø-jØ5FÔ5KØ-nØ0AÔ0Fðñ ô ð 	ð 	�ð �
�
�
�
ð	ðI-	ð -	ð -	ñ -	ô -	ð -	ð -	ð -	ð -	ð -	ð -	øøøð -	ð -	ð -	ð -	ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð 5ð 5s7   šACÁAB9Â-CÂ9B=	Â=CÃ B=	ÃCÃCÃCÚsingleton_databasec           	   #   ó0  K  — t          j        d¦  «        r€t          syt          ¦   «         \  }}t	          d||dddd¬¦  «        }t          |¦  «        }|                     t          ¦  «        }t          |¦  «         | 	                    ¦   «          |V — d S t          j        dd	d¬
¦  «        5 }|                     d| › d�¦  «         |                     ¦   «          t          ddddd|j        ¬¦  «        D ]}|V — Œ	 d d d ¦  «         d S # 1 swxY w Y   d S )NrÚ   r®   Tz1chromadb.auth.token_authn.TokenAuthClientProviderzadmin-tokenF)r’   r¸   r¹   r—   r¯   r°   r�   rã   z.authnrå   z�
users:
  - id: admin
    tokens:
      - admin-token
  - id: singleton_user
    tenant: singleton_tenant
    databases:
      - z%
    tokens:
      - singleton-token
z;chromadb.auth.token_authn.TokenAuthenticationServerProvider)rƒ   r�   r¯   r°   r…   r†   )rh   rÜ   rb   rß   r   r   r¾   r   r¬   r½   rÈ   rî   rï   rð   rÎ   rÊ   )r  rš   r‚   rR   rÃ   rB   rò   ró   s           r6   Ú2fastapi_fixture_admin_and_singleton_tenant_db_userr  2  s¡  è è € õ 
„yÐ%Ñ&Ô&ð Õ/?ð å3Ñ5Ô5‰
ˆˆdåØ:Ø#Ø$(ØØ([Ø+8àHMð	
ñ 	
ô 	
ˆõ ˜Ñ!Ô!ˆØ�oŠo�iÑ(Ô(ˆÝ�cÑÔÐØ�Š‰ŒˆØˆˆˆØˆõ 
Ô	$ S°À%Ð	HÑ	HÔ	Hð ÈAØ	�Šðð 
ðð ð ñ	
ô 	
ð 	
ð 	
�Š‰	Œ	ˆ	å$ØØHLØ([Ø+8Ø)fØ12´ð
ñ 
ô 
ð 	ð 	ˆDð ˆJˆJˆJˆJð	ð#ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   Â.ADÄDÄDc               #   ó¢   K  — t          dd¬¦  «        } t          | ¦  «        }|                     ¦   «          |V — |                     ¦   «          dS )ú�Fixture generator for returning a client configured via environmenet
    variables, intended for externally configured integration tests
    Tr®   ©r—   r’   N©r   r   r½   rÀ   ©rR   rÃ   s     r6   Úintegrationr  h  sX   è è € õ
 ØÐ*Hðñ ô €Hõ �HÑÔ€FØ
‡L‚L�N„N€NØ
€L€L€LØ
‡K‚K�M„M€M€M€Mr8   c               #   ó¢   K  — t          dd¬¦  «        } t          | ¦  «        }|                     ¦   «          |V — |                     ¦   «          dS )r  TrÓ   r	  Nr
  r  s     r6   Úasync_integrationr  v  sX   è è € õ
 ØÐ*Sðñ ô €Hõ �HÑÔ€FØ
‡L‚L�N„N€NØ
€L€L€LØ
‡K‚K�M„M€M€M€Mr8   Úfunction)Úscopec            	   #   ó¬   K  — t          ddddddd¬¦  «        } t          | ¦  «        }|                     ¦   «          |V — |                     ¦   «          dS )z>Fixture generator for segment-based API using in-memory Sqliter�   r�   r‘   FT)r’   r“   r”   r•   r–   rƒ   r—   Nr
  r  s     r6   Úpython_sqlite_ephemeralr  „  sg   è è € õ Ø9Ø<Ø?Ø?Ø$]ØØðñ ô €Hõ �HÑÔ€FØ
‡L‚L�N„N€NØ
€L€L€LØ
‡K‚K�M„M€M€M€Mr8   c            
   #   ól  K  — t          j        ¦   «         } t          ddddddd| j        ¬¦  «        }t	          |¦  «        }|                     ¦   «          |V — |                     ¦   «          	 |                      ¦   «          dS # t          t          f$ r}t          j        dk    rn|‚Y d}~dS d}~ww xY w)z?Fixture generator for segment-based API using persistent Sqliter�   r�   r‘   T)r’   r“   r”   r•   r–   r—   rƒ   r„   rÅ   N)rÈ   rÉ   r   rÊ   r   r½   rÀ   rË   rÌ   rÍ   rh   )Ú	save_pathrR   rÃ   r­   s       r6   Úpython_sqlite_persistentr  –  sÜ   è è € õ Ô+Ñ-Ô-€IÝØ9Ø<Ø?Ø?Ø$]ØØØ#œ.ð	ñ 	ô 	€Hõ �HÑÔ€FØ
‡L‚L�N„N€NØ
€L€L€LØ
‡K‚K�M„M€Mð
Ø×ÒÑÔÐÐÐøõ Õ/Ð0ð ð ð åŒ7�dŠ?ˆ?ØàˆGð ˆDˆDˆDˆDˆDøøøøðøøøs   Á.B ÂB3ÂB.Â.B3c            
   #   ó®   K  — t          dddddddd¬¦  «        } t          | ¦  «        }|                     ¦   «          |V — |                     ¦   «          dS )	z:Fixture generator for system using ephemeral Rust bindingsú!chromadb.api.rust.RustBindingsAPIr�   r‘   FTrv   ©r’   r“   r”   r•   r–   rƒ   r—   r„   Nr
  r  s     r6   Úrust_sqlite_ephemeralr  ¶  sj   è è € õ Ø;Ø<Ø?Ø?Ø$]ØØØð	ñ 	ô 	€Hõ �HÑÔ€FØ
‡L‚L�N„N€NØ
€L€L€LØ
‡K‚K�M„M€M€M€Mr8   c            
   #   óÞ   K  — t          j        ¦   «         } t          ddddddd| j        ¬¦  «        }t	          |¦  «        }|                     ¦   «          |V — |                     ¦   «          dS )z0Fixture generator for system using Rust bindingsr  r�   r‘   Tr  N)rÈ   rÉ   r   rÊ   r   r½   rÀ   )r  rR   rÃ   s      r6   Úrust_sqlite_persistentr  É  sz   è è € õ Ô+Ñ-Ô-€IÝØ;Ø<Ø?Ø?Ø$]ØØØ#œ.ð	ñ 	ô 	€Hõ �HÑÔ€FØ
‡L‚L�N„N€NØ
€L€L€LØ
‡K‚K�M„M€M€M€Mr8   r  r  )ÚparamsÚrequestc                 ó6   — |                       | j        ¦  «        S r2   ©ÚgetfixturevalueÚparam©r  s    r6   Úsqliter#  Ý  ó   € ð ×"Ò" 7¤=Ñ1Ô1Ð1r8   r  r  c                 ó6   — |                       | j        ¦  «        S r2   r  r"  s    r6   Úsqlite_persistentr&  æ  r$  r8   c                  óè   — g d¢} dt           j        v r*|                      d¦  «         |                      d¦  «         dt           j        v rddg} dt           j        v rdg} dt           j        v rd	d
g} | S )N)r¡   rÔ   rÖ   Úsqlite_fixturer&  ÚCHROMA_INTEGRATION_TESTr  r  rA   rX   rá   r@   r  r  )rh   ÚenvironÚappend©Úfixturess    r6   Úfiltered_fixture_namesr.  ï  s‘   € ðð ð €Hð !¥B¤JÐ.Ð.Ø�Š˜Ñ&Ô&Ð&Ø�ŠÐ+Ñ,Ô,Ð,Ø%­¬Ð3Ð3Ø!Ð#6Ð7ˆØ!¥R¤ZÐ/Ð/Ø'Ð(ˆØ'­2¬:Ð5Ð5Ø+Ð-EÐFˆØ€Or8   c                  ó6   — d„ t          ¦   «         D ¦   «         } | S )Nc                 ó   — g | ]}|d v¯|‘Œ	S ))r  r  r  r  rH   )r4   Úfixtures     r6   ú
<listcomp>z6filtered_http_server_fixture_names.<locals>.<listcomp>  s:   € ð 
ð 
ð 
àØð
ð
ð 
ð 	ð
ð 
ð 
r8   )r.  r,  s    r6   Ú"filtered_http_server_fixture_namesr3    s-   € ð
ð 
å-Ñ/Ô/ð
ñ 
ô 
€Hð €Or8   c                  ó"   — t           t          g} | S r2   )rô   rý   r,  s    r6   Úsystem_fixtures_authr5    s   € å8Ý;ð€Hð €Or8   c                  ó   — t           g} | S r2   )r  r,  s    r6   Ú system_fixtures_authn_rbac_authzr7    s   € õ 6Ð6€HØ€Or8   c                  ó   — t           g} | S r2   )r  r,  s    r6   Ú1system_fixtures_root_and_singleton_tenant_db_userr9  "  s   € õ CÐC€HØ€Or8   c                  ó   — t           g} | S r2   )rÿ   r,  s    r6   Úsystem_fixtures_wrong_authr;  )  s   € Ý6Ð7€HØ€Or8   c                  ó   — t           g} | S r2   )rØ   r,  s    r6   Úsystem_fixtures_sslr=  .  s   € Ýˆ}€HØ€Or8   Úmodule)r  r  c              #   ó>   K  — |                       ¦   «         E d {V —† d S r2   ©r!  r"  s    r6   Úsystem_wrong_authrA  3  ó.   è è € ð �}Š}‰ŒÐÐÐÐÐÐÐÐÐr8   c              #   ó>   K  — |                       ¦   «         E d {V —† d S r2   r@  r"  s    r6   Úsystem_authn_rbac_authzrD  :  rB  r8   c                 ó6   — |                       | j        ¦  «        S r2   r  r"  s    r6   Úsystem_http_serverrF  A  s   € ð ×"Ò" 7¤=Ñ1Ô1Ð1r8   c                 ó6   — |                       | j        ¦  «        S r2   r  r"  s    r6   rÃ   rÃ   H  s   € à×"Ò" 7¤=Ñ1Ô1Ð1r8   c              #   ó>   K  — |                       ¦   «         E d {V —† d S r2   r@  r"  s    r6   Ú
system_sslrI  M  ó,   è è € à�}Š}‰ŒÐÐÐÐÐÐÐÐÐr8   c              #   ó>   K  — |                       ¦   «         E d {V —† d S r2   r@  r"  s    r6   Úsystem_authrL  R  rJ  r8   c                   ó   — e Zd ZdS )ÚAsyncClientCreatorSyncN©Ú__name__Ú
__module__Ú__qualname__rH   r8   r6   rN  rN  W  ó   € € € € € à€Dr8   rN  c                   ó   — e Zd ZdS )ÚAsyncAdminClientSyncNrO  rH   r8   r6   rU  rU  \  rS  r8   rU  rÃ   c              #   óÂ   K  — |                       ¦   «          |                      t          ¦  «        }t          |t          ¦  «        rt          |¦  «        }|V — d S |V — d S r2   )Úreset_stater¾   r   r¿   r   r   )rÃ   rB   Útransformeds      r6   rB   rB   a  sg   è è € à
×ÒÑÔÐØ
�/Š/�)Ñ
$Ô
$€Cå�#•|Ñ$Ô$ð Ý)¨#Ñ.Ô.ˆØÐÐÐÐÐàˆ	ˆ	ˆ	ˆ	ˆ	r8   c                   ó„   — e Zd ZU dZeed<   g Zee         ed<   defd„Z	de
de
defd	„Zdefd
„Zde
de
defd„Zdefd„ZdS )ÚClientFactorieszÚThis allows consuming tests to be parameterized by async/sync versions of the client and papers over the async implementation.
    If you don't need to manually construct clients, use the `client` fixture instead.
    Ú_systemÚ_created_clientsrÃ   c                 ó   — || _         d S r2   )r[  )ÚselfrÃ   s     r6   Ú__init__zClientFactories.__init__v  s   € ØˆŒˆˆr8   r³   ÚkwargsrC   c                 ó�  — |                      d¦  «        €| j        j        |d<   |                      d¦  «        €t          r
t          |d<   | j        j        j        dk    r@t          t          t          j	        |i |¤Ž¦  «        }| j
                             |¦  «         |S t          |i |¤Ž}| j
                             |¦  «         |S )NrR   ÚdatabaserÓ   )rM   r[  rR   ÚMULTI_REGION_ENABLEDÚDEFAULT_MCMR_DATABASEr’   r   ÚClientCreatorrN  Úcreater\  r+  ©r^  r³   r`  Úclients       r6   Úcreate_clientzClientFactories.create_clienty  sÌ   € Ø�:Š:�jÑ!Ô!Ð)Ø!%¤Ô!6ˆF�:Ñà�:Š:�jÑ!Ô!Ð)Õ.BÐ)Ý!6ˆF�:Ñð ŒLÔ!Ô1Ø8ò9ð 9õ �-Õ)?Ô)FÈÐ)WÐPVÐ)WÐ)WÑXÔXˆFØÔ!×(Ò(¨Ñ0Ô0Ð0ØˆMå Ð/¨Ð/Ð/ˆØÔ×$Ò$ VÑ,Ô,Ð,Øˆr8   c                 ó2  — | j         j        j        dk    rNt          t          t
                               | j         ¦  «        ¦  «        }| j                             |¦  «         |S t	          j	        | j         ¦  «        }| j                             |¦  «         |S ©NrÓ   )
r[  rR   r’   r   re  rN  Úfrom_system_asyncr\  r+  Úfrom_system©r^  rh  s     r6   Úcreate_client_from_systemz)ClientFactories.create_client_from_systemŒ  s�   € àŒLÔ!Ô1Ø8ò9ð 9õ ÝÕ5×GÒGÈÌÑUÔUñô ˆFð Ô!×(Ò(¨Ñ0Ô0Ð0ØˆMåÔ*¨4¬<Ñ8Ô8ˆØÔ×$Ò$ VÑ,Ô,Ð,Øˆr8   c                 óò   — | j         j        j        dk    r;t          t          t          |i |¤Ž¦  «        }| j                             |¦  «         |S t	          |i |¤Ž}| j                             |¦  «         |S rk  )r[  rR   r’   r   r   rU  r\  r+  rg  s       r6   Úcreate_admin_clientz#ClientFactories.create_admin_client›  sƒ   € àŒLÔ!Ô1Ø8ò9ð 9õ �+Õ';¸TÐ'LÀVÐ'LÐ'LÑMÔMˆFØÔ!×(Ò(¨Ñ0Ô0Ð0ØˆMå˜dÐ- fÐ-Ð-ˆØÔ×$Ò$ VÑ,Ô,Ð,Øˆr8   c                 ó2  — | j         j        j        dk    rNt          t          t
                               | j         ¦  «        ¦  «        }| j                             |¦  «         |S t	          j        | j         ¦  «        }| j                             |¦  «         |S rk  )	r[  rR   r’   r   r   rU  rm  r\  r+  rn  s     r6   Úcreate_admin_client_from_systemz/ClientFactories.create_admin_client_from_system¨  s†   € àŒLÔ!Ô1Ø8ò9ð 9õ �+Õ';×'GÒ'GÈÌÑ'UÔ'UÑVÔVˆFØÔ!×(Ò(¨Ñ0Ô0Ð0ØˆMåÔ(¨¬Ñ6Ô6ˆØÔ×$Ò$ VÑ,Ô,Ð,Øˆr8   N)rP  rQ  rR  Ú__doc__r   Ú__annotations__r\  r   r   r_  r   re  ri  ro  r   rq  rs  rH   r8   r6   rZ  rZ  m  sã   € € € € € € ðð ð €O€O�Oà(*Ð�d˜9”oÐ*Ð*Ñ*ð˜vð ð ð ð ð 3ð °#ð ¸-ð ð ð ð ð&¨=ð ð ð ð ð¨ð ¸ð Àð ð ð ð ð°ð ð ð ð ð ð r8   rZ  c              #   ó  K  — |                       ¦   «          t          | ¦  «        }|V — t          |j        ¦  «        dk    rH|j                             ¦   «         }|                     ¦   «          ~t          |j        ¦  «        dk    °Fd S d S )Nr   )rW  rZ  Úlenr\  ÚpopÚclear_system_cache)rÃ   Ú	factoriesrh  s      r6   Úclient_factoriesr{  ¶  s‘   è è € à
×ÒÑÔÐå Ñ'Ô'€IØ
€O€O€Oå
ˆiÔ(Ñ
)Ô
)¨AÒ
-Ð
-ØÔ+×/Ò/Ñ1Ô1ˆØ×!Ò!Ñ#Ô#Ð#Øõ ˆiÔ(Ñ
)Ô
)¨AÒ
-Ð
-Ð
-Ð
-Ð
-Ð
-r8   Údatabase_namec                 óˆ   — t          |                      d¦  «        ¦  «        dk    r|                      d¦  «        d         nd S )Nr[   rw   r   )rw  rÝ   )r|  s    r6   Úget_topology_namer~  Ã  sA   € Ý*-¨m×.AÒ.AÀ#Ñ.FÔ.FÑ*GÔ*GÈ!Ò*KÐ*Kˆ=×Ò˜sÑ#Ô# AÔ&Ð&ÐQUÐUr8   rh  c                 óš   — |                       ¦   «         }|j        dk    rd|_        t          |¦  «        }|                     |¦  «         d S )NrÓ   r®   )Úget_settingsr’   r   Úcreate_database)rh  r|  Úadmin_settingsrù   s       r6   r�  r�  Ç  sQ   € Ø×(Ò(Ñ*Ô*€NØÔ%Ð)RÒRÐRØ)GˆÔ&Ý˜Ñ'Ô'€EØ	×Ò˜-Ñ(Ô(Ð(Ð(Ð(r8   c                 óÒ   — dt          t          j        ¦   «         ¦  «        z   }t          | j        ¦  «        }|�|dz   |z   }t          | |¦  «         |                      |¦  «         dS )zHCreate an isolated database for a test and updates the client to use it.Útest_Nr[   )ÚstrÚuuidÚuuid4r~  rb  r�  Úset_database)rh  rb  Ú	topo_names      r6   Úcreate_isolated_databaserŠ  Ï  sg   € à��TœZ™\œ\Ñ*Ô*Ñ*€HÝ! &¤/Ñ2Ô2€IØÐØ˜s‘? XÑ-ˆÝ�F˜HÑ%Ô%Ð%Ø
×Ò˜Ñ!Ô!Ð!Ð!Ð!r8   c              #   ó  K  — |                       ¦   «          | j        j        dk    r0t          t          t
                               | |¬¦  «        ¦  «        }nt          j        | |¬¦  «        }|V — | 	                    ¦   «          d S ©NrÓ   )rb  )
rW  rR   r’   r   r   rN  rl  re  rm  ry  )rÃ   r|  rh  s      r6   rh  rh  Ù  s‹   è è € à
×ÒÑÔÐà„Ô&Ð*SÒSÐSÝÝÝ"×4Ò4°VÀmÐ4ÑTÔTñ
ô 
ˆˆõ
 Ô*¨6¸MÐJÑJÔJˆà
€L€L€LØ
×ÒÑÔÐÐÐr8   c                 ó6   — t          t          | j        ¦  «        S r2   )r   r…  r!  r"  s    r6   r|  r|  é  s   € å•�W”]Ñ#Ô#Ð#r8   Úmetafuncc                 óB  — d| j         v r•t          j        t          d¬¦  «        g}t          rX| j                             d¦  «        r>|                     t          j        t          dt          j	        j
        ¬¦  «        ¦  «         |                      d|d¬¦  «         d	S d	S )
zNParameterize database_name based on whether the test opted in to multi-region.r|  Úclassic)ÚidÚtest_with_multi_regionzmulti-region-db)r‘  ÚmarksT)ÚindirectN)Úfixturenamesr_   r!  r   rc  Ú
definitionÚget_closest_markerr+  rd  r`   r’  Úparametrize)rŽ  r  s     r6   Úpytest_generate_testsr™  î  s²   € à˜(Ô/Ð/Ð/Ý”,Õ/°IÐ>Ñ>Ô>Ð?ˆÝð 		 HÔ$7×$JÒ$JØ$ñ%
ô %
ð 		ð �MŠMÝ”Ý)Ø(Ý œ+Ô<ðñ ô ñô ð ð 	×Ò˜_¨f¸tÐÑDÔDÐDÐDÐDð 0Ð/r8   Ú	test_func.c                 ó@   — t           j                             | ¦  «        S )zÑOpt-in decorator for multi-region testing.

    If MULTI_REGION_ENABLED: Test runs with MCMR database (tilt-spanning+default_database)
    If not MULTI_REGION_ENABLED: Test runs with default database only
    )r_   r`   r’  )rš  s    r6   Úmulti_region_testrœ  ÿ  s   € õ Œ;×-Ò-¨iÑ8Ô8Ð8r8   ró   c                 óÈ   — t          | d¦  «        rQ|                      ¦   «         D ]+}|j        dk    rt          rdnd}| j        › |› �| _         dS Œ,| j        › d�| _        dS dS )z'Modify test names to show database typeÚiter_markersr’  z[multi-region]z[single-region]N)Úhasattrrž  rÊ   rc  Ú_nodeid)ró   Úmarkerræ   s      r6   Úpytest_itemcollectedr¢    s�   € åˆt�^Ñ$Ô$ð 	<Ø×'Ò'Ñ)Ô)ð 	<ð 	<ˆFØŒ{Ð6Ò6Ð6å-AÐXÐ)Ð)ÐGX�Ø"&¤,Ð8°Ð8Ð8�”Ø��ð	 7ð #œlÐ;Ð;Ð;ˆDŒLˆLˆLð	<ð 	<r8   rF  c              #   ó@  K  — |                       ¦   «          | j        j        dk    rIt          t          t
                               | |¬¦  «        ¦  «        }|V — |                     ¦   «          d S t          j	        | |¬¦  «        }|V — |                     ¦   «          d S rŒ  )
rW  rR   r’   r   r   rN  rl  ry  re  rm  )rF  r|  rh  s      r6   Úhttp_clientr¤    s½   è è € ð ×"Ò"Ñ$Ô$Ð$ð 	Ô#Ô3Ø4ò	5ð 	5õ ÝÝ"×4Ò4Ø"¨]ð 5ñ ô ñ
ô 
ˆð ˆˆˆØ×!Ò!Ñ#Ô#Ð#Ð#Ð#åÔ*Ð+=ÈÐVÑVÔVˆØˆˆˆØ×!Ò!Ñ#Ô#Ð#Ð#Ð#r8   rI  c              #   óŠ   K  — |                       ¦   «          t          j        | ¦  «        }|V — |                     ¦   «          d S r2   )rW  re  rm  ry  )rI  rh  s     r6   Ú
client_sslr¦  2  sI   è è € à×ÒÑÔÐÝÔ& zÑ2Ô2€FØ
€L€L€LØ
×ÒÑÔÐÐÐr8   rA  c              #   ón   K  — |                       ¦   «          |                      t          ¦  «        }|V — d S r2   ©rW  r¾   r   )rA  rB   s     r6   Úapi_wrong_credr©  :  s:   è è € ð ×!Ò!Ñ#Ô#Ð#Ø
×
$Ò
$¥YÑ
/Ô
/€CØ
€I€I€I€I€Ir8   rD  c              #   ón   K  — |                       ¦   «          |                      t          ¦  «        }|V — d S r2   r¨  )rD  rB   s     r6   Úapi_with_authn_rbac_authzr«  C  s:   è è € ð ×'Ò'Ñ)Ô)Ð)Ø
!×
*Ò
*­9Ñ
5Ô
5€CØ
€I€I€I€I€Ir8   rL  c              #   ór   K  — | }|                      ¦   «          |                     t          ¦  «        }|V — d S r2   r¨  )rL  Ú_sysrB   s      r6   Úapi_with_server_authr®  L  s;   è è € à€DØ×ÒÑÔÐØ
�-Š-�	Ñ
"Ô
"€CØ
€I€I€I€I€Ir8   c                   ó^   — e Zd Zdededee         dedee	e         e	e
         f         f
d„ZdS )Ú
ProducerFnÚproducerÚcollection_idÚ
embeddingsÚnrC   c                 ó   — d S r2   rH   )r^  r±  r²  r³  r´  s        r6   Ú__call__zProducerFn.__call__X  s
   € ð =@¸Cr8   N)rP  rQ  rR  r   r   r   r   rÞ   r	   r   r   r¶  rH   r8   r6   r°  r°  W  s{   € € € € € ð@àð@ð ð@ð ˜_Ô-ð	@ð
 ð@ð 
ˆx˜Ô(¨(°5¬/Ð9Ô	:ð@ð @ð @ð @ð @ð @r8   r°  r±  r²  r³  r´  c                 óÔ   — g }g }t          |¦  «        D ]Q}t          |¦  «        }|                      ||¦  «        }|                     |¦  «         |                     |¦  «         ŒR||fS r2   )ÚrangeÚnextÚsubmit_embeddingr+  )	r±  r²  r³  r´  Úsubmitted_embeddingsÚseq_idsÚ_r­   Úseq_ids	            r6   Úproduce_n_singler¿  a  sz   € ð ÐØ€GÝ�1‰XŒXð ð ˆÝ�ÑÔˆØ×*Ò*¨=¸!Ñ<Ô<ˆØ×#Ò# AÑ&Ô&Ð&Ø�Š�vÑÔÐÐØ Ð(Ð(r8   c                 óª   — g }g }t          |¦  «        D ]&}t          |¦  «        }|                     |¦  «         Œ'|                      ||¦  «        }||fS r2   )r¸  r¹  r+  Úsubmit_embeddings)r±  r²  r³  r´  r»  r¼  r½  r­   s           r6   Úproduce_n_batchrÂ  q  si   € ð ÐØ!€GÝ�1‰XŒXð 'ð 'ˆÝ�ÑÔˆØ×#Ò# AÑ&Ô&Ð&Ð&Ø×(Ò(¨Ð8LÑMÔM€GØ Ð(Ð(r8   c                  ó   — t           t          gS r2   )r¿  rÂ  rH   r8   r6   Úproduce_fn_fixturesrÄ  €  s   € Ý�oÐ.Ð.r8   c              #   ó   K  — | j         V — d S r2   r@  r"  s    r6   Úproduce_fnsrÆ  „  s   è è € ð Œ-ÐÐÐÐÐr8   Úconfigc                 ó^   — |                       dd¦  «         |                       dd¦  «         dS )zRegister custom markersÚmarkersz+dual_database: run test with both databaseszMtest_with_multi_region: run test with MCMR database when MULTI_REGION_ENABLEDN)Úaddinivalue_line)rÇ  s    r6   Úpytest_configurerË  ‹  sA   € à
×Ò˜IÐ'TÑUÔUÐUØ
×ÒØØWñô ð ð ð r8   c                 ó8   — |                       ¦   «         j        du S )ziReturns True if the client is in-process (a SQLite client), False if it's out-of-process (a HTTP client).N)r€  r¹   )rh  s    r6   Úis_client_in_processrÍ  ”  s   € à×ÒÑ Ô Ô8¸DÐ@Ð@r8   )Úautouse)NNNc              #   óž   K  — | j         j        }t                               d|› �¦  «         dV — t                               d|› �¦  «         dS )z2Automatically logs the start and end of each test.zStarting test: NzFinished test: )ÚnoderÊ   ÚloggerÚdebug)r  Ú	test_names     r6   Ú	log_testsrÔ  ™  sY   è è € ð ”Ô!€IÝ
‡L‚LÐ. 9Ð.Ð.Ñ/Ô/Ð/ð 
€E€E€Eå
‡L‚LÐ. 9Ð.Ð.Ñ/Ô/Ð/Ð/Ð/r8   c                  ó*   — dt           dt          fd„} | S )z"Return mock embeddings for testingÚinputrC   c                 ó   — d„ | D ¦   «         S )Nc                 óR   — g | ]$}t          j        g d ¢t           j        ¬¦  «        ‘Œ%S )©gš™™™™™¹?gš™™™™™É?g333333Ó?)Údtype)ÚnpÚarrayÚfloat32)r4   r½  s     r6   r2  z=mock_embeddings.<locals>._mock_embeddings.<locals>.<listcomp>ª  s-   € ÐKÐKÐKÀ•”˜˜˜µ´
Ð;Ñ;Ô;ÐKÐKÐKr8   rH   )rÖ  s    r6   Ú_mock_embeddingsz)mock_embeddings.<locals>._mock_embeddings©  s   € ØKÐKÀUÐKÑKÔKÐKr8   r!   )rÞ  s    r6   Úmock_embeddingsrß  ¥  s2   € ðL¥	ð L­jð Lð Lð Lð Lð Ðr8   Úmonkeypatchc                 ót  — t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         dœ}|                      t          dt          t          j        fi |¤Ž¦  «         t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         dœ}t          ¦   «         }t          j        g d¢g¦  «        |j        _        t          j        g d¢g¦  «        |j	        _        |t          ¦   «         |f|d         j
        _        |                     ¦   «         D ]\  }}|                      ||d¬¦  «         Œ| S )zMock common dependencies)ÚPILÚtorchÚopenaiÚcohereÚsentence_transformersÚollamaÚInstructorEmbeddingÚvoyageaiÚtext2vecÚ	open_clipÚboto3Úmodules)z	PIL.Imagez)sentence_transformers.SentenceTransformerzollama.ClientzInstructorEmbedding.INSTRUCTORzvoyageai.Clientztext2vec.SentenceModelrÙ  rë  F)Úraising)r   ÚsetattrÚsysÚdictrí  rÛ  rÜ  Úencode_textÚreturn_valueÚencode_imageÚcreate_model_and_transformsrP   )rà  Úmock_modulesÚmock_attributesÚ
mock_modelri   Úmocks         r6   Úmock_common_depsrú  ¯  si  € õ
 ‰{Œ{Ý‘”Ý‘+”+Ý‘+”+Ý!*¡¤Ý‘+”+Ý(™{œ{Ý‘K”KÝ‘K”KÝ‘[”[Ý‘”ðð €Lð ×Ò�˜Y­­S¬[Ð(IÐ(I¸LÐ(IÐ(IÑJÔJÐJõ ‘[”[Ý5>±[´[Ý"™œÝ*3©+¬+Ý$™;œ;Ý"+¡+¤+ðð €Oõ ‘”€JÝ*,¬(°O°O°OÐ3DÑ*EÔ*E€JÔÔ'Ý+-¬8°_°_°_Ð4EÑ+FÔ+F€JÔÔ(àÝ‰ŒØðJ€L�ÔÔ9ÔFð &×+Ò+Ñ-Ô-ð 7ð 7‰
ˆˆdØ×Ò˜D $°ÐÑ6Ô6Ð6Ð6àÐr8   )r;   )rC   N)FNNNNNNNNNF)r   )Fr®   NNNNNNNNNNF)r  )´rÆ   rh   rx   rq   rÈ   rª   Útypingr   r   r   r   r   r   r	   r
   r   r†  r   rQ   r_   r¢   Úhttpxr   Útyping_extensionsr   Úchromadb.api.async_fastapir   Úchromadb.api.fastapir   Úchromadb.server.fastapirŸ   Úchromadb.apir   r   r   Úchromadb.configr   r   r   Úchromadb.ingestr   Úchromadb.typesr   r   Úchromadb.api.clientr   re  r   Úchromadb.api.async_clientr   r   ÚAsyncClientCreatorÚchromadb.utils.async_to_syncr   Úloggingrð  ÚnumpyrÛ  Úunittest.mockr   r    Úchromadb.api.typesr"   r#   Ú	getLoggerrP  rÑ  ÚVALID_PRESETSrÜ   rN   ÚHYPOTHESIS_CI_REPRODUCE_ONLYÚ
ValueErrorÚHealthCheckÚdata_too_largeÚlarge_base_exampleÚfunction_scoped_fixtureÚ	VerbosityÚverboser/   rñ  r…  ru  ÚPhaseÚshrinkr3   ÚgetattrÚexplain_phaseÚaddÚupdateÚtuplerR   Úregister_profileÚget_profileÚload_profileÚis_spann_disabled_modeÚskip_reason_spann_disabledÚskip_reason_spann_enabledrE   rW   rb   rc  ÚMULTI_REGION_TOPOLOGYrd  ÚCOMPACTION_SLEEPÚMarkDecoratorrc   rt   rÞ   r�   Úboolr¤   r¬   rÎ   r¡   rÔ   rÖ   rØ   rß   r1  rá   rô   rý   rÿ   r  r  r  r  r  r  r  r  r*  ÚFixtureRequestr#  r&  r.  r3  r5  r7  r9  r;  r=  rA  rD  rF  rÃ   rI  rL  rN  rU  rB   rZ  r{  r~  r�  rŠ  rh  r|  ÚMetafuncr™  rœ  r’  ÚItemr¢  r¤  r¦  r©  r«  r®  r°  r¿  rÂ  rÄ  rÆ  ÚConfigrË  rÍ  rÔ  rß  rú  rH   r8   r6   ú<module>r,     s¤  ðØ Ð Ð Ð Ð Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø $Ð $Ð $Ð $Ð $Ð $Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dðð ð ð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø €€€à	ˆÔ	˜8Ñ	$Ô	$€à*Ð*Ð*€Ø�”Ð4°fÑ=Ô=€Ø(˜rœyÐ)NÑOÔOÐSVÒVÐ à˜Ð&Ð&Ø
ˆ*Ø]¨NÐ]Ð]È]Ð]Ð]Ð]ñô ð ð
 àÔÔ-ØÔÔ1ØÔÔ6ðð
 Ô%Ô-ð,ð ,Ð ˜$˜s C˜xœ.ð ð ñ ð  ð Ø!Ô'Ô.Ð/€OØ�G˜JÔ,¨i¸Ñ>Ô>€MØÐ Ø×Ò˜MÑ*Ô*Ð*à×#Ò#Øˆuð 
ð 
Ø)Ô/ð
ñ 
ô 
ñ 
ô 
ð ð	 $ñ ô ð ð %€
Ô Ô $Ð HÐ HÐ/GÐ HÐ HÐ Hà 
Ô × $Ò $Ø
ˆJÔ×+Ò+¨FÑ3Ô3À"ð %ñ ô ð ð Ô × $Ò $ØˆjÔ!×-Ò-¨fÑ5Ô5ÀCð %ñ ô ð ð Ô × $Ò $Ø
ØÔ×#Ò# FÑ+Ô+ØØð	 %ñ ô ð ð Ô ×  Ò   Ñ 0Ô 0Ð 0ð
 €B„IÐ.Ñ/Ô/°3Ò6ð 8Ø€r„yÐ/Ñ0Ô0°CÒ7ð ð
 Wð ð Tð ð
ˆwð ˜4ð ð ð ð ð
 +/Ø,0Ø*.ð(Bð (BØ
�:Ô&Ô
'ð(Bà�ZÔ(Ô)ð(Bð �:Ô&Ô
'ð(Bð ˆjÔ!Ô"ð	(Bð (Bð (Bð (BðV �2”9Ð7Ñ8Ô8¸CÒ?Ð Ø+Ð+ÐS°	°´	¸.Ñ0IÔ0IÈVÒ0SÐ Ø'Ð Ø0ÐEÐEÐ3CÐEÐEÐ ØÐ ð˜VÔ1ð ð ð ð ðð ð ð ð:"˜ð "ð "ð "ð "ð  Ø'+Ø26Ø:>Ø59Ø8<Ø26Ø59Ø04Ø/3ØRWð;ð ;Ø
ð;àð;ð   ”}ð;ð #+¨3¤-ð	;ð
 +3°3¬-ð;ð &.¨c¤]ð;ð )1°¬ð;ð #+¨3¤-ð;ð &.¨c¤]ð;ð !)¨¤ð;ð  (¨œ}ð;ð BJÈ$Äð;ð 
ð;ð ;ð ;ð ;ð|-ð -�yð -¨Cð -¸ð -ð -ð -ð -ð  Ø9Ø26Ø15Ø:>Ø59Ø48Ø8<Ø26Ø59Ø04Ø/3ØRWðhð hØðhàðhð #+¨3¤-ðhð "*¨#¤ð	hð
 +3°3¬-ðhð &.¨c¤]ðhð %-¨S¤Mðhð )1°¬ðhð #+¨3¤-ðhð &.¨c¤]ðhð !)¨¤ðhð  (¨œ}ðhð BJÈ$Äðhð ˆv�t˜TÐ!Ô"ðhð hð hð hðV1�˜6 4¨Ð-Ô.ð 1ð 1ð 1ð 1ð�y ¨¨tÐ!3Ô4ð ð ð ð ð0˜I f¨d°DÐ&8Ô9ð 0ð 0ð 0ð 0ð�Y˜v t¨TÐ1Ô2ð ð ð ð ð¨¨c°3¨h¬ð ð ð ð ð  €„ÑÔð˜9 V¨T°4Ð%7Ô8ð ð ð ñ Ôðð"¸)ÀFÈDÐRVÐDVÔ:Wð ð ð ð ð&¸YØ
ˆD�$Ðô>ð ð ð ð ð.°	¸&À$ÈÐ:LÔ0Mð ð ð ð ð6¨y¸ÀÀtÐ9KÔ/Lð 6ð 6ð 6ð 6ðt 3ð3ð 3Øð3àˆv�t˜TÐ!Ô"ð3ð 3ð 3ð 3ðl €„ÑÔð
�Y˜v t¨TÐ1Ô2ð 
ð 
ð 
ñ Ôð
ð €„ÑÔð
˜9 V¨T°4Ð%7Ô8ð 
ð 
ð 
ñ Ôð
ð €„�jÐ!Ñ!Ô!ð ¨6°4¸Ð+=Ô!>ð ð ð ñ "Ô!ðð" €„�jÐ!Ñ!Ô!ð )¨F°D¸$Ð,>Ô"?ð ð ð ñ "Ô!ðð> €„�jÐ!Ñ!Ô!ð˜y¨°°tÐ);Ô<ð ð ð ñ "Ô!ðð$ €„�jÐ!Ñ!Ô!ð 	¨&°$¸Ð*<Ô =ð ð ð ñ "Ô!ðð& €„à'¨2¬:Ð5Ð5ð $Ð$Ð$à
#Ð	$ðñ ô ð
2�FÔ)ð 2¨i¸ÀÀdÐ8JÔ.Kð 2ð 2ð 2ñô ð
2ð €„à'¨2¬:Ð5Ð5ð %Ð%Ð%à
$Ð	%ðñ ô ð
2˜vÔ4ð 2¸À6È4ÐQUÐCUÔ9Vð 2ð 2ð 2ñô ð
2ð  S¤	ð ð ð ð ð*¨D°¬Ið ð ð ð ð˜d 8¨B°	¸&À$ÈÐ:LÔ0MÐ,MÔ#NÔOð ð ð ð ð¨$ØˆR�˜6 4¨Ð-Ô.Ð.Ô/ô+ð ð ð ð ð¸4ØˆR�˜6 4¨Ð-Ô.Ð.Ô/ô<ð ð ð ð ð D¨°"°iÀÈÈdÐ@RÔ6SÐ2SÔ)TÔ$Uð ð ð ð ð
˜T (¨2¨y¸ÀÀtÐ9KÔ/LÐ+LÔ"MÔNð ð ð ð ð
 €„�hÐ'AÐ'AÑ'CÔ'CÐDÑDÔDðØÔ"ðàˆy˜$ Ð$Ô%ðð ð ñ EÔDðð €„�hÐ'GÐ'GÑ'IÔ'IÐJÑJÔJðØÔ"ðàˆy˜$ Ð$Ô%ðð ð ñ KÔJðð €„Ð9Ð9Ñ;Ô;Ð<Ñ<Ô<ð2ØÔ"ð2àˆy˜$ Ð$Ô%ð2ð 2ð 2ñ =Ô<ð2ð €„�jÐ)?Ð)?Ñ)AÔ)AÐBÑBÔBð2�FÔ)ð 2¨i¸	À4ÈÐ8MÔ.Nð 2ð 2ð 2ñ CÔBð2ð €„�hÐ':Ð':Ñ'<Ô'<Ð=Ñ=Ô=ð˜Ô-ð °)¸IÀtÈTÐ<QÔ2Rð ð ð ñ >Ô=ðð €„�hÐ';Ð';Ñ'=Ô'=Ð>Ñ>Ô>ð˜Ô.ð °9¸YÈÈdÐ=RÔ3Sð ð ð ñ ?Ô>ðð ð	ð 	ð 	ð 	ð 	Ð/ñ 	ô 	ñ Ôð	ð ð	ð 	ð 	ð 	ð 	Ð+ñ 	ô 	ñ Ôð	ð €„�jÐ!Ñ!Ô!ð�ð ˜9 Y°°dÐ%:Ô;ð ð ð ñ "Ô!ððFð Fð Fð Fð Fñ Fô Fð FðR €„�jÐ!Ñ!Ô!ð	˜Vð 	¨	°/À4ÈÐ2MÔ(Nð 	ð 	ð 	ñ "Ô!ð	ðV Sð V¨X°c¬]ð Vð Vð Vð Vð)˜Ið )°cð )¸dð )ð )ð )ð )ð" Yð "°4ð "ð "ð "ð "ð €„�jÐ!Ñ!Ô!ð �6ð  ¨#ð  °)¸IÀtÈTÐ<QÔ2Rð  ð  ð  ñ "Ô!ð ð „ð$˜6Ô0ð $°Sð $ð $ð $ñ „ð$ðE F¤Oð E¸ð Eð Eð Eð Eð"9 ¨#¨s¨(Ô!3ð 9¸ð 9ð 9ð 9ð 9ð +Ð ð<˜vœ{ð <¨tð <ð <ð <ð <ð €„�jÐ!Ñ!Ô!ð$Øð$Ø/2ð$àˆy˜$ Ð$Ô%ð$ð $ð $ñ "Ô!ð$ð. €„�jÐ!Ñ!Ô!ð ˜6ð   i°	¸4ÀÐ0EÔ&Fð  ð  ð  ñ "Ô!ð ð €„�jÐ!Ñ!Ô!ðØðàˆy˜$ Ð$Ô%ðð ð ñ "Ô!ðð €„�jÐ!Ñ!Ô!ðØ#ðàˆy˜$ Ð$Ô%ðð ð ñ "Ô!ðð €„�jÐ!Ñ!Ô!ð fð °¸9ÀdÈDÐ;PÔ1Qð ð ð ñ "Ô!ðð@ð @ð @ð @ð @�ñ @ô @ð @ð)Øð)àð)ð ˜Ô)ð)ð ð	)ð
 ˆ8�OÔ$ h¨u¤oÐ5Ô6ð)ð )ð )ð )ð )Øð)àð)ð ˜Ô)ð)ð ð	)ð
 ˆ8�OÔ$ h¨u¤oÐ5Ô6ð)ð )ð )ð )ð/˜T *Ô-ð /ð /ð /ð /ð €„�hÐ':Ð':Ñ'<Ô'<Ð=Ñ=Ô=ðØÔ"ðàˆz˜4 Ð%Ô&ðð ð ñ >Ô=ðð˜Vœ]ð ¨tð ð ð ð ðA ð A¨tð Að Að Að Að
 €„˜ÐÑÔð0�vÔ,ð 0°Ð;KÔ1Lð 0ð 0ð 0ñ Ôð0ð „ð˜ 9 +¨zÐ"9Ô:ð ð ð ñ „ðð „ð, +ð ,°+ð ,ð ,ð ,ñ „ð,ð ,ð ,r8   