
    3iP                      l   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%  S S
K&J'r'  S SK(J)r)  S SK*J+r+J,r,  S SK-J.r/J0r0  S SK1J2r2J3r4  S SK5J6r6  S SK7r7S SK8r8S SK9r:S SK;J<r<  S SKJ=r=  S SK>J?r?J@r@  S SKr\7R                  " \B5      rC/ SQrD\R                  " SS5      rF\F\D;  a  \G" S\F S\D 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                  \F5        \R                  " S#5      S$:H  =(       d    \R                  " S%5      S$:H  rRS&rSS'rTS(\"S)S4S* jrU   SS\\R                     S\\R                     S \\R                     S)\\R                     4S+ jjrV\R                  " S,5      S$:g  rWS-rXS)\R                  4S. jrZSS/ jr[S)\\4S0 jr]           SS1\\S2\^S3\\_   S4\\_   S5\\_   S6\\_   S7\\_   S8\\_   S9\\_   S:\\_   S;\\_   S<\\^   S)S4S= jjr`SS(\!S>\\S)S4S? jjra             SS2\^S@\_S4\\_   SA\\_   S5\\_   S6\\_   SB\\_   S7\\_   S8\\_   S9\\_   S:\\_   S;\\_   S<\\^   S)\\%SS4   4SC jjrbS)\\%SS4   4SD jrcS)\\%SS4   4SE jrdS)\\%SS4   4SF jreS)\\%SS4   4SG jrf\R                  " 5       S)\\%SS4   4SH j5       rhS)\\%SS4   4SI jriS)\\%SS4   4SJ jrjS)\\%SS4   4SK jrkS)\\%SS4   4SL jrlS)\\%SS4   4SM jrm\R                  " 5       S)\\%SS4   4SN j5       rn\R                  " 5       S)\\%SS4   4SO j5       ro\R                  " SPSQ9S)\\%SS4   4SR j5       rp\R                  " SPSQ9S)\\%SS4   4SS j5       rq\R                  " SPSQ9S)\\%SS4   4ST j5       rr\R                  " SPSQ9S)\\%SS4   4SU j5       rs\R                  " S#\R                  ;   a  SV/OSW/SX9SY\R                  S)\\%SS4   4SZ j5       rv\R                  " S#\R                  ;   a  S[/OS\/SX9SY\R                  S)\\%SS4   4S] j5       rwS)\
\_   4S^ jrxS)\
\_   4S_ jryS)\
\/ \\%SS4   4      4S` jrzS)\
\/ \\%SS4   4      4Sa jr{S)\
\/ \\%SS4   4      4Sb jr|S)\
\/ \\%SS4   4      4Sc jr}S)\
\/ \\%SS4   4      4Sd jr~\R                  " Se\}" 5       Sf9SY\R                  S)\\!SS4   4Sg j5       r\R                  " Se\{" 5       Sf9SY\R                  S)\\!SS4   4Sh j5       r\R                  " \y" 5       SX9SY\R                  S)\\!SS4   4Si j5       r\R                  " SP\x" 5       Sf9SY\R                  S)\\!SS4   4Sj j5       r\R                  " Se\~" 5       Sf9SY\R                  S)\\!SS4   4Sk j5       r\R                  " Se\z" 5       Sf9SY\R                  S)\\!SS4   4Sl j5       r\6 " Sm Sn\45      5       r\6 " So Sp\25      5       r\R                  " SPSQ9Sq\%S)\\!SS4   4Sr j5       r " Ss St5      r\R                  " SPSQ9Sq\%S)\\SS4   4Su j5       rSv\ S)S4Sw jr\R                  " SPSQ9Sq\%S)\\ SS4   4Sx j5       r\R                  " SPSQ9Sy\%S)\\ SS4   4Sz j5       r\R                  " SPSQ9S{\%S)\\ SS4   4S| j5       r\R                  " SPSQ9S}\%S)\\!SS4   4S~ j5       r\R                  " SPSQ9S\%S)\\!SS4   4S j5       r\R                  " SPSQ9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                  " Se\" 5       Sf9SY\R                  S)\\SS4   4S j5       rS rSv\ S)\^4S jr\R                  " SS9SY\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)SettingsSystem)embeddings_queue)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    P/home/james-whalen/.local/lib/python3.13/site-packages/chromadb/test/conftest.pyr9   r9   c   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   g   s       +..~>% 199??A
A
- CJA 	 
 "":#6#6#>#>VBUVV
##Z%8%8%@%@AA
s    B9B9CHROMA_CLUSTER_TEST_ONLYx   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_clusterrT      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_certificatere      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_portrr      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_implrt   ru   allow_resetrv   rw   rx   ry   rz   r{   r~   F)r   r   r   r   r   rt   r   rv   rw   rx   ry   rz   r{   r~   z0.0.0.0error   )hostrs   	log_leveltimeout_keep_alivessl_keyfilessl_certfileN)r   chromadbserverfastapir   uvicornrc   app)rs   rt   ru   rv   rw   rx   ry   rz   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      rh   )	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   ry   chroma_server_ssl_verifychroma_server_ssl_enabledr~   )Processr   startr   r   instancer   r   
isinstancer   r   stopkillr[   )r   procrB   systemr5   r   ry   r   r   r~   r|   ctxrs   s        r:   rc   _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)rr   multiprocessingget_contextr   r   r   tempfileTemporaryDirectorynamecleanupPermissionErrorNotADirectoryErrorrY   )rt   r   rv   r   rw   rx   r   ry   rz   r{   r|   r}   r~   r   rc   ru   r   r   rs   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rt   r   rS   r;   r:   r   r   u  s    %00r;   c                      [        SSS9$ )NF'chromadb.api.async_fastapi.AsyncFastAPI)rt   r   r   rS   r;   r:   async_fastapir   y  s    A r;   c                      [        SS9$ )NTr   r   rS   r;   r:   fastapi_persistentr     s    $//r;   c                  ,    [        5         [        SSSS9$ )NFz./servercert.pemz./serverkey.pem)rt   r|   r}   )re   r   rS   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 [	        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)Ni@  r   CHROMA_SERVER_HOSTrg   :r   rh   chromadb.api.fastapi.FastAPIT)r   r   r   r   )rY   getenvsplitintr   r   r   r   r   r   r   )rs   r   rB   r   r5   s        r:   basic_http_clientr     s     DD	yy%&&yy-r288=a@299126<<SA!DE6 $	H HF
//)
$C#
LLN
L
KKMs   CC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rt   rv   rw   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)rt   r   r   rv   rw   rz   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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   z.authnFr   z
users:
  - id: admin
    tokens:
      - admin-token
  - id: singleton_user
    tenant: singleton_tenant
    databases:
      - singleton_database
    tokens:
      - singleton-token
Tz1chromadb.auth.token_authn.TokenAuthClientProviderzadmin-tokenz;chromadb.auth.token_authn.TokenAuthenticationServerProvider)rt   r~   r   r   rv   rw   r   r   s     r:   2fastapi_fixture_admin_and_singleton_tenant_db_userr     so      
	$	$S%	HA		
 	
	$HL([+8)f12
D J
# 
I	H	Hs   A8AA'	A8'
A51A8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   5  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   C  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   rt   r   Nr   r   s     r:   python_sqlite_ephemeralr  Q  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   rt   ru   r   N)r   r   r   r   r   r   r   r   r   r   rY   )	save_pathrB   r   r   s       r:   python_sqlite_persistentr  c  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   FTrg   r   r   r   r   r   rt   r   ru   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  )rY   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_sslr+    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_authr/           }}   c              #   @   #    U R                  5        S h  vN   g  N7fr8   r.  r  s    r:   system_authn_rbac_authzr3    r0  r1  c                 8    U R                  U R                  5      $ r8   r  r  s    r:   system_http_serverr5    s     ""7==11r;   c                 8    U R                  U R                  5      $ r8   r  r  s    r:   r   r     s    ""7==11r;   c              #   @   #    U R                  5        S h  vN   g  N7fr8   r.  r  s    r:   
system_sslr8         }}r1  c              #   @   #    U R                  5        S h  vN   g  N7fr8   r.  r  s    r:   system_authr;    r9  r1  c                       \ rS rSrSrg)AsyncClientCreatorSynci$  rS   N__name__
__module____qualname____firstlineno____static_attributes__rS   r;   r:   r=  r=  $      r;   r=  c                       \ rS rSrSrg)AsyncAdminClientSynci)  rS   Nr>  rS   r;   r:   rF  rF  )  rD  r;   rF  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   .  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   rL  )selfr   s     r:   __init__ClientFactories.__init__C  s    r;   r   kwargsr6   c                 r   UR                  S5      c  U R                  R                  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   r   )
r=   rL  rB   r   r   ClientCreatorr=  createrM  r  rP  r   rS  clients       r:   create_clientClientFactories.create_clientF  s    ::j!)!%!6!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   )
rL  rB   r   r   rU  r=  from_system_asyncrM  r  from_systemrP  rX  s     r:   create_client_from_system)ClientFactories.create_client_from_systemV  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$ r\  )rL  rB   r   r   r   rF  rM  r  rW  s       r:   create_admin_client#ClientFactories.create_admin_cliente  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$ r\  )	rL  rB   r   r   r   rF  r^  rM  r  r_  s     r:   create_admin_client_from_system/ClientFactories.create_admin_client_from_systemr  s    LL!!1189 +';'G'G'UVF!!((0M((6$$V,r;   rO  N)r?  r@  rA  rB  __doc__r   __annotations__rM  r   r   rQ  r   rU  rY  r`  r   rc  rf  rC  rS   r;   r:   rK  rK  :  su     O(*d9o*v 3 # -  =     r;   rK  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   )rH  rK  lenrM  popclear_system_cache)r   	factoriesrX  s      r:   client_factoriesro    sk     
'I
O
i((
)A
-++//1!!# i((
)A
-s   A=BBrX  c                     U R                  5       nUR                  S:X  a  SUl        [        U5      nS[        [        R
                  " 5       5      -   nUR                  U5        U R                  U5        g)zHCreate an isolated database for a test and updates the client to use it.r   r   test_N)get_settingsr   r   struuiduuid4create_databaseset_database)rX  admin_settingsr   databases       r:   create_isolated_databaserz    sb    ((*N%%)RR)G&'ETZZ\**H	(#
!r;   c              #   $  #    U R                  5         U R                  R                  S:X  a8  [        [        [
        R                  U 5      5      nUv   UR                  5         g [        R                  " U 5      nUv   UR                  5         g 7fr\  
rH  rB   r   r   r   r=  r]  rm  rU  r^  )r   rX  s     r:   rX  rX    sn     
&&*SSc1CCFKL!!#**62!!#   BBr5  c              #   $  #    U R                  5         U R                  R                  S:X  a8  [        [        [
        R                  U 5      5      nUv   UR                  5         g [        R                  " U 5      nUv   UR                  5         g 7fr\  r|  )r5  rX  s     r:   http_clientr    sx     ""$ 	##334	5 c1CCDVWX!!#**+=>!!#r}  r8  c              #      #    U R                  5         [        R                  " U 5      nUv   UR                  5         g 7fr8   )rH  rU  r^  rm  )r8  rX  s     r:   
client_sslr    s2     &&z2F
L
s   <>r/  c              #   ^   #    U R                  5         U R                  [        5      nUv   g 7fr8   rH  r   r   )r/  r5   s     r:   api_wrong_credr    s(      !!#

$
$Y
/C
I   +-r3  c              #   ^   #    U R                  5         U R                  [        5      nUv   g 7fr8   r  )r3  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    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   rS   )rP  r  r  r  r  s        r:   __call__ProducerFn.__call__  s     	r;   rS   N)r?  r@  rA  rB  r   r   r   r   r   r	   r   r   r  rC  rS   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    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    sP     !G1X##A&  ((MG((r;   c                      [         [        /$ r8   )r  r  rS   r;   r:   produce_fn_fixturesr    s    o..r;   c              #   (   #    U R                   v   g 7fr8   r.  r  s    r:   produce_fnsr    s      --s   c                     S[         l        g )NT)r   _called_from_test)configs    r:   pytest_configurer    s    )-&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)rr  r   )rX  s    r:   is_client_in_processr    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: )noder   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_modelrZ   mocks         r:   mock_common_depsr  1  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   rY   ri   rb   r   r   typingr   r   r   r   r   r   r	   r
   r   rt  r   rA   rO   r   httpxr   typing_extensionsr   chromadb.api.async_fastapir   chromadb.api.fastapir   chromadb.server.fastapir   chromadb.apir   r   r   chromadb.configr   r   chromadb.db.mixinsr   chromadb.ingestr   chromadb.typesr   r   chromadb.api.clientr   rU  r   chromadb.api.async_clientr   r   AsyncClientCreatorchromadb.utils.async_to_syncr   loggingr  numpyr  unittest.mockr   r    chromadb.api.typesr"   r#   	getLoggerr?  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   rR   COMPACTION_SLEEPMarkDecoratorrT   re   r   rr   boolrs  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)  r+  r/  r3  r5  r   r8  r;  r=  rF  r5   rK  ro  rz  rX  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rS   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?  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  9VT4%78  ,)FDRVDV:W &fdD !.	&$:L0M 6yt9K/L 6rfdD !> 
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%:;  "C CL j!	V 		/42M(N 	 "		"Y 	"4 	" j!
$6 
$i	4(=> 
$ "
$ j!$F $yD$9N/O $ "$  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%& >.A At A
 0v,, 0;K1L 0 0 9+z"9:   ,+ ,+ , ,r;   