o
    g                  
   @   s  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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/ Z0d0d1 Z1d2d3 Z2d4d5 Z3d6d7 Z4d8d9 Z5d:d; Z6d<d= Z7d>d? Z8d@dA Z9dBdC Z:dDdE Z;dFdG Z<dHdI Z=dJdK Z>dLdM Z?dNdO Z@dPdQ ZAdRdS ZBdTdU ZCdVdW ZDdXdY ZEdZd[ ZFd\d] ZGd^d_ ZHg d#g d$gd`dagdbdcdddedfdgigdhZIdidj ZJdkdl ZKdmdn ZLdodp ZMdqdr ZNdsdt ZOg d#g d$gd`dagdudvdwiidug dxigdhZPdydz ZQd{d| ZRd}d~ ZSdd ZTg d#g d$gd`dagdbdcdddedgdddgdhZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\g dg dgd`dagd'Z]dg dg dgiZ^g d#g d$gddZ_dd Z`dd Zadd Zbg d#g d$gddgd`dagdbdcdddedgdddgdZcdd Zddd Zedd Zfg d#g d$g dg dgg ddbdcdddddgddddddddddddddgg ddZgdd Zhdd Zig dg d$gd`dagdbdcdddedfdgigddgdZjdd Zkdd Zldd Zmdd ZnddĄ ZoddƄ ZpddȄ Zqddʄ Zrdd̄ Zsdd΄ ZtddЄ Zudd҄ ZvddԄ Zwddք Zxdd؄ Zyg dg d$g d٢gg dڢdbdcdddedfdgiddigg dܢdZzg dݢg dޢgd`dgdbddddedfdigddgdZ{dd Z|dd Z}dd Z~dd Zdd Zdd Zdd ZdS )    N)ChromaError)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#   M/var/www/visachat/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_equalB   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>I   s    z'vector_approx_equal.<locals>.<listcomp>)lenallzipr+   r#   r1   r$   vector_approx_equalF   s   r6   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keysr3   set)r7   requestr"   
collectionapi2includesnnkeyr#   r#   r$   test_persist_index_loadingL   s&   



rV   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 | ]	}t g d qS rB         nparrayr0   _r#   r#   r$   r2   i       zZtest_persist_index_loading_embedding_function.<locals>.TestEF.__call__.<locals>.<listcomp>ranger3   selfinputr#   r#   r$   __call__h      zFtest_persist_index_loading_embedding_function.<locals>.TestEF.__call__N__name__
__module____qualname__ri   r#   r#   r#   r$   TestEFg       ro   r%   r8   embedding_functionr9   r:   r;   r'   r>   rB   rC   r<   rG   )r   r   rH   rI   rJ   rK   rL   rM   rN   r3   rO   )	r7   rP   ro   r"   rQ   client2rS   rT   rU   r#   r#   r$   -test_persist_index_loading_embedding_functione   s(   

rt   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 dggksxJ |d d d 
 g dksJ |d dggksJ |d dggksJ d S )Nc                   @   rW   )zCtest_persist_index_get_or_create_embedding_function.<locals>.TestEFc                 S   rX   )Nc                 S   rY   rZ   r^   ra   r#   r#   r$   r2      rc   z`test_persist_index_get_or_create_embedding_function.<locals>.TestEF.__call__.<locals>.<listcomp>rd   rf   r#   r#   r$   ri      rj   zLtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.__call__Nrk   r#   r#   r#   r$   ro      rp   ro   r%   r8   rq   r9   r:   r;   r'   r>   rB   rC   r<   rG   r?   r   r[   r=   rA   )r   r   rH   rI   get_or_create_collectionrK   rM   rN   r3   rO   tolist)	r7   rP   ro   apirQ   rR   rS   rT   rU   r#   r#   r$   3test_persist_index_get_or_create_embedding_function   s.   

 rx   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#   )
rH   rl   rI   rJ   rK   batch_recordscountrL   delete_collectionlist_collections)r7   rP   r"   rQ   r#   r#   r$   test_persist   s   


r   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jsonrN   )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 ry   )rI   rJ   rK   r{   r|   r"   rQ   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 Nr8   Collection .* does not exist.matchr#   )rI   rJ   r}   r   raisesr   rK   r{   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 ry   )	rI   rJ   rK   r{   r|   r   r   	Exceptionru   r   r#   r#   r$   test_get_or_create   s   

r   c                 C   r   ry   )rI   rJ   rK   minimal_recordsr|   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 )Nrz   r?   r=   r@   rF   r<   r\   rG   r#   )rI   rJ   rK   r{   r   rN   r3   rO   )r"   rQ   rS   recordsrU   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 Nr8   r   r   )rI   rJ   r}   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 )Nrz   r\   r   r#   )rI   rJ   rK   r{   r|   r3   r~   r   r#   r#   r$   test_reset_db*  s   
r   c                 C   s  |    | d}|jd
i t g d}|jg dd|d}| D ].}||v s-|dkr8t|| dks7J q#|dkrIt|| t|ksHJ q#|| d u sQJ q#|jg dgd|d}| D ].}||v sk|dkrvt|| dksuJ qa|dkrt|| t|ksJ qa|| d u sJ qa|jg dg dgd|d}| D ].}||v s|dkrt|| d	ksJ q|dkrt|| t|ksJ q|| d u sJ qd S )Nrz   r>   r   rB   query_embeddingsrE   rF   r<   rG   )皙?r         @r\   r#   )rI   rJ   rK   r{   rM   rN   r3   rO   r"   rQ   rS   rT   rU   r#   r#   r$   test_get_nearest_neighbors5  sL   
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 ry   )	rI   rJ   rK   r{   r|   r   r   r   deleter   r#   r#   r$   test_deletec  s   

"r   c                 C   sN   |    | d}|jdi t | dksJ |jtd dd u s%J d S )Nrz   r\   r<   r<   r#   )rI   rJ   rK   r{   r|   r   r   r#   r#   r$   test_delete_returns_nonel  s
   
r   c                 C   sJ   |    | d}|jdi t | dksJ |jg dgdd d S )Nrz   r\   r   rB   r   rE   r#   )rI   rJ   rK   r{   r|   rM   r   r#   r#   r$   test_delete_with_indexs  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 )Nr8   r   r   r9   r   )rI   rJ   r}   r   r   r   r   r   r#   r#   r$   5test_collection_delete_with_invalid_collection_throws{     

"r   c                 C   sF   |    | d}| dksJ |jdi t | dks!J d S )Nrz   r   r\   r#   )rI   rJ   r|   rK   r{   r   r#   r#   r$   
test_count  s
   
r   c                 C   r   r   )rI   rJ   r}   r   r   r   r|   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 Nrz   
testspace2name)rI   rJ   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 )Nr8   r   r   test2r   )rI   rJ   r}   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   rI   rJ   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 )Nrz   znot supportedr   
hnsw:spacecosinemetadatar   )r"   caplogrQ   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 ]2}| |}|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 )NrB   r\   )r,   r-   rz   r   r,   r-   r]   )r,   cr   r   )rI   rJ   r   rL   r   ru   r~   r   )r"   
metadata_arQ   collectionscollection_namer#   r#   r$   test_metadata_cru  sH   







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 )
Nrz   r\   r>   r   rB   r   r<   rG   r#   )	rI   rJ   rK   r{   r|   rM   rN   r3   rO   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 )Nrz   r   )rI   rJ   rL   r   r   r   r   r   r#   r#   r$   test_add_a_collection  s   

"r   c                 C   sP   |    tt}| d W d    n1 sw   Y  |jjd us&J d S )Nr   )rI   r   r   r   rL   valuetrace_id)http_clienterrorr#   r#   r$   test_error_includes_trace_id  s
   r   c                 C   s8   |    | d | d |  }t|dksJ d S )Nrz   r   r\   rI   rJ   r~   r3   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 )Nrz   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 )Nrz   r\   r   r<   rG   r?   r@   r=   r#   )	rI   rJ   rK   r{   r|   peekrN   r3   rO   )r"   rQ   r   rU   r#   r#   r$   	test_peek6  s   
r   c                 C   r   r   )rI   rJ   r}   r   r   r   r   r   r#   r#   r$   3test_collection_peek_with_invalid_collection_throwsG  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 )Nr8   r   r   )rD   )rI   rJ   r}   r   r   r   rM   r   r#   r#   r$   4test_collection_query_with_invalid_collection_throwsR  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 )Nr8   r   r   r9   r;   )rI   rJ   r}   r   r   r   updater   r#   r#   r$   5test_collection_update_with_invalid_collection_throws]  s   

"r   r9   id2rB   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_intr9   r   r   r@   r   r   rB   r   r   r\   r#   )rI   rJ   rK   metadata_recordsr   r   r   floatr"   rQ   itemsr#   r#   r$   test_metadata_add_get_int_floatu  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   rB   r   r@   r   r   r   r   r#   )rI   rJ   rK   r   rM   r   r   r   r   r#   r#   r$   !test_metadata_add_query_int_float  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   wherer@   r   r   rB   r#   rI   rJ   rK   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   rB   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   rB   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   r9   r\   twojt @r   r<   r@   r   r@   r   r   r   r   r#   )rI   rJ   rK   r   r   r   r   r#   r#   r$   "test_metadata_update_get_int_float  s   
r  r   nested5r[   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#   )rI   rJ   r   r   
ValueErrorrK   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   r9   r   r  r  r
  r#   )rI   rJ   rK   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  )rI   rJ   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  )rI   rJ   r   r   r  rM   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@   rB   r#   rI   rJ   rK   operator_recordsr   r3   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@   rB   r#   r  r   r#   r#   r$   test_where_gte  r  r!  c                 C   r  )	Nr  r   $ner  r  r@   rB   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"  rB   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  2rB   )r  r  $andr  )r   $orr)  r,   	$containsr8   firstsecondr#   )rI   rJ   rK   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#   )
rI   rJ   rK   r   r   r   r   bad_dimensionality_recordsstrr   r"   rQ   er#   r#   r$   "test_dimensionality_validation_add^     
r4  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#   )rI   rJ   rK   r   r   r   r   rM   bad_dimensionality_queryr1  r   r2  r#   r#   r$   r7  h  r5  r7  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   r:  r(  z$unsupporteddocr)  r#   )	rI   rJ   rK   r  r   r   r  r   rM   r   r#   r#   r$   #test_query_document_valid_operatorsr  s@   
$r<  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*  doc1r9  r@   rB   greatr\   badr   r#   )rI   rJ   rK   contains_recordsr   r3   r   r#   r#   r$   r=    s   
r=  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)rB   r   r   r*  r>  rB   )r   r:  rE   r@   r   r  r?  r\   r@  
datapointsr#   )rI   rJ   rK   rA  rM   r3   r   r   r   r1  r   )r"   rQ   r   r3  r#   r#   r$   rB    s"   
"rB  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*  r>  r9  rB   r@  r?  r   r#   )rI   rJ   rK   rA  r   r|   r   r#   r#   r$   rD    s   
rD  )g?g      @r   )gffffff?gGz@r   )r9   r   id3id4r;  )r   r   r   is)r   r   r   rG  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?rG  r;  r  r@   r$  r   rH  rI  rJ  r\   rB   r  r   r#   rI   rJ   rK   logical_operator_recordsr   r3   r   r#   r#   r$   test_where_logical_operators  sV   








rN  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+  r;  r9  r@   rB   r)  r,  r\   r   r"  )r:  r  r#   rL  r   r#   r#   r$   %test_where_document_logical_operators$  s:   
rP  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=   rA   r  rB   r   rF   rE   r?   r<   r   r9   r@   r   rG   )r?   r=   rA   )rB   r\   r   r\   r=   rA   r   r#   )rI   rJ   rK   r   rM   rO   r"   rQ   rF   r   r#   r#   r$   rS  X  sB   
rS  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   rB   )rF   r  r?   r<   r   r9   rQ  rG   r   r   rF   r   	undefinedr#   )
rI   rJ   rK   r   r   rO   r/   r   r   r  rV  r#   r#   r$   rW    s8   
"rW  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   rT  r\   rU  r=   r   rR  rB   rQ  r#   rI   rJ   rK   r   rM   r   r#   r#   r$   rY    s   
rY  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  rB   r   IDr   validr   )
rI   rJ   r   r   r  rK   r1  r   r   r   r2  r#   r#   r$   r[    s   
r[  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?rB   r   rA   r   rI  r         )r   zhnsw:construction_efzhnsw:Mr   r   r   ipr#   rZ  )r"   EPSrQ   r   r#   r#   r$   r^    s>   
r^  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 )Nr^  zhnsw:foobarblargra  r   foobarr#   )rI   r   r   r   rJ   rK   r   r   r#   r#   r$   test_invalid_index_params  s   "rg  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%   r8   r   rb  r   r9   r:   r;   r'   r>   rB   rC   r<   rG   )
rH   rI   rJ   rK   rL   r   rM   rN   r3   rO   )r"   rP   rQ   rR   rS   rT   rU   r#   r#   r$   !test_persist_index_loading_params   s2   

rh  c                 C   sd   |    | d}tjddtj }|j|dd t	t
|D d | t
|ks0J d S )Nrz   i     c                 S      g | ]}d | qS )zhttp://example.com/r#   r0   ir#   r#   r$   r2   (      z"test_add_large.<locals>.<listcomp>r   )rI   rJ   r_   randomrandastypefloat32rv   rK   re   r3   r|   )r"   rQ   large_recordsr#   r#   r$   test_add_large  s   
rs  c                 C   s,   |    |  }dd l}|d|sJ d S )Nr   z\d+\.\d+\.\d+)rI   get_versionrer   )r"   versionru  r#   r#   r$   test_get_version/  s   rw  c                 C   sX   |    | d}|jdi t t|  dksJ | d t|  dks*J d S )Ntest_delete_collectionrB   r   r#   )rI   rJ   rK   r   r3   r~   r}   r   r#   r#   r$   rx  :  s   

rx  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#   ra   r#   r#   r$   r2   G  s    z*test_default_embedding.<locals>.<listcomp>@   )r   re   r3   )rr   docsr?   r#   r#   r$   test_default_embeddingE  s   r{  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   ri  c                 S   rj  )zhttp://example.com/1/r#   rk  r#   r#   r$   r2   O  rm  z-test_multiple_collections.<locals>.<listcomp>c                 S   rj  )zhttp://example.com/2/r#   rk  r#   r#   r$   r2   P  rm  coll1r   coll2r\   r   rB   r   r<   )r_   rn  ro  rp  rq  rv   re   r3   rI   rJ   rK   r~   r|   rM   )	r"   embeddings1embeddings2ids1ids2r|  r}  results1results2r#   r#   r$   test_multiple_collectionsL  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?   rB   r   r   r=   r@   r#   )rI   rJ   rK   r   r   rM   r3   r6   )r"   rQ   updated_recordsresultsr#   r#   r$   r  d  s*   
  r  c                 C   s   |    | d}|jd
i t g d}|jg dgd|d}| D ]0}||v s.|dkr;t|| d dks:J q$|d	krLt|| t|ksKJ q$|| d u sTJ q$d S )Nrz   r>   r   r`  r   r<   r   r\   rG   r#   )rI   rJ   rK   r   rM   rN   r3   rO   )r"   rQ   rS   r  rU   r#   r#   r$   <test_get_nearest_neighbors_where_n_results_more_than_element  s    
r  c                 C   s   |    | d}|jd	i t tt}|jg dgdg dd W d    n1 s.w   Y  dt|j	v s<J |j
tksCJ tt}|jg dgdg dd W d    n1 s`w   Y  dt|j	v snJ |j
tksuJ d S )
Nrz   r   r>   r   z<Number of requested results -1, cannot be negative, or zero.r   r   r#   )rI   rJ   rK   r   r   r   	TypeErrorrM   r1  r   typer  )r"   rQ   excr#   r#   r$   test_invalid_n_results_param  s.   

r  )g@gQ	@g@)r9   r   rE  r   )rQ  rR  zthis document is third)      @r  r   )r   g(\@g@rF  
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 )Nr8   r]   rI  r   r<   r   )rF   r<   r?   r@   r=   rB   r   r\   r   )r   gGz?gGz@r   za new string value)r<   r?   r@   rE  r#   )rI   rJ   rK   initial_recordsr|   upsertnew_recordsr   r6   rM   r   )r"   rQ   
get_resultquery_resultr#   r#   r$   test_upsert  sJ   
  

r  c                 C   r   r   )rI   rJ   r}   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.2r9   r   r   	embedding)z1.1z2.3r  rB   r   r   r   r   r   r   r   r#   )rI   rJ   r   r   r  rK   r1  r   rM   r   r  )r"   rQ   invalid_recordsr3  r#   r#   r$   r    s<   
r  c                 C   r6  )N$test_dimensionality_update_exceptionr/  r#   )rI   rJ   rK   r   r   r   r   r   r0  r1  r   r2  r#   r#   r$   $test_dimensionality_exception_update2  r5  r  c                 C   r6  )N$test_dimensionality_upsert_exceptionr/  r#   )rI   rJ   rK   r   r   r   r   r  r0  r1  r   r2  r#   r#   r$   $test_dimensionality_exception_upsert?  r5  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_signedI  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  _portr3  stack_tracer#   r#   r$   'test_ssl_self_signed_without_ssl_verifyO  s   

r  )r(   )r  r   r   chromadb.errorsr   chromadb.api.fastapir   chromadb.api.typesr   r   r   chromadb.configr   r   chromadb.server.fastapir   tempfilenumpyr_   r   r   r	   r
   "chromadb.utils.embedding_functionsr   mkdtempr   fixturer%   r'   boolr/   r   r6   markparametrizerV   rt   rx   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  r  r!  r#  r%  r&  r0  r8  bad_number_of_results_queryr4  r7  r<  rA  r=  rB  rD  rM  rN  rP  r   rS  rW  rY  r[  r^  rg  rh  rs  rw  rx  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r#   r#   r#   r$   <module>   sn  




"
	

.		
	2	








1

%

8*
'%'

.+
