o
    1Xxi                  
   @   s  d dl Z d dlZd dl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 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 d dlmZ e Zejdd	 Zejd
d ZddefddZddedefddZ ej!"degdd Z#ej!"degdd Z$ej!"degdd Z%ej!"degdd Z&dd Z'dd Z(d d! Z)g d"g d#gd$d%gd&Z*d'd( Z+d)d* Z,d+d, Z-g d"g d#gd$d%gd&Z.d-d. Z/d/d0 Z0d1d2 Z1d3d4 Z2d5d6 Z3d7d8 Z4d9d: Z5d;d< Z6d=d> Z7d?d@ Z8dAdB Z9dCdD Z:dEdF Z;dGdH Z<dIdJ Z=dKdL Z>dMdN Z?dOdP Z@dQdR ZAdSdT ZBdUdV ZCdWdX ZDdYdZ ZEg d"g d#gd[d\gd]d^d_d`dadbigdcZFddde ZGdfdg ZHdhdi ZIdjdk ZJdldm ZKdndo ZLg d"g d#gd[d\gdpdqdriidpg dsigdcZMdtdu ZNdvdw ZOdxdy ZPdzd{ ZQg d"g d#gd[d\gd]d^d_d`dbd|d}d~gdcZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYg dg dgd[d\gd&ZZdg dg dgiZ[g d"g d#gddZ\dd Z]dd Z^dd Z_g d"g d#gddgd[d\gd]d^d_d`dbd|d}d~gdZ`dd Zadd Zbdd Zcg d"g d#g dg dgg dd]d^d_dddbd|d}ddddddddddddgg ddZddd Zedd Zfg dg d#gd[d\gd]d^d_d`dadbigddgdZgdd Zhdd Zidd Zjdd Zkdd Zldd ZmddÄ Znddń ZoddǄ ZpddɄ Zqdd˄ Zrdd̈́ Zsddτ Ztddф Zuddӄ Zvg dg d#g dԢgg dբd]d^d_d`dadbiddigg dעdZwg dآg d٢gd[dgd]dd_d`dadigddgdZxdd߄ Zydd Zzdd Z{dd Z|dd Z}dd Z~dd ZdS )    N)FastAPI)QueryResultEmbeddingFunctionDocument)Settings)InvalidCollectionException)datetime	timedelta)DefaultEmbeddingFunctionc                  c   P    t tdddddddtd} | V  |   tjtr&tj	tdd d S d S Nzchromadb.api.segment.SegmentAPIz chromadb.db.impl.sqlite.SqliteDBz7chromadb.segment.impl.manager.local.LocalSegmentManagerT)chroma_api_implchroma_sysdb_implchroma_producer_implchroma_consumer_implchroma_segment_manager_implallow_resetis_persistentpersist_directory)ignore_errors
chromadbClientr   persist_dirclear_system_cacheospathexistsshutilrmtreeclient r"   U/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/test/test_api.pylocal_persist_api   $   r$   c                  c   r   r   r   r    r"   r"   r#   local_persist_api_cache_bust-   r%   r&   ư>returnc                 C   s   t | | |k S )N)absab	tolerancer"   r"   r#   approx_equalA   s   r.   r-   c                    s0   t | t |kr
dS t fddt| |D S )NFc                    s   g | ]
\}}t || qS r"   )r.   ).0r+   r,   r-   r"   r#   
<listcomp>H   s    z'vector_approx_equal.<locals>.<listcomp>)lenallzipr*   r"   r0   r#   vector_approx_equalE   s   r5   api_fixturec                 C   s   | d}|  |d}|jddd | d}|d}g d}|jddg dd	}| D ].}||v s;|d
krFt|| dksEJ q1|dkrWt|| t|ksVJ q1|| d u s_J q1d S )Nr$   testid1helloids	documentsr&   
embeddingsr<   	metadatas	distances   query_texts	n_resultsincluder;   included)	getfixturevalueresetcreate_collectionaddget_collectionquerykeysr2   set)r6   requestr!   
collectionapi2includesnnkeyr"   r"   r#   test_persist_index_loadingK   s&   



rU   c           	      C   s   G dd dt t }|d}|  |jd| d}|jddd |d	}|jd| d}g d
}|jdd|d}| D ].}||v sI|dkrTt	|| dksSJ q?|dkret
|| t
|ksdJ q?|| d u smJ q?d S )Nc                   @      e Zd Zdd ZdS )z=test_persist_index_loading_embedding_function.<locals>.TestEFc                 S      dd t t|D S )Nc                 S      g | ]}g d qS rA         r"   r/   _r"   r"   r#   r1   h       zZtest_persist_index_loading_embedding_function.<locals>.TestEF.__call__.<locals>.<listcomp>ranger2   selfinputr"   r"   r#   __call__g      zFtest_persist_index_loading_embedding_function.<locals>.TestEF.__call__N__name__
__module____qualname__re   r"   r"   r"   r#   TestEFf       rk   r$   r7   embedding_functionr8   r9   r:   r&   r=   rA   rB   r;   rF   )r   r   rG   rH   rI   rJ   rK   rL   rM   r2   rN   )	r6   rO   rk   r!   rP   client2rR   rS   rT   r"   r"   r#   -test_persist_index_loading_embedding_functiond   s(   

rp   c           	      C   s4  G dd dt t }|d}|  |jd| d}|jddd |d	}|jd| d}g d
}|jdd|d}| D ].}||v sI|dkrTt|| dksSJ q?|dkret	|| t	|ksdJ q?|| d u smJ q?|d dggksxJ |d g dggksJ |d dggksJ |d dggksJ d S )Nc                   @   rV   )zCtest_persist_index_get_or_create_embedding_function.<locals>.TestEFc                 S   rW   )Nc                 S   rX   rY   r"   r]   r"   r"   r#   r1      r_   z`test_persist_index_get_or_create_embedding_function.<locals>.TestEF.__call__.<locals>.<listcomp>r`   rb   r"   r"   r#   re      rf   zLtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.__call__Nrg   r"   r"   r"   r#   rk      rl   rk   r$   r7   rm   r8   r9   r:   r&   r=   rA   rB   r;   rF   r>   rZ   r<   r@   r   )
r   r   rG   rH   get_or_create_collectionrJ   rL   rM   r2   rN   )	r6   rO   rk   apirP   rQ   rR   rS   rT   r"   r"   r#   3test_persist_index_get_or_create_embedding_function   s.   

rs   c                 C   s   | | j}|  |d}|jdi t | dksJ | | j}|d}| dks2J |d | | j}|	 g ksEJ d S N	testspacer[   r"   )
rG   rh   rH   rI   rJ   batch_recordscountrK   delete_collectionlist_collections)r6   rO   r!   rP   r"   r"   r#   test_persist   s   


rz   c                 C   sF   |   }t|tsJ |d }t|}|t tdd ks!J d S )Ni ʚ;
   )seconds)	heartbeat
isinstanceintr   fromtimestampnowr	   )r!   heartbeat_nsheartbeat_sr}   r"   r"   r#   test_heartbeat   s
   
r   c                 C   s    t |  |  }|dksJ d S )Nr   )printget_max_batch_size)r!   
batch_sizer"   r"   r#   test_max_batch_size   s   r   c                 C   s\   t | ts
td t| j d}|jdksJ | d us"J d| 	 v s,J d S )NzNot a FastAPI instancez/pre-flight-checks   max_batch_size)
r~   r   pytestskiphttpxget_api_urlstatus_codejsonrM   )r!   respr"   r"   r#   test_pre_flight_checks   s   

r   皙?ffffff@皙	@333333?Q@r   zhttps://example.com/1zhttps://example.com/2r>   r;   c                 C   6   |    | d}|jdi t | dksJ d S rt   )rH   rI   rJ   rv   rw   r!   rP   r"   r"   r#   test_add      
r   c                 C   `   |    | d}| d tjtdd |jdi t W d    d S 1 s)w   Y  d S Nr7   Collection .* does not exist.matchr"   )rH   rI   rx   r   raisesr   rJ   rv   r   r"   r"   r#   2test_collection_add_with_invalid_collection_throws      

"r   c                 C   s   |    | d}|jdi t | dksJ tt | d}W d    n1 s.w   Y  | d}| dks@J d S rt   )	rH   rI   rJ   rv   rw   r   r   	Exceptionrq   r   r"   r"   r#   test_get_or_create   s   

r   c                 C   r   rt   )rH   rI   rJ   minimal_recordsrw   r   r"   r"   r#   test_add_minimal  r   r   c                 C   s   |    | d}|jdi t g d}|j|d}| D ].}||v s)|dkr4t|| dks3J q|dkrEt|| t|ksDJ q|| d u sMJ qd S )Nru   r>   r<   r?   rE   r;   r[   rF   r"   )rH   rI   rJ   rv   r   rM   r2   rN   )r!   rP   rR   recordsrT   r"   r"   r#   test_get_from_db  s   
r   c                 C   X   |    | d}| d tjtdd |  W d    d S 1 s%w   Y  d S Nr7   r   r   )rH   rI   rx   r   r   r   r   r   r"   r"   r#   2test_collection_get_with_invalid_collection_throws     


"r   c                 C   sR   |    | d}|jdi t | dksJ |    t|  dks'J d S )Nru   r[   r   r"   )rH   rI   rJ   rv   rw   r2   ry   r   r"   r"   r#   test_reset_db)  s   
r   c                 C   s  |    | d}|jd
i t g d}|jg ddi |d}| D ].}||v s.|dkr9t|| dks8J q$|dkrJt|| t|ksIJ q$|| d u sRJ q$|jg dgdi |d}| D ].}||v sm|dkrxt|| dkswJ qc|dkrt|| t|ksJ qc|| d u sJ qc|jg dg dgdi |d}| D ].}||v s|dkrt|| d	ksJ q|dkrt|| t|ksJ q|| d u sJ qd S )Nru   r=   r   rA   query_embeddingsrD   whererE   r;   rF   )皙?r         @r[   r"   )rH   rI   rJ   rv   rL   rM   r2   rN   r!   rP   rR   rS   rT   r"   r"   r#   test_get_nearest_neighbors4  sR   
r   c                 C   sj   |    | d}|jdi t | dksJ tt |  W d    d S 1 s.w   Y  d S rt   )	rH   rI   rJ   rv   rw   r   r   r   deleter   r"   r"   r#   test_deletee  s   

"r   c                 C   sJ   |    | d}|jdi t | dksJ |jg dgdd d S )Nru   r[   r   rA   r   rD   r"   )rH   rI   rJ   rv   rw   rL   r   r"   r"   r#   test_delete_with_indexo  s
   
r   c                 C   s^   |    | d}| d tjtdd |jdgd W d    d S 1 s(w   Y  d S )Nr7   r   r   r8   r;   )rH   rI   rx   r   r   r   r   r   r"   r"   r#   5test_collection_delete_with_invalid_collection_throwsw     

"r   c                 C   sF   |    | d}| dksJ |jdi t | dks!J d S )Nru   r   r[   r"   )rH   rI   rw   rJ   rv   r   r"   r"   r#   
test_count  s
   
r   c                 C   r   r   )rH   rI   rx   r   r   r   rw   r   r"   r"   r#   4test_collection_count_with_invalid_collection_throws  r   r   c                 C   s0   |    | d}|jdd |jdksJ d S Nru   
testspace2name)rH   rI   modifyr   r   r"   r"   r#   test_modify  s   
r   c                 C   s\   |    | d}| d tjtdd |jdd W d    d S 1 s'w   Y  d S )Nr7   r   r   test2r   )rH   rI   rx   r   r   r   r   r   r"   r"   r#   5test_collection_modify_with_invalid_collection_throws  s   

"r   c                 C   sX   |    | d | d}tt |jdd W d    d S 1 s%w   Y  d S r   rH   rI   r   r   r   r   )r!   c2r"   r"   r#   "test_modify_error_on_existing_name  s   

"r   c                 C   sV   |    | d}tjtdd |jddid W d    d S 1 s$w   Y  d S )Nru   znot supportedr   
hnsw:spacecosinemetadatar   )r!   caplogrP   r"   r"   r#   test_modify_warn_on_DF_change  s
   
"r   c                 C   s  |    ddd}| jd|d}|jd usJ |jd dks J |jd dks)J | d}|jd us5J |jd dks>J |jd dksGJ |jddd	d |jd dksYJ |jd
 dksbJ d|jvsiJ | d}|jd usuJ |jd dks~J |jd
 dksJ d|jvsJ | d}|jd usJ |jd dksJ |jd
 dksJ | d}|jd u sJ |  }|D ]-}|jdkr|jd usJ |jd dksJ |jd
 dksJ q|jdkr|jd u sJ qd S )NrA   r[   )r+   r,   ru   r   r+   r,   r\   )r+   cr   r   )rH   rI   r   rK   r   rq   ry   r   )r!   
metadata_arP   collectionsr"   r"   r#   test_metadata_cru  sF   






r   c                 C   s   |    | d}|jd	i t | dksJ g d}|jg dgd|d}| D ].}||v s6|dkrAt|| dks@J q,|dkrRt|| t|ksQJ q,|| d u sZJ q,d S )
Nru   r[   r=   r   rA   r   rD   rE   r;   rF   r"   )	rH   rI   rJ   rv   rw   rL   rM   r2   rN   r   r"   r"   r#   test_increment_index_on  s"   
r   c                 C   sd   |    | d | d}|jdksJ tt | d}W d    d S 1 s+w   Y  d S )Nru   r   )rH   rI   rK   r   r   r   r   r   r"   r"   r#   test_add_a_collection  s   

"r   c                 C   s8   |    | d | d |  }t|dksJ d S )Nru   r   r[   rH   rI   ry   r2   r!   r   r"   r"   r#   test_list_collections  s
   

r   c                 C   sX   |    | d | d |  }t|dksJ |    |  }t|dks*J d S )Nru   r   r[   r   r   r   r"   r"   r#   
test_reset  s   

r   c                 C   s   |    | d}|jdi t | dksJ | }| D ]0}|dv s+|dkr6t|| dks5J q!|dkrIt|| tg dksHJ q!|| d u sQJ q!d S )Nru   r[   r   r;   rF   r>   r?   r<   r"   )	rH   rI   rJ   rv   rw   peekrM   r2   rN   )r!   rP   r   rT   r"   r"   r#   	test_peek(  s   
r   c                 C   r   r   )rH   rI   rx   r   r   r   r   r   r"   r"   r#   3test_collection_peek_with_invalid_collection_throws9  r   r   c                 C   s^   |    | d}| d tjtdd |jdgd W d    d S 1 s(w   Y  d S )Nr7   r   r   )rC   )rH   rI   rx   r   r   r   rL   r   r"   r"   r#   4test_collection_query_with_invalid_collection_throwsD  r   r   c                 C   sb   |    | d}| d tjtdd |jdgdgd W d    d S 1 s*w   Y  d S )Nr7   r   r   r8   r:   )rH   rI   rx   r   r   r   updater   r"   r"   r#   5test_collection_update_with_invalid_collection_throwsO  s   

"r   r8   id2rA   onejt?	int_valuestring_valuefloat_valuer   r[   r>   r;   r?   c                 C   s   |    | d}|jdi t |jddgd}|d d d dks%J |d d d	 d
ks1J |d d d dks=J t|d d d tsJJ t|d d d	 tsWJ d S )Ntest_intr8   r   r   r?   r   r   rA   r   r   r[   r"   )rH   rI   rJ   metadata_recordsr   r~   r   floatr!   rP   itemsr"   r"   r#   test_metadata_add_get_int_floatg  s   
r   c                 C   s   |    | d}|jd
i t |jg dgdd}|d d us#J |d d d d dks1J |d d d d d	ks?J t|d d d d tsNJ t|d d d d ts]J d S )Nr   r   rA   r   r?   r   r   r   r   r"   )rH   rI   rJ   r   rL   r~   r   r   r   r"   r"   r#   !test_metadata_add_query_int_floatt  s   

"r   c                 C   sf   |    | d}|jd	i t |jddid}|d d d dks%J |d d d dks1J d S )
Nr   r   r   r   r?   r   r   rA   r"   rH   rI   rJ   r   r   r   r"   r"   r#   test_metadata_get_where_string     
r   c                 C   sf   |    | d}|jd	i t |jddid}|d d d dks%J |d d d dks1J d S )
Nr   r   rA   r   r?   r   r   r   r"   r   r   r"   r"   r#   test_metadata_get_where_int  r   r   c                 C   s~   |    | d}|jdi t |jddid}|d d d dks%J |d d d	 d
ks1J |d d d dks=J d S )Nr   r   r   r   r?   r   r   rA   r   r   r"   r   r   r"   r"   r#   test_metadata_get_where_float  s   
r   c                 C   s   |    | d}|jdi t |jdgddddgd |jdgd}|d	 d
 d dks1J |d	 d
 d dks=J |d	 d
 d dksIJ d S )Nr   r8   r[   twojt @r   r;   r?   r   r?   r   r   r   r   r"   )rH   rI   rJ   r   r   r   r   r"   r"   r#   "test_metadata_update_get_int_float  s   
r   valuenested5rZ   c                 C   sV   |    | d}tjtdd |jdi t W d    d S 1 s$w   Y  d S )Ntest_metadata_validationr   r   r"   )rH   rI   r   r   
ValueErrorrJ   bad_metadata_recordsr   r"   r"   r#   test_metadata_validation_add  s
   
"r  c                 C   sn   |    | d}|jd	i t tjtdd |jdgdddiid W d    d S 1 s0w   Y  d S )
Nr  r   r   r8   r  r  r  r   r"   )rH   rI   rJ   r   r   r   r  r   r   r"   r"   r#   test_metadata_validation_update  s   
"r  c                 C   sZ   |    | d}tjtdd |jdddiid W d    d S 1 s&w   Y  d S )Ntest_where_validationr   r   r  r  r  r   )rH   rI   r   r   r  r   r   r"   r"   r#   test_where_validation_get  s
   
"r
  c                 C   s`   |    | d}tjtdd |jg ddddiid W d    d S 1 s)w   Y  d S )	Nr	  r   r   r   r   r   r  r  r  )r   r   )rH   rI   r   r   r  rL   r   r"   r"   r#   test_where_validation_query  s
   
"r  r   r   )r   r   r   c                 C   N   |    | d}|jdi t |jdddiid}t|d dks%J d S )	Ntest_where_ltr   $ltr[   r   r?   rA   r"   rH   rI   rJ   operator_recordsr   r2   r   r"   r"   r#   r    
   
r  c                 C   r  )	Ntest_where_lter   z$lteg       @r   r?   r[   r"   r  r   r"   r"   r#   r    r  r  c                 C   r  )	Nr  r   $gtgffffffr   r?   r[   r"   r  r   r"   r"   r#   test_where_gt  r  r  c                 C   r  )	Nr  r   $gter   r   r?   rA   r"   r  r   r"   r"   r#   test_where_gte  r  r  c                 C   r  )	Nr  r   $ner   r   r?   rA   r"   r  r   r"   r"   r#   test_where_ne_string  r  r  c                 C   sv   |    | d}|jd
i t |jdddiid}t|d dks%J |jddd	iid}t|d dks9J d S )Nr  r   r  rA   r   r?   r   $eqr   r"   r  r   r"   r"   r#   test_where_ne_eq_number  s   
r  c                 C   s  |    | d}|jdi t tt |jdddiid W d    n1 s+w   Y  tt |jdddiid W d    n1 sJw   Y  tt |jdddd	id W d    n1 sjw   Y  tt |jd
dddiiid W d    n1 sw   Y  tt |jddidddiidd W d    n1 sw   Y  tt |jddddiidddiigid W d    n1 sw   Y  tt |jddddiigid W d    n1 sw   Y  tt |jdg id W d    n	1 sw   Y  tt |jdddiid W d    n	1 s6w   Y  tt |jddddiiddigid W d    d S 1 s]w   Y  d S )Ntest_where_valid_operatorsr   z$invalidr[   r   r  2rA   )r  r  $andr  )r   $orr  r+   	$containsr7   firstsecondr"   )rH   rI   rJ   r  r   r   r  r   r   r"   r"   r#   r    sV   

$r  )r   r   r   r   )r   r   r   r   r   d   r   c                 C   sr   |    | d}|jdi t tt}|jdi t W d    n1 s)w   Y  dt|j	v s7J d S )Ntest_dimensionality_validationdimensionalityr"   )
rH   rI   rJ   r   r   r   r   bad_dimensionality_recordsstrr  r!   rP   er"   r"   r#   "test_dimensionality_validation_addP     
r*  c                 C   r   |    | d}|jdi t tt}|jdi t W d    n1 s)w   Y  dt	|j
v s7J d S )N$test_dimensionality_validation_queryr%  r"   )rH   rI   rJ   r   r   r   r   rL   bad_dimensionality_queryr'  r  r(  r"   r"   r#   r-  Z  r+  r-  c                 C   s8  |    | d}|jdi t tjtdd |jdddiid W d    n1 s-w   Y  tjtdd |jg dd	did
 W d    n1 sOw   Y  tjtdd |jd	g id W d    n1 snw   Y  tt |jdddiid W d    n1 sw   Y  tt |jdddiddigid W d    n1 sw   Y  tt |jdd	digid W d    n1 sw   Y  tt |jdg id W d    n1 sw   Y  tt |jddd	digid	digid W d    d S 1 sw   Y  d S )Nr  zwhere documentr   r  z$nestedr[   where_documentr  r   )r   r0  r  z$unsupporteddocr  r"   )	rH   rI   rJ   r  r   r   r  r   rL   r   r"   r"   r#   #test_query_document_valid_operatorsd  s@   
$r2  zthis is doc1 and it's great!zdoc2 is also great!)r>   r<   r;   r?   c                 C   s   |    | d}|jdi t |jddid}t|d dks#J |jddid}t|d dks5J |jdd	id}t|d d
ksGJ d S )Ntest_get_where_documentr   doc1r/  r?   rA   greatr[   badr   r"   )rH   rI   rJ   contains_recordsr   r2   r   r"   r"   r#   r3    s   
r3  c                 C   s   |    | d}|jdi t |jg dddidd}t|d d dks)J |jg d	dd
idd}t|d d dksAJ tt}|jg d	ddidd}dt	|j
v s\J W d    d S 1 sgw   Y  d S )Ntest_query_where_document)rA   r   r   r   r4  rA   )r   r0  rD   r?   r   r  r5  r[   r6  
datapointsr"   )rH   rI   rJ   r7  rL   r2   r   r   r   r'  r  )r!   rP   r   r)  r"   r"   r#   r8    s"   
"r8  c                 C   s   |    | d}|jd	i t |jddid | dks!J |jddid | dks1J |jddid | dksAJ d S )
Ntest_delete_where_documentr   r4  r/  rA   r6  r5  r   r"   )rH   rI   rJ   r7  r   rw   r   r"   r"   r#   r:    s   
r:  )g?g      @r   )gffffff?gGz@r   )r8   r   id3id4r1  )r   r   r   is)r   r   r   r=  r\   g/$@three   gjt@four)z this document is first and greatz!this document is second and greatz this document is third and greatz!this document is fourth and great)r>   r;   r?   r<   c                 C   s  |    | d}|jdi t |jdddddiiddd	iigid
digid}t|d dks3J |jdddddiidddiigiddddiidddiigigid}t|d dks_J |jdddddiidddiigiddddiidddiigigid}t|d dksJ d S )Ntest_logical_operatorsr  r  r   r  r\   r   r  gffffff?r=  r1  r   r?   r  r   r>  r?  r@  r[   rA   r   r   r"   rH   rI   rJ   logical_operator_recordsr   r2   r   r"   r"   r#   test_where_logical_operators  sV   








rD  c                 C   s   |    | d}|jdi t |jdddiddigid}t|d dks)J |jd	ddidd
igid}t|d dksAJ |jd	ddidd
igidddiid}t|d dks^J d S )Ntest_document_logical_operatorsr  r   r!  r1  r/  r?   rA   r  r"  r[   r   r  )r0  r   r"   rB  r   r"   r"   r#   %test_where_document_logical_operators  s:   
rF  r  this document is firstthis document is secondc                 C   s  |    | d}|jdi t g d}|jg d|dd}|d d u s'J |d d d d	ks3J |d
 d d d dksAJ t|d t|ksMJ g d}|jg d|dd}|d
 d u scJ |d d d d	ksoJ t|d t|ks{J |jg dg dgg dd}|d d u sJ |d
 d u sJ |d d u sJ |d d u sJ |d d d d	ksJ |d d d dksJ d S )Ntest_query_includer?   r<   r@   r  rA   r   rE   rD   r>   r;   r   r8   r?   r   rF   )r>   r<   r@   )rA   r[   r   r[   r<   r@   r   r"   )rH   rI   rJ   r   rL   rN   r!   rP   rE   r   r"   r"   r#   rI  J  sB   
rI  c                 C   s  |    | d}|jdi t ddg}|j|ddid}|d d u s&J |d d	 d
ks0J |d d	 d dks<J |d d	 dksFJ t|d t|ksRJ ddg}|j|d}|d d u sdJ |d d	 d
ksnJ t|d d d	 ds{J t|d t|ksJ |jg d}|d d u sJ |d d u sJ |d d u sJ |d d	 d
ksJ |d g ksJ tjt	dd |jddgd}W d    n1 sw   Y  tjt	dd |jd d}W d    d S 1 sw   Y  d S )Ntest_get_includer?   r<   r   rA   )rE   r   r>   r;   r   r8   rG  rF   r   r   rE   r   	undefinedr"   )
rH   rI   rJ   r   r   rN   r.   r   r   r  rL  r"   r"   r#   rM  q  s8   
"rM  c                 C   sn   |    | d}|jdi t |jg dg ddd}|d d d dks)J |d d d	 d
ks5J d S )Ntest_query_orderr   rJ  r[   rK  r<   r   rH  rA   rG  r"   rH   rI   rJ   r   rL   r   r"   r"   r#   rO    s   
rO  c                 C   s   |    | d}tt}|jg ddgi gd W d    n1 s%w   Y  dt|jv s3J tt}|jdd W d    n1 sIw   Y  dt|jv sWJ tt}|j	ddgd W d    n1 sow   Y  dt|jv s}J d S )	Ntest_invalid_idr  rA   r   IDr   validr   )
rH   rI   r   r   r  rJ   r'  r  r   r   r(  r"   r"   r#   rQ    s   
rQ  c                 C   s"  d}|    | jdd}|jdi t |jg ddd}|d d d d	ks)J |    | jdd
dddd}|jdi t |jg ddd}|d d d d| ksWJ |d d d d| k seJ |    | jdddid}|jdi t |jg ddd}|d d d dk sJ d S )Ng-q=test_index_paramsr   )g333333?gQ?g?rA   r   r@   r   r?  r         )r   zhnsw:construction_efzhnsw:Mr   r   r   ipr"   rP  )r!   EPSrP   r   r"   r"   r#   rT    s>   
rT  c                 C   s   |    tt | jdddid}|jdi t W d    n1 s%w   Y  tt | jdddid}|jdi t W d    d S 1 sLw   Y  d S )NrT  zhnsw:foobarblargrW  r   foobarr"   )rH   r   r   r   rI   rJ   r   r   r"   r"   r#   test_invalid_index_params  s   "r]  c                 C   s   | d} |   | jdddid}|jddd | d	}|d}|jd dks,J g d
}|jdd|d}| D ].}||v sF|dkrQt|| dksPJ q<|dkrbt	|| t	|ksaJ q<|| d u sjJ q<d S )Nr$   r7   r   rX  r   r8   r9   r:   r&   r=   rA   rB   r;   rF   )
rG   rH   rI   rJ   rK   r   rL   rM   r2   rN   )r!   rO   rP   rQ   rR   rS   rT   r"   r"   r#   !test_persist_index_loading_params  s2   

r^  c                 C   sd   |    | d}tjddtj }|j|dd t	t
|D d | t
|ks0J d S )Nru   i     c                 S      g | ]}d | qS )zhttp://example.com/r"   r/   ir"   r"   r#   r1         z"test_add_large.<locals>.<listcomp>r   )rH   rI   nprandomrandastypefloat32tolistrJ   ra   r2   rw   )r!   rP   large_recordsr"   r"   r#   test_add_large  s   
rk  c                 C   s,   |    |  }dd l}|d|sJ d S )Nr   z\d+\.\d+\.\d+)rH   get_versionrer   )r!   versionrm  r"   r"   r#   test_get_version!  s   ro  c                 C   sX   |    | d}|jdi t t|  dksJ | d t|  dks*J d S )Ntest_delete_collectionrA   r   r"   )rH   rI   rJ   r   r2   ry   rx   r   r"   r"   r#   rp  ,  s   

rp  c                  C   s4   t  } dd tdD }| |}t|dksJ d S )Nc                 S   s   g | ]}d qS )zthis is a testr"   r]   r"   r"   r#   r1   9  s    z*test_default_embedding.<locals>.<listcomp>@   )r
   ra   r2   )rn   docsr>   r"   r"   r#   test_default_embedding7  s   rs  c           	      C   s4  t jddt j }t jddt j }dd tt|D }dd tt|D }|   | 	d}|j
||d | 	d}|j
||d t|  d	ksVJ | t|ks`J | t|ksjJ |j|d
 dd}|j|d
 dd}|d d
 d
 |d
 ksJ |d d
 d
 |d
 ksJ d S )Nr{   r_  c                 S   r`  )zhttp://example.com/1/r"   ra  r"   r"   r#   r1   A  rc  z-test_multiple_collections.<locals>.<listcomp>c                 S   r`  )zhttp://example.com/2/r"   ra  r"   r"   r#   r1   B  rc  coll1r   coll2r[   r   rA   r   r;   )rd  re  rf  rg  rh  ri  ra   r2   rH   rI   rJ   ry   rw   rL   )	r!   embeddings1embeddings2ids1ids2rt  ru  results1results2r"   r"   r#   test_multiple_collections>  s    

 r|  c                 C   s
  |    | d}|jdi t td d gg dgdgddigd}|jdi | |j|d	 d
g dd}t|d d d
ksDJ |d d d |d d ksTJ |d d d |d d ksdJ |d d d d dksrJ t|d	 d d |d	 d sJ d S )Ntest_update_queryr;   r   )r   g?g333333?zupdated documentfoobar)r;   r>   r<   r?   r>   rA   r   r   r<   r?   r"   )rH   rI   rJ   r   r   rL   r2   r5   )r!   rP   updated_recordsresultsr"   r"   r#   r}  V  s*   
  r}  c                 C   s   |    | d}|jd
i t g d}|jg dgdi |d}| D ]0}||v s/|dkr<t|| d dks;J q%|d	krMt|| t|ksLJ q%|| d u sUJ q%d S )Nru   r=   r   rV  r   r;   r   r[   rF   r"   )rH   rI   rJ   r   rL   rM   r2   rN   )r!   rP   rR   r  rT   r"   r"   r#   <test_get_nearest_neighbors_where_n_results_more_than_elements  s"   
r  c                 C   s   |    | d}|jd	i t tt}|jg dgdi g dd W d    n1 s/w   Y  dt|j	v s=J |j
tksDJ tt}|jg dgdi g dd W d    n1 sbw   Y  dt|j	v spJ |j
tkswJ d S )
Nru   r   r=   r   z<Number of requested results -1, cannot be negative, or zero.r   r   r"   )rH   rI   rJ   r   r   r   	TypeErrorrL   r'  r  typer  )r!   rP   excr"   r"   r#   test_invalid_n_results_param  s2   

r  )g@gQ	@g@)r8   r   r;  r   )rG  rH  zthis document is third)      @r  r   )r   g(\@g@r<  
one_of_onez this document is even more firstzthis document is new and fourthc                 C   s  |    | d}|jdi t | dksJ |jdi t | dks)J |jg dtd d d}t|d d td d sEJ |d	 d td	 d ksSJ |d
 d td
 d ksaJ |j	|d dg dd}t|d d d td d s~J |d	 d d td	 d ksJ |d
 d d td
 d ksJ |j
td d d |jtd d g dgddigd | dksJ |jg ddgd}t|d d g dsJ |d	 d ddiksJ |d
 d d u sJ d S )Nr7   r\   r?  r   r;   r   )rE   r;   r>   r?   r<   rA   r   r[   r   )r   gGz?gGz@r   za new string value)r;   r>   r?   r;  r"   )rH   rI   rJ   initial_recordsrw   upsertnew_recordsr   r5   rL   r   )r!   rP   
get_resultquery_resultr"   r"   r#   test_upsert  sJ   
  

r  c                 C   r   r   )rH   rI   rx   r   r   r   r  r  r   r"   r"   r#   5test_collection_upsert_with_invalid_collection_throws  r   r  c                 C   s  |    | d}g dg dgddgd}tt}|jdi | W d    n1 s.w   Y  dt|jv s<J tt}|jg dgd	d
 W d    n1 sVw   Y  dt|jv sdJ dgdgdggdgdgdgggddgd}tt}|j	di | W d    n1 sw   Y  dt|jv sJ g dgg dggddgd}tt}|j
di | W d    n1 sw   Y  dt|jv sJ d S )Ntest_invalid_embeddings)0r  r  )z1.2z2.243.2r8   r   r   	embedding)z1.1z2.3r  rA   r   r   r   r   r   r   r   r"   )rH   rI   r   r   r  rJ   r'  r  rL   r   r  )r!   rP   invalid_recordsr)  r"   r"   r#   r    s<   
r  c                 C   r,  )N$test_dimensionality_update_exceptionr%  r"   )rH   rI   rJ   r   r   r   r   r   r&  r'  r  r(  r"   r"   r#   $test_dimensionality_exception_update'  r+  r  c                 C   r,  )N$test_dimensionality_upsert_exceptionr%  r"   )rH   rI   rJ   r   r   r   r   r  r&  r'  r  r(  r"   r"   r#   $test_dimensionality_exception_upsert4  r+  r  c                 C   s"   t jdrtd |   d S )NCHROMA_INTEGRATION_TEST_ONLY"Skipping test for integration test)r   environr   r   r   r}   )
client_sslr"   r"   r#   test_ssl_self_signed>  s   
r  c                 C   s   t jdrtd |   | jjj}t	t
}tjd|d W d    n1 s+w   Y  tt|j|j|jj}|   dd|v sJJ d S )Nr  r  T)sslportCERTIFICATE_VERIFY_FAILED )r   r  r   r   r   r}   _server	_settingschroma_server_http_portr   r  r   
HttpClient	tracebackformat_exceptionr  r  __traceback__r   join)r  _portr)  stack_tracer"   r"   r#   'test_ssl_self_signed_without_ssl_verifyD  s   

r  )r'   )r  r   r   chromadb.api.fastapir   chromadb.api.typesr   r   r   chromadb.configr   chromadb.errorsr   chromadb.server.fastapir   tempfilenumpyrd  r   r   r   r	   "chromadb.utils.embedding_functionsr
   mkdtempr   fixturer$   r&   boolr.   r   r5   markparametrizerU   rp   rs   rz   r   r   r   rv   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   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r  r  r  r  r  r  r  r&  r.  bad_number_of_results_queryr*  r-  r2  r7  r3  r8  r:  rC  rD  rF  r   rI  rM  rO  rQ  rT  r]  r^  rk  ro  rp  rs  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r"   r"   r"   r#   <module>   sh  




"
	

1
	
	1








1

%

8*
'%'

.+
