o
    \h_                      @   s
  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e7AeBZCg dZDeEddZFeFeDvreGdeF deD dejHjIddejJjKejJjLejJjMgejNjOd ejHjIdejHPddd ejHjIdejHPddd ejHjId ejHPdd!dd" ejHQeF d#e"d$dfd%d&ZR			ddeejH deejH d eejH d$eejH fd'd(ZSeEd)d*kZTd+ZUd$ejVfd,d-ZWdd.d/ZXd$eYfd0d1ZZ	2										2dd3eYd4e[d5ee\ d6ee\ d7ee\ d8ee\ d9ee\ d:ee\ d;ee\ d<ee\ d=ee\ d>ee[ d$dfd?d@Z]dd#e!dAeYd$dfdBdCZ^	2	D											2dd4e[dEe\d6ee\ dFee\ d7ee\ d8ee\ dGee\ d9ee\ d:ee\ d;ee\ d<ee\ d=ee\ d>ee[ d$ee%ddf fdHdIZ_d$ee%ddf fdJdKZ`d$ee%ddf fdLdMZad$ee%ddf fdNdOZbd$ee%ddf fdPdQZced d$ee%ddf fdRdSZed$ee%ddf fdTdUZfd$ee%ddf fdVdWZgd$ee%ddf fdXdYZhd$ee%ddf fdZd[Zid$ee%ddf fd\d]Zjed d$ee%ddf fd^d_Zked d$ee%ddf fd`daZlejddbdcd$ee%ddf fdddeZmejddbdcd$ee%ddf fdfdgZnejddbdcd$ee%ddf fdhdiZoejddbdcd$ee%ddf fdjdkZpejddlejqv rdigndegdmdnejrd$ee%ddf fdodpZsejddlejqv rdkgndggdmdnejrd$ee%ddf fdqdrZtd$e
e\ fdsdtZud$e
e\ fdudvZvd$e
eg ee%ddf f  fdwdxZwd$e
eg ee%ddf f  fdydzZxd$e
eg ee%ddf f  fd{d|Zyd$e
eg ee%ddf f  fd}d~Zzd$e
eg ee%ddf f  fddZ{ejddez ddnejrd$ee!ddf fddZ|ejddex ddnejrd$ee!ddf fddZ}ejdev dmdnejrd$ee!ddf fddZ~ejddbeu ddnejrd$ee!ddf fddZejdde{ ddnejrd$ee!ddf fddZejddew ddnejrd$ee!ddf fddZe6G dd de4Ze6G dd de2Zejddbdcde%d$ee!ddf fdd#ZG dd dZejddbdcde%d$eeddf fddZde d$dfddZejddbdcde%d$ee ddf fddZejddbdcde%d$ee ddf fddZejddbdcde%d$ee ddf fddZejddbdcde%d$ee!ddf fddZejddbdcde%d$ee!ddf fddZejddbdcde%d$ee!ddf fddZG dd deZde)dede	e, deYd$eee, ee+ f f
ddZde)dede	e, deYd$eee, ee+ f f
ddZd$e
e fddZejdde ddnejrd$eeddf fddZdd Zde d$e[fddZejddddnejrd$ed fddZejdd$ee?ge@f fddZejdde=d$e=fddZdS )    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apireturnc                 C   s   |    d S N)reset)r1    r5   Y/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/chromadb/test/conftest.pyr4   V   s   r4   c                    sd   g d | ||d}| t}|dur* fdd|j D }tjtjjfi |S ttjtjjS )a%  Override Hypothesis settings for specific profiles.

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

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

    Settings will be merged with the default/active profile.
    )r*   r.   r0   r+   r#   Nc                    s   i | ]\}}| v r||qS r5   r5   ).0keyvalueallowable_override_keysr5   r6   
<dictcomp>z   s
    z/override_hypothesis_profile.<locals>.<dictcomp>)getCURRENT_PRESET__dict__items
hypothesissettingsdefaultr
   )r$   r%   r&   override_profilesoverriding_profileoverridden_settingsr5   r:   r6   override_hypothesis_profileZ   s   

rG   CHROMA_CLUSTER_TEST_ONLY1x   c                   C   s   t jjtddS )Nz5Requires Kubernetes to be running with a valid config)reason)pytestmarkskipifNOT_CLUSTER_ONLYr5   r5   r5   r6   skip_if_not_cluster   s   rP   c                  C   st   t jt jt jtd} td|   t j| s#td|  t	
dddddd	d
dddddddd| g d S )Nzopenssl.cnfzConfig path: zConfig file not found at opensslreqz-x509z-newkeyzrsa:4096z-keyoutzserverkey.pemz-outzservercert.pemz-days365z-nodesz-subjz/CN=localhostz-config)ospathjoindirnameabspath__file__printexistsFileNotFoundError
subprocessrun)config_pathr5   r5   r6    generate_self_signed_certificate   s2   r`   c                  C   s\   t  t jt j} | d | t jt jd |  d W  d    S 1 s'w   Y  d S )N) r      )socketAF_INETSOCK_STREAMbind
setsockopt
SOL_SOCKETSO_REUSEADDRgetsockname)sr5   r5   r6   find_free_port   s
   

$rl   Fportis_persistentpersist_directorychroma_server_authn_provider$chroma_server_authn_credentials_filechroma_server_authn_credentials"chroma_auth_token_transport_headerchroma_server_authz_providerchroma_server_authz_config_filechroma_server_ssl_certfilechroma_server_ssl_keyfile;chroma_overwrite_singleton_tenant_database_access_from_authc                 C   s   |r|rt ddddd||d|||||||d}nt ddddddd|||||||d}tjj|}tj| d| d	d
|
|	d dS )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_implrn   ro   allow_resetrp   rq   rr   rs   rt   ru   rx   F)r|   r}   r~   r   r   rn   r   rp   rq   rr   rs   rt   ru   rx   z0.0.0.0error   )hostrm   	log_leveltimeout_keep_alivessl_keyfilessl_certfileN)r   chromadbserverfastapir   uvicornr^   app)rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   rB   r   r5   r5   r6   _run_server   sX   
r   attemptsc              
   C   sZ   z|    W d S  ty, } z|dkr|td t| |d  W Y d }~d S d }~ww )N      rb   )	heartbeatr   timesleep_await_server)r1   r   er5   r5   r6   r      s   
r   chromadb.api.fastapi.FastAPIr|   chroma_client_auth_providerchroma_client_auth_credentialsc                 #   s    t  tddd|||||	|f}dtdttddf f fdd}| rot }| |j|||||	|f}||E dH  z|	  W dS  t
tfyn } ztjdkran|W Y d}~dS d}~ww ||E dH  dS )	zmFixture generator that launches a server in a separate process, and yields a
    fastapi client connect to itspawnFNargsr2   c                 3   s    j t| dd}|  t ddrdndd
}t|}|t}|  tt|t	r4|nt
| |V  |  |  |  d S )NT)targetr   daemon	localhostF)
r|   chroma_server_hostchroma_server_http_portr   r   r   rs   chroma_server_ssl_verifychroma_server_ssl_enabledrx   )Processr   startr   r   instancer   r   
isinstancer   r   stopkillrV   )r   procrB   systemr1   r|   rs   r   r   rx   rv   ctxrm   r5   r6   r^   -  s.   

z_fastapi_fixture.<locals>.runnt)rl   multiprocessingget_contextr   r   r   tempfileTemporaryDirectorynamecleanupPermissionErrorNotADirectoryErrorrT   )rn   r|   rp   r   rq   rr   r   rs   rt   ru   rv   rw   rx   r   r^   ro   r   r5   r   r6   _fastapi_fixture   sX   
.
r   c                   C   
   t ddS )NFrn   r   r5   r5   r5   r6   r   h     
r   c                   C   s   t dddS )NF'chromadb.api.async_fastapi.AsyncFastAPI)rn   r|   r   r5   r5   r5   r6   async_fastapil  s   r   c                   C   r   )NTr   r   r5   r5   r5   r6   fastapi_persistents  r   r   c                   C   s   t   tddddS )NFz./servercert.pemz./serverkey.pem)rn   rv   rw   )r`   r   r5   r5   r5   r6   fastapi_sslw  s   r   c                  c   s    d} d}t dr"t dddd }tt dddd } td| |d	d
}t|}|t}t| |	  |V  |
  d S )Ni@  r   CHROMA_SERVER_HOSTra   :r   rb   r   T)r|   r   r   r   )rT   getenvsplitintr   r   r   r   r   r   r   )rm   r   rB   r   r1   r5   r5   r6   basic_http_client  s$   

r   c                  c   j    t jdddd"} | d |   tdd| jddd	D ]}|V  qW d    d S 1 s.w   Y  d S )
Nw	.htpasswdFsuffixdeleteCadmin:$2y$05$e5sRb6NCcSH3YfbIxe1AGu2h5K7OOd982OXKmd8WyQ3DRQ4MvpnZS
;chromadb.auth.basic_authn.BasicAuthenticationServerProvider1chromadb.auth.basic_authn.BasicAuthClientProvideradmin:adminrn   rp   rq   r   r   r   NamedTemporaryFilewritecloser   r   fitemr5   r5   r6   0fastapi_server_basic_auth_valid_cred_single_user  s   

"r   c                  c   s    dddd} t jdddd1}|  D ]\}}|| d	| d
 q|  tdd|jdddD ]}|V  q2W d    d S 1 sCw   Y  d S )Nz<$2y$10$kY9hn.Wlfcj7n1Cnjmy1kuIhEFIVBsfbNWLQ5ahoKmdc2HLA4oP6iz<$2y$10$CymQ63tic/DRj8dD82915eoM4ke3d6RaNKU4dj4IVJlHyea0yeGDSz<$2y$05$e5sRb6NCcSH3YfbIxe1AGu2h5K7OOd982OXKmd8WyQ3DRQ4MvpnZS)useruser2adminr   r   Fr   r   
r   r   r   r   )r   r   r@   r   r   r   r   )credsr   r   credr   r5   r5   r6   3fastapi_server_basic_auth_valid_cred_multiple_users  s&   
"r   c                  c   r   )
Nr   r   Fr   r   r   r   zadmin:admin1r   r   r   r5   r5   r6   &fastapi_server_basic_auth_invalid_cred  s   

"r   c                  c   s    t jddddN} | d |   t jdddd$}|d |  tddd	d
| jd|jdD ]}|V  q2W d    n1 sBw   Y  W d    d S W d    d S 1 sZw   Y  d S )Nr   r   Fr   r   z.authzaL  
roles_mapping:
    admin:
        actions:
            [
                "system:reset",
                "tenant:create_tenant",
                "tenant:get_tenant",
                "db:create_database",
                "db:get_database",
                "db:list_collections",
                "db:create_collection",
                "db:get_or_create_collection",
                "collection:get_collection",
                "collection:delete_collection",
                "collection:update_collection",
                "collection:add",
                "collection:delete",
                "collection:get",
                "collection:query",
                "collection:peek",
                "collection:update",
                "collection:upsert",
                "collection:count",
            ]
users:
- id: admin
  role: admin
    r   r   r   z?chromadb.auth.simple_rbac_authz.SimpleRBACAuthorizationProvider)rn   r   r   rp   rq   rt   ru   r   )server_authn_fileserver_authz_filer   r5   r5   r6   %fastapi_server_basic_authn_rbac_authz  s@   
	"r   c               	   c   sl    t jdddd#} | d |   tddddd	| jd
D ]}|V  qW d    d S 1 s/w   Y  d S )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)rn   rx   r   r   rp   rq   r   r   r5   r5   r6   2fastapi_fixture_admin_and_singleton_tenant_db_user	  s"   
"r   c                  c   0    t ddd} t| }|  |V  |  dS )Fixture generator for returning a client configured via environmenet
    variables, intended for externally configured integration tests
    Tr   r   r|   Nr   r   r   r   rB   r   r5   r5   r6   integration(     r   c                  c   r   )r   Tr   r   Nr   r   r5   r5   r6   async_integration6  r   r   function)scopec               	   c   s:    t dddddddd} t| }|  |V  |  dS )z>Fixture generator for segment-based API using in-memory Sqlitery   rz   r{   FT)r|   r}   r~   r   r   rn   r   Nr   r   r5   r5   r6   python_sqlite_ephemeralD  s   	r   c               
   c   s    t  } tddddddd| jd}t|}|  |V  |  z|   W dS  tt	fyE } zt
jdkr8n|W Y d}~dS d}~ww )z?Fixture generator for segment-based API using persistent Sqlitery   rz   r{   T)r|   r}   r~   r   r   r   rn   ro   r   N)r   r   r   r   r   r   r   r   r   r   rT   )	save_pathrB   r   r   r5   r5   r6   python_sqlite_persistentV  s2   

r   c               
   c   s<    t ddddddddd} t| }|  |V  |  dS )	z:Fixture generator for system using ephemeral Rust bindings!chromadb.api.rust.RustBindingsAPIrz   r{   FTra   r|   r}   r~   r   r   rn   r   ro   Nr   r   r5   r5   r6   rust_sqlite_ephemeralv  s   
r   c               
   c   sF    t  } tddddddd| jd}t|}|  |V  |  dS )z0Fixture generator for system using Rust bindingsr   rz   r{   Tr   N)r   r   r   r   r   r   r   )r   rB   r   r5   r5   r6   rust_sqlite_persistent  s    
r   CHROMA_RUST_BINDINGS_TEST_ONLY)paramsrequestc                 C      |  | jS r3   getfixturevalueparamr   r5   r5   r6   sqlite     r   c                 C   r   r3   r   r   r5   r5   r6   sqlite_persistent  r   r   c                  C   s^   g d} dt jv r| d | d dt jv rddg} dt jv r$dg} dt jv r-d	d
g} | S )N)r   r   r   sqlite_fixturer   CHROMA_INTEGRATION_TESTr   r   CHROMA_INTEGRATION_TEST_ONLYrH   r   r   r   r   )rT   environappendfixturesr5   r5   r6   filtered_fixture_names  s   





r  c                  C   s   dd t  D } | S )Nc                 S   s   g | ]}|d vr|qS ))r   r   r   r   r5   )r7   fixturer5   r5   r6   
<listcomp>  s    z6filtered_http_server_fixture_names.<locals>.<listcomp>)r  r  r5   r5   r6   "filtered_http_server_fixture_names  s   r
  c                  C   s   t tg} | S r3   )r   r   r  r5   r5   r6   system_fixtures_auth  s   r  c                  C   
   t g} | S r3   )r   r  r5   r5   r6    system_fixtures_authn_rbac_authz     r  c                  C   r  r3   )r   r  r5   r5   r6   1system_fixtures_root_and_singleton_tenant_db_user  r  r  c                  C   r  r3   )r   r  r5   r5   r6   system_fixtures_wrong_auth     r  c                  C   r  r3   )r   r  r5   r5   r6   system_fixtures_ssl  r  r  module)r   r   c                 c       |   E d H  d S r3   r   r   r5   r5   r6   system_wrong_auth     r  c                 c   r  r3   r  r   r5   r5   r6   system_authn_rbac_authz  r  r  c                 C   r   r3   r   r   r5   r5   r6   system_http_server  s   r  c                 C   r   r3   r   r   r5   r5   r6   r     s   r   c                 c   r  r3   r  r   r5   r5   r6   
system_ssl     r  c                 c   r  r3   r  r   r5   r5   r6   system_auth  r  r  c                   @      e Zd ZdS )AsyncClientCreatorSyncN__name__
__module____qualname__r5   r5   r5   r6   r        r  c                   @   r  )AsyncAdminClientSyncNr  r5   r5   r5   r6   r$    r#  r$  c                 c   s:    |    | t}t|trt|}|V  d S |V  d S r3   )reset_stater   r   r   r   r   )r   r1   transformedr5   r5   r6   r1   !  s   



c                   @   s   e Zd ZU dZeed< g Zee ed< defddZ	de
de
d	efd
dZd	efddZde
de
d	efddZd	efddZdS )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                 C   s
   || _ d S r3   )r(  )selfr   r5   r5   r6   __init__6  r   zClientFactories.__init__r   kwargsr2   c                 O   sl   | dd u r| jj|d< | jjjdkr'tttj|i |}| j	| |S t|i |}| j	| |S )NrB   r   )
r=   r(  rB   r|   r
   ClientCreatorr  creater)  r  r*  r   r,  clientr5   r5   r6   create_client9  s   zClientFactories.create_clientc                 C   sL   | j jjdkrttt| j }| j| |S t	| j }| j| |S Nr   )
r(  rB   r|   r
   r-  r  from_system_asyncr)  r  from_systemr*  r0  r5   r5   r6   create_client_from_systemI  s   z)ClientFactories.create_client_from_systemc                 O   sP   | j jjdkrttt|i |}| j| |S t|i |}| j| |S r2  )r(  rB   r|   r
   r   r$  r)  r  r/  r5   r5   r6   create_admin_clientX  s   z#ClientFactories.create_admin_clientc                 C   sL   | j jjdkrttt| j }| j| |S t| j }| j| |S r2  )	r(  rB   r|   r
   r   r$  r4  r)  r  r5  r5   r5   r6   create_admin_client_from_systeme  s   z/ClientFactories.create_admin_client_from_systemN)r   r!  r"  __doc__r   __annotations__r)  r   r   r+  r   r-  r1  r6  r   r7  r8  r5   r5   r5   r6   r'  -  s   
 r'  c                 c   sP    |    t| }|V  t|jdkr&|j }|  ~t|jdksd S d S )Nr   )r%  r'  lenr)  popclear_system_cache)r   	factoriesr0  r5   r5   r6   client_factoriess  s   
r?  r0  c                 C   sH   |   }|jdkrd|_t|}dtt  }|| | | dS )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)r0  admin_settingsr   databaser5   r5   r6   create_isolated_database  s   

rI  c                 c   T    |    | jjdkrttt| }|V  |  d S t	| }|V  |  d S r2  
r%  rB   r|   r
   r   r  r3  r=  r-  r4  )r   r0  r5   r5   r6   r0    s   
c                 c   rJ  r2  rK  )r  r0  r5   r5   r6   http_client  s   
rL  c                 c   s&    |    t| }|V  |  d S r3   )r%  r-  r4  r=  )r  r0  r5   r5   r6   
client_ssl  s
   
rM  c                 c       |    | t}|V  d S r3   r%  r   r   )r  r1   r5   r5   r6   api_wrong_cred     

rP  c                 c   rN  r3   rO  )r  r1   r5   r5   r6   api_with_authn_rbac_authz  rQ  rR  c                 c   s"    | }|   |t}|V  d S r3   rO  )r  _sysr1   r5   r5   r6   api_with_server_auth  s
   

rT  c                   @   s>   e Zd Zdededee dedee	e e	e
 f f
ddZdS )	
ProducerFnproducercollection_id
embeddingsnr2   c                 C   s   d S r3   r5   )r*  rV  rW  rX  rY  r5   r5   r6   __call__  s   zProducerFn.__call__N)r   r!  r"  r   r   r   r   r   r   r   r   rZ  r5   r5   r5   r6   rU    s    rU  rV  rW  rX  rY  c           	      C   sF   g }g }t |D ]}t|}| ||}|| || q||fS r3   )rangenextsubmit_embeddingr  )	rV  rW  rX  rY  submitted_embeddingsseq_ids_r   seq_idr5   r5   r6   produce_n_single  s   
rb  c                 C   s<   g }g }t |D ]}t|}|| q| ||}||fS r3   )r[  r\  r  submit_embeddings)rV  rW  rX  rY  r^  r_  r`  r   r5   r5   r6   produce_n_batch  s   rd  c                   C   s   t tgS r3   )rb  rd  r5   r5   r5   r6   produce_fn_fixtures  s   re  c                 c   s    | j V  d S r3   r  r   r5   r5   r6   produce_fns  s   rf  c                 C   s
   dt _d S )NT)r   _called_from_test)configr5   r5   r6   pytest_configure  r   ri  c                 C   s   |   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)rA  r   )r0  r5   r5   r6   is_client_in_process	  s   rj  T)autouse)NNNc                 c   s4    | j j}td|  dV  td|  dS )z2Automatically logs the start and end of each test.zStarting test: NzFinished test: )noder   loggerdebug)r   	test_namer5   r5   r6   	log_tests  s
   rp  c                  C   s   dt dtfdd} | S )z"Return mock embeddings for testinginputr2   c                 S   s   dd | D S )Nc                 S   s    g | ]}t jg d t jdqS )g?g?g333333?)dtype)nparrayfloat32)r7   r`  r5   r5   r6   r	    s     z=mock_embeddings.<locals>._mock_embeddings.<locals>.<listcomp>r5   )rq  r5   r5   r6   _mock_embeddings  s   z)mock_embeddings.<locals>._mock_embeddingsr    )rw  r5   r5   r6   mock_embeddings  s   rx  monkeypatchc                 C   s   t  t  t  t  t  t  t  t  t  t  t  d}| tdttjfi | t  t  t  t  t  t  d}t  }tg dg|j_tg dg|j	_|t  |f|d j
_| D ]\}}| j||dd q[| 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.SentenceModelrr  r  F)raising)r   setattrsysdictr  rt  ru  encode_textreturn_valueencode_imagecreate_model_and_transformsr@   )ry  mock_modulesmock_attributes
mock_modelrU   mockr5   r5   r6   mock_common_deps$  s<   
r  )r2   N)FNNNNNNNNNF)r   )Fr   NNNNNNNNNNF)r   rT   rc   r]   r   r   typingr   r   r   r   r   r   r   r	   r
   rC  r   rA   rL   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   r-  r   chromadb.api.async_clientr   r   AsyncClientCreatorchromadb.utils.async_to_syncr   loggingr  numpyrt  unittest.mockr   r   chromadb.api.typesr!   r"   	getLoggerr   rm  VALID_PRESETSr   r>   
ValueErrorrB   register_profileHealthCheckdata_too_largelarge_base_examplefunction_scoped_fixture	Verbosityverboseget_profileload_profiler4   rG   rO   COMPACTION_SLEEPMarkDecoratorrP   r`   r   rl   boolrB  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  r  r  r   r  r  r  r$  r1   r'  r?  rI  r0  rL  rM  rP  rR  rT  rU  rb  rd  re  rf  ri  rj  rp  rx  r  r5   r5   r5   r6   <module>   sZ   ,


+
		

>	

k	
9




  $

$$   

F









	