mod index;
mod params;
pub use index::Index;
pub use params::{IndexParams, SearchParams};
use crate::dlpack::DLPackError;
use crate::error::LibraryError;
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
#[non_exhaustive]
pub enum CodebookGen {
PerSubspace,
PerCluster,
}
impl From<CodebookGen> for ffi::cuvsIvfPqCodebookGen {
fn from(v: CodebookGen) -> Self {
match v {
CodebookGen::PerSubspace => Self::CUVS_IVF_PQ_CODEBOOK_GEN_PER_SUBSPACE,
CodebookGen::PerCluster => Self::CUVS_IVF_PQ_CODEBOOK_GEN_PER_CLUSTER,
}
}
}
impl From<ffi::cuvsIvfPqCodebookGen> for CodebookGen {
fn from(v: ffi::cuvsIvfPqCodebookGen) -> Self {
match v {
ffi::cuvsIvfPqCodebookGen::CUVS_IVF_PQ_CODEBOOK_GEN_PER_SUBSPACE => Self::PerSubspace,
ffi::cuvsIvfPqCodebookGen::CUVS_IVF_PQ_CODEBOOK_GEN_PER_CLUSTER => Self::PerCluster,
}
}
}
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
#[non_exhaustive]
pub enum ListLayout {
Flat,
Interleaved,
}
impl From<ListLayout> for ffi::cuvsIvfPqListLayout {
fn from(v: ListLayout) -> Self {
match v {
ListLayout::Flat => Self::CUVS_IVF_PQ_LIST_LAYOUT_FLAT,
ListLayout::Interleaved => Self::CUVS_IVF_PQ_LIST_LAYOUT_INTERLEAVED,
}
}
}
impl From<ffi::cuvsIvfPqListLayout> for ListLayout {
fn from(v: ffi::cuvsIvfPqListLayout) -> Self {
match v {
ffi::cuvsIvfPqListLayout::CUVS_IVF_PQ_LIST_LAYOUT_FLAT => Self::Flat,
ffi::cuvsIvfPqListLayout::CUVS_IVF_PQ_LIST_LAYOUT_INTERLEAVED => Self::Interleaved,
}
}
}
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
#[non_exhaustive]
pub enum LutDType {
F32,
F16,
U8,
}
impl From<LutDType> for ffi::cudaDataType_t {
fn from(v: LutDType) -> Self {
match v {
LutDType::F32 => Self::CUDA_R_32F,
LutDType::F16 => Self::CUDA_R_16F,
LutDType::U8 => Self::CUDA_R_8U,
}
}
}
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
#[non_exhaustive]
pub enum InternalDistanceDType {
F32,
F16,
}
impl From<InternalDistanceDType> for ffi::cudaDataType_t {
fn from(v: InternalDistanceDType) -> Self {
match v {
InternalDistanceDType::F32 => Self::CUDA_R_32F,
InternalDistanceDType::F16 => Self::CUDA_R_16F,
}
}
}
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum IvfPqError {
#[error(transparent)]
Library(#[from] LibraryError),
#[error(transparent)]
DLPack(#[from] DLPackError),
#[error("invalid parameter: {0}")]
Validation(String),
}