o
    1Xxi5d                     @   sB  U 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 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mZ d dlm Z  d dl!Z!d dl"m#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gZ'ee e(d< deeddf fd d!Z)deeddf fd"d#Z*deeddf fd$d%Z+deeddf fd&d'Z,deeg eeddf f  fd(d)Z-ej.d*e- d+d,e deeddf fd-d.Z/d.eddfd/d0Z0d.eddfd1d2Z1d.eddfd3d4Z2d.eddfd5d6Z3d.eddfd7d8Z4d.eddfd9d:Z5d.eddfd;d<Z6d.eddfd=d>Z7ee!&d?d@ej8e'd  dA dddddBee!&dCdDej8e'd dA dddddBee!&dEdDej9ddddddBgZ:d.eddfdFdGZ;d.eddfdHdIZ<dS )J    N)	GeneratorListCallableDictUnion)	GrpcSysDB)GrpcMockSysDB)find_free_port)
CollectionSegmentSegmentScope)SqliteDB)DEFAULT_DATABASEDEFAULT_TENANTSystemSettings)SysDB)NotFoundErrorUniqueConstraintError)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
@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 r7   [/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/test/db/test_system.pysqlite?   s   r9   c                  c   sT    t  } tttdd| d}|  |V  |  tj	| r(t
|  dS dS )r2   T)r3   is_persistentpersist_directoryN)tempfilemkdtempr   r   r   r4   r5   ospathexistsshutilrmtree)	save_pathr6   r7   r7   r8   sqlite_persistentM   s"   	rD   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r3   chroma_server_grpc_portN)	r	   r   r   instancer   r   r4   reset_and_wait_for_readyr5   )portsystemclientr7   r7   r8   grpc_with_mock_server`   s   

rL   c                  c   s6    t tddd} | t}|   |  |V  d S )NTi  rE   )r   r   rG   r   r4   rH   )rJ   rK   r7   r7   r8   grpc_with_real_servers   s   

rM   c                   C   s   dt jv rtgS tttgS )NCHROMA_CLUSTER_TEST_ONLY)r>   environrM   r9   rD   rL   r7   r7   r7   r8   db_fixtures   s   

rP   module)scopeparamsrequestc                 c   s    t |  V  d S N)nextparam)rT   r7   r7   r8   sysdb   s   rX   c                 C   s  |    tD ]}| j|j|j| |d |d d t|d< t|d< q|  }t	|dd d}t	|d	d dtks;J t
t | jtd
 jtd
 jtd
  d W d    n1 s]w   Y  tD ]}| j|d d}||gksuJ qdtD ]}| j|d d}||gksJ qxtd
 }| |j |  }||vsJ t|ttd ksJ t	|dd dtdd  ksJ | j|d d}|g ksJ t
t | |j W d    d S 1 sw   Y  d S )Nr%   r&   r"   r#   r$   r%   r&   r'   r(   c                 S      | j S rU   r#   cr7   r7   r8   <lambda>       z4test_create_get_delete_collections.<locals>.<lambda>keyc                 S   rZ   rU   r[   r\   r7   r7   r8   r^      r_   r   )r#   r"   r$   r#   r[   r"   r"   r   c                 S   rZ   rU   r[   r\   r7   r7   r8   r^      r_   )reset_stater0   create_collectionr"   r#   get_configurationr   r   get_collectionssortedpytestraisesr   delete_collectionlenr   )rX   
collectionresultsresultc1by_id_resultr7   r7   r8   "test_create_get_delete_collections   sL   

 "rq   c              
   C   sN  t td jtd jtd  td d td d ttdd}|   | j|j|j| |d |d d d|d< | j	|j|jd | j
|jd}||gksOJ d	|d< | j	|j|jd
 | j
|d d}||gkskJ 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)   rY   new_namer#   r[   r!   )r&   r"   rb   	test_str2r,   r%   )r
   r0   r#   r"   re   r   r   rc   rd   update_collectionrf   r&   )rX   collrn   r7   r7   r8   test_update_collections   sD   


	rw   c                 C   s  |    td }| j|j|j| |d |d d | j|jt t d|d d\}}||ks2J | j	|d d}||gksAJ | jtd	 jtd	 jtd	  dtd	 d d\}}|td	 kscJ | jtd
 jtd
 jtd
  dtd
 d d\}}|td
 ksJ t
t | jtd
 jtd
 jtd
  d|d d W d    n1 sw   Y  dd	d}| jtd
 jtd
 jtd
  d|d\}}|d |ksJ | jtd
 jtd
 jtd
  dd d\}}|d |ksJ d S )Nr   r%   r&   rY   T)r#   r"   r$   get_or_creater%   r#   r[   r   r*   Fnew_str)test_new_strr   )rc   r0   rd   r"   r#   re   uuiduuid4r   rf   rh   ri   r   )rX   rl   rn   created
get_resultoverlayed_metadatar7   r7   r8   test_get_or_create_collection   s~   











r   c              
   C   sv  |    | jt dd | jtd jtd jtd  td d td d dd t	
t# | jtd jdtd  td d td d ddd	 W d    n1 sUw   Y  | jtd
 jtd
 jtd
  td
 d td
 d 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sJ | jtd
 jd}t|d
ksJ |d td
 ksJ 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 s4w   Y  d S )Nnew_databaser"   r#   r   r%   r&   r"   r#   r$   r%   r&   r'   rr   F)r"   r#   r$   r%   r&   r'   rx   r   rY   r#   )r#   r'   r'   r[   fake_dbr"   r'   r'   rb   )rc   create_databaser{   r|   rd   r0   r"   r#   re   rh   ri   r   rf   rk   rj   r   rX   rn   r7   r7   r8   .test_create_get_delete_database_and_collectionE  sp   








		$r   c              	   C   s  |    | jt dd | jtd jtd jtd  td d td d dd | jtd jtd jtd  td d td d d | j	td jd	d | j
td d
 d}t|dksbJ |d d d	kslJ | 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d d td d dd W d    d S 1 sw   Y  d S )Nr   r   r   r%   r&   r   r   rY   
new_name_1r"   rb   r#   
new_name_0r   )rc   r   r{   r|   rd   r0   r"   r#   re   ru   rf   rk   rh   ri   r   r   r7   r7   r8    test_create_update_with_database  sV   






	


"r   c              	   C   s   |    | jt dd tD ]}| j|j|j| |d |d dd d|d< q| j	dd}t
|t
tks9J t|dd	 d
tksEJ | 	 }t
|dksQJ d S )Nr   r   r%   r&   r   r'   r   c                 S   rZ   rU   r[   r\   r7   r7   r8   r^     r_   z1test_get_multiple_with_database.<locals>.<lambda>r`   r   )rc   r   r{   r|   r0   rd   r"   r#   re   rf   rk   rg   )rX   rl   rn   r7   r7   r8   test_get_multiple_with_database  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
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
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
d d t
d d dd W d    n1 sw   Y  tt& | j	t
d jt
d jt
d  t
d d t
d d ddd	 W d    n	1 s2w   Y  | jtdd}t|dksGJ d S )Ntenant1r[   r   r"   r#   r(   r   r   r%   r&   )r"   r#   r$   r%   r&   r'   r(   r(   r'   r   r   )r'   r(   r   )rc   create_tenantrh   ri   r   r   r   r{   r|   rd   r0   r"   r#   re   rf   rk   r   r   r7   r7   r8   !test_create_database_with_tenants  sv   


	


	






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   r[   r#   tenant2r   r   )r#   r(   r(   new_database1)
rc   r   
get_tenantrh   ri   r   r   r{   r|   get_databaser   r7   r7   r8   test_get_database_with_tenants@  s"   "r   z$00000000-d7d7-413b-92e1-731098a6e492test_type_ar"   r"   typerR   rl   r%   z$11111111-d7d7-413b-92e1-731098a6e492test_type_bz$22222222-d7d7-413b-92e1-731098a6e492c                 C   s0  |    tD ]}| j|j|j| |d |d d qtD ]}| | q|  }t	|dd d}|tks7J t
t | td  W d    n1 sNw   Y  tD ]}| j|d d	}||gksfJ qU| jd
d}|td d kswJ | jdd}t	|dd dtdd  ksJ | jtd d d}|td d ksJ | jd
td d d}|td d ksJ | jdtd d d}|g ksJ td }| |d  |  }||vsJ t|ttd ksJ t	|dd dtdd  ksJ t
t | |d  W d    d S 1 sw   Y  d S )Nr%   r&   rY   c                 S      | d S Nr"   r7   r\   r7   r7   r8   r^         z1test_create_get_delete_segments.<locals>.<lambda>r`   r   r"   rb   r   )r   r   r   c                 S   r   r   r7   r\   r7   r7   r8   r^     r   rl   )r   rl   c                 S   r   r   r7   r\   r7   r7   r8   r^     r   )rc   r0   rd   r"   r#   re   sample_segmentscreate_segmentget_segmentsrg   rh   ri   r   delete_segmentrk   r   )rX   rl   segmentrm   rn   s1r7   r7   r8   test_create_get_delete_segments|  sV     $r   c                 C   s  dddd}t t dtjtd d |d}|   tD ]}| j|j|j	|
 |d	 |d
 d q| | | j|d d}|d |d d< ||gksMJ | j|d d}|d |d d< ||gksdJ td d |d< | j|d |d d | j|d d}|d |d d< ||gksJ d |d< | j|d |d d | j|d d}|d |d d< ||gksJ d|d< | j|d ddid | j|d d}|d |d d< ||gksJ d|d< | j|d ddid | j|d d}|d |d d< ||gksJ |d= | j|d dd id | j|d d}|d |d d< ||gks'J d |d	< | j|d d d | j|d d}|d |d d< ||gksLJ d S )Nr   r   r   r   r   r   r"   r   r%   r&   rY   rb   rl   r   r,   rs   rt   r/   r   )r   r{   r|   r   VECTORr0   rc   rd   r"   r#   re   r   r   update_segment)rX   r%   r   r]   rn   r7   r7   r8   test_update_segment  sr   

r   )=r>   rA   r<   rh   typingr   r   r   r   r   chromadb.db.impl.grpc.clientr   chromadb.db.impl.grpc.serverr   chromadb.test.conftestr	   chromadb.typesr
   r   r   chromadb.db.impl.sqliter   chromadb.configr   r   r   r   chromadb.db.systemr   chromadb.db.baser   r   r   r{   chromadb.api.configurationr   TENANT	NAMESPACEUUIDr0   __annotations__r9   rD   rL   rM   rP   fixturerX   rq   rw   r   r   r   r   r   r   r   METADATAr   r   r   r7   r7   r7   r8   <module>   s   
 



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


"$6/SR=P$




B