o
    3Ih                     @   s~  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ZCde@ddfddZDdaddZEejFeGejHddZIejJee:jKe:jLe:jMf  eBd< ejFejNdddddZOejJeA eBd< eG d d! d!ZPejFej1d"d#d$dZQG d%d& d&e(ZRG d'd( d(eRZSd)ejTd*e!ddfd+d,ZUd*e!ddfd-d.ZVd*e!ddfd/d0ZWd)ejTd*e!ddfd1d2ZXd*e!ddfd3d4ZYd*e!ddfd5d6ZZd*e!ddfd7d8Z[d*e!ddfd9d: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dAdBZaej^bdCdDdEgidFdEdGiidHdIdGiidEgdEdGidJdEgdIdGidKdEgdEdGidIdGidLgd*e!dCeddfdMdNZceeGe:jLe:jde:jeeAefgdOdPee ddfdQdRZgeeGe:jLe:jde:jeeAefgdOdPee ddfdSdTZheeGe@eigdUdVee ddfdWdXZjdadYdZZkd*e!ddfd[d\Zld*e!ddfd]d^Zmd*e!ddfd_d`ZndS )b    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(   f/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/chromadb/test/property/test_embeddings.py<lambda>/   s    r*   tracesi,  keyreturnc                 C   s   t |   d7  < d S )N   )r+   r,   r(   r(   r)   trace5      r0   c                  C   s(   t  D ]\} }t|  d|  qd S )Nz: )r+   itemsprint)r,   valuer(   r(   r)   print_traces:   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=   I   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   Z   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)   teardownn   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>   r   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          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   B  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   L  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   U   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   T  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   W  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*   e  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|t
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%   VERSION_INCREASE_WAIT_TIME)rS   current_versionnew_versionr(   r(   r)   wait_for_compactiond  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   Q  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sz|  |	  |
  |  |  |  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   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   sj  |    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 )NfOIByF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      rN  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QHsxarx  UepiV6K_g    YR)prRUDZ_uRfFG6cZvICaGczunTbxz0qd2-AV1iC9OePgaBYi%D)EXXVBZUtJMO4oF8g8nr   hv3i)r#   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  

	*9
	

!*'*	

&3
"
	"
"		
&-
*
$*
")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   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Ufmxsi3rW  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   	   )rE  r   r   )r   rE     )r.   r   r>  )r\   r_   r^   r]   TpjiboLSuYWBJDbRW1zeNmC)r>  r?  r@  )r@  rE  r   )r.   r   r?  r8   rm   oD3V84RtTDwlc9C8_evn)rE  g@g(\	@)gHzG?gQ@gp=
ף@)g#@g#@g?)gffffff#@rA  r<  )g333333@rA  gL#@r?  )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_addd  s  	

  rO  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_add  s   rV  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 )NrP  rQ  rR  r  g?rS  )r#   r`   pytestraiseserrorsDuplicateIDErrorr   r   rJ   rF   r(   r(   r)   test_dup_add  s   "r\  c           	      C   s   t |  | jdd}g d}tjdd}tjdd}tj||f }|jtt||d}|D ]}|| }|d us>J t	dd	 |D sIJ q2d S )
NrP  rQ  )r^   r]   r_   	distancesr.   i  d   )query_embeddingsincludec                 S   s   g | ]}t |d kqS )r   )r{   )rp   resultr(   r(   r)   rt     rx   z*test_query_without_add.<locals>.<listcomp>)
r#   r`   r   randomrandinttolistqueryr   r   all)	rJ   rF   fieldsr  r  r_  rU  r   field_resultsr(   r(   r)   test_query_without_add  s   
ri  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 )NrP  rQ  rR  )r^   r]   r_   )r\   r`  r\   r   r]   r^   r_   )r#   r`   rT  r{   )rJ   rF   ra  r(   r(   r)   test_get_non_existent  s   rj  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rP  rQ  r  rS  r.   rm   r   )r#   r`   r   r   r   )rJ   rq   rF   r(   r(   r)   test_escape_chars_in_ids  s   rm  c                 C   sL   t |  | jdd}tt |  W d    d S 1 sw   Y  d S )NrP  rQ  )r#   r`   rW  rX  
ValueErrorr   r[  r(   r(   r)   test_delete_empty_fails(  s
   
"ro  kwargsr\   rP  wherebarwhere_documentz	$contains)r\   rq  )r\   rs  )r\   rq  rs  c                 C   s(   t |  | jdd}|jdi | d S )NrP  rQ  r(   )r#   r`   r   )rJ   rp  rF   r(   r(   r)   test_delete_success/  s   rt  )supported_typesru  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   rL  float64int32int64rp   r4   r(   r(   r)   rt   Q      


zMtest_autocasting_validate_embeddings_for_compatible_types.<locals>.<listcomp>)rb   create_embeddingsr   r   r   r   rf  ru  embdsvalidated_embeddingsr(   r(   r)   9test_autocasting_validate_embeddings_for_compatible_typesE  s   r  c                 C   rv  )Nr   c                 S   rw  r(   rx  r~  r(   r(   r)   rt   g  r  zEtest_autocasting_validate_embeddings_with_ndarray.<locals>.<listcomp>)rb   create_embeddings_ndarrayr   r   r   r   rf  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  rW  rX  rn  r   r   r   r   r   r4   )r  r  r$  r(   r(   r)   7test_autocasting_validate_embeddings_incompatible_typest  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   arrayrW  rX  rn  r   r   )r  r$  r(   r(   r)   test_0dim_embedding_validation  s   
r  c                 C   sn   t |  | jdd}t| |j}tdddD ]}|jdd t||d D d qts5t| |j|t d S d S )	NnooprQ  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&   rW   ranger   r$   r%   r   )rJ   rF   initial_versionbatchr(   r(   r)   test_no_op_compaction  s   "
r  c                 C   s  t |  d}d}| jdd}t| |j}td||D ]!}dd t||| D }dd |D }|j|d	d |D d
 qtsFt| |j|t t| |j}td||D ]}dd t||| D }dd |D }|j	|d qRtsxt| |j|t t
| d dksJ d S )Nr  r^  add_then_purgerQ  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     rS  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&   rW   r  r   r$   r%   r   r   r{   rT  )rJ   record_countbatch_countrF   witness_versionr  record_id_vals
record_idsr(   r(   r)   test_add_then_purge  s2   

r  c           	      C   s>  t |  | d}t| |j}d}dd t||d D }dd t||d D }|d }|j||d |j|d tsDt| |j|t	 t| |j}d	}d
d t||| D }dd t||| D }|j||d |j|d |j||d tst| |j|t	 |
 }t|d |ksJ |D ]
}||d v sJ qd S )Nencompassing_deleter   c                 S   r  r(   r  rv   r(   r(   r)   rt     r  z,test_encompassing_delete.<locals>.<listcomp>r?  c                 S      g | ]
}|d  |d  gqS g      ?r(   rv   r(   r(   r)   rt     r   rS  rm      c                 S   r  r(   r  rv   r(   r(   r)   rt     r  c                 S   r  r  r(   rv   r(   r(   r)   rt     r   r\   )r#   r`   r&   rW   r  r   r   r$   r%   r   rT  r{   )	rJ   colr  id_startr\   r_   
len_to_addget_resultsrq   r(   r(   r)   test_encompassing_delete  s:   


r  r   )ohypothesis.statefulrN   hypothesis.strategiesr   rW  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.errorsrY  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   r   r0   r5   sharedsampled_fromfloat_typesr7   SearchStrategyr   rL  r{  integersr<   r=   r   rG   r   LogCaptureFixturer   r  r'  r(  rO  rV  r\  ri  rj  markxfailrm  ro  parametrizert  r|  r}  r   r  r  r   r  r  r  r  r  r(   r(   r(   r)   <module>   s   
 $ 0
 }6     7 	




"