o
    g                     @   s  U 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 d dlmZ d dlmZ d dlmZmZmZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZmZmZm Z  d d
l!m"Z" d dlm#Z# d dl$Z$d dl%m&Z& d dl'Z'e'(e)Z*dZ+dZ,ee$j-ddde& dddddeed dee$j-ddde& dddddeed dee$j-ddde& dddddeed dee$j-ddde& d dd!ddeed dgZ.ee e/d"< d#ee"ddf fd$d%Z0d#ee"ddf fd&d'Z1d#ee"ddf fd(d)Z2d#ee"ddf fd*d+Z3d#ee	g ee"ddf f  fd,d-Z4ej5d.e4 d/d0e#d#ee"ddf fd1d2Z6e$7 d3ej8ddddfd4e$j-d5e9d6ed7e
e9ee9e:e;f f d#ef
d8d9Z<d2e"d#dfd:d;Z=d2e"d#dfd<d=Z>d2e"d#dfd>d?Z?d2e"d#dfd@dAZ@d2e"d#dfdBdCZAd2e"d#dfdDdEZBd2e"d#dfdFdGZCd2e"d#dfdHdIZDee$-dJd3ej8e.d  jEddddi dKee$-dLdMej8e.d jEddddi dKgZFd2e"d#dfdNdOZGd2e"d#dfdPdQZHdS )R    N)	GeneratorListCallableDictUnion)	GrpcSysDB)GrpcMockSysDB)NotFoundErrorUniqueConstraintErrorInternalError)find_free_port)
CollectionSegmentSegmentScope)SqliteDB)DEFAULT_DATABASEDEFAULT_TENANTSystemSettings)SysDB)FixtureRequest)CollectionConfigurationInternaldefault   )inttest_collection_1str1?test_strtest_int
test_float   )idnameconfigurationmetadata	dimensiondatabasetenantversion   test_collection_2str2gffffff@   test_collection_3str3gffffff
@   test_collection_4str4g@sample_collectionsreturnc                  c   s.    t ttdd} |   | V  |   dS )Fixture generator for sqlite DBT)allow_resetN)r   r   r   startstop)db r;   S/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/test/db/test_system.pysqliteN   s   r=   c                  c   sT    t  } tttdd| d}|  |V  |  tj	| r(t
|  dS dS )r6   T)r7   is_persistentpersist_directoryN)tempfilemkdtempr   r   r   r8   r9   ospathexistsshutilrmtree)	save_pathr:   r;   r;   r<   sqlite_persistent\   s"   	rH   c                  c   sN    t  } ttd| d}|t |t}|  |  |V  |  dS )zpFixture generator for sqlite DB that creates a mock grpc sysdb server
    and a grpc client that connects to it.Tr7   chroma_server_grpc_portN)	r   r   r   instancer   r   r8   reset_and_wait_for_readyr9   )portsystemclientr;   r;   r<   grpc_with_mock_servero   s   

rP   c                  c   sp    t d ttddd} | t}t d |   t d |  t d |V  t d |   d S )	Nz Setting up grpc_with_real_serverTi  rI   zStarting systemz&Resetting client and waiting for readyz$grpc_with_real_server setup completez(Stopping system in grpc_with_real_server)	loggerdebugr   r   rK   r   r8   rL   r9   )rN   rO   r;   r;   r<   grpc_with_real_server   s"   





rS   c                   C   s   dt jv rtgS tttgS )NCHROMA_CLUSTER_TEST_ONLY)rB   environrS   r=   rH   rP   r;   r;   r;   r<   db_fixtures   s   

rV   module)scopeparamsrequestc                 c   s2    t d| jj  t|  V  t d d S )NzSetting up sysdb fixture with zTearing down sysdb fixture)rQ   rR   param__name__next)rZ   r;   r;   r<   sysdb   s   r^   test_type_acollection_idsegment_typerX   r&   c                 C   s   t t ||| |i dS )Nr#   typerX   
collectionr&   
file_paths)r   uuiduuid4)r`   ra   rX   r&   r;   r;   r<   sample_segment   s   	rh   c           	   	      sF  t d |   g }tD ]B t d j  t jtjdt jtj	dt jtj
dg}|| | j j j  | d  d d t d< t d< qt d	 |  }t|d
d d}t|dd dtksmJ tt | jtd jtd jtd  |d gd W d    n1 sw   Y  tD ] | j d d}| gksJ qtD ] | j d d}| gksJ qtD ] |  j}|d  ksJ t fdd|d D sJ qtd }| j|jd |  }||vsJ t|ttd ksJ t|dd dtdd  ksJ | j|d d}|g ks$J | j|jd}|g ks2J tt | |j W d    n	1 sIw   Y  ttttjf! | jtd jtd jtd  |d |d gd W d    n	1 s|w   Y  | jtd jd}|g ksJ | jtd jd}|g ksJ d S )NzResetting statezCreating collection: )r`   rX   r&   r'   r#   r$   r%   segmentsr&   r'   r(   r)   zGetting all collectionsc                 S      | j S Nr$   cr;   r;   r<   <lambda>       z4test_create_get_delete_collections.<locals>.<lambda>keyc                 S   rk   rl   rm   rn   r;   r;   r<   rp      rq   r   )r$   r#   r%   rj   r$   rm   r#   r#   rd   c                    s   g | ]	}|d   j kqS rd   rt   ).0segmentru   r;   r<   
<listcomp>   s    z6test_create_get_delete_collections.<locals>.<listcomp>rj   r   c                 S   rk   rl   rm   rn   r;   r;   r<   rp      rq   ru   )rQ   rR   reset_stater4   r$   rh   r#   r   METADATARECORDVECTORextendcreate_collectionget_configurationr   r   get_collectionssortedpytestraisesr
   get_collection_with_segmentsalldelete_collectionlenget_segmentsr	   r   sqlite3IntegrityError)	r^    segments_created_with_collectionrj   resultsresultcollection_with_segments_resultc1by_id_resultby_collection_resultr;   ru   r<   "test_create_get_delete_collections   s   




	 "
	r   c                 C   sr  t td jtd jtd  td d td d ttdd}|   | j|j|j| t	t
 dtj|jdddd	i d
g|d |d d d|d< | j|j|jd | j|jd}||gksaJ d|d< | j|j|jd | j|d d}||gks}J ddi|d< | j|j|d d | j|d d}||gksJ d |d< | j|jd d | j|d d}||gksJ d S )Nr   r&   r'   )r$   r#   r%   r&   r'   r(   r)   r*   r_   r   r   r   r   rb   ri   new_namer$   rm   r"   )r'   r#   rt   	test_str2r-   r&   )r   r4   r$   r#   r   r   r   ry   r~   r   rf   rg   r   r|   update_collectionr   r'   )r^   collr   r;   r;   r<   test_update_collections  sV   




r   c                 C   s
  |    td }| j|j|j| tt dt	j
|jddddi dg|d |d	 d
 | j|jt | dtt dt	j
td jddddi dg|d d\}}||ksYJ | j|d d}||gkshJ | jtd jtd jtd  tt dt	j
td jddddi dgdtd d d\}}|td ksJ | jtd jtd jtd  tt dt	j
td jddddi dgdtd d d\}}|td ksJ tt2 | jtd jtd jtd  dtt dt	j
td jddddi dg|d d W d    n	1 sw   Y  ddd}| jtd jtd jtd  tt dt	j
td jddddi dgd|d\}}|d |ksLJ |d td d ksYJ | jtd jtd jtd  ttd jgdd d\}}|d td d ksJ d S )Nr   r_   r   r   r   r   rb   r&   r'   ri   T)r$   r#   r%   get_or_createrj   r&   r$   rm   )r$   r#   r%   rj   r   r&   r+   Fnew_str)test_new_strr    )ry   r4   r~   r#   r$   r   r   rf   rg   r   r|   r   r   r   r
   rh   )r^   rd   r   created
get_resultoverlayed_metadatar;   r;   r<   test_get_or_create_collectionM  s   























r   c                 C   s  |    | jtd jdd}t|dksJ | jt dd | jtd jtd j	td 
 ttd jgtd d td d dd tt* | jtd jd	td 
 td d td d ttd jgdd
d W d    n1 suw   Y  | jtd jtd j	td 
 td d td d ttd jgd | jtd d dd}t|dksJ dtd d< |d td ksJ | jtd d d}t|dksJ |d td ksJ t| jtd d dddksJ | jtd jdd | jdd}t|dksJ | jtd j	d}t|dksJ |d td ks#J tt | jtd jd W d    n	1 s=w   Y  tt | jtd jdd W d    d S 1 s^w   Y  d S )Nr   new_databaser#   r(   r   r#   r$   r&   r'   r#   r$   r%   rj   r&   r'   r(   r   F)r#   r$   r%   r&   r'   rj   r(   r   )r#   r$   r%   r&   r'   rj   r$   )r$   r(   r(   rm   fake_dbr(   rt   )ry   r   r4   r#   r   create_databaserf   rg   r~   r$   r   rh   r   r   r
   r   r	   r^   r   r;   r;   r<   .test_create_get_delete_database_and_collection  sz   









	$r   c              
   C   s  |    | jt dd | jtd jtd jtd  t	td jgtd d td d dd | jtd jtd jtd  t	td jgtd d td d d | j
td jd	d | jtd d
 d}t|dkspJ |d d d	kszJ | j
td jdd | jtd d
 dd}t|dksJ |d d dksJ tt- | jtd jtd jtd  t	td jgtd d td d dd W d    d S 1 sw   Y  d S )Nr   r   r   r&   r'   r   r   ri   
new_name_1r#   rt   r$   
new_name_0r   )ry   r   rf   rg   r~   r4   r#   r$   r   rh   r   r   r   r   r   r
   r   r;   r;   r<    test_create_update_with_database8  s\   









"r   c              
   C   s   |    | jt dd tD ]}| j|j|j| t	|jg|d |d dd d|d< q| j
dd}t|ttks>J t|dd	 d
tksJJ | 
 }t|dksVJ d S )Nr   r   r&   r'   r   r(   r   c                 S   rk   rl   rm   rn   r;   r;   r<   rp     rq   z1test_get_multiple_with_database.<locals>.<lambda>rr   r   )ry   r   rf   rg   r4   r~   r#   r$   r   rh   r   r   r   )r^   rd   r   r;   r;   r<   test_get_multiple_with_databasex  s$   

	r   c                 C   s  |    | jdd tt | jdd W d    n1 s w   Y  tt | jtd W d    n1 s;w   Y  | jt ddd | jt dd | j	t
d jt
d jt
d  tt
d jgt
d d t
d d ddd	 dt
d d
< dt
d d< | j	t
d jt
d jt
d  tt
d jgt
d d t
d d dd dt
d d< | jddd}t|dksJ |d t
d ksJ | jdd}t|dksJ |d t
d ksJ tt, | j	t
d jt
d jt
d  tt
d jgt
d d t
d d dd W d    n	1 sw   Y  tt- | j	t
d jt
d jt
d  tt
d jgt
d d t
d d ddd	 W d    n	1 sOw   Y  | jtdd}t|dksdJ d S )Ntenant1rm   r   r#   r$   r)   r   r   r&   r'   )r#   r$   r%   rj   r&   r'   r(   r)   r)   r(   r   r   )r(   r)   r   )ry   create_tenantr   r   r
   r   r   rf   rg   r~   r4   r#   r$   r   rh   r   r   r   r   r;   r;   r<   !test_create_database_with_tenants  s~   













r   c                 C   s  |    | jdd | jdd}|d dksJ tt | jdd W d    n1 s.w   Y  | jt ddd | j	ddd}|d dksLJ |d dksTJ tt | j	d	dd W d    n1 skw   Y  tt | j	d	dd W d    d S 1 sw   Y  d S )
Nr   rm   r$   tenant2r   r   )r$   r)   r)   new_database1)
ry   r   
get_tenantr   r   r	   r   rf   rg   get_databaser   r;   r;   r<   test_get_database_with_tenants  s"   "r   z$00000000-d7d7-413b-92e1-731098a6e492rb   z$11111111-d7d7-413b-92e1-731098a6e492test_type_bc              	   C   sn  |    g }d}tD ]1}| }t|j|rdndd}|| | j|j|j| |g|d |d d\}}|du s;J q
g }tD ]}|| j	|jd	 q@t
|d
d d}t
|dd d}||kscJ tt | |d  W d    n1 szw   Y  |D ]}| j	|d |d d}	|	|gksJ q| j	dtd jd}	t|	dksJ |	d d td jksJ |	d |d ksJ | j	dtd jd}	t|	dksJ |	d |d ksJ | j	td jd	}	t|	dksJ |	d |d ksJ | j	dtd jd}	t|	dks	J |	d |d ksJ | j	dtd jd}	t|	dks'J |d }
| |
d |
d  d S )NFr_   r   )r`   ra   r&   r'   ri   Tru   c                 S      | d S Nr#   r;   rn   r;   r;   r<   rp   <      z1test_create_get_delete_segments.<locals>.<lambda>rr   c                 S   r   r   r;   rn   r;   r;   r<   rp   =  r   r   r#   rd   r#   rd   )rc   rd   r   )ry   r4   rh   r#   appendr~   r$   r   r}   r   r   r   r   r
   create_segmentr   delete_segment)r^   r   toggle_typerd   rw   collection_resultr   r   sorted_segmentsr   s1r;   r;   r<   test_create_get_delete_segments  s`   


r   c              	   C   s>  dddd}t t dtjtd j|i d}|   tD ]}| j|j|j	|
 t|jg|d |d	 d
 q| | | j|d |d d}|d |d d< ||gksUJ | j|d |d d}|d |d d< ||gksoJ d|d< | j|d |d ddid | j|d |d d}|d |d d< ||gksJ d|d< | j|d |d ddid | j|d |d d}|d |d d< ||gksJ |d= | j|d |d dd id | j|d |d d}|d |d d< ||gksJ d |d< | j|d |d d d | j|d |d d}|d |d d< ||gksJ d S )Nr   r   r   r   r_   r   rb   r&   r'   ri   r#   rd   r   r-   r   r   r0   r   )r   rf   rg   r   r|   r4   r#   ry   r~   r$   r   rh   r   r   update_segment)r^   r&   rw   ro   r   r;   r;   r<   test_update_segmentg  sn   	

	r   )IrB   	functoolsrE   r@   r   r   typingr   r   r   r   r   chromadb.db.impl.grpc.clientr   chromadb.db.impl.grpc.serverr   chromadb.errorsr	   r
   r   chromadb.test.conftestr   chromadb.typesr   r   r   chromadb.db.impl.sqliter   chromadb.configr   r   r   r   chromadb.db.systemr   r   rf   chromadb.api.configurationr   logging	getLoggerr\   rQ   TENANT	NAMESPACEUUIDr4   __annotations__r=   rH   rP   rS   rV   fixturer^   rg   r|   strr   floatrh   r   r   r   r   r   r   r   r   r#   sample_segmentsr   r   r;   r;   r;   r<   <module>   s   
 











,$

_9 W@T$

H