
    ugw                      B   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% d d
l&m'Z' d dl(m)Z) d dl*m+Z+m,Z, d dl-m.Z/m0Z0 d dl1m2Z2m3Z4 d dl5m6Z6 d dl7Z7 e7jp                  e9      Z:g dZ; ejx                  dd      Z=e=e;vr e>de= de; d      ej~                  j                  ddej                  j                  ej                  j                  ej                  j                  g       ej~                  j                  dej~                  j                  d      d       ej~                  j                  dej~                  j                  d      d       ej~                  j                  dej~                  j                  d      dd       ej~                  j                  e=       d e"d!dfd"ZG	 	 	 ddeej~                     deej~                     deej~                     d!eej~                     fd#ZH ejx                  d$      d%k7  ZId&ZJd!ej                  fd'ZLdd(ZMd!eNfd)ZO	 	 	 	 	 	 	 	 	 	 	 dd*eNd+ePd,eeQ   d-eeQ   d.eeQ   d/eeQ   d0eeQ   d1eeQ   d2eeQ   d3eeQ   d4eeQ   d5eeP   d!dfd6ZRdd e!d7eNd!dfd8ZS	 	 	 	 	 	 	 	 	 	 	 	 	 dd+ePd9eQd-eeQ   d:eeQ   d.eeQ   d/eeQ   d;eeQ   d0eeQ   d1eeQ   d2eeQ   d3eeQ   d4eeQ   d5eeP   d!ee%ddf   fd<ZTd!ee%ddf   fd=ZUd!ee%ddf   fd>ZVd!ee%ddf   fd?ZWd!ee%ddf   fd@ZXd!ee%ddf   fdAZYd!ee%ddf   fdBZZd!ee%ddf   fdCZ[d!ee%ddf   fdDZ\d!ee%ddf   fdEZ]d!ee%ddf   fdFZ^d!ee%ddf   fdGZ_d!ee%ddf   fdHZ`ej                  d!ee%ddf   fdI       Zbd!ee%ddf   fdJZcej                  d!ee%ddf   fdK       Zdd!e
eg ee%ddf   f      fdLZed!e
eg ee%ddf   f      fdMZfd!e
eg ee%ddf   f      fdNZgd!e
eg ee%ddf   f      fdOZhd!e
eg ee%ddf   f      fdPZid!e
eg ee%ddf   f      fdQZjd!e
eg ee%ddf   f      fdRZk ej                  dS ej       T      dUej                  d!ee!ddf   fdV       Zm ej                  dS eh       T      dUej                  d!ee!ddf   fdW       Zn ej                  dS ef       T      dUej                  d!ee!ddf   fdX       Zo ej                  dS ee       T      dUej                  d!ee!ddf   fdY       Zp ej                  dS ek       T      dUej                  d!ee!ddf   fdZ       Zq ej                  dS eg       T      dUej                  d!ee!ddf   fd[       Zre6 G d\ d]e4             Zse6 G d^ d_e2             Zt ej                  d`a      dbe%d!ee!ddf   fdc       Zu G dd de      Zv ej                  d`a      dbe%d!eevddf   fdf       Zw ej                  d`a      dbe%d!ee ddf   fdg       Zx ej                  d`a      dhe%d!ee ddf   fdi       Zy ej                  d`a      dje%d!ee ddf   fdk       Zz ej                  d`a      dle%d!ee!ddf   fdm       Z{ ej                  d`a      dne%d!ee!ddf   fdo       Z| ej                  d`a      dpe%d!ee!ddf   fdq       Z} G dr dse      Z~dte)duedve	e,   dweNd!eee,   ee+   f   f
dxZdte)duedve	e,   dweNd!eee,   ee+   f   f
dyZd!e
e~   fdzZ ej                  dS e       T      dUej                  d!ee~ddf   fd{       Zd| Zd}e d!ePfd~Z ej                  d      d        Zy)    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fastnormalslowPROPERTY_TESTING_PRESETr    z!Invalid property testing preset: z. Must be one of .baseiȯ  )deadlinesuppress_health_check2   )max_examplesr!   d   r"   i  )r)   stateful_step_countapireturnc                 $    | j                          y N)reset)r,   s    K/var/www/openai/venv/lib/python3.12/site-packages/chromadb/test/conftest.pyr0   r0   O   s    IIK    c                 r   g d}| ||d}|j                  t              }|_|j                  j                         D ci c]  \  }}||v r|| }}}t	        j
                  t        j
                  j                  fi |S t        t        j
                  t        j
                  j                        S c c}}w )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   )getCURRENT_PRESET__dict__items
hypothesissettingsdefaultr   )	r    r!   r"   allowable_override_keysoverride_profilesoverriding_profilekeyvalueoverridden_settingss	            r1   override_hypothesis_profilerA   S   s       +..~>% 199??A
A
U-- JA 	 
 "":#6#6#>#>VBUVV
##Z%8%8%@%@AA
s   B3CHROMA_CLUSTER_TEST_ONLY1x   c                  L    t         j                  j                  t        d      S )Nz5Requires Kubernetes to be running with a valid config)reason)pytestmarkskipifNOT_CLUSTER_ONLY r2   r1   skip_if_not_clusterrL      s$    ;;F   r2   c                     t         j                  j                  t         j                  j                  t         j                  j	                  t
                    d      } t        d|         t         j                  j                  |       st        d|        t        j                  dddddd	d
dddddddd| g       y )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    r1    generate_self_signed_certificater]      s    '',,
12MK 
M+
'(77>>+&";K= IJJNN!	
r2   c                  8   t        j                   t         j                  t         j                        5 } | j                  d       | j	                  t         j
                  t         j                  d       | j                         d   cd d d        S # 1 sw Y   y xY w)N) r      )socketAF_INETSOCK_STREAMbind
setsockopt
SOL_SOCKETSO_REUSEADDRgetsockname)ss    r1   find_free_portrj      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                    |r|rt        ddddd||d|||||||      }nt        ddddddd|||||||      }t        j                  j                  j	                  |      }t        j                  |j                         d| d	d
|
|	       y)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_implrl   rm   allow_resetrn   ro   rp   rq   rr   rs   rv   F)r{   r|   r}   r~   r   rl   r   rn   ro   rp   rq   rr   rs   rv   z0.0.0.0error   )hostrk   	log_leveltimeout_keep_alivessl_keyfilessl_certfileN)r   chromadbserverfastapir   uvicornr[   app)rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   r9   r   s                 r1   _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

-/r2   attemptsc                     	 | j                          y # t        $ r5}|dkD  r|t        j                  d       t	        | |dz          Y d }~y d }~ww xY w)N      r`   )	heartbeatr   timesleep_await_server)r,   r   es      r1   r   r      sH    - -b=GJJqM#x!|,,-s    	A+AAr{   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}| rNt        j                         }| |j                  |||||	
|f} ||      E d{    	 |j                          y ||      E d{    y7 '# t        t        f$ r }t        j                  dk(  rn|Y d}~yd}~ww xY w7 9w)zmFixture generator that launches a server in a separate process, and yields a
    fastapi client connect to itspawnFNargsr-   c              3     K   j                  t        | d      }|j                          t        dd

rdnd	
      }t	        |      }|j                  t              }|j                          t        t        |t              r|n
t        |             | |j                          |j                          |j                          y w)NT)targetr   daemon	localhostF)
r{   chroma_server_hostchroma_server_http_portr   r   r   rq   chroma_server_ssl_verifychroma_server_ssl_enabledrv   )Processr   startr   r   instancer   r   
isinstancer   r   stopkillrS   )r   procr9   systemr,   r{   rq   r   r   rv   rt   ctxrk   s        r1   r[   z_fastapi_fixture.<locals>.run&  s     {{+D{F

+*$((C+I/Q%?.Hde ID
 !ooi(ZW5c;Ns;ST				s   CCnt)rj   multiprocessingget_contextr   r   r   tempfileTemporaryDirectorynamecleanupPermissionErrorNotADirectoryErrorrQ   )rl   r{   rn   r   ro   rp   r   rq   rr   rs   rt   ru   rv   r   r[   rm   r   r   rk   s    ` `  ``  ` `    @@r1   _fastapi_fixturer      s#    $ D

%
%g
.C 	$,'*$'"!C	 	8# )FD$$67  0 $779""(0+.(+&%G
 t9
	%%' t9 	  !34 	ww$ 	 	sH   B
C2B<C2B> *C26C07C2>C-C(#C2(C--C2c                      t        d      S )NFrl   r   rK   r2   r1   r   r   a  s    %00r2   c                      t        dd      S )NF'chromadb.api.async_fastapi.AsyncFastAPI)rl   r{   r   rK   r2   r1   async_fastapir   e  s    A r2   c                      t        d      S )NTr   r   rK   r2   r1   fastapi_persistentr   l  s    $//r2   c                  2    t                t        ddd      S )NFz./servercert.pemz./serverkey.pem)rl   rt   ru   )r]   r   rK   r2   r1   fastapi_sslr   p  s    $&#5"3 r2   c               #      K   t        dddd      } t        |       }|j                  t              }t	        |       |j                          | |j                          y w)Nchromadb.api.fastapi.FastAPIi@  r   T)r{   r   r   r   )r   r   r   r   r   r   r   )r9   r   r,   s      r1   basic_http_clientr   y  sU     6 $&	H HF
//)
$C#
LLN
L
KKMs   A A"c               #      K   t        j                  ddd      5 } | j                  d       | j                          t	        dd| j
                  dd	      D ]  }|  	 d d d        y # 1 sw Y   y xY ww)
Nw	.htpasswdFsuffixdeleteCadmin:$2y$05$e5sRb6NCcSH3YfbIxe1AGu2h5K7OOd982OXKmd8WyQ3DRQ4MvpnZS
;chromadb.auth.basic_authn.BasicAuthenticationServerProvider1chromadb.auth.basic_authn.BasicAuthClientProvideradmin:adminrl   rn   ro   r   r   r   NamedTemporaryFilewritecloser   r   fitems     r1   0fastapi_server_basic_auth_valid_cred_single_userr     sg     
 
	$	$SU	Kq	VW		$)f12([+8
D J
	 
L	K	K   A6AA*!	A6*A3/A6c               #   8  K   dddd} t        j                  ddd      5 }| j                         D ]  \  }}|j                  | d	| d
        |j	                          t        dd|j                  dd      D ]  }|  	 d d d        y # 1 sw Y   y xY ww)Nz<$2y$10$kY9hn.Wlfcj7n1Cnjmy1kuIhEFIVBsfbNWLQ5ahoKmdc2HLA4oP6iz<$2y$10$CymQ63tic/DRj8dD82915eoM4ke3d6RaNKU4dj4IVJlHyea0yeGDSz<$2y$05$e5sRb6NCcSH3YfbIxe1AGu2h5K7OOd982OXKmd8WyQ3DRQ4MvpnZS)useruser2adminr   r   Fr   :
r   r   r   r   )r   r   r7   r   r   r   r   )credsr   r   credr   s        r1   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               #      K   t        j                  ddd      5 } | j                  d       | j                          t	        dd| j
                  dd	      D ]  }|  	 d d d        y # 1 sw Y   y xY ww)
Nr   r   Fr   r   r   r   zadmin:admin1r   r   r   s     r1   &fastapi_server_basic_auth_invalid_credr     se     		$	$SU	Kq	VW		$)f12([+9
D J
	 
L	K	Kr   c               #     K   t        j                  ddd      5 } | j                  d       | j                          t        j                  ddd      5 }|j                  d       |j                          t	        ddd	d
| j
                  d|j
                        D ]  }|  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)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)rl   r   r   rn   ro   rr   rs   r   )server_authn_fileserver_authz_filer   s      r1   %fastapi_server_basic_authn_rbac_authzr     s     		$	$K
	R	
 	!((
##> ##%(#,_/<-j5F5K5K-n0A0F0F 
I

 

 

 
s5   C:CAB8'C/	C8C	=CC	Cc            	   #      K   t        j                  ddd      5 } | j                  d       | j                          t	        ddddd	| j
                  
      D ]  }|  	 d d d        y # 1 sw Y   y xY ww)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)rl   rv   r   r   rn   ro   r   r   s     r1   2fastapi_fixture_admin_and_singleton_tenant_db_userr     sp      
	$	$S%	HA		
 	
	$HL([+8)f12
D J
# 
I	H	Hs   A7AA+"	A7+A40A7c               #      K   t        d      } t        |       }|j                          | |j                          yw)zFixture generator for returning a client configured via environmenet
    variables, intended for externally configured integration tests
    T)r   Nr   r   r   r   r9   r   s     r1   integrationr     s3      D)HHF
LLN
L
KKMs   =?c            	   #      K   t        ddddddd      } t        |       }|j                          | |j                          yw)z>Fixture generator for segment-based API using in-memory Sqliterx   ry   rz   FT)r{   r|   r}   r~   r   rl   r   Nr   r   s     r1   sqlite_fixturer   $  sH     9<??$]H HF
LLN
L
KKMs   AAc               #   4   K   t               E d {    y 7 wr/   )r   rK   r2   r1   sqliter   5  s        c            
   #   R  K   t        j                         } t        ddddddd| j                        }t	        |      }|j                          | |j                          	 | j                          y# t        t        f$ r }t        j                  dk(  rn|Y d}~yd}~ww xY ww)z?Fixture generator for segment-based API using persistent Sqliterx   ry   rz   T)r{   r|   r}   r~   r   r   rl   rm   r   N)r   r   r   r   r   r   r   r   r   r   rQ   )	save_pathr9   r   r   s       r1   sqlite_persistent_fixturer   :  s     ++-I9<??$]#..	H HF
LLN
L
KKM
 /0 77d?G s0   A!B'$A5 4B'5B$BB'B$$B'c               #   4   K   t               E d {    y 7 wr/   )r   rK   r2   r1   sqlite_persistentr   Y  s     (***r   c                      t         t        t        t        t        g} dt
        j                  v r| j                  t               dt
        j                  v rt        g} dt
        j                  v rt        g} | S )NCHROMA_INTEGRATION_TESTCHROMA_INTEGRATION_TEST_ONLYrB   )
r   r   r   r   r   rQ   environappendr   r   fixturess    r1   system_fixturesr   ^  s^    !H !BJJ.$%3=!RZZ/%&Or2   c                  b    t               D  cg c]  } | t        k7  r| t        k7  r|  }} |S c c} w r/   )r   r   r   )fixturer   s     r1   system_http_server_fixturesr  o  sC     '((Gn$4M)M 	(  
 Os   ,c                      t         t        g} | S r/   )r   r   r   s    r1   system_fixtures_authr  x  s    8;H Or2   c                      t         g} | S r/   )r   r   s    r1    system_fixtures_authn_rbac_authzr    s     66HOr2   c                      t         g} | S r/   )r   r   s    r1   1system_fixtures_root_and_singleton_tenant_db_userr    s     CCHOr2   c                      t         g} | S r/   )r   r   s    r1   system_fixtures_wrong_authr	    s    67HOr2   c                      t         g} | S r/   )r   r   s    r1   system_fixtures_sslr    s    }HOr2   module)scopeparamsrequestc              #   @   K   | j                         E d {    y 7 wr/   paramr  s    r1   system_wrong_authr          }}   c              #   @   K   | j                         E d {    y 7 wr/   r  r  s    r1   system_authn_rbac_authzr    r  r  c              #   @   K   | j                         E d {    y 7 wr/   r  r  s    r1   system_http_serverr    r  r  c              #   @   K   | j                         E d {    y 7 wr/   r  r  s    r1   r   r          }}r  c              #   @   K   | j                         E d {    y 7 wr/   r  r  s    r1   
system_sslr    r  r  c              #   @   K   | j                         E d {    y 7 wr/   r  r  s    r1   system_authr     r  r  c                       e Zd Zy)AsyncClientCreatorSyncN__name__
__module____qualname__rK   r2   r1   r"  r"        r2   r"  c                       e Zd Zy)AsyncAdminClientSyncNr#  rK   r2   r1   r)  r)    r'  r2   r)  function)r  r   c              #      K   | j                          | j                  t              }t        |t              rt        |      }| y | y wr/   )reset_stater   r   r   r   r   )r   r,   transformeds      r1   r,   r,     s?     

//)
$C#|$)#.	s   AAc                   p    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
de
defd
ZdefdZy)ClientFactorieszThis 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                     || _         y r/   )r0  )selfr   s     r1   __init__zClientFactories.__init__  s	    r2   r   kwargsr-   c                 l   |j                  d      | j                  j                  |d<   | j                  j                  j                  dk(  r@t	        t
        t        j                  |i |      }| j                  j                  |       |S t        |i |}| j                  j                  |       |S )Nr9   r   )
r4   r0  r9   r{   r   ClientCreatorr"  creater1  r   )r3  r   r5  clients       r1   create_clientzClientFactories.create_client  s    ::j!)!%!6!6F: LL!!1189 -)?)F)F)WPV)WXF!!((0M//$$V,r2   c                     | j                   j                  j                  dk(  rt        t        t        |i |      S t	        |i |S Nr   )r0  r9   r{   r   r   r)  )r3  r   r5  s      r1   create_admin_clientz#ClientFactories.create_admin_client  sG    LL!!1189 %94%J6%JKKD+F++r2   c                     | j                   j                  j                  dk(  r-t        t        t
        j                  | j                               S t	        j                  | j                         S r<  )r0  r9   r{   r   r   r)  from_system)r3  s    r1   create_admin_client_from_systemz/ClientFactories.create_admin_client_from_system  sQ    LL!!1189 %9%E%Edll%STT&&t||44r2   N)r$  r%  r&  __doc__r   __annotations__r1  r   r   r4  r   r7  r:  r   r=  r@  rK   r2   r1   r/  r/    si     O(*d9o*v 3 # -  , , , ,5 5r2   r/  c              #     K   | j                          t        |       }| t        |j                        dkD  rE|j                  j	                         }|j                          ~t        |j                        dkD  rDy y w)Nr   )r,  r/  lenr1  popclear_system_cache)r   	factoriesr9  s      r1   client_factoriesrH    sl     
'I
O
i((
)A
-++//1!!# i((
)A
-s   A;B >B c              #      K   | j                          | j                  j                  dk(  r8t        t        t
        j                  |             }| |j                          y t        j                  |       }| |j                          y wr<  
r,  r9   r{   r   r   r"  from_system_asyncrF  r7  r?  )r   r9  s     r1   r9  r9    so     
&&*SSc1CCFKL!!#**62!!#   BBr  c              #      K   | j                          | j                  j                  dk(  r8t        t        t
        j                  |             }| |j                          y t        j                  |       }| |j                          y wr<  rJ  )r  r9  s     r1   http_clientrN    sy     ""$ 	##334	5 c1CCDVWX!!#**+=>!!#rL  r  c              #   ~   K   | j                          t        j                  |       }| |j                          y wr/   )r,  r7  r?  rF  )r  r9  s     r1   
client_sslrP  -  s3     &&z2F
L
s   ;=r  c              #   ^   K   | j                          | j                  t              }| y wr/   r,  r   r   )r  r,   s     r1   api_wrong_credrS  5  s)      !!#

$
$Y
/C
I   +-r  c              #   ^   K   | j                          | j                  t              }| y wr/   rR  )r  r,   s     r1   api_with_authn_rbac_authzrV  >  s)      '')
!
*
*9
5C
IrT  r   c              #   b   K   | }|j                          |j                  t              }| y wr/   rR  )r   _sysr,   s      r1   api_with_server_authrY  G  s*     D
--	
"C
Is   -/c                   D    e Zd Zdededee   dedee	e   e	e
   f   f
dZy)
ProducerFnproducercollection_id
embeddingsnr-   c                      y r/   rK   )r3  r\  r]  r^  r_  s        r1   __call__zProducerFn.__call__S  s     	r2   N)r$  r%  r&  r   r   r   r   intr	   r   r   ra  rK   r2   r1   r[  r[  R  sO      _-	
  
x((5/9	:r2   r[  r\  r]  r^  r_  c                     g }g }t        |      D ]A  }t        |      }| j                  ||      }|j                  |       |j                  |       C ||fS r/   )rangenextsubmit_embeddingr   )	r\  r]  r^  r_  submitted_embeddingsseq_ids_r   seq_ids	            r1   produce_n_singlerk  ]  s`     G1X**=!<##A&v	 
  ((r2   c                     g }g }t        |      D ]  }t        |      }|j                  |         | j                  ||      }||fS r/   )rd  re  r   submit_embeddings)r\  r]  r^  r_  rg  rh  ri  r   s           r1   produce_n_batchrn  m  sU     !G1X##A&  ((8LMG((r2   c                      t         t        gS r/   )rk  rn  rK   r2   r1   produce_fn_fixturesrp  |  s    o..r2   c              #   (   K   | j                    y wr/   r  r  s    r1   produce_fnsrr    s      --s   c                     dt         _        y )NT)r   _called_from_test)configs    r1   pytest_configurerv    s    )-&r2   r9  c                 :    | j                         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)get_settingsr   )r9  s    r1   is_client_in_processry    s     88D@@r2   T)autousec              #      K   | j                   j                  }t        j                  d|        d t        j                  d|        yw)z2Automatically logs the start and end of each test.zStarting test: NzFinished test: )noder   loggerdebug)r  	test_names     r1   	log_testsr    sB      !!I
LL?9+./ 

LL?9+./s   AA)NNN)r-   N)FNNNNNNNNNF)r   )Fr   NNNNNNNNNNF)r   rQ   ra   rZ   r   r   typingr   r   r   r   r   r   r	   r
   r   uuidr   r8   rG   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   r7  r   chromadb.api.async_clientr   r   AsyncClientCreatorchromadb.utils.async_to_syncr   logging	getLoggerr$  r}  VALID_PRESETSgetenvr5   
ValueErrorr9   register_profileHealthCheckdata_too_largelarge_base_examplefunction_scoped_fixtureget_profileload_profiler0   rA   rJ   COMPACTION_SLEEPMarkDecoratorrL   r]   rb  rj   boolstrr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r	  r  FixtureRequestr  r  r  r   r  r   r"  r)  r,   r/  rH  r9  rN  rP  rS  rV  rY  r[  rk  rn  rp  rr  rv  ry  r  rK   r2   r1   <module>r     s    	    
 
 
      & 3 (  6 6 , / $ 1 D = 			8	$*4f=&

+N+;;L]O[\]     $ $
--1166 %     $ $
J++F3" %     $ $j!!--f5C %     $ $
##F+	 %         0w 4 
 +/,0*.(B
:&&
'(BZ(()(B :&&
'(B j!!"	(BV 299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 	&$"45 "  	&$,-    9VT4-?#@ > +9VT4%78 + +hr9VT45G+H'HIJ "T(2ytAS7T3T*U%V 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 h'B'DE""y$$% F h'89F)) i	48M.N  : h':'<=-- )ItT<Q2R  > h';'=>.. 9Yd=R3S  ? 	/ 	 	 	+ 	 	 j! 9Yd%:;  ",5 ,5^ j!	V 		/42M(N 	 "	 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
 0 0r2   