o
    1XxiZ                     @   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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! 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d/Z<ee(9 d-e j:e(j;d0d.d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ZIdSdQdRZJdS )T    N)		GeneratorListCallableIteratorDictOptionalUnionSequencecast)validate_metadata)SystemSettings)ParameterValueget_sql)SqliteDB)
ProducerFn)OperationRecordMetadataEmbeddingRecord	Operation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'   b/home/air/biblejyuku/back/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   r>   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 }ttj|}||||dd d }t| t}|  t	|| |
 dks4J tdD ]
}||t|}q8t	|| |
 dksPJ d S )Nrz   rD   r>      )instancer   reset_statesegment_definitionr
   uuidUUIDr   r#   r   r   rangesubmit_embeddingr:   )r&   r\   r   producercollection_idmax_idr{   r=   r'   r'   r(   test_insert_and_count   s   



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 }ttj|}||||d\}}t| t}|  t	||d  |j
ddid}t|dks<J |j
ddid}t|d	ksLJ |
 }	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s(J |j
dddiid}t|d	ks;J |j
dddiid}t|dksNJ |j
dddiid}t|d	ksaJ |j
dddiid}t|d	kstJ |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sJ d S )$Nrz   
   r   rC   Twherer}   F   c                 S      g | ]}|d  qS rK   r'   )rW   r   r'   r'   r(   
<listcomp>       ztest_get.<locals>.<listcomp>r   idsrD   limitr   offsetr   	   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   r#   r   get_metadatar   r   extend)r&   r\   r   r   r   
embeddingsseq_idsr{   resultresultsretr'   r'   r(   test_get   s|   



r   c                 C   s  |  t}|   td }ttj|}t| t}|  ||||dd d }t	|| |j
ddid}|j
dgd	}||ksAJ |j
d
did}t|dksQJ |j
ddid}t|tdd tddD kskJ |j
d
did}t|dks{J |j
ddid}t|tdd t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 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 ks8J |j
d d!d"iid
did#}t|d$ksNJ |j
d d!d"iid
did#}t|dksdJ |j
d
d%id}t|dksuJ d S )&Nrz   d   r>   r   rH   four twor   embedding_42r   	$containswhere_documentz$not_containsc                 S      g | ]
}d t |vr|qS )r   rP   rV   r'   r'   r(   r   E      z!test_fulltext.<locals>.<listcomp>r]   r   c                 S   r   r]   r   rV   r'   r'   r(   r   O  r   r   ra   r_   rG   c                 S   r   r   r'   rW   r   r'   r'   r(   r   W  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   h  r   c                 S   r   r   r   rV   r'   r'   r(   r   i  r   c                 S   s   g | ]}d | qS )rI   r'   rV   r'   r'   r(   r   j  s    c                 S   r   r   r'   r   r'   r'   r(   r   k  r   c                 S   s(   g | ]}d t |vsdt |vr|qS )r]   r^   r   rV   r'   r'   r(   r   q  r   rA   z$eq*   )r   r   r   zer)r   r   r   r   r
   r   r   r   r#   r   r   r   r   set)r&   r\   r   r   r   r{   r   r   result2oneszerosr   r'   r'   r(   test_fulltext(  sz   





		r   c           
         s  |  t}|   td }ttj|}t| t}|  ||||d\}}|d }t	|| |
 dks6J |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	|| |
 d
ksqJ |jdgdg ks|J ||| fdd	tdD dd d }t	|| |
 d
ksJ |jdgdg ksJ |||d }t	|| |
 dksJ |jdgd}	d S )Nrz   r   r   embedding_0r   r>   rJ   c                 3       | ]} V  qd S r4   r'   rW   _delete_embeddingr'   r(   rY         ztest_delete.<locals>.<genexpr>r   c                 3   r   r4   r'   r   r   r'   r(   rY     r   r   )r   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   r   r'   r   r(   test_delete  sV   





r   c                 C   s   |  t}|   td }ttj|}t| t}|  t	||||t
j tdddid d t
jd}|||}t|| |jdgd}t|dksKJ | dksSJ d S )	Nrz   
no_such_idfoobarrK   rN   rL   rM   rO   r   r   rD   )r   r   r   r   r
   r   r   r   r#   _test_updater   UPDATEr   r   r   r   r   r   )r&   r\   r   r   r{   update_recordr   r   r'   r'   r(   test_update  s&   


r   c                    s   |  t}|   td }ttj|}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|| |jdgd}|d d ddiks^J 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   rN   )r   r   r   r   r
   r   r   r   r#   r   r   UPSERTr   r   r   r   )r&   r\   r   r   r   r{   r   r   r'   r   r(   test_upsert  s6   


r   r   r   opc           
         s<   fddt dD }d}|D ]}|||}qt|| |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sVJ |jddid}|d d d	d
iksjJ 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   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     sv   	




r   c                 C   sR  |  t}|   ttjtd }||||dd d }ttjtd }||||dd d }t| t}|	  t| t}	|		  t
|| t
|	| | dksSJ tdD ]
}
||t|}qWt
|| | dksoJ |jdd}t|dks}J 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   r   segment_definition2r   r#   r   r   r   r   r:   r   r   pytestraises
ValueError)r&   r\   r   r   r   r   collection_id_2max_id2r{   segment2r=   resr'   r'   r(   
test_limitP  s0   





r   c                 C   s  |  t}|   td }ttj|}t| t}|  ||||d\}}|d }t	|| |
 dks6J |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   embedding_fulltext_search) r   r   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   _dbtqsqlr8   curr   fts_tq_ftsr'   r'   r(   test_delete_segment|  sX   





"r  c                    s  |  t}|   td }ttj|}t| t}|  ||||d\}}|d }t	|| |
 dks6J |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>   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   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  r8   r  r   r'   r   r(   test_delete_single_fts_record  sb   





"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)Kr-   r0   r+   r   typingr   r   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   pypikar   chromadb.ingestr   chromadb.segmentr   r   r~   %chromadb.segment.impl.metadata.sqliter   r   	itertoolsr   r)   r3   r5   fixturer&   r\   rr   r[   ru   rP   uuid4METADATAr   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r'   r'   r'   r(   <module>   s&   ,$		$
 

	



g
a
8
#
Q
,
;
<