
    q9iP                      z   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l7Z7d dl8Z8d dl9Z:d dl;m<Z< d dlm=Z= d dl>m?Z?m@Z@ d dlZ e7j                  eB      ZCg dZD ej                  dd      ZFeFeDvr eGdeF deD d      ej                  j                  ddej                  j                  ej                  j                  ej                  j                  gej                  j                         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                  eF        ej                  d#      d$k(  xs  ej                  d%      d$k(  ZRd&ZSd'ZTd(e"d)dfd*ZU	 	 	 ddeej                     deej                     d eej                     d)eej                     fd+ZV ej                  d,      d$k7  ZWd-ZXd)ej                  fd.ZZdd/Z[d)e\fd0Z]	 	 	 	 	 	 	 	 	 	 	 dd1e\d2e^d3ee_   d4ee_   d5ee_   d6ee_   d7ee_   d8ee_   d9ee_   d:ee_   d;ee_   d<ee^   d)dfd=Z`dd(e!d>e\d)dfd?Za	 	 	 	 	 	 	 	 	 	 	 	 	 dd2e^d@e_d4ee_   dAee_   d5ee_   d6ee_   dBee_   d7ee_   d8ee_   d9ee_   d:ee_   d;ee_   d<ee^   d)ee%ddf   fdCZbd)ee%ddf   fdDZcd)ee%ddf   fdEZdd)ee%ddf   fdFZed)ee%ddf   fdGZf ej                         d)ee%ddf   fdH       Zhd)ee%ddf   fdIZid)ee%ddf   fdJZjd)ee%ddf   fdKZkd)ee%ddf   fdLZld)ee%ddf   fdMZm ej                         d)ee%ddf   fdN       Zn ej                         d)ee%ddf   fdO       Zo ej                  dPQ      d)ee%ddf   fdR       Zp ej                  dPQ      d)ee%ddf   fdS       Zq ej                  dPQ      d)ee%ddf   fdT       Zr ej                  dPQ      d)ee%ddf   fdU       Zs ej                  d#ej                  v rdVgndWgX      dYej                  d)ee%ddf   fdZ       Zv ej                  d#ej                  v rd[gnd\gX      dYej                  d)ee%ddf   fd]       Zwd)e
e_   fd^Zxd)e
e_   fd_Zyd)e
eg ee%ddf   f      fd`Zzd)e
eg ee%ddf   f      fdaZ{d)e
eg ee%ddf   f      fdbZ|d)e
eg ee%ddf   f      fdcZ}d)e
eg ee%ddf   f      fddZ~ ej                  de e}       f      dYej                  d)ee!ddf   fdg       Z ej                  de e{       f      dYej                  d)ee!ddf   fdh       Z ej                   ey       X      dYej                  d)ee!ddf   fdi       Z ej                  dP ex       f      dYej                  d)ee!ddf   fdj       Z ej                  de e~       f      dYej                  d)ee!ddf   fdk       Z ej                  de ez       f      dYej                  d)ee!ddf   fdl       Ze6 G dm dne4             Ze6 G do dpe2             Z ej                  dPQ      dqe%d)ee!ddf   fdr       Z G ds dt      Z ej                  dPQ      dqe%d)eeddf   fdu       Zdve d)dfdwZ ej                  dPQ      dqe%d)ee ddf   fdx       Z ej                  dPQ      dye%d)ee ddf   fdz       Z ej                  dPQ      d{e%d)ee ddf   fd|       Z ej                  dPQ      d}e%d)ee!ddf   fd~       Z ej                  dPQ      de%d)ee!ddf   fd       Z ej                  dPQ      de%d)ee!ddf   fd       Z G d de      Zde)dede	e,   de\d)eee,   ee+   f   f
dZde)dede	e,   de\d)eee,   ee+   f   f
dZd)e
e   fdZ ej                  de e       f      dYej                  d)eeddf   fd       Zd Zdve d)e^fdZ ej                  d      dYej                  d)ed   fd       Zej                  d)ee?ge@f   fd       Zej                  de=d)e=f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)	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                 $    | j                          y N)reset)r5   s    _/var/www/html/leadgen/airagagent/rag_env/lib/python3.12/site-packages/chromadb/test/conftest.pyr9   r9   c   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/   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
U-- J
 
 "":#6#6#>#>VBUVV
##Z%8%8%@%@AA
s   B3CHROMA_CLUSTER_TEST_ONLYx   c                  L    t         j                  j                  t        d      S )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                     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    r:    generate_self_signed_certificatere      s    '',,
12MK 
M+
'(77>>+&";K= IJJNN!	
r;   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    r:   find_free_portrr      sf    	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_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                     	 | j                          y # t        $ r5}|dkD  r|t        j                  d       t	        | |dz          Y d }~y d }~ww xY w)N      rh   )	heartbeatr   timesleep_await_server)r5   r   es      r:   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argsr6   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   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   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)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$ 	 	sH   B
C2B<C2B> *C26C07C2>C-C(#C2(C--C2c                      t        d      S )NFrt   r   rS   r;   r:   r   r   u  s    %00r;   c                      t        dd      S )NF'chromadb.api.async_fastapi.AsyncFastAPI)rt   r   r   rS   r;   r:   async_fastapir   y  s    A r;   c                      t        d      S )NTr   r   rS   r;   r:   fastapi_persistentr     s    $//r;   c                  2    t                t        ddd      S )NFz./servercert.pemz./serverkey.pem)rt   r|   r}   )re   r   rS   r;   r:   fastapi_sslr     s    $&#5"3 r;   c               #     K   d} d}t        j                  d      rYt        j                  dd      j                  d      d   }t        t        j                  dd      j                  d      d         } t	        d| |d	
      }t        |      }|j                  t              }t        |       |j                          | |j                          y w)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               #      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rt   rv   rw   r   r   r   NamedTemporaryFilewritecloser   r   fitems     r:   0fastapi_server_basic_auth_valid_cred_single_userr     st     
 
	$	$SU	K q	VW		$)f12([+8
 	D J		     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   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	K q++- 	(JD$GGtfAdV2&'	(		$)f12([+8
 	D J	  s   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     r:   &fastapi_server_basic_auth_invalid_credr     sr     		$	$SU	K q	VW		$)f12([+9
 	D J		  r   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)rt   r   r   rv   rw   rz   r{   r   )server_authn_fileserver_authz_filer   s      r:   %fastapi_server_basic_authn_rbac_authzr     s     		$	$K
 5	R	
 	!((
 -	##> ##%(#,_/<-j5F5K5K-n0A0F0F 	 
	I-	5 5-	 -	5 5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)rt   r~   r   r   rv   rw   r   r   s     r:   2fastapi_fixture_admin_and_singleton_tenant_db_userr     s}      
	$	$S%	H A		
 	
	$HL([+8)f12
 	D J	#  s   A7AA+"	A7+A40A7c               #      K   t        dd      } t        |       }|j                          | |j                          yw)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   >A c               #      K   t        dd      } t        |       }|j                          | |j                          yw)r   Tr   r   Nr   r   s     r:   async_integrationr   C  s;     
 *SH HF
LLN
L
KKMr   function)scopec            	   #      K   t        ddddddd      } t        |       }|j                          | |j                          yw)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  sJ      9<??$]H HF
LLN
L
KKMs   AA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 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 s0   A!B'$A5 4B'5B$BB'B$$B'c            
   #      K   t        dddddddd      } t        |       }|j                          | |j                          yw)	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    sM      ;<??$]	H HF
LLN
L
KKMs   AAc            
   #      K   t        j                         } t        ddddddd| j                        }t	        |      }|j                          | |j                          yw)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    | j                  | j                        S r8   getfixturevalueparamr  s    r:   sqliter         ""7==11r;   r
  r  c                 8    | j                  | j                        S r8   r  r  s    r:   sqlite_persistentr    r  r;   c                      g d} dt         j                  v r"| j                  d       | j                  d       dt         j                  v rddg} dt         j                  v rdg} dt         j                  v rd	d
g} | S )N)r   r   r   sqlite_fixturer  CHROMA_INTEGRATION_TESTr   r   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                  F    t               D  cg c]  } | dvr| 
 }} |S c c} w )N)r  r  r  r
  )r  )fixturer  s     r:   "filtered_http_server_fixture_namesr     s=     ./


 	
H 
 O
s   c                      t         t        g} | S r8   )r   r   r  s    r:   system_fixtures_authr"    s    8;H Or;   c                      t         g} | S r8   )r   r  s    r:    system_fixtures_authn_rbac_authzr$    s     66HOr;   c                      t         g} | S r8   )r   r  s    r:   1system_fixtures_root_and_singleton_tenant_db_userr&    s     CCHOr;   c                      t         g} | S r8   )r   r  s    r:   system_fixtures_wrong_authr(    s    67HOr;   c                      t         g} | S r8   )r   r  s    r:   system_fixtures_sslr*    s    }HOr;   module)r   r  c              #   @   K   | j                         E d {    y 7 wr8   r  r  s    r:   system_wrong_authr.           }}   c              #   @   K   | j                         E d {    y 7 wr8   r-  r  s    r:   system_authn_rbac_authzr2    r/  r0  c                 8    | j                  | j                        S r8   r  r  s    r:   system_http_serverr4    s     ""7==11r;   c                 8    | j                  | j                        S r8   r  r  s    r:   r   r     s    ""7==11r;   c              #   @   K   | j                         E d {    y 7 wr8   r-  r  s    r:   
system_sslr7         }}r0  c              #   @   K   | j                         E d {    y 7 wr8   r-  r  s    r:   system_authr:    r8  r0  c                       e Zd Zy)AsyncClientCreatorSyncN__name__
__module____qualname__rS   r;   r:   r<  r<  $      r;   r<  c                       e Zd Zy)AsyncAdminClientSyncNr=  rS   r;   r:   rC  rC  )  rA  r;   rC  r   c              #      K   | j                          | j                  t              }t        |t              rt        |      }| y | y wr8   )reset_stater   r   r   r   r   )r   r5   transformeds      r:   r5   r5   .  s?     

//)
$C#|$)#.	s   AAc                   |    e Zd ZU dZeed<   g Zee   ed<   defdZ	de
de
defd	Zdefd
Zde
de
defdZdefdZ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 r8   )rI  )selfr   s     r:   __init__zClientFactories.__init__C  s	    r;   r   kwargsr6   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 )NrB   r   )
r=   rI  rB   r   r   ClientCreatorr<  createrJ  r  rL  r   rN  clients       r:   create_clientzClientFactories.create_clientF  s    ::j!)!%!6!6F: LL!!1189 -)?)F)F)WPV)WXF!!((0M//$$V,r;   c                 T   | j                   j                  j                  dk(  rJt        t        t
        j                  | j                               }| j                  j                  |       |S t	        j                  | j                         }| j                  j                  |       |S Nr   )
rI  rB   r   r   rP  r<  from_system_asyncrJ  r  from_systemrL  rS  s     r:   create_client_from_systemz)ClientFactories.create_client_from_systemV  s    LL!!1189 5GGUF !!((0M**4<<8$$V,r;   c                    | j                   j                  j                  dk(  r6t        t        t        |i |      }| j                  j                  |       |S t	        |i |}| j                  j                  |       |S rV  )rI  rB   r   r   r   rC  rJ  r  rR  s       r:   create_admin_clientz#ClientFactories.create_admin_cliente  sw    LL!!1189 +';T'LV'LMF!!((0Md-f-$$V,r;   c                 T   | j                   j                  j                  dk(  rJt        t        t
        j                  | j                               }| j                  j                  |       |S t	        j                  | j                         }| j                  j                  |       |S rV  )	rI  rB   r   r   r   rC  rX  rJ  r  rY  s     r:   create_admin_client_from_systemz/ClientFactories.create_admin_client_from_systemr  s    LL!!1189 +';'G'G'UVF!!((0M((6$$V,r;   N)r>  r?  r@  __doc__r   __annotations__rJ  r   r   rM  r   rP  rT  rZ  r   r\  r^  rS   r;   r:   rH  rH  :  su     O(*d9o*v 3 # -  =     r;   rH  c              #     K   | j                          t        |       }| t        |j                        dkD  rE|j                  j	                         }|j                          ~t        |j                        dkD  rDy y w)Nr   )rE  rH  lenrJ  popclear_system_cache)r   	factoriesrS  s      r:   client_factoriesrf    sl     
'I
O
i((
)A
-++//1!!# i((
)A
-s   A;B >B rS  c                     | j                         }|j                  dk(  rd|_        t        |      }dt        t	        j
                               z   }|j                  |       | j                  |       y)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)rS  admin_settingsr   databases       r:   create_isolated_databaserq    sb    ((*N%%)RR)G&'ETZZ\**H	(#
!r;   c              #      K   | j                          | j                  j                  dk(  r8t        t        t
        j                  |             }| |j                          y t        j                  |       }| |j                          y wrV  
rE  rB   r   r   r   r<  rW  rd  rP  rX  )r   rS  s     r:   rS  rS    so     
&&*SSc1CCFKL!!#**62!!#   BBr4  c              #      K   | j                          | j                  j                  dk(  r8t        t        t
        j                  |             }| |j                          y t        j                  |       }| |j                          y wrV  rs  )r4  rS  s     r:   http_clientrv    sy     ""$ 	##334	5 c1CCDVWX!!#**+=>!!#rt  r7  c              #   ~   K   | j                          t        j                  |       }| |j                          y wr8   )rE  rP  rX  rd  )r7  rS  s     r:   
client_sslrx    s3     &&z2F
L
s   ;=r.  c              #   ^   K   | j                          | j                  t              }| y wr8   rE  r   r   )r.  r5   s     r:   api_wrong_credr{    s)      !!#

$
$Y
/C
I   +-r2  c              #   ^   K   | j                          | j                  t              }| y wr8   rz  )r2  r5   s     r:   api_with_authn_rbac_authzr~    s)      '')
!
*
*9
5C
Ir|  r:  c              #   b   K   | }|j                          |j                  t              }| y wr8   rz  )r:  _sysr5   s      r:   api_with_server_authr    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nr6   c                      y r8   rS   )rL  r  r  r  r  s        r:   __call__zProducerFn.__call__  s     	r;   N)r>  r?  r@  r   r   r   r   r   r	   r   r   r  rS   r;   r:   r  r    sO      _-	
  
x((5/9	:r;   r  r  r  r  r  c                     g }g }t        |      D ]A  }t        |      }| j                  ||      }|j                  |       |j                  |       C ||fS r8   )rangenextsubmit_embeddingr  )	r  r  r  r  submitted_embeddingsseq_ids_r   seq_ids	            r:   produce_n_singler    se     G1X **=!<##A&v	
  ((r;   c                     g }g }t        |      D ]  }t        |      }|j                  |         | j                  ||      }||fS r8   )r  r  r  submit_embeddings)r  r  r  r  r  r  r  r   s           r:   produce_n_batchr    sZ     !G1X '##A&' ((8LMG((r;   c                      t         t        gS r8   )r  r  rS   r;   r:   produce_fn_fixturesr    s    o..r;   c              #   (   K   | j                    y wr8   r-  r  s    r:   produce_fnsr    s      --s   c                     dt         _        y )NT)r   _called_from_test)configs    r:   pytest_configurer    s    )-&r;   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)ri  r   )rS  s    r:   is_client_in_processr    s     88D@@r;   T)autouse)NNNc              #      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     r:   	log_testsr    sB      !!I
LL?9+./ 

LL?9+./s   AAc                  &    dt         dt        fd} | S )z"Return mock embeddings for testinginputr6   c                 v    | D cg c])  }t        j                  g dt         j                        + c}S c c}w )Ng?g?g333333?)dtype)nparrayfloat32)r  r  s     r:   _mock_embeddingsz)mock_embeddings.<locals>._mock_embeddings+  s%    EJK

;KKKs   .6r!   )r  s    r:   mock_embeddingsr  '  s     L	 Lj L r;   monkeypatchc                    t               t               t               t               t               t               t               t               t               t               t               d}| j                  t        dt        t        j                  fi |       t               t               t               t               t               t               d}t               }t        j                  g dg      |j                  _        t        j                  g dg      |j                  _        |t               |f|d   j                  _        |j                         D ]  \  }}| j                  ||d        | S )zMock common dependencies)PILtorchopenaicoheresentence_transformersollamaInstructorEmbeddingvoyageaitext2vec	open_clipboto3modules)z	PIL.Imagez)sentence_transformers.SentenceTransformerzollama.ClientzInstructorEmbedding.INSTRUCTORzvoyageai.Clientztext2vec.SentenceModelr  r  F)raising)r   setattrsysdictr  r  r  encode_textreturn_valueencode_imagecreate_model_and_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 &++- 7
dD$67 r;   )r6   N)FNNNNNNNNNF)r   )Fr   NNNNNNNNNNF)r   rY   ri   rb   r   r   typingr   r   r   r   r   r   r	   r
   r   rk  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   rP  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   boolrj  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.  r2  r4  r   r7  r:  r<  rC  r5   rH  rf  rq  rS  rv  rx  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
 BII./36 8ryy/0C7 
 W  T 
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 
 
 
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;   