o
    3Ih                  
   @   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 d d	l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- Z0d.d/ Z1g d%g d&gd'd(gd)Z2d0d1 Z3d2d3 Z4d4d5 Z5d6d7 Z6d8d9 Z7d:d; Z8d<d= Z9d>d? Z:d@dA Z;dBdC Z<dDdE Z=dFdG Z>dHdI Z?dJdK Z@dLdM ZAdNdO ZBdPdQ ZCdRdS ZDdTdU ZEdVdW ZFdXdY ZGdZd[ ZHd\d] ZId^d_ ZJd`da ZKg d%g d&gdbdcgdddedfdgdhdiigdjZLdkdl ZMdmdn ZNdodp ZOdqdr ZPdsdt ZQdudv ZRg d%g d&gdbdcgdwdxdyiidwg dzigdjZSd{d| ZTd}d~ ZUdd ZVdd ZWg d%g d&gdbdcgdddedfdgdidddgdjZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_g dg dgdbdcgd)Z`dg dg dgiZag d%g d&gddZbdd Zcdd Zddd Zeg d%g d&gddgdbdcgdddedfdgdidddgdZfdd Zgdd Zhdd Zig d%g d&g dg dgg ddddedfdddiddddddddddddddgg ddZjdd Zkdd Zlg dg d&gdbdcgdddedfdgdhdiigddgdZmdd Zndd Zodd ZpddĄ ZqddƄ ZrddȄ Zsddʄ Ztdd̄ Zudd΄ ZvddЄ Zwdd҄ ZxddԄ Zyddք Zzdd؄ Z{ddڄ Z|g dg d&g dۢgg dܢdddedfdgdhdiiddigg dޢdZ}g dߢg dgdbdgddddfdgdhdigddgdZ~dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    N)ChromaError)FastAPI)QueryResultEmbeddingFunctionDocument)Settings)NotFoundError)datetime	timedelta)DefaultEmbeddingFunction)Any)InvalidArgumentErrorc                  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%   V/home/air/sanwanet/gpt-api/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_bust0   r(   r)   ư>returnc                 C   s   t | | |k S N)absab	tolerancer%   r%   r&   approx_equalD   s   r2   r1   c                    s0   t | t |kr
dS t fddt| |D S )NFc                    s   g | ]
\}}t || qS r%   )r2   ).0r/   r0   r1   r%   r&   
<listcomp>K   s    z'vector_approx_equal.<locals>.<listcomp>)lenallzipr.   r%   r4   r&   vector_approx_equalH   s   r9   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keysr6   set)r:   requestr$   
collectionapi2includesnnkeyr%   r%   r&   test_persist_index_loadingN   s&   



rY   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                       p   e Zd Zdd Zdededdf fddZdefd	d
Zdeeef ddfddZ	deeef fddZ
  Z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 rE         nparrayr3   _r%   r%   r&   r5   k       zZtest_persist_index_loading_embedding_function.<locals>.TestEF.__call__.<locals>.<listcomp>ranger6   selfinputr%   r%   r&   __call__j      zFtest_persist_index_loading_embedding_function.<locals>.TestEF.__call__argskwargsr+   Nc                       t  j|i | d S r,   super__init__rj   rn   ro   	__class__r%   r&   rs   m   rm   zFtest_persist_index_loading_embedding_function.<locals>.TestEF.__init__c                 S      dS Nr;   r%   rj   r%   r%   r&   namep      zBtest_persist_index_loading_embedding_function.<locals>.TestEF.nameconfigc                 S      d S r,   r%   rj   r|   r%   r%   r&   build_from_configs   r{   zOtest_persist_index_loading_embedding_function.<locals>.TestEF.build_from_configc                 S      i S r,   r%   ry   r%   r%   r&   
get_configv   r{   zHtest_persist_index_loading_embedding_function.<locals>.TestEF.get_config__name__
__module____qualname__rl   r   rs   strrz   dictr   r   __classcell__r%   r%   ru   r&   TestEFi       r   r'   r;   embedding_functionr<   r=   r>   r)   rA   rE   rF   r?   rJ   )r   r   rK   rL   rM   rN   rO   rP   rQ   r6   rR   )	r:   rS   r   r$   rT   client2rV   rW   rX   r%   r%   r&   -test_persist_index_loading_embedding_functiong   s(   

r   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                       rZ   )zCtest_persist_index_get_or_create_embedding_function.<locals>.TestEFc                 S   r[   )Nc                 S   r\   r]   ra   rd   r%   r%   r&   r5      rf   z`test_persist_index_get_or_create_embedding_function.<locals>.TestEF.__call__.<locals>.<listcomp>rg   ri   r%   r%   r&   rl      rm   zLtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.__call__rn   ro   r+   Nc                    rp   r,   rq   rt   ru   r%   r&   rs      rm   zLtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.__init__c                 S   rw   rx   r%   ry   r%   r%   r&   rz      r{   zHtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.namer|   c                 S   r}   r,   r%   r~   r%   r%   r&   r      r{   zUtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.build_from_configc                 S   r   r,   r%   ry   r%   r%   r&   r      r{   zNtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.get_configr   r%   r%   ru   r&   r      r   r   r'   r;   r   r<   r=   r>   r)   rA   rE   rF   r?   rJ   rB   r   r^   r@   rD   )r   r   rK   rL   get_or_create_collectionrN   rP   rQ   r6   rR   tolist)	r:   rS   r   apirT   rU   rV   rW   rX   r%   r%   r&   3test_persist_index_get_or_create_embedding_function   s.   

 r   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%   )
rK   r   rL   rM   rN   batch_recordscountrO   delete_collectionlist_collections)r:   rS   r$   rT   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jsonrQ   )r$   respr%   r%   r&   test_pre_flight_checks   s   

r   皙?ffffff@皙	@333333?Q@r   zhttps://example.com/1zhttps://example.com/2rB   r?   c                 C   6   |    | d}|jdi t | dksJ d S r   )rL   rM   rN   r   r   r$   rT   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 Nr;   Collection .* does not exist.matchr%   )rL   rM   r   r   raisesr   rN   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 r   )	rL   rM   rN   r   r   r   r   	Exceptionr   r   r%   r%   r&   test_get_or_create  s   

r   c                 C   r   r   )rL   rM   rN   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 )Nr   rB   r@   rC   rI   r?   r_   rJ   r%   )rL   rM   rN   r   r   rQ   r6   rR   )r$   rT   rV   recordsrX   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 Nr;   r   r   )rL   rM   r   r   r   r   r   r   r%   r%   r&   2test_collection_get_with_invalid_collection_throws7     


"r   c                 C   sR   |    | d}|jdi t | dksJ |    t|  dks'J d S )Nr   r_   r   r%   )rL   rM   rN   r   r   r6   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 )Nr   rA   r   rE   query_embeddingsrH   rI   r?   rJ   )皙?r         @r_   r%   )rL   rM   rN   r   rP   rQ   r6   rR   r$   rT   rV   rW   rX   r%   r%   r&   test_get_nearest_neighborsK  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 r   )	rL   rM   rN   r   r   r   r   r   deleter   r%   r%   r&   test_deletey  s   

"r   c                 C   sN   |    | d}|jdi t | dksJ |jtd dd u s%J d S )Nr   r_   r?   r?   r%   )rL   rM   rN   r   r   r   r   r%   r%   r&   test_delete_returns_none  s
   
r   c                 C   sJ   |    | d}|jdi t | dksJ |jg dgdd d S )Nr   r_   r   rE   r   rH   r%   )rL   rM   rN   r   r   rP   r   r%   r%   r&   test_delete_with_index  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 )Nr;   r   r   r<   r   )rL   rM   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 )Nr   r   r_   r%   )rL   rM   r   rN   r   r   r%   r%   r&   
test_count  s
   
r   c                 C   r   r   )rL   rM   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 Nr   
testspace2rz   )rL   rM   modifyrz   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 )Nr;   r   r   test2r   )rL   rM   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   rL   rM   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 )Nr   znot supportedr   
hnsw:spacecosinemetadatar   )r$   caplogrT   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 )NrE   r_   )r/   r0   r   r   r/   r0   r`   )r/   cr   r   )rL   rM   r   rO   r   r   r   rz   )r$   
metadata_arT   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 )
Nr   r_   rA   r   rE   r   r?   rJ   r%   )	rL   rM   rN   r   r   rP   rQ   r6   rR   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 )Nr   r   )rL   rM   rO   rz   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   )rL   r   r   r   rO   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 )Nr   r   r_   rL   rM   r   r6   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 )Nr   r   r_   r   r   r   r%   r%   r&   
test_reset9  s   

r  c                 C   s   |    | d}|jdi t | dksJ | }t| | D ]0}|dv s/|dkr:t|| dks9J q%|dkrMt	|| t	g dksLJ q%|| d u sUJ q%d S )Nr   r_   r   r?   rJ   rB   rC   r@   r%   )
rL   rM   rN   r   r   peekr   rQ   r6   rR   )r$   rT   r  rX   r%   r%   r&   	test_peekG  s   
r  c                 C   r   r   )rL   rM   r   r   r   r   r  r   r%   r%   r&   3test_collection_peek_with_invalid_collection_throwsY  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 )Nr;   r   r   )rG   )rL   rM   r   r   r   r   rP   r   r%   r%   r&   4test_collection_query_with_invalid_collection_throwsb  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 )Nr;   r   r   r<   r>   )rL   rM   r   r   r   r   updater   r%   r%   r&   5test_collection_update_with_invalid_collection_throwsk  s   

"r	  r<   id2rE   onejt?	int_valuestring_valuefloat_valuer  r_   rB   r?   rC   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_intr<   r
  r   rC   r   r  rE   r  r  r_   r%   )rL   rM   rN   metadata_recordsr   r   r   floatr$   rT   itemsr%   r%   r&   test_metadata_add_get_int_float  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   rE   r   rC   r   r  r  r  r%   )rL   rM   rN   r  rP   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  whererC   r   r  rE   r%   rL   rM   rN   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  rE   r  rC   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  rC   r   r  rE   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  r<   r_   twojt @r  r?   rC   r   rC   r   r  r  r  r%   )rL   rM   rN   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%   )rL   rM   r   r   
ValueErrorrN   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   r<   r   r$  r%  r"  r%   )rL   rM   rN   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  )rL   rM   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  )rL   rM   r   r   r'  rP   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  rC   rE   r%   rL   rM   rN   operator_recordsr   r6   r  r%   r%   r&   r0    
   
r0  c                 C   r/  )	Ntest_where_lter  z$lteg       @r  rC   r_   r%   r2  r  r%   r%   r&   r5    r4  r5  c                 C   r/  )	Nr5  r  $gtgffffffr  rC   r_   r%   r2  r  r%   r%   r&   test_where_gt	  r4  r7  c                 C   r/  )	Nr5  r  $gter!  r  rC   rE   r%   r2  r  r%   r%   r&   test_where_gte  r4  r9  c                 C   r/  )	Nr5  r  $ner   r  rC   rE   r%   r2  r  r%   r%   r&   test_where_ne_string  r4  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 )Nr5  r  r:  rE   r  rC   r  $eqr!  r%   r2  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  r1  2rE   )r1  r6  $andr6  )r  $orrA  r/   	$containsr;   firstsecondr%   )rL   rM   rN   r3  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	dimensionr%   )
rL   rM   rN   r   r   r   r   bad_dimensionality_recordsr   r   r$   rT   er%   r%   r&   "test_dimensionality_validation_addj     
rK  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_queryrG  r%   )rL   rM   rN   r   r   r   r   rP   bad_dimensionality_queryr   r   rI  r%   r%   r&   rN  t  rL  rN  c                 C   s  |    | 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jtdd |jd	ddiid W d    n1 sw   Y  tjtdd |jdddiid W d    n1 sw   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 sw   Y  tt |jdg id W d    n	1 s1w   Y  tt |jddd	digid	digid W d    d S 1 sYw   Y  d S )Nr>  zwhere documentr   r1  z$nestedr_   where_documentr-  rB  )r   rQ  textr=   z$not_containsr@  z$unsupporteddocrA  r%   )	rL   rM   rN   r3  r   r   r'  r   rP   r   r%   r%   r&   #test_query_document_valid_operators~  sL   
$rT  zthis is doc1 and it's great!zdoc2 is also great!)rB   r@   r?   rC   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_documentrB  doc1rP  rC   rE   greatr_   badr   r%   )rL   rM   rN   contains_recordsr   r6   r  r%   r%   r&   rU    s   
rU  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)rE   r   r   rB  rV  rE   )r   rQ  rH   rC   r   r-  rW  r_   rX  
datapointsr%   )rL   rM   rN   rY  rP   r6   r   r   r   r   r   )r$   rT   r  rJ  r%   r%   r&   rZ    s"   
"rZ  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_documentrB  rV  rP  rE   rX  rW  r   r%   )rL   rM   rN   rY  r   r   r   r%   r%   r&   r\    s   
r\  )g?g      @r   )gffffff?gGz@r   )r<   r
  id3id4rS  )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)rB   r?   rC   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@  rA  r  r8  r`   r  r1  gffffff?r_  rS  r  rC   r<  r  r`  ra  rb  r_   rE   r   r  r%   rL   rM   rN   logical_operator_recordsr   r6   r  r%   r%   r&   test_where_logical_operators   sV   








rf  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@  rB  rC  rS  rP  rC   rE   rA  rD  r_   r  r:  )rQ  r  r%   rd  r  r%   r%   r&   %test_where_document_logical_operators8  s:   
rh  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rC   r@   rD   r-  rE   r   rI   rH   rB   r?   r   r<   rC   r  rJ   )rB   r@   rD   )rE   r_   r   r_   r@   rD   r
  r%   )rL   rM   rN   r   rP   rR   r$   rT   rI   r  r%   r%   r&   rk  l  sB   
rk  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_includerC   r@   r  rE   )rI   r  rB   r?   r   r<   ri  rJ   r   r   rI   r   	undefinedr%   )
rL   rM   rN   r   r   rR   r2   r   r   r'  rn  r%   r%   r&   ro    s8   
"ro  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   rl  r_   rm  r@   r   rj  rE   ri  r%   rL   rM   rN   r   rP   r  r%   r%   r&   rq    s   
rq  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-  rE   r  IDr   validr   )
rL   rM   r   r   r'  rN   r   r   r   r   rI  r%   r%   r&   rs    s   
rs  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?rE   r   rD   r   ra  r         )r   zhnsw:construction_efzhnsw:Mrz   r   r   ipr%   rr  )r$   EPSrT   r  r%   r%   r&   rv    s>   
rv  c                 C   sZ   |    tt | jdddid}|jdi t W d    d S 1 s&w   Y  d S )Nrv  r   foobarry  r%   )rL   r   r   r   rM   rN   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'   r;   r   rz  r   r<   r=   r>   r)   rA   rE   rF   r?   rJ   )
rK   rL   rM   rN   rO   r   rP   rQ   r6   rR   )r$   rS   rT   rU   rV   rW   rX   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 )Nr   i     c                 S      g | ]}d | qS )zhttp://example.com/r%   r3   ir%   r%   r&   r5   6      z"test_add_large.<locals>.<listcomp>r   )rL   rM   rb   randomrandastypefloat32r   rN   rh   r6   r   )r$   rT   large_recordsr%   r%   r&   test_add_large,  s   
r  c                 C   s,   |    |  }dd l}|d|sJ d S )Nr   z\d+\.\d+\.\d+)rL   get_versionrer   )r$   versionr  r%   r%   r&   test_get_version=  s   r  c                 C   sX   |    | d}|jdi t t|  dksJ | d t|  dks*J d S )Ntest_delete_collectionrE   r   r%   )rL   rM   rN   r   r6   r   r   r   r%   r%   r&   r  H  s   

r  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%   rd   r%   r%   r&   r5   U  s    z*test_default_embedding.<locals>.<listcomp>@   )r   rh   r6   )r   docsrB   r%   r%   r&   test_default_embeddingS  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   r  c                 S   r  )zhttp://example.com/1/r%   r  r%   r%   r&   r5   ]  r  z-test_multiple_collections.<locals>.<listcomp>c                 S   r  )zhttp://example.com/2/r%   r  r%   r%   r&   r5   ^  r  coll1r   coll2r_   r   rE   r   r?   )rb   r  r  r  r  r   rh   r6   rL   rM   rN   r   r   rP   )	r$   embeddings1embeddings2ids1ids2r  r  results1results2r%   r%   r&   test_multiple_collectionsZ  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?   rB   r@   rC   rB   rE   r   r   r@   rC   r%   )rL   rM   rN   r   r  rP   r6   r9   )r$   rT   updated_recordsresultsr%   r%   r&   r  r  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 )Nr   rA   r   rx  r   r?   r   r_   rJ   r%   )rL   rM   rN   r   rP   rQ   r6   rR   )r$   rT   rV   r  rX   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 )
Nr   r   rA   r   z<Number of requested results -1, cannot be negative, or zero.r  r   r%   )rL   rM   rN   r   r   r   	TypeErrorrP   r   r   typer'  )r$   rT   excr%   r%   r&   test_invalid_n_results_param  s.   

r  )g@gQ	@g@)r<   r
  r]  r  )ri  rj  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 )Nr;   r`   ra  r  r?   r   )rI   r?   rB   rC   r@   rE   r   r_   r   )r   gGz?gGz@r  za new string value)r?   rB   rC   r]  r%   )rL   rM   rN   initial_recordsr   upsertnew_recordsr   r9   rP   r   )r$   rT   
get_resultquery_resultr%   r%   r&   test_upsert  sJ   
  

r  c                 C   r   r   )rL   rM   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.2r<   r
  r   	embedding)z1.1z2.3r  rE   r   r   r   r   r   r   r   r%   )rL   rM   r   r   r'  rN   r   r   rP   r  r  )r$   rT   invalid_recordsrJ  r%   r%   r&   r    s<   
r  c                 C   rM  )N$test_dimensionality_update_exceptionrG  r%   )rL   rM   rN   r   r   r   r   r  rH  r   r   rI  r%   r%   r&   $test_dimensionality_exception_update>  rL  r  c                 C   rM  )N$test_dimensionality_upsert_exceptionrG  r%   )rL   rM   rN   r   r   r   r   r  rH  r   r   rI  r%   r%   r&   $test_dimensionality_exception_upsertK  rL  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_signedU  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  _portrJ  stack_tracer%   r%   r&   'test_ssl_self_signed_without_ssl_verify[  s   

r  c           	         s   |    | d}d}d}tjddtj }dd t|D }|j	||d dd td|d	D  tj|tj }|j
| |g d
}dd |d D }t fdd|D s`J d S )Ntest_query_id_filtering_smallrE  r  c                 S      g | ]}| qS r%   r%   r  r%   r%   r&   r5   p      z9test_query_id_filtering_small_dataset.<locals>.<listcomp>r   c                 S   r  r%   r%   r  r%   r%   r&   r5   w  r  r   r   r   r?   rH   rI   c                 S      g | ]	}|D ]}|qqS r%   r%   r3   sublistitemr%   r%   r&   r5     rf   r?   c                 3       | ]}| v V  qd S r,   r%   r3   id	query_idsr%   r&   	<genexpr>      z8test_query_id_filtering_small_dataset.<locals>.<genexpr>rL   rM   rb   r  r  r  r  r   rh   rN   rP   r7   )	r$   rT   num_vectorsdimsmall_recordsr?   query_embeddingr  all_returned_idsr%   r  r&   %test_query_id_filtering_small_dataseti  s(   
r  c                    s  |    | d}d}d tj| tj }dd t|D }|j	||d dd td|d	D tj tj }|j
||g d
}dd |d D }tfdd|D s`J  fddtdD }|j
|d	g d
}	|	d D ]}
tfdd|
D sJ qxd S )Ntest_query_id_filtering_mediumi  r  c                 S   r  r%   r%   r  r%   r%   r&   r5     r  z:test_query_id_filtering_medium_dataset.<locals>.<listcomp>r   c                 S   r  r%   r%   r  r%   r%   r&   r5     r  r   r   r  c                 S   r  r%   r%   r  r%   r%   r&   r5     rf   r?   c                 3   r  r,   r%   r  r  r%   r&   r    r  z9test_query_id_filtering_medium_dataset.<locals>.<genexpr>c                    s$   g | ]}t j t j qS r%   )rb   r  r  r  r  r   rd   )r  r%   r&   r5     s    r`   c                 3   r  r,   r%   r  r  r%   r&   r    r  r  )r$   rT   r  medium_recordsr?   r  r  r  multi_query_embeddingsmulti_results
result_setr%   )r  r  r&   &test_query_id_filtering_medium_dataset  s@   

r  c                    s  |    | d}d}d}tj||tj }dd t|D }dd t|D }|j	|||d dd td	d
D }|j
|d dd td
dD }|d }	dd t||	D }
tjt|t|
 |tj }dd tt|D }|j|||
 |d dd tdd	D dd tddD  dd t|d |d D   dg}tj|tj }|j| |	|d}dd |d D }t fdd|D sJ t|d D ]!\}}t|D ]\}}||v s||
v r|d | | d sJ qq|d }|j||d |d}|d d d d sJ |d }tt}|j||d |d W d    n	1 s4w   Y  d!t|jv sCJ d S )"Ntest_query_id_filtering_e2er  rE  c                 S   r  r%   r%   r  r%   r%   r&   r5     r  z/test_query_id_filtering_e2e.<locals>.<listcomp>c                 S   s   g | ]}d |iqS )indexr%   r  r%   r%   r&   r5     s    r  c                 S   r  r%   r%   r  r%   r%   r&   r5     r  r      r   c                 S   r  r%   r%   r  r%   r%   r&   r5     r  2   rw  c                 S   r  r%   r%   r  r%   r%   r&   r5     r  c                 S   s   g | ]}|d dqS )T)r  upsertedr%   r  r%   r%   r&   r5     s    
c                 S   r  r%   r%   r  r%   r%   r&   r5     r  rx  c                 S   r  r%   r%   r  r%   r%   r&   r5     r  #   -   c                 S   r  r%   r%   r  r%   r%   r&   r5     s       rC   r  c                 S   r  r%   r%   r  r%   r%   r&   r5     rf   r?   c                 3   r  r,   r%   r  valid_query_idsr%   r&   r    r  z.test_query_id_filtering_e2e.<locals>.<genexpr>r  r   rE   zError finding id)rL   rM   rb   r  r  r  r  r   rh   rN   r   r6   r  rP   r7   	enumerater   r   r   r   r   )r$   rT   r  r  rB   r?   rC   ids_to_deleteids_to_upsert_existingnew_num_vectorsids_to_upsert_newupsert_embeddingsupsert_metadatasrV   r  r  r  result_indexid_list
item_indexitem_idupserted_id
deleted_idr   r%   r  r&   r    s   

r  )r*   )r  r   r   chromadb.errorsr   chromadb.api.fastapir   chromadb.api.typesr   r   r   chromadb.configr   r   chromadb.server.fastapir   tempfilenumpyrb   r   r!   r	   r
   "chromadb.utils.embedding_functionsr   typingr   r   mkdtempr   fixturer'   r)   boolr2   r  r9   markparametrizerY   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.  r3  r0  r5  r7  r9  r;  r=  r>  rH  rO  bad_number_of_results_queryrK  rN  rT  rY  rU  rZ  r\  re  rf  rh  r   rk  ro  rq  rs  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&   <module>   sx  



(
.
	
	
	.
				
	1	
		







1

-

8*
'%'


.+
)