
    LKi                         S SK r S SKrS SKrS SKrS SKrS SKrS SKJrJrJ	r	J
r
JrJrJrJrJr  S SKJr  S SKrS SKrS SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKrS SKJ r J!r!J"r"  S S	K#J$r$J%r%J&r&  S S
K'J(r(  S SK)J*r*J+r+  S SK,J-r.J/r/  S SK0J1r1J2r3  S SK4J5r5  S SK6r6S SK7r7S SK8r9S SK:J;r;  S SKJ<r<  S SK=J>r>J?r?  S SKr\6R                  " \A5      rB/ SQrC\R                  " SS5      rE\E\C;  a  \F" S\E S\C S35      e\R                  R                  SS\R                  R                  \R                  R                  \R                  R                  /\R                  R                  S9  \R                  R                  S\R                  R                  S5      SS9  \R                  R                  S\R                  R                  S5      SS9  \R                  R                  S\R                  R                  S5      S SS!9  \R                  R                  \E5        \R                  " S"5      S#:H  =(       d    \R                  " S$5      S#:H  rQS%rRS&rSS'\"S(S4S) jrT   SS\\R                     S\\R                     S\\R                     S(\\R                     4S* jjrU\R                  " S+5      S#:g  rV\V(       + =(       a    \R                  " S,5      S-:H  rWS.rX\X S/\$ 3rYS0rZS(\R                  4S1 jr\SS2 jr]S(\^4S3 jr_           SS4\^S5\`S6\\a   S7\\a   S8\\a   S9\\a   S:\\a   S;\\a   S<\\a   S=\\a   S>\\a   S?\\`   S(S4S@ jjrbSS'\!SA\^S(S4SB jjrc             SS5\`SC\aS7\\a   SD\\a   S8\\a   S9\\a   SE\\a   S:\\a   S;\\a   S<\\a   S=\\a   S>\\a   S?\\`   S(\\&SS4   4SF jjrdS(\\&SS4   4SG jreS(\\&SS4   4SH jrfS(\\&SS4   4SI jrgS(\\&SS4   4SJ jrhS(\\a\^4   4SK jri\R                  " 5       S(\\&SS4   4SL j5       rkS(\\&SS4   4SM jrlS(\\&SS4   4SN jrmS(\\&SS4   4SO jrnS(\\&SS4   4SP jroS(\\&SS4   4SQ jrp\R                  " 5       S(\\&SS4   4SR j5       rq\R                  " 5       S(\\&SS4   4SS j5       rr\R                  " STSU9S(\\&SS4   4SV j5       rs\R                  " STSU9S(\\&SS4   4SW j5       rt\R                  " STSU9S(\\&SS4   4SX j5       ru\R                  " STSU9S(\\&SS4   4SY j5       rv\R                  " S"\R                  ;   a  SZ/OS[/S\9S]\R                  S(\\&SS4   4S^ j5       ry\R                  " S"\R                  ;   a  S_/OS`/S\9S]\R                  S(\\&SS4   4Sa j5       rzS(\
\a   4Sb jr{S(\
\a   4Sc jr|S(\
\/ \\&SS4   4      4Sd jr}S(\
\/ \\&SS4   4      4Se jr~S(\
\/ \\&SS4   4      4Sf jrS(\
\/ \\&SS4   4      4Sg jrS(\
\/ \\&SS4   4      4Sh jr\R                  " Si\" 5       Sj9S]\R                  S(\\!SS4   4Sk j5       r\R                  " Si\~" 5       Sj9S]\R                  S(\\!SS4   4Sl j5       r\R                  " \|" 5       S\9S]\R                  S(\\!SS4   4Sm j5       r\R                  " ST\{" 5       Sj9S]\R                  S(\\!SS4   4Sn j5       r\R                  " Si\" 5       Sj9S]\R                  S(\\!SS4   4So j5       r\R                  " Si\}" 5       Sj9S]\R                  S(\\!SS4   4Sp j5       r\5 " Sq Sr\35      5       r\5 " Ss St\15      5       r\R                  " STSU9Su\&S(\\!SS4   4Sv j5       r " Sw Sx5      r\R                  " STSU9Su\&S(\\SS4   4Sy j5       rSz\aS(\\a   4S{ jrS|\ Sz\aS(S4S} jrS|\ S(S4S~ jr\R                  " STSU9Su\&Sz\aS(\\ SS4   4S j5       r\R                  " 5       S]\R                  S(\a4S j5       rS\S\4   S(\4S jr\rS\GR(                  S(S4S jr\R                  " STSU9S\&Sz\aS(\\ SS4   4S j5       r\R                  " STSU9S\&S(\\ SS4   4S j5       r\R                  " STSU9S\&S(\\!SS4   4S j5       r\R                  " STSU9S\&S(\\!SS4   4S j5       r\R                  " STSU9S\&S(\\!SS4   4S j5       r " S S\5      rS\(S\S\	\+   S\^S(\\\+   \\*   4   4
S jrS\(S\S\	\+   S\^S(\\\+   \\*   4   4
S jrS(\
\   4S jr\R                  " Si\" 5       Sj9S]\R                  S(\\SS4   4S j5       rS\GR@                  S(S4S jrS|\ S(\`4S jr\R                  " SS9S]\R                  S(\S   4S j5       r\R                  S(\\>/\?4   4S j5       r\R                  S\<S(\<4S j5       rg)    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%   z!Invalid property testing preset: z. Must be one of .basei_ )deadlinesuppress_health_check	verbosity2   )max_examplesr&   d   r'   i  )r/   stateful_step_countCHROMA_RUST_BINDINGS_TEST_ONLY1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                 $    U R                  5         g N)reset)r5   s    X/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/chromadb/test/conftest.pyr9   r9   b   s    IIK    c                 ~   / SQnU UUS.nUR                  [        5      nUbd  UR                  R                  5        VVs0 s H  u  pgXc;   d  M  Xg_M     nnn[        R
                  " [        R
                  R                  40 UD6$ [        [        R
                  [        R
                  R                  5      $ s  snnf )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/   r1   r,   r$   )getCURRENT_PRESET__dict__items
hypothesissettingsdefaultr   )	r%   r&   r'   allowable_override_keysoverride_profilesoverriding_profilekeyvalueoverridden_settingss	            r:   override_hypothesis_profilerJ   f   s       +..~>% 199??A
A
- CJA 	 
 "":#6#6#>#>VBUVV
##Z%8%8%@%@AA
s    B9B9CHROMA_CLUSTER_TEST_ONLYMULTI_REGIONtrueztilt-spanning+x   c                  F    [         R                  R                  [        SS9$ )Nz5Requires Kubernetes to be running with a valid config)reason)pytestmarkskipifNOT_CLUSTER_ONLY r;   r:   skip_if_not_clusterrW      s$    ;;F   r;   c                     [         R                  R                  [         R                  R                  [         R                  R	                  [
        5      5      S5      n [        SU  35        [         R                  R                  U 5      (       d  [        SU  35      e[        R                  " SSSSSS	S
SSSSSSSSU /5        g )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    r:    generate_self_signed_certificaterh      s    '',,
12MK 
M+
'(77>>+&&";K= IJJNN!	
r;   c                  D   [         R                   " [         R                  [         R                  5       n U R                  S5        U R	                  [         R
                  [         R                  S5        U R                  5       S   sS S S 5        $ ! , (       d  f       g = f)N) r      )socketAF_INETSOCK_STREAMbind
setsockopt
SOL_SOCKETSO_REUSEADDRgetsockname)ss    r:   find_free_portru      s]    	v~~v'9'9	:a	w	V&&(;(;Q?}}q! 
;	:	:s   AB
B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                    U(       a  U(       a  [        SSSSSUUSUUUUUUUS9nO[        SSSSSSSUUUUUUUS9n[        R                  R                  R	                  U5      n[
        R                  " UR                  5       SU S	S
U
U	S9  g)zRun a Chroma server locallychromadb.api.segment.SegmentAPI chromadb.db.impl.sqlite.SqliteDB7chromadb.segment.impl.manager.local.LocalSegmentManagerT)chroma_api_implchroma_sysdb_implchroma_producer_implchroma_consumer_implchroma_segment_manager_implrw   rx   allow_resetry   rz   r{   r|   r}   r~   r   F)r   r   r   r   r   rw   r   ry   rz   r{   r|   r}   r~   r   z0.0.0.0error   )hostrv   	log_leveltimeout_keep_alivessl_keyfilessl_certfileN)r   chromadbserverfastapir   uvicornrf   app)rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   rB   r   s                 r:   _run_serverr      s     *=@!C!C(a'/)E1U,K/Q)E,K ID
$ =@!C!C(a)E1U,K/Q)E,K ID
  __$$,,X6FKK

-/r;   attemptsc                      U R                  5         g ! [         a6  nUS:  a  Ue[        R                  " S5        [	        XS-   5         S nAg S nAff = f)N      rk   )	heartbeatr   timesleep_await_server)r5   r   es      r:   r   r     sF    - -b=GJJqM#!|,,-s    
A,AAr   chroma_client_auth_providerchroma_client_auth_credentialsc              #     ^^^^^
^^^#    [        5       m[        R                  " S5      mTSSUUUTUU	T
UT4nS[        S[        [
        SS4   4UUUUUU
UU4S jjnU (       aO  [        R                  " 5       nTU UR                  UUUTUU	T
UT4nU" U5       Sh  vN    UR                  5         gU" U5       Sh  vN   g N'! [        [        4 a   n[        R                  S:X  a   SnAgUeSnAff = f N:7f)ziFixture generator that launches a server in a separate process, and yields a
fastapi client connect to itspawnFNargsr6   c              3     >#    TR                  [        U SS9nUR                  5         [        TSTSTTTT
T
(       a  SOST	S9
n[	        U5      nUR                  [        5      nUR                  5         [        [        U[        5      (       a  UO
[        U5      5        Uv   UR                  5         UR                  5         UR                  5         g 7f)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killr^   )r   procrB   systemr5   r   r|   r   r   r   r   ctxrv   s        r:   rf   _fastapi_fixture.<locals>.run<  s     {{+D{F

+*$((C+I/Q%?.Hde ID
 !ooi(ZW55c;Ns;ST				s   CCnt)ru   multiprocessingget_contextr   r   r   tempfileTemporaryDirectorynamecleanupPermissionErrorNotADirectoryErrorr\   )rw   r   ry   r   rz   r{   r   r|   r}   r~   r   r   r   r   rf   rx   r   r   rv   s    ` `  ``  ` `    @@r:   _fastapi_fixturer     s    $ D

%
%g
.C 	$,'*$'"!C	 	8# )FD$$67  0 $779""(0+.(+&%G
 t9
	%%' t9 	  !34 	ww$	 	sN   BC<CC<#C 3C<?C: C<C7C2+C<0C22C77C<c                      [        SS9$ )NFrw   r   rV   r;   r:   r   r   w  s    %00r;   c                      [        SSS9$ )NF'chromadb.api.async_fastapi.AsyncFastAPI)rw   r   r   rV   r;   r:   async_fastapir   {  s    A r;   c                      [        SS9$ )NTr   r   rV   r;   r:   fastapi_persistentr     s    $//r;   c                  ,    [        5         [        SSSS9$ )NFz./servercert.pemz./serverkey.pem)rw   r   r   )rh   r   rV   r;   r:   fastapi_sslr     s    $&#5"3 r;   c                      Sn Sn[         R                  " S5      (       a[  [         R                  " SS5      R                  S5      S   n[        [         R                  " SS5      R                  S5      S   5      n X4$ )zGet 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_HOSTrj   :r   rk   )r\   getenvsplitint)rv   r   s     r:   _get_server_host_port_from_envr     sm     DD	yy%&&yy-r288=a@299126<<SA!DE:r;   c               #      #    [        5       u  p[        SUU SS9n[        U5      nUR                  [        5      n[        U5        UR                  5         Uv   UR                  5         g 7f)Nchromadb.api.fastapi.FastAPIT)r   r   r   r   )r   r   r   r   r   r   r   r   )r   rv   rB   r   r5   s        r:   basic_http_clientr     s^     /1JD6 $	H HF
//)
$C#
LLN
L
KKMs   A)A+c            	   #      #    [         R                  " SSSS9 n U R                  S5        U R                  5         [	        SSU R
                  SSS	9 H  nUv   M	     S S S 5        g ! , (       d  f       g = f7f)
Nw	.htpasswdFsuffixdeleteCadmin:$2y$05$e5sRb6NCcSH3YfbIxe1AGu2h5K7OOd982OXKmd8WyQ3DRQ4MvpnZS
;chromadb.auth.basic_authn.BasicAuthenticationServerProvider1chromadb.auth.basic_authn.BasicAuthClientProvideradmin:adminrw   ry   rz   r   r   r   NamedTemporaryFilewritecloser   r   fitems     r:   0fastapi_server_basic_auth_valid_cred_single_userr     sf     
 
	$	$SU	Kq	VW		$)f12([+8
D J
	 
L	K	K   A7AA&	A7&
A40A7c            	   #   <  #    SSSS.n [         R                  " SSSS9 nU R                  5        H  u  p#UR                  U S	U S
35        M     UR	                  5         [        SSUR                  SSS9 H  nUv   M	     S S S 5        g ! , (       d  f       g = f7f)Nz<$2y$10$kY9hn.Wlfcj7n1Cnjmy1kuIhEFIVBsfbNWLQ5ahoKmdc2HLA4oP6iz<$2y$10$CymQ63tic/DRj8dD82915eoM4ke3d6RaNKU4dj4IVJlHyea0yeGDSz<$2y$05$e5sRb6NCcSH3YfbIxe1AGu2h5K7OOd982OXKmd8WyQ3DRQ4MvpnZS)useruser2adminr   r   Fr   r   
r   r   r   r   )r   r   r@   r   r   r   r   )credsr   r   credr   s        r:   3fastapi_server_basic_auth_valid_cred_multiple_usersr     s      OOOE
 
	$	$SU	Kq++-JDGGtfAdV2&' (		$)f12([+8
D J
 
L	K	Ks   BA#B	B
BBc            	   #      #    [         R                  " SSSS9 n U R                  S5        U R                  5         [	        SSU R
                  SSS	9 H  nUv   M	     S S S 5        g ! , (       d  f       g = f7f)
Nr   r   Fr   r   r   r   zadmin:admin1r   r   r   s     r:   &fastapi_server_basic_auth_invalid_credr     sd     		$	$SU	Kq	VW		$)f12([+9
D J
	 
L	K	Kr   c               #     #    [         R                  " SSSS9 n U R                  S5        U R                  5         [         R                  " SSSS9 nUR                  S5        UR                  5         [	        SSS	S
U R
                  SUR
                  S9 H  nUv   M	     S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f7f)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)rw   r   r   ry   rz   r}   r~   r   )server_authn_fileserver_authz_filer   s      r:   %fastapi_server_basic_authn_rbac_authzr     s     		$	$K
	R	
 	!((
##> ##%(#,_/<-j5F5K5K-n0A0F0F 
I

 

 

 
s5   C8CAB2!C)	C2
C 	<C
CCc            
   #     #    [         R                  " S5      (       af  [        (       d[  [        5       u  p[	        SU USSSSS9n[        U5      nUR                  [        5      n[        U5        UR                  5         Uv   g [        R                  " SS	SS
9 nUR                  S5        UR                  5         [        SSSSSUR                  S9 H  nUv   M	     S S S 5        g ! , (       d  f       g = f7f)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:
      - singleton_database
    tokens:
      - singleton-token
z;chromadb.auth.token_authn.TokenAuthenticationServerProvider)rw   r   r   r   ry   rz   )r\   r   rU   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   rv   rB   r   r5   r   r   s          r:   2fastapi_fixture_admin_and_singleton_tenant_db_userr   #  s      
yy%&&/?/?35
:#$(([+8HM	
 !ooi(c 
	$	$S%	HA		
 	
	$HL([+8)f12
D J
# 
I	H	Hs   BC9AC(	C9(
C62C9c               #   ~   #    [        SSS9n [        U 5      nUR                  5         Uv   UR                  5         g7f)Fixture generator for returning a client configured via environmenet
variables, intended for externally configured integration tests
Tr   r   r   Nr   r   r   r   rB   r   s     r:   integrationr   Y  s:     
 *HH HF
LLN
L
KKM   ;=c               #   ~   #    [        SSS9n [        U 5      nUR                  5         Uv   UR                  5         g7f)r   Tr   r   Nr   r   s     r:   async_integrationr  g  s:     
 *SH HF
LLN
L
KKMr  function)scopec            
   #      #    [        SSSSSSSS9n [        U 5      nUR                  5         Uv   UR                  5         g7f)z>Fixture generator for segment-based API using in-memory Sqliter   r   r   FT)r   r   r   r   r   rw   r   Nr   r   s     r:   python_sqlite_ephemeralr  u  sI      9<??$]H HF
LLN
L
KKMs   A Ac               #   P  #    [         R                  " 5       n [        SSSSSSSU R                  S9n[	        U5      nUR                  5         Uv   UR                  5          U R                  5         g! [        [        4 a   n[        R                  S:X  a   SnAgUeSnAff = f7f)z?Fixture generator for segment-based API using persistent Sqliter   r   r   T)r   r   r   r   r   r   rw   rx   r   N)r   r   r   r   r   r   r   r   r   r   r\   )	save_pathrB   r   r   s       r:   python_sqlite_persistentr
    s      ++-I9<??$]#..	H HF
LLN
L
KKM
 /0 77d?Gs6   AB&"A3 2B&3B#BB&BB##B&c               #      #    [        SSSSSSSSS9n [        U 5      nUR                  5         Uv   UR                  5         g7f)	z:Fixture generator for system using ephemeral Rust bindings!chromadb.api.rust.RustBindingsAPIr   r   FTrj   r   r   r   r   r   rw   r   rx   Nr   r   s     r:   rust_sqlite_ephemeralr    sL      ;<??$]	H HF
LLN
L
KKMs   AAc               #      #    [         R                  " 5       n [        SSSSSSSU R                  S9n[	        U5      nUR                  5         Uv   UR                  5         g7f)z0Fixture generator for system using Rust bindingsr  r   r   Tr  N)r   r   r   r   r   r   r   )r	  rB   r   s      r:   rust_sqlite_persistentr    s^      ++-I;<??$]#..	H HF
LLN
L
KKMs   A A"r  r  )paramsrequestc                 8    U R                  U R                  5      $ r8   getfixturevalueparamr  s    r:   sqliter         ""7==11r;   r  r
  c                 8    U R                  U R                  5      $ r8   r  r  s    r:   sqlite_persistentr    r  r;   c                     / SQn S[         R                  ;   a"  U R                  S5        U R                  S5        S[         R                  ;   a  SS/n S[         R                  ;   a  S/n S[         R                  ;   a  S	S
/n U $ )N)r   r   r   sqlite_fixturer  CHROMA_INTEGRATION_TESTr   r  r4   rK   r   r2   r  r  )r\   environappendfixturess    r:   filtered_fixture_namesr#    sw    H !BJJ.&+,%3!#67!RZZ/'('2::5+-EFOr;   c                  T    [        5        V s/ s H  n U S;  d  M  U PM     nn U$ s  sn f )N)r  r
  r  r  )r#  )fixturer"  s     r:   "filtered_http_server_fixture_namesr&    s@     ./
/G

 	/  
 O
s   
%%c                      [         [        /n U $ r8   )r   r   r!  s    r:   system_fixtures_authr(    s    8;H Or;   c                      [         /n U $ r8   )r   r!  s    r:    system_fixtures_authn_rbac_authzr*    s     66HOr;   c                      [         /n U $ r8   )r   r!  s    r:   1system_fixtures_root_and_singleton_tenant_db_userr,    s     CCHOr;   c                      [         /n U $ r8   )r   r!  s    r:   system_fixtures_wrong_authr.    s    67HOr;   c                      [         /n U $ r8   )r   r!  s    r:   system_fixtures_sslr0    s    }HOr;   module)r  r  c              #   @   #    U R                  5        S h  vN   g  N7fr8   r  r  s    r:   system_wrong_authr4  $        }}   c              #   @   #    U R                  5        S h  vN   g  N7fr8   r3  r  s    r:   system_authn_rbac_authzr8  +  r5  r6  c                 8    U R                  U R                  5      $ r8   r  r  s    r:   system_http_serverr:  2  s     ""7==11r;   c                 8    U R                  U R                  5      $ r8   r  r  s    r:   r   r   9  s    ""7==11r;   c              #   @   #    U R                  5        S h  vN   g  N7fr8   r3  r  s    r:   
system_sslr=  >       }}r6  c              #   @   #    U R                  5        S h  vN   g  N7fr8   r3  r  s    r:   system_authr@  C  r>  r6  c                       \ rS rSrSrg)AsyncClientCreatorSynciH  rV   N__name__
__module____qualname____firstlineno____static_attributes__rV   r;   r:   rB  rB  H      r;   rB  c                       \ rS rSrSrg)AsyncAdminClientSynciM  rV   NrC  rV   r;   r:   rK  rK  M  rI  r;   rK  r   c              #      #    U R                  5         U R                  [        5      n[        U[        5      (       a  [        U5      nUv   g Uv   g 7fr8   )reset_stater   r   r   r   r   )r   r5   transformeds      r:   r5   r5   R  sA     

//)
$C#|$$)#.	s   AAc                       \ rS rSr% Sr\\S'   / r\\	   \S'   S\4S jr
S\S\S	\4S
 jrS	\4S jrS\S\S	\4S jrS	\4S jrSrg)ClientFactoriesi^  zThis 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                     Xl         g r8   rQ  )selfr   s     r:   __init__ClientFactories.__init__g  s    r;   r   kwargsr6   c                    UR                  S5      c  U R                  R                  US'   UR                  S5      c  [        (       a	  [        US'   U R                  R                  R
                  S:X  aA  [        [        [        R                  " U0 UD65      nU R                  R                  U5        U$ [        U0 UD6nU R                  R                  U5        U$ )NrB   databaser   )r=   rQ  rB   MULTI_REGION_ENABLEDDEFAULT_MCMR_DATABASEr   r   ClientCreatorrB  createrR  r   rU  r   rX  clients       r:   create_clientClientFactories.create_clientj  s    ::j!)!%!6!6F:::j!).B.B!6F: LL!!1189 -)?)F)F)WPV)WXF!!((0M//$$V,r;   c                 X   U R                   R                  R                  S:X  aJ  [        [        [
        R                  U R                   5      5      nU R                  R                  U5        U$ [        R                  " U R                   5      nU R                  R                  U5        U$ Nr   )
rQ  rB   r   r   r]  rB  from_system_asyncrR  r   from_systemrU  r`  s     r:   create_client_from_system)ClientFactories.create_client_from_system}  s    LL!!1189 5GGUF !!((0M**4<<8$$V,r;   c                    U R                   R                  R                  S:X  a6  [        [        [        U0 UD65      nU R                  R                  U5        U$ [	        U0 UD6nU R                  R                  U5        U$ rd  )rQ  rB   r   r   r   rK  rR  r   r_  s       r:   create_admin_client#ClientFactories.create_admin_client  sw    LL!!1189 +';T'LV'LMF!!((0Md-f-$$V,r;   c                 X   U R                   R                  R                  S:X  aJ  [        [        [
        R                  U R                   5      5      nU R                  R                  U5        U$ [        R                  " U R                   5      nU R                  R                  U5        U$ rd  )	rQ  rB   r   r   r   rK  rf  rR  r   rg  s     r:   create_admin_client_from_system/ClientFactories.create_admin_client_from_system  s    LL!!1189 +';'G'G'UVF!!((0M((6$$V,r;   rT  N)rD  rE  rF  rG  __doc__r   __annotations__rR  r   r   rV  r   r]  ra  rh  r   rk  rn  rH  rV   r;   r:   rP  rP  ^  su     O(*d9o*v 3 # - &=     r;   rP  c              #   
  #    U R                  5         [        U 5      nUv   [        UR                  5      S:  aG  UR                  R	                  5       nUR                  5         A[        UR                  5      S:  a  MF  g g 7f)Nr   )rM  rP  lenrR  popclear_system_cache)r   	factoriesr`  s      r:   client_factoriesrw    sk     
'I
O
i((
)A
-++//1!!# i((
)A
-s   A=BBdatabase_namec                 j    [        U R                  S5      5      S:  a  U R                  S5      S   $ S $ )NrN   rk   r   )rs  r   )rx  s    r:   get_topology_namerz    s5    *-m.A.A#.F*G!*K=s#A&UQUUr;   r`  c                     U R                  5       nUR                  S:X  a  SUl        [        U5      nUR                  U5        g )Nr   r   )get_settingsr   r   create_database)r`  rx  admin_settingsr   s       r:   r}  r}    s?    ((*N%%)RR)G&'E	-(r;   c                     S[        [        R                  " 5       5      -   n[        U R                  5      nUb  US-   U-   n[        X5        U R                  U5        g)zHCreate an isolated database for a test and updates the client to use it.test_NrN   )struuiduuid4rz  rZ  r}  set_database)r`  rZ  	topo_names      r:   create_isolated_databaser    sO    TZZ\**H!&//2Is?X-F%
!r;   c              #      #    U R                  5         U R                  R                  S:X  a"  [        [        [
        R                  XS95      nO[        R                  " XS9nUv   UR                  5         g 7fNr   )rZ  )
rM  rB   r   r   r   rB  re  r]  rf  ru  )r   rx  r`  s      r:   r`  r`    se     
&&*SS"44V4T

 **6J
L
s   A6A8c                 t    U R                   R                  S5      nU(       a  [        (       a  [        $ [        $ )Ntest_with_multi_region)nodeget_closest_markerr[  r\  r   )r  has_marks     r:   rx  rx    s.     ||../GHH(($$r;   	test_func.c                 @    [         R                  R                  U 5      $ )zOpt-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
)rR   rS   r  )r  s    r:   multi_region_testr    s     ;;--i88r;   r   c                     [        U S5      (       ab  U R                  5        H9  nUR                  S:X  d  M  [        (       a  SOSnU R                   U 3U l          g   U R                   S3U l        gg)z'Modify test names to show database typeiter_markersr  z[mcmr]z[single-region]N)hasattrr  r   r[  _nodeid)r   markerr   s      r:   pytest_itemcollectedr    sl    t^$$'')F{{66%9%9?P"&,,x8 * #ll^?;DL %r;   r:  c              #     #    U R                  5         U R                  R                  S:X  a6  [        [        [
        R                  XS95      nUv   UR                  5         g [        R                  " XS9nUv   UR                  5         g 7fr  )
rM  rB   r   r   r   rB  re  ru  r]  rf  )r:  rx  r`  s      r:   http_clientr    s      ""$ 	##334	5 "44" 5 
 !!#**+=V!!#s   B
Br=  c              #      #    U R                  5         [        R                  " U 5      nUv   UR                  5         g 7fr8   )rM  r]  rf  ru  )r=  r`  s     r:   
client_sslr    s2     &&z2F
L
s   <>r4  c              #   ^   #    U R                  5         U R                  [        5      nUv   g 7fr8   rM  r   r   )r4  r5   s     r:   api_wrong_credr    s(      !!#

$
$Y
/C
I   +-r8  c              #   ^   #    U R                  5         U R                  [        5      nUv   g 7fr8   r  )r8  r5   s     r:   api_with_authn_rbac_authzr  '  s(      '')
!
*
*9
5C
Ir  r@  c              #   b   #    U nUR                  5         UR                  [        5      nUv   g 7fr8   r  )r@  _sysr5   s      r:   api_with_server_authr  0  s)     D
--	
"C
Is   -/c                   N    \ rS rSrS\S\S\\   S\S\	\
\   \
\   4   4
S jrSrg	)

ProducerFni;  producercollection_id
embeddingsnr6   c                     g r8   rV   )rU  r  r  r  r  s        r:   __call__ProducerFn.__call__<  s     	r;   rV   N)rD  rE  rF  rG  r   r   r   r   r   r	   r   r   r  rH  rV   r;   r:   r  r  ;  sO      _-	
  
x((5/9	:r;   r  r  r  r  r  c                     / n/ n[        U5       HA  n[        U5      nU R                  X5      nUR                  U5        UR                  U5        MC     XE4$ r8   )rangenextsubmit_embeddingr   )	r  r  r  r  submitted_embeddingsseq_ids_r   seq_ids	            r:   produce_n_singler  F  s\     G1X**=<##A&v	 
  ((r;   c                     / n/ n[        U5       H  n[        U5      nUR                  U5        M!     U R                  X5      nXE4$ r8   )r  r  r   submit_embeddings)r  r  r  r  r  r  r  r   s           r:   produce_n_batchr  V  sP     !G1X##A&  ((MG((r;   c                      [         [        /$ r8   )r  r  rV   r;   r:   produce_fn_fixturesr  e  s    o..r;   c              #   (   #    U R                   v   g 7fr8   r3  r  s    r:   produce_fnsr  i  s      --s   configc                 L    U R                  SS5        U R                  SS5        g)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    r:   pytest_configurer  p  s'    
I'TU
Wr;   c                 :    U R                  5       R                  SL $ )ziReturns True if the client is in-process (a SQLite client), False if it's out-of-process (a HTTP client).N)r|  r   )r`  s    r:   is_client_in_processr  y  s     88D@@r;   T)autouse)NNNc              #      #    U R                   R                  n[        R                  SU 35        Sv   [        R                  SU 35        g7f)z2Automatically logs the start and end of each test.zStarting test: NzFinished test: )r  r   loggerdebug)r  	test_names     r:   	log_testsr  ~  sA      !!I
LL?9+./ 

LL?9+./s   AAc                  (    S[         S[        4S jn U $ )z"Return mock embeddings for testinginputr6   c                 x    U  Vs/ s H(  n[         R                  " / SQ[         R                  S9PM*     sn$ s  snf )Ng?g?g333333?)dtype)nparrayfloat32)r  r  s     r:   _mock_embeddings)mock_embeddings.<locals>._mock_embeddings  s)    EJKU

;UKKKs   /7r!   )r  s    r:   mock_embeddingsr    s     L	 Lj L r;   monkeypatchc                    [        5       [        5       [        5       [        5       [        5       [        5       [        5       [        5       [        5       [        5       [        5       S.nU R                  [        S[        [        R                  40 UD65        [        5       [        5       [        5       [        5       [        5       [        5       S.n[        5       n[
        R                  " / SQ/5      UR                  l        [
        R                  " / SQ/5      UR                  l        U[        5       U4US   R                  l        UR                  5        H  u  pEU R                  XESS9  M     U $ )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_transformsr@   )r  mock_modulesmock_attributes
mock_modelr]   mocks         r:   mock_common_depsr    s   
 {++!*+({KK[L YS[[(IL(IJ [5>["*3+$;"++O J*,((O3D*EJ'+-88_4E+FJ(JL99F &++-
D6 . r;   )r6   N)FNNNNNNNNNF)r   )Fr   NNNNNNNNNNF)r   r\   rl   re   r   r   typingr   r   r   r   r   r   r	   r
   r   r  r   rA   rR   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   r]  r   chromadb.api.async_clientr   r   AsyncClientCreatorchromadb.utils.async_to_syncr   loggingr  numpyr  unittest.mockr   r    chromadb.api.typesr"   r#   	getLoggerrD  r  VALID_PRESETSr   r>   
ValueErrorrB   register_profileHealthCheckdata_too_largelarge_base_examplefunction_scoped_fixture	Verbosityverboseget_profileload_profileis_spann_disabled_modeskip_reason_spann_disabledskip_reason_spann_enabledr9   rJ   rU   r[  MULTI_REGION_TOPOLOGYr\  COMPACTION_SLEEPMarkDecoratorrW   rh   r   ru   boolr  r   r   r   r   r   r   r   r   r%  r   r   r   r   r   r   r   r  r  r
  r  r  r  FixtureRequestr  r  r#  r&  r(  r*  r,  r.  r0  r4  r8  r:  r   r=  r@  rB  rK  r5   rP  rw  rz  r}  r  r`  rx  r  r  Itemr  r  r  r  r  r  r  r  r  r  r  Configr  r  r  r  r  rV   r;   r:   <module>r     s    	    
 
 
      & 3 (  6 6 > > $ 1 D =  
  #  4 			8	$*4f=&

+N+;;L]O[\]     $ $
--1166
 ""** % 	    $ $
J++F3" %     $ $j!!--f5C %     $ $
##F+	 %         0
 II./36 8	yy/0C7 
 W  T 
w 4 
 +/,0*.(B
:&&
'(BZ(()(B :&&
'(B j!!"	(BV 9978C? ++S		.0IV0S ' 013C2DE  V11 :" "  '+26:>598<265904/3RW;
;;  }; #+3-	;
 +33-; &.c]; )1; #+3-; &.c]; !);  (}; BJ$; 
;|-y -C - -  92615:>59488<265904/3RWhhh #+3-h "*#	h
 +33-h &.c]h %-SMh )1h #+3-h &.c]h !)h  (}h BJ$h vtT!"hV164-. 1yt!34 0IfdD&89 0YvtT12 c3h   9VT4%78  ")FDRVDV:W &fdD !.	&$:L0M 6yt9K/L 6r3fdD !3l 
YvtT12 
 
 
9VT4%78 
 
 j!64+=!>  "" j!)FD$,>"?  "> j!yt);<  "$ j!	&$*< =  "& '2::5 $$
#	$
2F)) 2id8J.K 2
2 '2::5 %%
$	%
2v44 264QUCU9V 2
2S	 *DI d8B	&$:L0M,M#NO "id 233	45"id 233	45D"id@R6S2S)T$U 
T(2yt9K/L+L"MN 
 h'A'CD""y$$% E h'G'IJ""y$$% K 9;<2""2y$$%2 =2 j)?)AB2F)) 2i	48M.N 2 C2 h':'<=-- )ItT<Q2R  > h';'=>.. 9Yd=R3S  ? 	/ 	 	 	+ 	 	 j! 9Yd%:;  "F FR j!	V 		/42M(N 	 "	VS VXc] V)I )c )d )"Y "4 " j! 6  #  )ItT<Q2R   "  600 S  9#s(!3 9 9 + <v{{ <t < j!$$/2$y$$%$ "$. j! 6  i	40E&F   "  j!y$$% " j!#y$$% " j!f 9dD;P1Q  " ))) )) 	)
 8O$huo56) ))) )) 	)
 8O$huo56)/T*- / h':'<=""z4%& >V]] t A At A
 0v,, 0;K1L 0 0 9+z"9:   ,+ ,+ , ,r;   