o
    \h                  
   @   sl  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	Z	d dl
Z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mZmZ d dlmZ ejd	d
 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-d%d& Z.d'd( Z/g d)g d*gd+d,gd-Z0d.d/ Z1d0d1 Z2d2d3 Z3g d)g d*gd+d,gd-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 ZKdbdc ZLddde ZMg d)g d*gdfdggdhdidjdkdldmigdnZNdodp ZOdqdr ZPdsdt ZQdudv ZRdwdx ZSdydz ZTg d)g d*gdfdggd{d|d}iid{g d~igdnZUdd ZVdd ZWdd ZXdd ZYg d)g d*gdfdggdhdidjdkdmdddgdnZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zag dg dgdfdggd-Zbdg dg dgiZcg d)g d*gddZddd Zedd Zfdd Zgg d)g d*gddgdfdggdhdidjdkdmdddgdZhdd Zidd Zjdd Zkg d)g d*g dg dgg ddhdidjdddmddddddddddddddgg ddZldd Zmdd Zng dg d*gdfdggdhdidjdkdldmigddgdZodd ZpddĄ ZqddƄ ZrddȄ Zsddʄ Ztdd̄ Zudd΄ ZvddЄ Zwdd҄ ZxddԄ Zyddք Zzdd؄ Z{ddڄ Z|dd܄ Z}ddބ Z~g dg d*g dߢgg ddhdidjdkdldmiddigg ddZg dg dgdfdgdhddjdkdldigddgdZdd Zdd Zdd Zdd Zdd Zej%jdejdddd Zej%jdejdddd Zdd Zdd Zdd ZdS (       N)datetime	timedelta)Any)FastAPI)DocumentEmbeddingFunctionQueryResult)Settings)ChromaErrorInvalidArgumentErrorNotFoundError)DefaultEmbeddingFunctionc                   C   s   t  S N)tempfilemkdtemp r   r   Y/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/chromadb/test/test_api.pypersist_dir   s   r   c                 c   P    t tddddddd| d}|V  |  tj| r&tj| 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	   clear_system_cacheospathexistsshutilrmtreer   clientr   r   r   local_persist_api   $   r*   c                 c   r   r   r   r(   r   r   r   local_persist_api_cache_bust1   r+   r,   ư>returnc                 C   s   t | | |k S r   )absab	tolerancer   r   r   approx_equalE   s   r4   r3   c                    s0   t | t |kr
dS t fddt| |D S )NFc                    s   g | ]
\}}t || qS r   )r4   ).0r1   r2   r3   r   r   
<listcomp>L   s    z'vector_approx_equal.<locals>.<listcomp>)lenallzipr0   r   r6   r   vector_approx_equalI   s   r;   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,   
embeddingsrB   	metadatas	distances   query_texts	n_resultsincluderA   included)	getfixturevalueresetcreate_collectionaddget_collectionquerykeysr8   set)r<   requestr)   
collectionapi2includesnnkeyr   r   r   test_persist_index_loadingO   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 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 rG         nparrayr5   _r   r   r   r7   l       zZtest_persist_index_loading_embedding_function.<locals>.TestEF.__call__.<locals>.<listcomp>ranger8   selfinputr   r   r   __call__k      zFtest_persist_index_loading_embedding_function.<locals>.TestEF.__call__argskwargsr.   Nc                       t  j|i | d S r   super__init__rl   rp   rq   	__class__r   r   ru   n   ro   zFtest_persist_index_loading_embedding_function.<locals>.TestEF.__init__c                 S      dS Nr=   r   rl   r   r   r   nameq      zBtest_persist_index_loading_embedding_function.<locals>.TestEF.nameconfigc                 S      d S r   r   rl   r~   r   r   r   build_from_configt   r}   zOtest_persist_index_loading_embedding_function.<locals>.TestEF.build_from_configc                 S      i S r   r   r{   r   r   r   
get_configw   r}   zHtest_persist_index_loading_embedding_function.<locals>.TestEF.get_config__name__
__module____qualname__rn   r   ru   strr|   dictr   r   __classcell__r   r   rw   r   TestEFj       r   r*   r=   embedding_functionr>   r?   r@   r,   rC   rG   rH   rA   rL   )r   r   rM   rN   rO   rP   rQ   rR   rS   r8   rT   )	r<   rU   r   r)   rV   client2rX   rY   rZ   r   r   r   -test_persist_index_loading_embedding_functionh   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                       r\   )zCtest_persist_index_get_or_create_embedding_function.<locals>.TestEFc                 S   r]   )Nc                 S   r^   r_   rc   rf   r   r   r   r7      rh   z`test_persist_index_get_or_create_embedding_function.<locals>.TestEF.__call__.<locals>.<listcomp>ri   rk   r   r   r   rn      ro   zLtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.__call__rp   rq   r.   Nc                    rr   r   rs   rv   rw   r   r   ru      ro   zLtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.__init__c                 S   ry   rz   r   r{   r   r   r   r|      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   r{   r   r   r   r      r}   zNtest_persist_index_get_or_create_embedding_function.<locals>.TestEF.get_configr   r   r   rw   r   r      r   r   r*   r=   r   r>   r?   r@   r,   rC   rG   rH   rA   rL   rD   r   r`   rB   rF   )r   r   rM   rN   get_or_create_collectionrP   rR   rS   r8   rT   tolist)	r<   rU   r   apirV   rW   rX   rY   rZ   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	testspacera   r   )
rM   r   rN   rO   rP   batch_recordscountrQ   delete_collectionlist_collections)r<   rU   r)   rV   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   |   }|dks
J d S )Nr   )get_max_batch_size)r)   
batch_sizer   r   r   test_max_batch_size   s   r   c                 C   s4   t | ts
td |   |  }|du sJ d S )NNot a FastAPI instanceT)r   r   pytestskiprN   supports_base64_encoding)r)   r   r   r   r   test_supports_base64_encoding   s
   

r   c                 C   sJ   t | ts
td |   ddi| _|  du sJ |  dks#J d S )Nr   max_batch_sized   F)r   r   r   r   rN   pre_flight_checksr   r   )r)   r   r   r   $test_supports_base64_encoding_legacy   s   

r   c                 C   sp   t | ts
td t| j d}|jdksJ | d us"J d| 	 v s,J d| 	 v s6J d S )Nr   z/pre-flight-checks   r   r   )
r   r   r   r   httpxget_api_urlstatus_codejsonrS   )r)   respr   r   r   test_pre_flight_checks   s   

r   皙?ffffff@皙	@333333?Q@r   zhttps://example.com/1zhttps://example.com/2rD   rA   c                 C   6   |    | d}|jdi t | dksJ d S r   )rN   rO   rP   r   r   r)   rV   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   )rN   rO   r   r   raisesr   rP   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   )	rN   rO   rP   r   r   r   r   	Exceptionr   r   r   r   r   test_get_or_create!  s   

r   c                 C   r   r   )rN   rO   rP   minimal_recordsr   r   r   r   r   test_add_minimal8  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   rD   rB   rE   rK   rA   ra   rL   r   )rN   rO   rP   r   r   rS   r8   rT   )r)   rV   rX   recordsrZ   r   r   r   test_get_from_dbB  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   )rN   rO   r   r   r   r   r   r   r   r   r   2test_collection_get_with_invalid_collection_throwsQ     


"r   c                 C   sR   |    | d}|jdi t | dksJ |    t|  dks'J d S )Nr   ra   r   r   )rN   rO   rP   r   r   r8   r   r   r   r   r   test_reset_dbZ  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   rC   r   rG   query_embeddingsrJ   rK   rA   rL   )皙?r         @ra   r   )rN   rO   rP   r   rR   rS   r8   rT   r)   rV   rX   rY   rZ   r   r   r   test_get_nearest_neighborse  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   )	rN   rO   rP   r   r   r   r   r   deleter   r   r   r   test_delete  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   ra   rA   rA   r   )rN   rO   rP   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   ra   r   rG   r   rJ   r   )rN   rO   rP   r   r   rR   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   )rN   rO   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   ra   r   )rN   rO   r   rP   r   r   r   r   r   
test_count  s
   
r   c                 C   r   r   )rN   rO   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r|   )rN   rO   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 )Nr=   r   r   test2r   )rN   rO   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   rN   rO   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)   caplogrV   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 )NrG   ra   )r1   r2   r   r   r1   r2   rb   )r1   cr   r   )rN   rO   r   rQ   r   r   r   r|   )r)   
metadata_arV   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   ra   rC   r   rG   r   rA   rL   r   )	rN   rO   rP   r   r   rR   rS   r8   rT   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   )rN   rO   rQ   r|   r   r   r   r   r   r   r   test_add_a_collection3  s   

"r   c                 C   sP   |    tt}| d W d    n1 sw   Y  |jjd us&J d S )Nr   )rN   r   r   r
   rQ   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   ra   rN   rO   r   r8   r)   r   r   r   r   test_list_collectionsI  s
   

r  c                 C   sX   |    | d | d |  }t|dksJ |    |  }t|dks*J d S )Nr   r   ra   r   r  r  r   r   r   
test_resetS  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   ra   r   rA   rL   rD   rE   rB   r   )
rN   rO   rP   r   r   peekprintrS   r8   rT   )r)   rV   r  rZ   r   r   r   	test_peeka  s   
r  c                 C   r   r   )rN   rO   r   r   r   r   r  r   r   r   r   3test_collection_peek_with_invalid_collection_throwss  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   )rI   )rN   rO   r   r   r   r   rR   r   r   r   r   4test_collection_query_with_invalid_collection_throws|  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@   )rN   rO   r   r   r   r   updater   r   r   r   5test_collection_update_with_invalid_collection_throws  s   

"r  r>   id2rG   onejt?	int_valuestring_valuefloat_valuer  ra   rD   rA   rE   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   rE   r   r  rG   r  r  ra   r   )rN   rO   rP   metadata_recordsr   r   r   floatr)   rV   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   rG   r   rE   r   r  r  r  r   )rN   rO   rP   r  rR   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  whererE   r   r  rG   r   rN   rO   rP   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  rG   r!  rE   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!  rE   r   r  rG   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>   ra   twojt @r  rA   rE   r   rE   r   r  r  r  r   )rN   rO   rP   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   )rN   rO   r   r   
ValueErrorrP   bad_metadata_recordsr   r   r   r   test_metadata_validation_add  s
   
"r1  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   )rN   rO   rP   r  r   r   r/  r  r   r   r   r   test_metadata_validation_update  s   
"r2  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!  )rN   rO   r   r   r/  r   r   r   r   r   test_where_validation_get  s
   
"r4  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 )	Nr3  r"  r   r   r   r   r  r,  r-  )r   r"  )rN   rO   r   r   r/  rR   r   r   r   r   test_where_validation_query  s
   
"r6  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  $ltra   r!  rE   rG   r   rN   rO   rP   operator_recordsr   r8   r  r   r   r   r8    
   
r8  c                 C   r7  )	Ntest_where_lter  z$lteg       @r!  rE   ra   r   r:  r  r   r   r   r=    r<  r=  c                 C   r7  )	Nr=  r  $gtgffffffr!  rE   ra   r   r:  r  r   r   r   test_where_gt#  r<  r?  c                 C   r7  )	Nr=  r  $gter)  r!  rE   rG   r   r:  r  r   r   r   test_where_gte+  r<  rA  c                 C   r7  )	Nr=  r  $ner(  r!  rE   rG   r   r:  r  r   r   r   test_where_ne_string3  r<  rC  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  rB  rG   r!  rE   r  $eqr)  r   r:  r  r   r   r   test_where_ne_eq_number;  s   
rE  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$invalidra   r!  r9  2rG   )r9  r>  $andr>  )r  $orrI  r1   	$containsr=   firstsecondr   )rN   rO   rP   r;  r   r   r/  r   r   r   r   r   rF  E  sV   

$rF  )r   r   r   r   )r   r   r   r   r   r   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   )
rN   rO   rP   r   r   r   r   bad_dimensionality_recordsr   r  r)   rV   er   r   r   "test_dimensionality_validation_add     
rR  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_queryrN  r   )rN   rO   rP   r   r   r   r   rR   bad_dimensionality_queryr   r  rP  r   r   r   rU    rS  rU  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 )NrF  zwhere documentr   r9  z$nestedra   where_documentr5  rJ  )r   rX  textr?   z$not_containsrH  z$unsupporteddocrI  r   )	rN   rO   rP   r;  r   r   r/  r   rR   r   r   r   r   #test_query_document_valid_operators  sL   
$r[  zthis is doc1 and it's great!zdoc2 is also great!)rD   rB   rA   rE   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_documentrJ  doc1rW  rE   rG   greatra   badr   r   )rN   rO   rP   contains_recordsr   r8   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)rG   r   r   rJ  r]  rG   )r   rX  rJ   rE   r   r5  r^  ra   r_  
datapointsr   )rN   rO   rP   r`  rR   r8   r   r   r   r   r  )r)   rV   r  rQ  r   r   r   ra    s"   
"ra  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_documentrJ  r]  rW  rG   r_  r^  r   r   )rN   rO   rP   r`  r   r   r   r   r   r   rc    s   
rc  )g?g      @r   )gffffff?gGz@r   )r>   r  id3id4rZ  )r  r  r  is)r  r  r  rf  rb   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)rD   rA   rE   rB   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_operatorsrH  rI  r  r@  rb   r  r9  gffffff?rf  rZ  r!  rE   rD  r  rg  rh  ri  ra   rG   r(  r  r   rN   rO   rP   logical_operator_recordsr   r8   r  r   r   r   test_where_logical_operators  sV   








rm  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_operatorsrH  rJ  rK  rZ  rW  rE   rG   rI  rL  ra   r  rB  )rX  r"  r   rk  r  r   r   r   %test_where_document_logical_operatorsR  s:   
ro  r5  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rE   rB   rF   r5  rG   r   rK   rJ   rD   rA   r   r>   rE   r  rL   )rD   rB   rF   )rG   ra   r   ra   rB   rF   r  r   )rN   rO   rP   r   rR   rT   r)   rV   rK   r  r   r   r   rr    sB   
rr  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_includerE   rB   r  rG   )rK   r"  rD   rA   r   r>   rp  rL   r   r   rK   r   	undefinedr   )
rN   rO   rP   r   r   rT   r4   r   r   r/  ru  r   r   r   rv    s8   
"rv  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   rs  ra   rt  rB   r   rq  rG   rp  r   rN   rO   rP   r   rR   r  r   r   r   rx    s   
rx  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_idr5  rG   r  IDr   validr   )
rN   rO   r   r   r/  rP   r   r  r   r   rP  r   r   r   rz    s   
rz  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?rG   r   rF   r   rh  r         )r   zhnsw:construction_efzhnsw:Mr|   r   r   ipr   ry  )r)   EPSrV   r  r   r   r   r}    s>   
r}  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 )Nr}  r   foobarr  r   )rN   r   r   r   rO   rP   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   r  r   r>   r?   r@   r,   rC   rG   rH   rA   rL   )
rM   rN   rO   rP   rQ   r   rR   rS   r8   rT   )r)   rU   rV   rW   rX   rY   rZ   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   r5   ir   r   r   r7   P      z"test_add_large.<locals>.<listcomp>r   )rN   rO   rd   randomrandastypefloat32r   rP   rj   r8   r   )r)   rV   large_recordsr   r   r   test_add_largeF  s   
r  c                 C   s,   |    |  }dd l}|d|sJ d S )Nr   z\d+\.\d+\.\d+)rN   get_versionrer   )r)   versionr  r   r   r   test_get_versionW  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_collectionrG   r   r   )rN   rO   rP   r   r8   r   r   r   r   r   r   r  b  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   rf   r   r   r   r7   o  s    z*test_default_embedding.<locals>.<listcomp>@   )r   rj   r8   )r   docsrD   r   r   r   test_default_embeddingm  s   r  c           	      C   s  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}t|d d
ksJ t|d d
ksJ t|d d
 d
ksJ t|d d
 d
ksJ |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   r7   w  r  z-test_multiple_collections.<locals>.<listcomp>c                 S   r  )zhttp://example.com/2/r   r  r   r   r   r7   x  r  coll1r   coll2ra   r   rG   r   rA   )rd   r  r  r  r  r   rj   r8   rN   rO   rP   r   r   rR   )	r)   embeddings1embeddings2ids1ids2r  r  results1results2r   r   r   test_multiple_collectionst  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_queryrA   r   )r   g?g333333?zupdated documentfoobar)rA   rD   rB   rE   rD   rG   r   r   rB   rE   r   )rN   rO   rP   r   r  rR   r8   r;   )r)   rV   updated_recordsresultsr   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   rC   r   r  r   rA   r   ra   rL   r   )rN   rO   rP   r   rR   rS   r8   rT   )r)   rV   rX   r  rZ   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   rC   r   z<Number of requested results -1, cannot be negative, or zero.r  r   r   )rN   rO   rP   r   r   r   	TypeErrorrR   r   r  typer/  )r)   rV   excr   r   r   test_invalid_n_results_param  s.   

r  )g@gQ	@g@)r>   r  rd  r  )rp  rq  zthis document is third)      @r  r   )r   g(\@g@re  
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=   rb   rh  r
  rA   r   )rK   rA   rD   rE   rB   rG   r   ra   r   )r   gGz?gGz@r  za new string value)rA   rD   rE   rd  r   )rN   rO   rP   initial_recordsr   upsertnew_recordsr   r;   rR   r   )r)   rV   
get_resultquery_resultr   r   r   test_upsert  sJ   
  

r  c                 C   r   r   )rN   rO   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  rG   r   r   r   r   r   r   r   r   )rN   rO   r   r   r/  rP   r   r  rR   r  r  )r)   rV   invalid_recordsrQ  r   r   r   r  3  s<   
r  c                 C   rT  )N$test_dimensionality_update_exceptionrN  r   )rN   rO   rP   r   r   r   r   r  rO  r   r  rP  r   r   r   $test_dimensionality_exception_update^  rS  r  c                 C   rT  )N$test_dimensionality_upsert_exceptionrN  r   )rN   rO   rP   r   r   r   r   r  rO  r   r  rP  r   r   r   $test_dimensionality_exception_upsertk  rS  r  win32)reruns	conditionc                 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_signedv  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  _portrQ  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_smallr   r  c                 S      g | ]}| qS r   r   r  r   r   r   r7         z9test_query_id_filtering_small_dataset.<locals>.<listcomp>r   c                 S   r  r   r   r  r   r   r   r7     r  r   r   r   rA   rJ   rK   c                 S      g | ]	}|D ]}|qqS r   r   r5   sublistitemr   r   r   r7     rh   rA   c                 3       | ]}| v V  qd S r   r   r5   id	query_idsr   r   	<genexpr>      z8test_query_id_filtering_small_dataset.<locals>.<genexpr>rN   rO   rd   r  r  r  r  r   rj   rP   rR   r9   )	r)   rV   num_vectorsdimsmall_recordsrA   query_embeddingr  all_returned_idsr   r  r   %test_query_id_filtering_small_dataset  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   r7     r  z:test_query_id_filtering_medium_dataset.<locals>.<listcomp>r   c                 S   r  r   r   r  r   r   r   r7     r  r   r   r  c                 S   r  r   r   r  r   r   r   r7     rh   rA   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   )rd   r  r  r  r  r   rf   )r  r   r   r7     s    rb   c                 3   r  r   r   r  r  r   r   r    r  r  )r)   rV   r  medium_recordsrA   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  r   c                 S   r  r   r   r  r   r   r   r7     r  z/test_query_id_filtering_e2e.<locals>.<listcomp>c                 S   s   g | ]}d |iqS )indexr   r  r   r   r   r7     s    r  c                 S   r  r   r   r  r   r   r   r7     r  r      r   c                 S   r  r   r   r  r   r   r   r7     r  2   r~  c                 S   r  r   r   r  r   r   r   r7     r  c                 S   s   g | ]}|d dqS )T)r  upsertedr   r  r   r   r   r7     s    
c                 S   r  r   r   r  r   r   r   r7     r  r  c                 S   r  r   r   r  r   r   r   r7     r  #   -   c                 S   r  r   r   r  r   r   r   r7     s       rE   r  c                 S   r  r   r   r  r   r   r   r7   	  rh   rA   c                 3   r  r   r   r  valid_query_idsr   r   r  
  r  z.test_query_id_filtering_e2e.<locals>.<genexpr>r  r   rG   zError finding id)rN   rO   rd   r  r  r  r  r   rj   rP   r   r8   r  rR   r9   	enumerater   r   r   r   r  )r)   rV   r  r  rD   rA   rE   ids_to_deleteids_to_upsert_existingnew_num_vectorsids_to_upsert_newupsert_embeddingsupsert_metadatasrX   r  r  r  result_indexid_list
item_indexitem_idupserted_id
deleted_idr  r   r  r   r    s   

r  )r-   )r#   r&   sysr   r  r   r   typingr   r   numpyrd   r   r    chromadb.server.fastapichromadb.api.fastapir   chromadb.api.typesr   r   r   chromadb.configr	   chromadb.errorsr
   r   r   "chromadb.utils.embedding_functionsr   fixturer   r*   r,   boolr4   r  r;   markparametrizer[   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  r1  r2  r4  r6  r;  r8  r=  r?  rA  rC  rE  rF  rO  rV  bad_number_of_results_queryrR  rU  r[  r`  r\  ra  rc  rl  rm  ro  r   rr  rv  rx  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  flakyplatform
startswithr  r  r  r  r  r   r   r   r   <module>   s  




(
.
	

	
	.
				
	1	
		







1

-

8*
'%'


.+

)