o
    1Xxi7                     @   s   d dl 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mZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ G dd deZG d	d
 d
eZededZG dd deZG dd deZG dd deZdS )    )OptionalSequenceTypeVarType)abstractmethod)
CollectionMetadataEmbeddingRecord	OperationVectorEmbeddingRecordWhereWhereDocumentVectorQueryVectorQueryResultSegmentSeqIdMetadata)	ComponentSystem)UUID)Enumc                   @   s$   e Zd ZdZdZdZdZdZdZdS )SegmentTypez"urn:chroma:segment/metadata/sqlitez+urn:chroma:segment/vector/hnsw-local-memoryz.urn:chroma:segment/vector/hnsw-local-persistedz*urn:chroma:segment/vector/hnsw-distributedz#urn:chroma:segment/record/blockfilez%urn:chroma:segment/metadata/blockfileN)	__name__
__module____qualname__SQLITEHNSW_LOCAL_MEMORYHNSW_LOCAL_PERSISTEDHNSW_DISTRIBUTEDBLOCKFILE_RECORDBLOCKFILE_METADATA r    r    X/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/segment/__init__.pyr      s    r   c                   @   sn   e Zd ZededefddZedefddZede	fdd	Z
ed
edee fddZedddZdS )SegmentImplementationsytstemsegmentc                 C   s   d S Nr    )selfr#   r$   r    r    r!   __init__   s   zSegmentImplementation.__init__returnc                 C      dS )z,Get the number of embeddings in this segmentNr    r&   r    r    r!   count#      zSegmentImplementation.countc                 C   r)   )z7Get the maximum SeqID currently indexed by this segmentNr    r*   r    r    r!   	max_seqid(   r,   zSegmentImplementation.max_seqidmetadatac                 C   r)   )zGiven an arbitrary metadata map (e.g, from a collection), validate it and
        return metadata (if any) that is applicable and should be applied to the
        segment. Validation errors will be reported to the user.Nr    )r.   r    r    r!   propagate_collection_metadata-      z3SegmentImplementation.propagate_collection_metadataNc                 C   r)   )z#Delete the segment and all its dataNr    r*   r    r    r!   delete4   r,   zSegmentImplementation.delete)r(   N)r   r   r   r   r   r   r'   intr+   r   r-   staticmethodr   r   r/   r1   r    r    r    r!   r"      s    r"   S)boundc                   @   s^   e Zd ZdZe					ddee dee deee	  dee
 dee
 dee fd	d
ZdS )MetadataReaderz$Embedding Metadata segment interfaceNwherewhere_documentidslimitoffsetr(   c                 C   r)   )zQuery for embedding metadata.Nr    )r&   r7   r8   r9   r:   r;   r    r    r!   get_metadata@   s   
zMetadataReader.get_metadata)NNNNN)r   r   r   __doc__r   r   r   r   r   strr2   r   r<   r    r    r    r!   r6   =   s*    
r6   c                   @   sT   e Zd ZdZe	d
deee  dee fddZ	ede
deee  fdd	ZdS )VectorReaderz"Embedding Vector segment interfaceNr9   r(   c                 C   r)   )z]Get embeddings from the segment. If no IDs are provided, all embeddings are
        returned.Nr    )r&   r9   r    r    r!   get_vectorsP      zVectorReader.get_vectorsqueryc                 C   r)   )zYGiven a vector query, return the top-k nearest neighbors for vector in the
        query.Nr    )r&   rB   r    r    r!   query_vectorsX   rA   zVectorReader.query_vectorsr%   )r   r   r   r=   r   r   r   r>   r
   r@   r   r   rC   r    r    r    r!   r?   M   s    

r?   c                   @   s|   e Zd ZdZededee fddZede	dee	 fddZ
ede	d	ee defd
dZede	deddfddZdS )SegmentManagerzfInterface for a pluggable strategy for creating, retrieving and instantiating
    segments as required
collectionr(   c                 C   r)   )zsReturn the segments required for a new collection. Returns only segment data,
        does not persist to the SysDBNr    )r&   rE   r    r    r!   create_segmentse      zSegmentManager.create_segmentscollection_idc                 C   r)   )zDelete any local state for all the segments associated with a collection, and
        returns a sequence of their IDs. Does not update the SysDB.Nr    )r&   rH   r    r    r!   delete_segmentsk   rG   zSegmentManager.delete_segmentstypec                 C   r)   )a`  Return the segment that should be used for servicing queries to a collection.
        Implementations should cache appropriately; clients are intended to call this
        method repeatedly rather than storing the result (thereby giving this
        implementation full control over which segment impls are in or out of memory at
        a given time.)Nr    )r&   rH   rJ   r    r    r!   get_segmentt   s   zSegmentManager.get_segment	hint_typeNc                 C   r)   )zSignal to the segment manager that a collection is about to be used, so that
        it can preload segments as needed. This is only a hint, and implementations are
        free to ignore it.Nr    )r&   rH   rL   r    r    r!   hint_use_collection}   r0   z"SegmentManager.hint_use_collection)r   r   r   r=   r   r   r   r   rF   r   rI   r   r4   rK   r	   rM   r    r    r    r!   rD   a   s    rD   N) typingr   r   r   r   abcr   chromadb.typesr   r   r	   r
   r   r   r   r   r   r   r   chromadb.configr   r   uuidr   enumr   r   r"   r4   r6   r?   rD   r    r    r    r!   <module>   s    4	