o
    g                     @   sh  U d dl Zd dlZd dlm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mZmZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZ d dl m!Z! d d	l"m#Z# d dl$m%  m&  mZ d d
l m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3m%  m&  m4Z4 d dl5m6Z6m7Z7m8Z8 d dl9Z:d dl;Z;d dl<m=Z=m>Z> e2dd a?ee@eAf eBd< de@ddfddZCd^ddZDejEeFejGddZHejIee:jJe:jKe:jLf  eBd< ejEejMdddddZNejIeA eBd< eG dd  d ZOejEej1d!d"d#dZPG d$d% d%e(ZQG d&d' d'eQZRd(ejSd)e!ddfd*d+ZTd)e!ddfd,d-ZUd)e!ddfd.d/ZVd(ejSd)e!ddfd0d1ZWd)e!ddfd2d3ZXd)e!ddfd4d5ZYd)e!ddfd6d7ZZd)e!ddfd8d9Z[d)e!ddfd:d;Z\ej]j^d<d=d)e!ddfd>d?Z_d)e!ddfd@dAZ`ej]adBdCdDgidEdDdFiidGdHdFiidDgdDdFidIdDgdHdFidJdDgdDdFidHdFidKgd)e!dBeddfdLdMZbeeFe:jKe:jce:jdeAeegdNdOee ddfdPdQZfeeFe:jKe:jce:jdeAeegdNdOee ddfdRdSZgeeFe@ehgdTdUee ddfdVdWZid^dXdYZjd)e!ddfdZd[Zkd)e!ddfd\d]ZldS )_    N)	overrides)givensettingsHealthCheck)DictSetcastUnionDefaultDictAnyList)	dataclass)ID
EmbeddingsIncludeIDsvalidate_embeddingsnormalize_embeddings)System)	ClientAPI)
Collection)
BundleRuleBasedStateMachineMultipleResultsrule
initializepreconditionconsumesrun_state_machine_as_testmultiple	invariant)defaultdict)is_client_in_processresetNOT_CLUSTER_ONLY)wait_for_version_increaseget_collection_versionc                   C   s   dS Nr    r(   r(   r(   ]/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/test/property/test_embeddings.py<lambda>/   s    r*   traceskeyreturnc                 C   s   t |   d7  < d S )N   )r+   r,   r(   r(   r)   trace2      r0   c                  C   s(   t  D ]\} }t|  d|  qd S )Nz: )r+   itemsprint)r,   valuer(   r(   r)   print_traces7   s   r5   dtyper/   dtype_shared_st   i   )	min_value	max_value	dimensiondimension_shared_stc                   @   s    e Zd ZdZdZdZdZdZdS )EmbeddingStateMachineStatesr   add_embeddingsdelete_by_idsupdate_embeddingsupsert_embeddingsN)__name__
__module____qualname__r   r>   r?   r@   rA   r(   r(   r(   r)   r=   F   s    r=   T)with_hnsw_paramscollc                       s  e Zd ZU eed< edZee ed< dZde	f fddZ
eeddejfdd	Zed7ddZeeeeddejd
ee fddZeejeedddded
dfddZedd eejeedddddejd
dfddZedd eejeeeejdddddejd
dfd d!Ze d7d"d#Z e d7d$d%Z!e d7d&d'Z"e d7d(d)Z#ed*d e d7d+d,Z$d
e%fd-d.Z&dejd
dfd/d0Z'd1e(e) d
dfd2d3Z*d4e+d
dfd5d6Z,  Z-S )8EmbeddingStateMachineBase
collectionembedding_idsFclientc                    s"   t    || _tj| | _d S N)super__init__rJ   
hypothesisstatefulRuleStrategy_rules_strategyselfrJ   	__class__r(   r)   rM   W   s   
z"EmbeddingStateMachineBase.__init__rH   c                 C   sN   | j j|j|j|jd| _|j| _td | tj	 t
jg g g g d| _d S )N)namemetadataembedding_functioninitids	metadatas	documents
embeddings)rJ   create_collectionrW   rX   rY   rH   r0   on_state_changer=   r   
strategiesStateMachineRecordSetrecord_set_staterS   rH   r(   r(   r)   r   \   s   z$EmbeddingStateMachineBase.initializer-   Nc                 C   s   | j | jj d S rK   )rJ   delete_collectionrH   rW   rS   r(   r(   r)   teardownk   r1   z"EmbeddingStateMachineBase.teardowntarget
record_setrk   c                    sL  t d | tj t| t d dkrt d t d | j	d }t|dkrt
t d |} fdd|D } fdd|D  d rV fd	d|D nd  d
 rd fdd|D nd  d rr fdd|D nd d}| jjdi   | ttj| t|d  S | jjdi   | ttj  t d  S )Nr>   r\   r   add_more_embeddingsc                    s   g | ]	} d   |qS r\   )index.0idnormalized_record_setr(   r)   
<listcomp>   s    z<EmbeddingStateMachineBase.add_embeddings.<locals>.<listcomp>c                       g | ]} d  | qS rm   r(   rp   irr   r(   r)   rt          r]   c                    ru   )r]   r(   rv   rr   r(   r)   rt      rx   r^   c                    ru   )r^   r(   rv   rr   r(   r)   rt      rx   r_   c                    ru   )r_   r(   rv   rr   r(   r)   rt      rx   r[   r(   )r0   ra   r=   r>   
invariantswrap_alllensetintersectionrd   list
differencerH   add_upsert_embeddingsr   rb   	RecordSetr   )rS   rk   r}   new_idsindicesfiltered_record_setr(   rr   r)   r>   o   s<   z(EmbeddingStateMachineBase.add_embeddingsr.   min_sizerm   r\   c                    sF   t d  tj  fdd|D } jj|d  t| d S )Nzremove embeddingsc                    s   g | ]
} j d  |qS rm   )rd   rn   ro   rg   r(   r)   rt      s    z;EmbeddingStateMachineBase.delete_by_ids.<locals>.<listcomp>rm   )r0   ra   r=   r?   rH   delete_remove_embeddingsr|   )rS   r\   indices_to_remover(   rg   r)   r?      s
   z'EmbeddingStateMachineBase.delete_by_idsc                 C      t | jd dkS Nr\      r{   rd   rg   r(   r(   r)   r*          z"EmbeddingStateMachineBase.<lambda>r   collection_strategyid_strategyr   max_sizerk   c                 C   4   t d | tj | jjdi | | | d S )Nzupdate embeddingsr(   )r0   ra   r=   r@   rH   updater   rS   rk   r(   r(   r)   r@         
z+EmbeddingStateMachineBase.update_embeddingsc                 C   r   Nr\      r   rg   r(   r(   r)   r*      r   c                 C   r   )Nzupsert embeddingsr(   )r0   ra   r=   rA   rH   upsertr   r   r(   r(   r)   rA      r   z+EmbeddingStateMachineBase.upsert_embeddingsc                 C   s   t | jttj| j d S rK   )ry   countrH   r   rb   r   rd   rg   r(   r(   r)   r      s   zEmbeddingStateMachineBase.countc                 C   s   t | j d S rK   )ry   no_duplicatesrH   rg   r(   r(   r)   r      s   z'EmbeddingStateMachineBase.no_duplicatesc                 C   s$   t j| jttj| jd| jd d S )Ngffffff?)rH   rk   
min_recallrY   )ry   ann_accuracyrH   r   rb   r   rd   rY   rg   r(   r(   r)   r      s   
z&EmbeddingStateMachineBase.ann_accuracyc                 C   sZ   |   r| j dksJ d S ttj| j}t| j| t	| j| t
| j| d S r'   )_is_state_emptyrH   r   r   rb   r   rd   ry   embeddings_matchmetadatas_matchdocuments_match)rS   rd   r(   r(   r)   fields_match   s   z&EmbeddingStateMachineBase.fields_matchc                 C   s
   t | jS rK   )r"   rJ   rg   r(   r(   r)   r*      s   
 c                 C   s    | j j}t|| jg| j d S rK   )rJ   _systemry   log_size_below_maxrH   has_collection_mutated)rS   systemr(   r(   r)   r      s   z,EmbeddingStateMachineBase.log_size_below_maxc                 C   s   | j  D ]}|r dS qdS )NFT)rd   values)rS   fieldr(   r(   r)   r      s
   z)EmbeddingStateMachineBase._is_state_emptyc                 C   s.  t |}t|d D ]\}}|| jd v r| jd |}|d d ur1|d | | jd |< n |d d us9J | jd us@J | |d | gd | jd |< |d d ur| jd | }|d urtttt	tt
tf f |}|d | d ur||d |  n	 n|d | | jd |< |d d ur|d | | jd |< q| jd | |d d ur| jd |d |  n!| jd usJ |d d usJ | jd | |d | gd  |d d ur| jd |d |  n| jd d  |d d ur| jd |d |  q| jd d  qd S )Nr\   r_   r^   r   r]   )ry   rz   	enumeraterd   rn   rY   r   r   strr	   intfloatr   append)rS   rk   rs   idxrq   
target_idxrd   r(   r(   r)   r      s   










z,EmbeddingStateMachineBase._upsert_embeddingsr   c                 C   sR   t |}|jdd |D ]}| jd |= | jd |= | jd |= | jd |= qd S )NT)reverser\   r_   r]   r^   )r~   sortrd   )rS   r   indices_listrw   r(   r(   r)   r   ?  s   z,EmbeddingStateMachineBase._remove_embeddings	new_statec                 C   s   |t jkr
d| _d S d S )NT)r=   r   r   )rS   r   r(   r(   r)   ra   I  s   

z)EmbeddingStateMachineBase.on_state_changer-   N).rB   rC   rD   r   __annotations__r   rI   r   r   r   rM   r   collection_strb   r   rh   r   
recordsetsr   r   r>   stlistsr   r   r?   r   r@   one_of	safe_textrA   r    r   r   r   r   r   boolr   r   r   r   r   r   ra   __classcell__r(   r(   rT   r)   rG   R   sj   
 '


I
rG   c                       sP  e Zd ZU edZee ed< def fddZe	e
ddejf fddZ	ed	d
 e d"ddZeeee
ddejdee f fddZeejeeddddeddf fddZedd
 eeje
edddddejddf fddZedd
 eeje
eeejdddddejddf fd d!Z  ZS )#EmbeddingStateMachinerI   rJ   c                    s   t  | d S rK   )rL   rM   rR   rT   r(   r)   rM   Q  s   zEmbeddingStateMachine.__init__rV   rH   c                    sF   t  | td| jjd d|j d| _t | _| j	 d | _
d S )Nz7[test_embeddings][initialize] Initialize collection id rq   z$ hypothesis generated collection id r   version)rL   r   r3   rH   _modelrq   log_operation_countr|   unique_ids_in_log	get_modelcollection_versionre   rT   r(   r)   r   T  s   
z EmbeddingStateMachine.initializec                 C   s   t  o| jdkot| jdkS )N
   r   )r$   r   r{   r   rg   r(   r(   r)   r*   b  s    zEmbeddingStateMachine.<lambda>r-   Nc                 C   s   t | j| jj}|| jksJ || jkr$td || _d| _t | _d S td| t	| j| jj|dd}d| _t | _|| _d S )NzT[test_embeddings][wait_for_compaction] collection version has changed, so reset to 0r   zY[test_embeddings][wait_for_compaction] wait for version to increase from current version    )additional_time)
r&   rJ   rH   rW   r   r3   r   r|   r   r%   )rS   current_versionnew_versionr(   r(   r)   wait_for_compactiona  s&   

z)EmbeddingStateMachine.wait_for_compactionri   rk   c                    sn   t  |}t|}td|d dt|d  |  jt|d 7  _|d D ]}|| jvr4| j| q'|S )Nz,[test_embeddings][add] Non Intersection ids r\    len )	rL   r>   ry   rz   r3   r{   r   r   r   )rS   rk   resrs   rq   rT   r(   r)   r>     s    

z$EmbeddingStateMachine.add_embeddingsr.   r   rm   r\   c                    sT   t  | td|dt| |  jt|7  _|D ]}|| jv r'| j| qd S )Nz[test_embeddings][delete] ids r   )rL   r?   r3   r{   r   r   remove)rS   r\   rq   rT   r(   r)   r?     s   
z#EmbeddingStateMachine.delete_by_idsc                 C   r   r   r   rg   r(   r(   r)   r*     r   r   r   r   c              	      sL   t  | td|d dtt|d  |  jtt|d 7  _d S )Nz[test_embeddings][update] ids r\   r   )rL   r@   r3   r{   ry   wrapr   r   rT   r(   r)   r@     s   
 z'EmbeddingStateMachine.update_embeddingsc                 C   r   r   r   rg   r(   r(   r)   r*     r   c              	      sv   t  | td|d dtt|d  |  jtt|d 7  _t|d D ]}|| jvr8| j| q+d S )Nz[test_embeddings][upsert] ids r\   r   )	rL   rA   r3   r{   ry   r   r   r   r   )rS   rk   rq   rT   r(   r)   rA     s   

z'EmbeddingStateMachine.upsert_embeddingsr   )rB   rC   rD   r   rI   r   r   r   rM   r   r   rb   r   r   r   r   r   r   r   r>   r   r   r   r   r?   r@   r   r   rA   r   r(   r(   rT   r)   r   N  sJ   
 


$r   caplogrJ   c                    s6   |  tj t fddtdtjgdd t  d S )Nc                      s   t  S rK   )r   r(   rJ   r(   r)   r*     s    z'test_embeddings_state.<locals>.<lambda>i_ )deadlinesuppress_health_check)r   )	set_levelloggingERRORr   r   r   filter_too_muchr5   )r   rJ   r(   r   r)   test_embeddings_state  s   

r   c                 C   s  t | }|jtjdddddd t dtji g ddd
d |  |	  |
  |  |jg d	d
dgddgddgddgddgddggg dd dd\}}}}}}|  |	  |
  |  |j|||||gd tsv|  |  |	  |
  |  |  d S )NA00   hnsw:construction_efhnsw:search_efhnsw:Mr8   FT
rW   rX   rY   rq   r;   r6   known_metadata_keysknown_document_keywordshas_documentshas_embeddingsrV   )012345      ?     ?     P?     ?     ÿ     ?          ?     ?     Ϳ)NNNNNNr\   r_   r]   r^   r   rm   )r   r   rb   r   uuiduuid4npfloat16r   r   r   r   r>   r?   r$   r   rh   )rJ   statev1v2v3v4v5v6r(   r(   r)   test_add_then_delete_n_minus_1  s^   r  c                 C   sb  t | }|jtjddddddddddd td	d
tji g ddd
d |  |	  |
  |  |jg ddgd
 dgd
 dgd
 dgd
 dgd
 dgd
 gddddddddd dddddddddddddd dd!d"d#
d$d%d&d'd(d)d*dd+dd,
gd d-d.\}}}}}}|  |	  |
  |  |jd/dgd
 gd d d-d.\}|  |	  |
  |  |jd0d1gdgd
 dgd
 gd d2dd3dd4gd d-d.\}	}
|  |	  |
  |  |jg d5dgd
 dgd
 dgd
 gd6d7d8d9d:d;d<dd=d>d?id@ddAdBdddCdDdddEdFgd d-d. |  |	  |
  |  |jdGdHdI||	gdgd
 dgd
 dgd
 dgd
 dgd
 gdJdKddLdMdNdOdPdQdNdRdSdTdUddVdWdXdYdZddd[d\d gd d-d. |  |	  |
  |  |j|||
||gdgd
 dgd
 dgd
 dgd
 dgd
 gi d]dd^d_d`ddaddbdcdddedfddgdhdiddjddedkdldmdnddodpdqddrdsdtduddvdwdxdyd dzd{dd|d}dNd~dddddddd*d7ddgd d-d. |  |	  |
  |  |j|||
|gdgd
 dgd
 dgd
 dgd
 gddddd|dddddiddidNddddddSddgd d-d. |  |	  |
  |  |j|gdgd
 gddlddddddd d-d. |  |	  |
  |  |jg ddgd
 dgd
 dgd
 dgd
 gdddddddiddhdddigd d-d.\}}}}|  |	  |
  |  |jddd|gdgd
 dgd
 dgd
 dgd
 gddid(dpdddddd7dddkddddddd
djdigd d-d. |  |	  |
  |  |j||gdgd
 dgd
 gi ddddddddddddddddNddddhddddd|ddddCdddddēddddddddddʜ	ddddddkd͜gd d-d. |  |	  |
  |  |j|gdgd
 gd d d-d. |  |	  |
  |  |j|||||gdgd
 dgd
 dgd
 dgd
 dgd
 gddidddќd dddddddd؜ddddddddޜgd d-d. |  |	  |
  |  |j||	dd|gdgd
 dgd
 dgd
 dgd
 dgd
 gd ddddddddddddkdddddddddddddddgd d-d. |  |	  |
  |  |  d S )NzfOIBy
FHtmYRTipiU5KdoaYsUQ_EWStV4r   )z-7n92WhVE_zJ-sW
wPGA8hY7uX4rAr   r   r   z$ff006990-82c3-494b-97d5-cbb05092c861i  Tr   rV   )kgaT4dzC2h2YoNSgUqRyE-Tmxf3MTzODI-yOtbvCr   i{5DkqA9o6           g   `UUտVT)szd1wQJV-9hWf7gwQrbyHgPe0r6qQ5XYxeqPzXpiqBi|E)hqTZ6Ok767eCSwyvGEuig8aTRGxN1h8Ii)ATRsKF0Piig      vReDiig      <)
PcFwuPSWCgxEQtupcOfhueUzI4tOMfHM7uU58tW_muctZfSvOyiuDCOcywKhsii;[g      p>-g    .i)
iuTAKznMg6IdUKxaPioyzc0Zb3VTUktBu-uW6innbsomMXnpsEEEFul8JRjHi7lrYr   r   uaK_yFsHiO5g      )
RiaaN9MNpqg9WxuexOHh2)SCeelWyLAWG_oHalYr   iObg   >   ii     g    >A)0ZbYq40POT9sTxkMz-jrqsBEfrELJctJoVeLqtsPZp5M4XFtiilyDy6q7LZUWzKuQG8m-Ti  xGwkig   ;*A)fPAPtmtxKb6CG18Vr  zc-G92nYTTBWs31rbM_L_PQDSCuxOGzFeGgh7cuT_ruA3mnzO3m3-X1ZNt2PF6M5_qIj0Yh6iKiM  34oWsr93EUl    ~.Ag   Xc80eze-QXuDdnxYMd)2fDAuv74Etz5hqGH60G-yZ6PWyM1BOkMjjGyTkwZvpmS5HbTAIbvqzPhLgg   `ff?)WKyGNZphPCKay88gsh3x_iJDcig)z_zVO2i-NtWHxoltu_E_fg9yGpikZnQ3ALwA2   iL)otM8EGeKm
skf71O0UKTzS8Kc8-l95Rpc4bGz1QmzbKVySN1yrXFl56CmDS08FhBFXAIAWx4dcB5i8w8mwQ5c7G9g2JVYzVQGb_r-hzoAg    M0lMigFg   ?dRDugrcoZv45Bg   @  zUG-sSVcri4cT1GidIii
xM0jUV4U2rmsuFYMwj_SXc)FqFWR__r   vwo4WERBljY3aWjWnqLWFib@iHr   )mf4UtV_NVCw   )VWuP7uF8r   g      iL   )a1ML_Zl2Ir85KolESaXiJvAO8orMSr   5AeE2q	6T9tEEC84i  )YxlGe5GMXUvsAljL5V5ELRv	yeLTrhAIq      ?iP      rL  Rii&  ip )pzHn2YfdftMEd0C5ekByb7mhdbLJCViuLT5YOoVwEvq8Wf6iŭebEKOxi	g   uA)C1KbOOlKkzzLo9CGU2NHMfpu77F70Iclz	dz6fI-GppqVVWQrcq645F)F7Rig1RXiz_nC8-ii  g   @̼+A)FBtaPcQWV24vddLq1My3mbUL9IfIHLxuosTATUP1)AhCwm9AwPKim}4GJrAunf5
J8O0R8VGaYnK67gg    .Ag   `\A)K2cCgoObAcpaxafzpxnRCSPJUF4JZ2sKOIRDcznBaQ6F1O38etVMhss2angu-g   g    #
AiSNcMrT   )
UwbDWM2_r   nfoovt
elaMLbhEvWr   UOr|  3ssGS4rSKXsKqRPFTBGrRPPsuGwVtTwei_qscyRBC_TPIXd	N0FG7Nta1g   >&woDB   IV0L3xImGgz9N--JBl0uH_au_KVmhtcAqrNfL6taIVpCXJXl
8YaEynJznBiONg   $AebBi  g   
@	cRl59jW_Og    ~.g      8g   @w)	fJz
QK8l3l4yP-r   z	-XP899RRnA9UlxNwmcG1NoCdWRn5cD	HExeVM0iMiSh)zAbCKkEvE4shnFNUc9vXWYz-iRt88MxYq)55m28krQsTFdqMhYjhFiHg      ?VG7E7xmio#  1xXUHLklmIVSVgQd7EHUCu5wakl6)9SnviLf
Y0Jw4pLTwrv3E
Fx3jsbcdqyHz-USisBi
xtLNrNyRo2g    ),)r#  Qfm_6duLSh0LkduZt5qsRJrF8DMMZr;  7OiaiD4eKi٨ii])tVsBzTRzbq6VslBBo2_12hgyKNPddxify34-np-F7FcZpODwCTHg91o4mKTjBL1Zjfyslg3z_TG-YhAQQ)1qrTKV8tLuQHsxarv  UepiV6K_g    YR)prRUDZ_uRfFG6cZvICaGczunTbxz0qd2-AV1iC9OePgaBYi%D)EXXVBZUtJMO4oF8g8nr   hv3i)r   r   rb   r   r   UUIDr   r   r   r   r   r   r>   rA   r@   rh   )rJ   r   embedding_ids_0embedding_ids_1embedding_ids_2embedding_ids_3embedding_ids_4embedding_ids_5embedding_ids_6embedding_ids_7embedding_ids_8embedding_ids_9embedding_ids_10embedding_ids_11embedding_ids_12r(   r(   r)   test_embeddings_flake1  s  

2
 #



*
*	

 
'




"
"


	
 
$

*
*
r%  c                 C   s   t |}|jtjdddddd tddtji g ddd
d	 |  |	  |
  |  |jg d
ddgddgddgddgddggg dd dd\}}}}}|  |	  |
  |  |j|gddgg||igd dd |  |  d S )Nr   r   r   z$2fb0c945-b877-42ab-9417-bfe0f6b172afr8   FTr   rV   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )NNNNNr   r   g     ?g     ?)r   r   rb   r   r   r  r   r   r   r   r   r   r>   r@   rh   )r   rJ   r   r   r   r   r   r   r(   r(   r)   test_update_none  s^   r&  c                 C   s  t | }|jtjdi dddddddd	d
dddddddddddddddddddddddd tddtji g ddd
d  |  |	  |
  |  |jg d!g d"g d#g d$g d%g d&g d'gd d d(d)}d*}i }|D ]
}|||< |d+7 }q|  |	  |
  |  |j|d* |d, d-|d. d/gg d0g d1g d2g d3g d4gd d d5d) |  |	  |
  |  ts|  |  |	  |
  |  |jd6|d* |d, gg d7g d8g d9gd d d(d) |  |	  |
  |  |j|d: |d+ |d. |d, |d gd; |  |	  |
  |  |jd<d=d>d?|d+ gg d@g dAg dBg dCg dDgd d d5d)}dE}|D ]}|||< |d+7 }q[|  |	  |
  ts||  d S d S )FNKR3cfUfmxsi3rU  bMMvvrqM4MKmp5CJB8Ai  r)  T37PNiVkn5KZfkpod3ND5soL_KA4zcZL9lRN9   Oc8G7ysXmE8lp4Hos_POQe8Unz1uJBI930U   teFtyMr  R0ZiZr  IOwir   r   r   r   z$284b6e99-b19e-49b2-96a4-a2a93a95447dr   r   rV   )255r  z3-rw   Nk9yPvT)g333333?gffffff@r  )      @      @r8   )r.   r8   r   )   r      )g!@g      "@   )r:  r;  ffffff@r   r   r   r.   r<  KWcDaHUVD6MxEiJr   PdlP1d6w)r.      r<  )r   r   	   )rC  r   r   )r   rC     )r.   r   r<  )r\   r_   r^   r]   TpjiboLSuYWBJDbRW1zeNmC)r<  r=  r>  )r>  rC  r   )r.   r   r=  r8   rm   oD3V84RtTDwlc9C8_evn)rC  g@g(\	@)gHzG?gQ@gp=
ף@)g#@g#@g?)gffffff#@r?  r:  )g333333@r?  gL#@r=  )r   r   rb   r   r   r  r   float32r   r   r   r   r>   rA   r$   r   r?   )rJ   r   r_   rw   emb_list	embeddingr(   r(   r)   test_add_delete_add  s  	

  rM  c                 C   s   t |  | jdd}|jdgdggd | dksJ |jdgdggd | dks.J | }|d dgks;J |jdgd | d	ksJJ d S )
NfoorW   ar  r\   r_   r.   r\   rm   r   )r#   r`   r   r   getr   )rJ   rF   resultsr(   r(   r)   test_multi_addC  s   rT  c                 C   s   t |  | jdd}ttj |jddgdgdggd W d    n1 s(w   Y  ttj |jddgdgdggd W d    d S 1 sLw   Y  d S )NrN  rO  rP  r  g?rQ  )r#   r`   pytestraiseserrorsDuplicateIDErrorr   r   rJ   rF   r(   r(   r)   test_dup_addV  s   "rZ  c                 C   s   t |  | jdd}g d}tjdd}tjdd}|jtj||f |d}|D ]}|| }|d us9J tdd	 |D sDJ q-d S )
NrN  rO  )r^   r]   r_   	distancesr.   i  d   )query_embeddingsincludec                 S   s   g | ]}t |d kqS )r   )r{   )rp   resultr(   r(   r)   rt   k  rx   z*test_query_without_add.<locals>.<listcomp>)r#   r`   r   randomrandintquerytolistall)rJ   rF   fieldsr  r  rS  r   field_resultsr(   r(   r)   test_query_without_add_  s   rg  c                 C   s|   t |  | jdd}|jdgg dd}t|d dksJ t|d dks(J t|d	 dks2J t|d
 dks<J d S )NrN  rO  rP  )r^   r]   r_   )r\   r^  r\   r   r]   r^   r_   )r#   r`   rR  r{   )rJ   rF   r_  r(   r(   r)   test_get_non_existentn  s   rh  z9We don't properly escape SQL internally, causing problems)reasonc                 C   s^   t |  d}| jdd}|j|gdggd | dksJ |j|gd | dks-J d S )	NrN  rO  r  rQ  r.   rm   r   )r#   r`   r   r   r   )rJ   rq   rF   r(   r(   r)   test_escape_chars_in_idsy  s   rk  c                 C   sL   t |  | jdd}tt |  W d    d S 1 sw   Y  d S )NrN  rO  )r#   r`   rU  rV  
ValueErrorr   rY  r(   r(   r)   test_delete_empty_fails  s
   
"rm  kwargsr\   rN  wherebarwhere_documentz	$contains)r\   ro  )r\   rq  )r\   ro  rq  c                 C   s(   t |  | jdd}|jdi | d S )NrN  rO  r(   )r#   r`   r   )rJ   rn  rF   r(   r(   r)   test_delete_success  s   rr  )supported_typesrs  c                 C   :   t dd| }tttt|}tdd |D sJ d S )Nr   c                 S   H   g | ] }t |tjo!|jtjkp!|jtjkp!|jtjkp!|jtjkqS r(   
isinstancer   ndarrayr6   rJ  float64int32int64rp   r4   r(   r(   r)   rt         


zMtest_autocasting_validate_embeddings_for_compatible_types.<locals>.<listcomp>)rb   create_embeddingsr   r   r   r   rd  rs  embdsvalidated_embeddingsr(   r(   r)   9test_autocasting_validate_embeddings_for_compatible_types  s   r  c                 C   rt  )Nr   c                 S   ru  r(   rv  r|  r(   r(   r)   rt     r}  zEtest_autocasting_validate_embeddings_with_ndarray.<locals>.<listcomp>)rb   create_embeddings_ndarrayr   r   r   r   rd  r  r(   r(   r)   1test_autocasting_validate_embeddings_with_ndarray  s   r  )unsupported_typesr  c                 C   s`   t dd| }tt}tttt| W d    n1 s w   Y  dt	|j
v s.J d S )Nr   zsExpected embeddings to be a list of floats or ints, a list of lists, a numpy array, or a list of numpy arrays, got )rb   r~  rU  rV  rl  r   r   r   r   r   r4   )r  r  r"  r(   r(   r)   7test_autocasting_validate_embeddings_incompatible_types  s   r  c                  C   sR   t g g} tt}t|  W d    n1 sw   Y  dt|v s'J d S )NzExpected each embedding in the embeddings to be a 1-dimensional numpy array with at least 1 int/float value. Got a 1-dimensional numpy array with no values at pos)r   arrayrU  rV  rl  r   r   )r  r"  r(   r(   r)   test_0dim_embedding_validation  s   
r  c                 C   sj   t |  | jdd}tdddD ]}|jdd t||d D d qts3t| |jt| |jd	 d S d S )
NnooprO  r     r\  c                 S      g | ]}t |qS r(   r   rv   r(   r(   r)   rt         z)test_no_op_compaction.<locals>.<listcomp>rm   r   )r#   r`   ranger   r$   r%   rW   r&   )rJ   rF   batchr(   r(   r)   test_no_op_compaction  s   "r  c                 C   s  t |  d}d}| jdd}td||D ]!}dd t||| D }dd |D }|j|d	d |D d
 qtsDt| |jt| |jd td||D ]}dd t||| D }dd |D }|j|d qJtstt| |jt| |jd t	|
 d dksJ d S )Nr  r\  add_then_purgerO  r   c                 S      g | ]}|qS r(   r(   rv   r(   r(   r)   rt         z'test_add_then_purge.<locals>.<listcomp>c                 S   r  r(   r  rv   r(   r(   r)   rt     r  c                 S   s    g | ]}d | d | d gqS )r8   r.   r(   rv   r(   r(   r)   rt     s     rQ  r   c                 S   r  r(   r(   rv   r(   r(   r)   rt     r  c                 S   r  r(   r  rv   r(   r(   r)   rt      r  rm   r\   )r#   r`   r  r   r$   r%   rW   r&   r   r{   rR  )rJ   record_countbatch_countrF   r  record_id_vals
record_idsr(   r(   r)   test_add_then_purge  s"   r  r   )mhypothesis.statefulrN   hypothesis.strategiesr   rU  r   rb   r   r   r   r   typingr   r   r   r	   r
   r   r   dataclassesr   chromadb.api.typesr   r   r   r   r   r   chromadb.configr   chromadb.errorsrW  chromadb.apir   chromadb.api.models.Collectionr   !chromadb.test.property.strategiestestpropertyr   r   r   r   r   r   r   r   r   r    collectionsr!   !chromadb.test.property.invariantsry   chromadb.test.conftestr"   r#   r$   numpyr   r   -chromadb.test.utils.wait_for_version_increaser%   r&   r+   r   r   r   r0   r5   sharedsampled_fromfloat_typesr7   SearchStrategyr   rJ  ry  integersr<   r=   r   rG   r   LogCaptureFixturer   r  r%  r&  rM  rT  rZ  rg  rh  markxfailrk  rm  parametrizerr  rz  r{  r   r  r  r   r  r  r  r  r(   r(   r(   r)   <module>   s   
 $ 0
 }~5   6 	



	