o
    gy                     @   s  d dl Z d dlZd dlZd dlZd dlmZ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 d dlmZmZ d dlmZ d dlmZ d dlmZmZ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(Z(d dl)Z)d dl*m+Z+ d dlm,Z, d dl-m.Z. deeddf fddZ/deeddf fddZ0deeg eeddf f  fddZ1ej2de1 dde,deeddf fddZ3ej2dddee fddZ4dd d!d"d#d$d%d&d'd(d)
Z5d*e6de7fd+d,Z8ee(9 d-e j:e(j;d d.di d/Z<ee(9 d-e j:e(j;d0d.di d/Z=d1e'd2e!ddfd3d4Z>dedee d5eddfd6d7Z?d8ee d9ee ddfd:d;Z@dedee d5eddfd<d=ZAdedee d5eddfd>d?ZBdedee d5eddfd@dAZCdedee ddfdBdCZDdedee d5eddfdDdEZEdee dFe%d1e'dGe(j;dHeddfdIdJZFdedee d5eddfdKdLZGdedee d5eddfdMdNZHdedee d5eddfdOdPZIdedee d5eddfdQdRZJdUdSdTZKdS )V    N)	GeneratorListCallableIteratorDictOptionalUnionSequence)validate_metadata)SystemSettings)ParameterValueget_sql)SqliteDB)
ProducerFn)OperationRecordMetadataEmbeddingRecord	OperationRequestVersionContextScalarEncodingSegmentSegmentScopeSeqId)Table)Producer)MetadataReader)SqliteMetadataSegment)FixtureRequest)countreturnc                  c   s0    t ddd} t| }|  |V  |  dS )Fixture generator for sqlite DBTF)allow_resetis_persistentN)r   r   startstop)settingssystem r'   Z/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/test/segment/test_metadata.pysqlite+   s   r)   c                  c   sT    t  } tdd| d}t|}|  |V  |  tj| r(t	
|  dS dS )r    T)r!   r"   persist_directoryN)tempfilemkdtempr   r   r#   r$   ospathexistsshutilrmtree)	save_pathr%   r&   r'   r'   r(   sqlite_persistent4   s   r3   c                   C   s   t tgS N)r)   r3   r'   r'   r'   r(   system_fixturesB   s   r5   module)scopeparamsrequestc                 c   s    t |  V  d S r4   )nextparam)r9   r'   r'   r(   r&   F   s   r&   function)r7   c                      s&   dt dtfdd  fddt D S )Nir   c                 S   s   | | d  | d | d  g}| dkrd }n(d|  | | | d  dd}| d dkr-d|d	< | d
 dkr7d|d< t | |d< td|  |tj|tjd}|S )Ng?   r   value_T)str_keyint_key	float_keybool_key   truediv_by_three   FrC   chroma:document
embedding_id	embeddingencodingmetadata	operation)_build_documentr   r   FLOAT32r   ADD)r=   vectorrN   recordr'   r'   r(   create_recordM   s*   
z(sample_embeddings.<locals>.create_recordc                 3   s    | ]} |V  qd S r4   r'   .0r=   rU   r'   r(   	<genexpr>h       z$sample_embeddings.<locals>.<genexpr>)intr   r   r'   r'   rX   r(   sample_embeddingsK   s   r\   zeroonetwothreefourfivesixseveneightnine)
0123456789r=   c                 C   s    t t| }ddd |D S )N c                 s   s    | ]}t | V  qd S r4   )
_digit_map)rW   dr'   r'   r(   rY   {   rZ   z"_build_document.<locals>.<genexpr>)liststrjoin)r=   digitsr'   r'   r(   rP   y   s   rP   	test_type)r[   )rK   typer7   
collectionrN   
file_pathsr>   segmentseq_idc                 C   sP   t   }t   | dk r!|  |krd S t d t   | dk std| )N   g      ?zTimed out waiting for seq_id )time	max_seqidsleepTimeoutError)r|   r}   r#   r'   r'   r(   sync   s   
r   produce_fnsc                 C   s   |  t}|   td }|}||||dd d }t| t}|  t|| |jtdddddks6J t	dD ]
}|
|t|}q:t|| |jtdddddksXJ d S )	Nrz   rD   r>   r   collection_versionlog_positionrequest_version_context   )instancer   reset_statesegment_definitionr   r#   r   r   r   rangesubmit_embeddingr:   )r&   r\   r   producercollection_idmax_idr|   r=   r'   r'   r(   test_insert_and_count   s2   



r   expectedactualc                 C   st   t | t |ks
J t| dd d}t|dd d}t||D ]\}}|d |d ks-J |d |d ks7J qd S )Nc                 S      | d S NrK   r'   rr'   r'   r(   <lambda>       z&assert_equiv_records.<locals>.<lambda>)keyc                 S   r   r   r'   r   r'   r'   r(   r      r   rK   rN   )lensortedzip)r   r   sorted_expectedsorted_actualear'   r'   r(   assert_equiv_records   s   r   c                 C   s(  |  t}|   td }|}||||d\}}t| t}|  t||d  tddd}|jddi|d}	t	|	d	ks?J |jdd
i|d}	t	|	dksPJ |j|d}
t
||
 |jdd |dd	 D |d}	t
|dd	 |	 g }||jd|d t	|dksJ ||jdd|d t	|dksJ ||jdd|d t	|dksJ ||jdd|d t	|dksJ t
|| |jddi|d}	t	|	dksJ |jddd	ii|d}	t	|	dksJ |jddd	ii|d}	t	|	d	ksJ |jddd	ii|d}	t	|	dksJ |jddd	ii|d}	t	|	d	ks%J |jdddii|d}	t	|	d	ks9J |jdddii|d}	t	|	dksMJ |jddd	ii|d}	t	|	d	ksaJ |jddd	ii|d}	t	|	dksuJ |jdddii|d}	t	|	dksJ |jdddii|d}	t	|	dksJ |jddd	ii|d}	t	|	dksJ |jddd	id |d}	t	|	d!ksJ |jd"dd#idd!igi|d}	t	|	d!ksJ |jd$ddiddd	iigi|d}	t	|	dksJ |jd$ddiddd	iigi|d}	t	|	d#ksJ d S )%Nrz   
   r   r   r   rC   Twherer   r~   F   r   c                 S      g | ]}|d  qS rK   r'   )rW   r   r'   r'   r(   
<listcomp>       ztest_get.<locals>.<listcomp>idsr   rD   limitr   r   offsetr   r   	   rF   rE   rA   z$gtz$gtez$ltz$lterB   g
ףp=
@g(\@z$ne)rF   rA   rG   $orr>   $and)r   r   r   r   r   r#   r   r   get_metadatar   r   extend)r&   r\   r   r   r   
embeddingsseq_idsr|   r   resultresultsretr'   r'   r(   test_get   s  















	
	r   c                 C   s  |  t}|   td }|}t| t}|  ||||dd d }t|| tddd}|jddi|d	}|jd
g|d}	||	ksEJ |jddi|d}t	|dksVJ |jddi|d}t	|t	dd t
ddD d kssJ |jddi|d}t	|dksJ |jddi|d}t	|t	dd t
ddD d ksJ |jdddiddigi|d}t	|dksJ tdd |D d
dhksJ |jdddiddigi|d}t	|t	dd t
ddD d ksJ |jdddiddigi|d}dd t
ddD }
dd t
ddD }tdd t|
| D }td d |D |ks(J |jdddiddigi|d}t	|t	d!d t
ddD d ksLJ |jd"d#d$iiddi|d%}t	|dkscJ |jd"d#d$iiddi|d%}t	|dkszJ |jdd&i|d}t	|dksJ d S )'Nrz   d   r>   r   r   r   rH   four twor   embedding_42r   	$containswhere_documentr   z$not_containsc                 S      g | ]
}d t |vr|qS )r   rP   rV   r'   r'   r(   r         z!test_fulltext.<locals>.<listcomp>r]   r   c                 S   r   r]   r   rV   r'   r'   r(   r     r   r   ra   r_   rG   c                 S   r   r   r'   rW   r   r'   r'   r(   r     r   embedding_24c                 S   s(   g | ]}d t |vrdt |vr|qS )ra   r_   r   rV   r'   r'   r(   r     
    r   r^   c                 S      g | ]
}d t |v r|qS )r^   r   rV   r'   r'   r(   r     r   c                 S   r   r   r   rV   r'   r'   r(   r     r   c                 S   s   g | ]}d | qS )rI   r'   rV   r'   r'   r(   r     s    c                 S   r   r   r'   r   r'   r'   r(   r     r   c                 S   s(   g | ]}d t |vsdt |vr|qS )r]   r^   r   rV   r'   r'   r(   r     r   rA   z$eq*   )r   r   r   zer)r   r   r   r   r   r#   r   r   r   r   r   set)r&   r\   r   r   r   r|   r   r   r   result2oneszerosr   r'   r'   r(   test_fulltext  s   





r   c                    s  |  t}|   td }|}t| t}|  ||||d\}}|d }t|| tddd}	|j|	ddks:J |j	dg|	d}
t
|d d	 |
 tdd d d tjd
 ||| fddtd	D d	d	 d }t|| tddd}	|j|	ddks~J |j	dg|	dg ksJ ||| fddtd	D d	d	 d }t|| |j|	ddksJ |j	dg|	dg ksJ |||d }t|| |j|	ddksJ |j	dg|	d}
d S )Nrz   r   r   r   r   r   embedding_0r   r>   rJ   c                 3       | ]} V  qd S r4   r'   rW   _delete_embeddingr'   r(   rY   1      ztest_delete.<locals>.<genexpr>r   c                 3   r   r4   r'   r   r   r'   r(   rY   A  r   )r   r   r   r   r   r#   r   r   r   r   r   r   r   DELETEr   r   )r&   r\   r   r   r   r|   r   r   r   version_contextr   r'   r   r(   test_delete  sr   






r   c           	      C   s   |  t}|   td }|}t| t}|  t||||tj t	dddid d tjd}|
||}t|| tddd}|jdg|d}t|dksNJ |j|d	d
ksXJ d S )Nrz   
no_such_idfoobarrK   rN   rL   rM   rO   r   r   r   r   rD   )r   r   r   r   r   r#   _test_updater   UPDATEr   r   r   r   r   r   r   )	r&   r\   r   r   r|   update_recordr   r   r   r'   r'   r(   test_updateV  s0   


r   c           	         s   |  t}|   td }|}t| t}|  t||||tj t	dddid d tjd ||| fddt
dD dd	d d
 }t|| tddd}|jdg|d}|d d ddiksaJ d S )Nrz   r   r   r   r   c                 3   r   r4   r'   r   r   r'   r(   rY     r   ztest_upsert.<locals>.<genexpr>r>   )r   r   r   nr   r   r   r   rN   )r   r   r   r   r   r#   r   r   UPSERTr   r   r   r   r   )	r&   r\   r   r   r   r|   r   r   r   r'   r   r(   test_upsertv  s@   


r   r   r   opc                    sZ   fddt dD }d}|D ]}|||}qt|| tddd}|jdg|d}	t|dd	 |	 tdd
didd|d}
|||
}t|| |jdg|d}	|	d d d
diks^J |jddi|d}	|	d d d
dikssJ tdd
didd|d}
|||
}t|| |jdg|d}	|	d d d
diksJ |jddi|d}	|	d d d
diksJ |jddi|d}	t|	dksJ tdddidd|d}
|||
}t|| |jdg|d}	|	d d dddksJ tdd
didd|d}
|||
}t|| |jdg|d}	|	d d ddiksJ |jddi|d}	t|	dks+J dS )z0test code common between update and upsert pathsc                    s   g | ]}t  qS r'   )r:   rV   r\   r'   r(   r     r   z _test_update.<locals>.<listcomp>rD   r   r   r   r   Nr>   rH   zfoo barr   rN   r   r   r   zbiz buzbizbazr   )rH   r   )r   r   r   r   r   r   r   r   )r\   r   r|   r   r   r   r   r   r   r   r   r'   r   r(   r     s   	




r   c                 C   s\  |  t}|   td }||||dd d }td }||||dd d }t| t}|  t| t}	|	  t|| t|	| tddd}
|j	|
ddksSJ t
dD ]
}||t|}qWt|| |j	|
ddksqJ |jd|
d	}t|dksJ tt |jd|
d	 W d    n1 sw   Y  |jdd
|
d}t|dksJ d S )Nrz   rD   r>   r   r   r   r   r   r   r   r   )r   r   r   r   segment_definition2r   r#   r   r   r   r   r   r:   r   r   pytestraises
ValueError)r&   r\   r   r   r   r   collection_id_2max_id2r|   segment2r   r=   resr'   r'   r(   
test_limit  s:   





r   c                 C   s  |  t}|   td }|}t| t}|  ||||d\}}|d }t|| tddd}	|j|	ddks:J |j	dg|	d}
t
|d d	 |
 |j}|  |  t}td
}| ||j|jt||k}t|\}}| }|||}t| dksJ W d    n1 sw   Y  td}| | |j| ||j|jt||k}t|\}}| }|||}t| dksJ W d    d S 1 sw   Y  d S )Nrz   r   r   r   r   r   r   r   r>   r   embedding_fulltext_search)r   r   r   r   r   r#   r   r   r   r   r   _iddeleter   r   querybuilderfrom_selectrK   r   
segment_idr   
uuid_to_dbr   txexecuter   fetchallrowidisin)r&   r\   r   r   r   r|   r   r   r   r   r   r   _dbtqsqlr8   curr   fts_tq_ftsr'   r'   r(   test_delete_segment8  sb   





"r  c                    s  |  t}|   td }|}t| t}|  ||||d\}}|d }t|| tddd}	|j|	ddks:J |j	dg|	d}
t
|d d	 |
 |j}|  t}tdd d d tjd
 ||| fddtd	D d	d	 d }td}t|| td}| | |j| ||j|jt||k|jt d k}t|\}}| }|||}t |! dksJ W d    d S 1 sw   Y  d S )Nrz   r   r   r   r   r   r   r   r>   rJ   c                 3   r   r4   r'   r   r   r'   r(   rY     r   z0test_delete_single_fts_record.<locals>.<genexpr>r   r   rK   )"r   r   r   r   r   r#   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  rK   r   r   r   embedding_idr   r   r   r   r  )r&   r\   r   r   r   r|   r   r   r   r   r   r   r  r  r	  r
  r  r8   r  r   r'   r   r(   test_delete_single_fts_recordx  sl   





"r  c                 C   s  |  t}|   td }|}t| t}|  ||||d\}}|d }t|| tddd}	|j|	ddks:J |j	dg|	d}
t
|d d	 |
 |j	dgd
|	d}
t|
d	ks\J |
d d d u sfJ |j	dgd|	d}
t|
d	kswJ |
d d |d d ksJ d S )Nrz   r   r   r   r   r   r   r   r>   F)r   include_metadatar   rN   T)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(   test_include_metadata  s>   


 r  c                   C   s@   t jtdd tddi W d    d S 1 sw   Y  d S )NrH   )matchz,this is not the document you are looking for)r   r   r   r
   r'   r'   r'   r(   &test_metadata_validation_forbidden_key  s
   "r  )r   N)Lr-   r0   r+   r   typingr   r   r   r   r   r   r   r	   chromadb.api.typesr
   chromadb.configr   r   chromadb.db.baser   r   chromadb.db.impl.sqliter   chromadb.test.conftestr   chromadb.typesr   r   r   r   r   r   r   r   pypikar   chromadb.ingestr   chromadb.segmentr   uuidr   %chromadb.segment.impl.metadata.sqliter   r   	itertoolsr   r)   r3   r5   fixturer&   r\   rr   r[   ru   rP   uuid4METADATAUUIDr   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r'   r'   r'   r(   <module>   s@   ((
	$
 
	



+

 4
 
H 
(
i
1
@
A
/