o
    ɭRhg                  	   @   sb  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
Z
d dlZd dlmZ d dlm  mZ d dlm  m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! 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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 G d
d deZ5G dd deZ6de2de-dej2fddZ7dej2deee-f fddZ8dej*de*fddZ9dej1dee) fddZ:dej1dee1 fddZ;dej1de<deee1e)f  fddZ=de1dej1fd d!Z>d"ej+d#e0de(fd$d%Z?d&ej.de.fd'd(Z@d&e.dej.fd)d*ZAd+ej/de/fd,d-ZBd+e/dej/fd.d/ZCd0eeDeEeFe<df dejGfd1d2ZHd3ej'de'fd4d5ZId3e'dej'fd6d7ZJde*dej*fd8d9ZKd:e+dej+fd;d<ZLd=ej3de3fd>d?ZMd=e3de-dej3fd@dAZNdBej4de4fdCdDZOdEej,de,fdFdGZPdEe,dej,fdHdIZQdJedejfdKdLZRdMedejfdNdOZSdPe!dejTfdQdRZUdSedejVfdTdUZWdVedejXfdWdXZYdYedejZfdZd[Z[d\e dej\fd]d^Z]d\e dej^fd_d`Z_dae#dej#fdbdcZ`ddejadeEfdedfZbdge$dej$fdhdiZcdjej5de5fdkdlZdddejedee5 fdmdnZfdVe%dej%fdodpZgdjej6de6fdqdrZhdsejideee6  fdtduZjdS )v    )DictOptionalSequenceTuple	TypedDictUnioncast)UUIDN)NDArray)$collection_configuration_to_json_str)	EmbeddingWhereWhereDocument)KNNFilterLimit
ProjectionScan)	CountPlanGetPlanKNNPlan)
Collection	LogRecordMetadata	OperationOperationRecordRequestVersionContextScalarEncodingSegmentSegmentScopeSeqIdUpdateMetadataVectorVectorEmbeddingRecordVectorQueryResultc                   @   s:   e Zd ZU eed< ee ed< ee ed< ee ed< dS )ProjectionRecordiddocument	embeddingmetadataN)__name__
__module____qualname__str__annotations__r   r"   r    r/   r/   X/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/chromadb/proto/convert.pyr%   (   s
   
 r%   c                   @   s"   e Zd ZU eed< ee ed< dS )KNNProjectionRecordrecorddistanceN)r*   r+   r,   r%   r.   r   floatr/   r/   r/   r0   r1   /   s   
 r1   vectorencodingreturnc                 C   s   |t jkrtj| tjd }tj j}n#|t jkr(tj| tjd }tj j}nt	d| dt j dt j tj
| j||dS )NdtypeUnknown encoding , expected one of z             or )	dimensionr5   r6   )r   FLOAT32nparrayfloat32tobytes	chroma_pbINT32int32
ValueErrorr"   size)r5   r6   as_bytesproto_encodingr/   r/   r0   to_proto_vector5   s   



rI   c                 C   s   | j }|tjjkrtj| jtjd}tj}||fS |tjjkr/tj| jtj	d}tj}||fS t
d| dtjj dtjj )Nr8   r:   z, expected one of             z or )r6   rB   r   r=   r>   
frombufferr5   r@   rC   rD   rE   )r5   r6   as_arrayout_encodingr/   r/   r0   from_proto_vectorG   s    
rM   	operationc                 C   sV   | t jjkr	tjS | t jjkrtjS | t jjkrtjS | t jjkr$tjS td|  )NUnknown operation )rB   r   ADDUPDATEUPSERTDELETERuntimeErrorrN   r/   r/   r0   from_proto_operationY   s   rV   r)   c                 C      t tt t| dS )NF)r   r   r    _from_proto_metadata_handle_noner)   r/   r/   r0   from_proto_metadatag   s   rZ   c                 C   rW   )NT)r   r   r!   rX   rY   r/   r/   r0   from_proto_update_metadatak   s   r[   	is_updatec                 C   s   | j sd S i }| j  D ]>\}}|dr|j||< q|dr&|j||< q|dr1|j||< q|dr<|j||< q|rCd ||< qtd| d|S )N
bool_valuestring_value	int_valuefloat_valuezMetadata key z value cannot be None)r)   itemsHasFieldr]   r^   r_   r`   rE   )r)   r\   out_metadatakeyvaluer/   r/   r0   rX   s   s    




rX   c                 C   s   t jdd |  D dS )Nc                 S   s   i | ]	\}}|t |qS r/   )to_proto_metadata_update_value).0kvr/   r/   r0   
<dictcomp>   s    z,to_proto_update_metadata.<locals>.<dictcomp>rY   )rB   r!   ra   rY   r/   r/   r0   to_proto_update_metadata   s   rk   operation_recordseq_idc              	   C   s:   t | j\}}t|t| j||t| jt| jdd}|S )N)r&   r(   r6   r)   rN   )
log_offsetr2   )	rM   r5   r   r   r&   r[   r)   rV   rN   )rl   rm   r(   r6   r2   r/   r/   r0   from_proto_submit   s   
ro   segmentc              	   C   sP   t t| jd| jt| jt| jd| drt| j	nd dd | j
 D dS )Nhexr)   c                 S   s"   i | ]\}}|d d |j D qS )c                 S   s   g | ]}|qS r/   r/   )rg   pathr/   r/   r0   
<listcomp>   s    z1from_proto_segment.<locals>.<dictcomp>.<listcomp>pathsrg   namerv   r/   r/   r0   rj      s    z&from_proto_segment.<locals>.<dictcomp>r&   typescope
collectionr)   
file_paths)r   r	   r&   rz   from_proto_segment_scoper{   r|   rb   rZ   r)   r}   ra   rp   r/   r/   r0   from_proto_segment   s   

r   c              	   C   sX   t j| d j| d t| d | d j| d d u rd nt| d dd | d  D d	S )
Nr&   rz   r{   r|   r)   c                 S   s   i | ]\}}|t j|d qS )ru   )rB   	FilePathsrw   r/   r/   r0   rj      s    z$to_proto_segment.<locals>.<dictcomp>r}   ry   )rB   r   rr   to_proto_segment_scoperk   ra   r   r/   r/   r0   to_proto_segment   s   


r   segment_scopec                 C   sD   | t jjkr	tjS | t jjkrtjS | t jjkrtjS td|  NzUnknown segment scope )rB   r   VECTORMETADATARECORDrT   r   r/   r/   r0   r~      s   r~   c                 C   sD   | t jkr	tj jS | t jkrtj jS | t jkrtj jS td|  r   )r   r   rB   r   r   rT   r   r/   r/   r0   r      s   


r   re   c                 C   s|   t | trtj| dS t | trtj| dS t | tr!tj| dS t | tr,tj| dS | d u r4t S tdt|  d)N)r]   )r^   )r_   )r`   zUnknown metadata value type z6, expected one of str, int,             float, or None)	
isinstanceboolrB   UpdateMetadataValuer-   intr4   rE   rz   )re   r/   r/   r0   rf      s   



rf   r|   c                 C   s^   t t| jd| jt| j| drt| j	nd | dr#| j
r#| j
nd | j| j| j| jd	S )Nrq   r)   r<   )	r&   rx   configuration_jsonr)   r<   databasetenantversionlog_position)r   r	   r&   rx   jsonloadsconfiguration_json_strrb   rZ   r)   r<   r   r   r   r   r|   r/   r/   r0   from_proto_collection   s"   

r   c                 C   sZ   t j| d j| d t|  | d d u rd nt| d | d | d | d | d | d d		S )
Nr&   rx   r)   r<   r   r   r   r   )	r&   rx   r   r)   r<   r   r   r   r   )rB   r   rr   r   get_configurationrk   r   r/   r/   r0   to_proto_collection   s   
r   c                 C   sv   | t jkr	tj jS | t jkrtj jS | t jkrtj jS | t jkr$tj jS td|  dt j dt j dt j dt j 
)NrO   r;   z,             z, z, or )r   rP   rB   rQ   rR   rS   rE   rU   r/   r/   r0   to_proto_operation  s"   



r   submit_recordc                 C   sh   d }| d d ur| d d urt | d | d }d }| d d ur%t| d }tj| d ||t| d dS )Nr(   r6   r)   r&   rN   )r&   r5   r)   rN   )rI   rk   rB   r   r   )r   r5   r)   r/   r/   r0   to_proto_submit"  s   
r   embedding_recordc                 C   s   t | jt| jd dS )Nr   )r&   r(   )r#   r&   rM   r5   )r   r/   r/   r0   "from_proto_vector_embedding_record5  s   r   c                 C   s   t j| d t| d |dS )Nr&   r(   )r&   r5   )rB   r#   rI   )r   r6   r/   r/   r0    to_proto_vector_embedding_record>  s   r   vector_query_resultc                 C   s   t | j| jt| jd dS )Nr   )r&   r3   r(   )r$   r&   r3   rM   r5   )r   r/   r/   r0   from_proto_vector_query_resultH  s
   r   request_version_contextc                 C   s   t | j| jdS )Ncollection_versionr   )r   r   r   r   r/   r/   r0   "from_proto_request_version_contextR  s   r   c                 C   s   t j| d | d dS )Nr   r   r   )rB   r   r   r/   r/   r0    to_proto_request_version_context[  s   r   wherec                    s  t  }t| dkrtd|  |  D ]\}}t|ts&td| |dks.|dkr^t|ts:td| t jdd |D d	}|dkrOt j	j
|_nt j	j|_|j| |  S t  }||_t|tst|tu rt  }||_t jj|_|j| n^t|tu rt  }||_t jj|_|j| nDt|tu rt  }||_t jj|_|j| n*t|t u rt ! }	||	_t jj|	_|j"|	 ntd
| | D ]\}
 |
dv rt tstd| t dkst# fdd D std  d }|
dkrt j$j%}nt j$j&}t d tu rAt ' } D ]
}|j()|g q,||_*|j+| qt d tu ret , } D ]
}|j()|g qP||_*|j-| qt d tu rt . } D ]
}|j()|g qt||_*|j/| qt d t u rt 0 } D ]
}|j()|g q||_*|j1| qtd  |
dv rt tu rt  } |_|
dkrt jj|_n|
dkrt jj2|_ntd|
 |j| qt tu rt  } |_|
dkrt jj|_n|
dkrt jj2|_ntd|
 |j| qt tu r{t  } |_|
dkr6t jj|_n>|
dkrAt jj2|_n3|
dkrLt j3j4|_5n(|
dkrWt j3j6|_5n|
dkrbt j3j7|_5n|
dkrmt j3j8|_5ntd|
 |j| qt t u rt ! } |_|
dkrt jj|_n>|
dkrt jj2|_n3|
dkrt j3j4|_5n(|
dkrt j3j6|_5n|
dkrt j3j7|_5n|
dkrt j3j8|_5ntd|
 |j"| qtd  	 q|j9| q|S )N   z1Expected where to have exactly one operator, got z$Expected where key to be a str, got $and$orzLExpected where value for $and or $or to be a list of where expressions, got c                 S      g | ]}t |qS r/   )to_proto_whererg   wr/   r/   r0   rt   s      z"to_proto_where.<locals>.<listcomp>childrenz8Expected where value to be a string, int, or float, got )$inz$ninzAExpected where value for $in or $nin to be a list of values, got r   c                 3   s"    | ]}t |t d  V  qdS )r   N)r   rz   )rg   xoperandr/   r0   	<genexpr>  s    
z!to_proto_where.<locals>.<genexpr>z_Expected where operand value to be a non-empty list, and all values to be of the same type got r   zKExpected where operand value to be a list of strings, ints, or floats, got )$eq$ne$gt$lt$gte$lter   r   z.Expected where operator to be $eq or $ne, got r   r   r   r   zIExpected where operator to be one of $eq, $ne, $gt, $lt, $gte, $lte, got z@Expected where operand value to be a string, int, or float, got ):rB   r   lenrE   ra   r   r-   listWhereChildrenBooleanOperatorANDoperatorORr   CopyFromDirectComparisonrd   dictrz   SingleStringComparisonre   GenericComparatorEQ
comparatorsingle_string_operandr   SingleBoolComparisonsingle_bool_operandr   SingleIntComparisongeneric_comparatorsingle_int_operandr4   SingleDoubleComparisonsingle_double_operandallListOperatorINNINStringListComparisonvaluesextendlist_operatorstring_list_operandBoolListComparisonbool_list_operandIntListComparisonint_list_operandDoubleListComparisondouble_list_operandNENumberComparatorGTnumber_comparatorLTGTELTEdirect_comparison)r   responserd   re   r   dcsscsbcsicsdcr   r   slor   bloilodlosfcr/   r   r0   r   d  s:  





























r   where_documentc                 C   s
  t  }t| dkrtd|  |  D ]m\}}|dks!|dkrNt|ts-td| t jdd |D d}|dkrBt jj	|_
nt jj|_
|j| qt|tsZtd	| t  }||_|d
krkt jj|_
n|dkrut jj|_
ntd| |j| q|S )Nr   z:Expected where_document to have exactly one operator, got r   r   z^Expected where_document value for $and or $or to be a list of where_document expressions, got c                 S   r   r/   )to_proto_where_documentr   r/   r/   r0   rt   *  r   z+to_proto_where_document.<locals>.<listcomp>r   z4Expected where_document operand to be a string, got z	$containsz$not_containszLExpected where_document operator to be one of $contains, $not_contains, got )rB   r   r   rE   ra   r   r   WhereDocumentChildrenr   r   r   r   r   r   r-   DirectWhereDocumentr'   WhereDocumentOperatorCONTAINSNOT_CONTAINSdirect)r   r   r   r   r   dwdr/   r/   r0   r     sB   


r   scanc                 C   s*   t jt| jt| jt| jt| jdS )N)r|   knnr)   r2   )query_pbScanOperatorr   r|   r   r   r)   r2   r   r/   r/   r0   to_proto_scanH     r  filterc                 C   sL   t j| jd urtj| jdnd | jrt| jnd | jr"t| jdS d dS )N)ids)r  r   r   )	r  FilterOperatoruser_idsrB   UserIdsr   r   r   r   )r  r/   r/   r0   to_proto_filterQ  s   

r  r   c                 C   s   t jdd | jD | jdS )Nc                 S   s   g | ]	}t |tjd qS ))r5   r6   )rI   r   r=   )rg   r(   r/   r/   r0   rt   _  s    z to_proto_knn.<locals>.<listcomp>)
embeddingsfetch)r  KNNOperatorr  r  r   r/   r/   r0   to_proto_knn]  s   r  limitc                 C   s   t j| j| jdS )N)skipr  )r  LimitOperatorr  r  )r  r/   r/   r0   to_proto_limitg     r  
projectionc                 C   s   t j| j| j| jdS )N)r'   r(   r)   )r  ProjectionOperatorr'   r(   r)   r  r/   r/   r0   to_proto_projectionk  s
   r  c                 C   s   t jt| | jdS )N)r  r3   )r  KNNProjectionOperatorr  rankr  r/   r/   r0   to_proto_knn_projections  s   
r  countc                 C   s   t jt| jdS )Nr  )r  r   r  r   r  r/   r/   r0   to_proto_count_plany  r  r  resultc                 C   s   | j S )Nr  r   r/   r/   r0   from_proto_count_result}  s   r"  getc                 C   *   t jt| jt| jt| jt| j	dS )N)r   r  r  r  )
r  r   r  r   r  r  r  r  r  r  )r#  r/   r/   r0   to_proto_get_plan  r  r%  r2   c                 C   s<   t | j| jr	| jnd | jd urt| jd nd t| jdS )Nr   )r&   r'   r(   r)   )r%   r&   r'   r(   rM   rZ   r)   r2   r/   r/   r0   from_proto_projection_record  s   
r'  c                 C      dd | j D S )Nc                 S   r   r/   )r'  rg   r2   r/   r/   r0   rt     r   z)from_proto_get_result.<locals>.<listcomp>recordsr!  r/   r/   r0   from_proto_get_result  s   r,  c                 C   r$  )N)r   r  r   r  )
r  r   r  r   r  r  r  r   r  r  r  r/   r/   r0   to_proto_knn_plan  r  r-  c                 C   s   t t| j| jdS )N)r2   r3   )r1   r'  r2   r3   r&  r/   r/   r0    from_proto_knn_projection_record  s   r.  resultsc                 C   r(  )Nc                 S   s   g | ]
}d d |j D qS )c                 S   r   r/   )r.  r)  r/   r/   r0   rt     r   z:from_proto_knn_batch_result.<locals>.<listcomp>.<listcomp>r*  )rg   r   r/   r/   r0   rt     s    z/from_proto_knn_batch_result.<locals>.<listcomp>r/  r0  r/   r/   r0   from_proto_knn_batch_result  s   r1  )ktypingr   r   r   r   r   r   r   uuidr	   r   numpyr>   numpy.typingr
   chromadb.proto.chroma_pb2proto
chroma_pb2rB   !chromadb.proto.query_executor_pb2query_executor_pb2r  %chromadb.api.collection_configurationr   chromadb.api.typesr   r   r   &chromadb.execution.expression.operatorr   r   r   r   r   "chromadb.execution.expression.planr   r   r   chromadb.typesr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r1   rI   rM   rV   rZ   r[   r   rX   rk   ro   r   r   r~   r   r-   r   r4   r   rf   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  CountResultr"  r%  r'  	GetResultr,  r-  r.  KNNBatchResultr1  r/   r/   r/   r0   <module>   s   $ @





	




	
	 8-	
		

