mod index;
mod params;
pub use crate::dataset::{CuvsDataset, Dataset, DatasetKind, DatasetView, PaddedDataset};
pub use crate::neighbors::filters::{Bitset, Filter};
pub use index::{DeserializedIndex, 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 GraphBuildAlgo {
Auto,
IvfPq,
NnDescent,
IterativeCagraSearch,
Ace,
}
impl From<GraphBuildAlgo> for ffi::cuvsCagraGraphBuildAlgo {
fn from(v: GraphBuildAlgo) -> Self {
match v {
GraphBuildAlgo::Auto => Self::AUTO_SELECT,
GraphBuildAlgo::IvfPq => Self::IVF_PQ,
GraphBuildAlgo::NnDescent => Self::NN_DESCENT,
GraphBuildAlgo::IterativeCagraSearch => Self::ITERATIVE_CAGRA_SEARCH,
GraphBuildAlgo::Ace => Self::ACE,
}
}
}
impl From<ffi::cuvsCagraGraphBuildAlgo> for GraphBuildAlgo {
fn from(v: ffi::cuvsCagraGraphBuildAlgo) -> Self {
match v {
ffi::cuvsCagraGraphBuildAlgo::AUTO_SELECT => Self::Auto,
ffi::cuvsCagraGraphBuildAlgo::IVF_PQ => Self::IvfPq,
ffi::cuvsCagraGraphBuildAlgo::NN_DESCENT => Self::NnDescent,
ffi::cuvsCagraGraphBuildAlgo::ITERATIVE_CAGRA_SEARCH => Self::IterativeCagraSearch,
ffi::cuvsCagraGraphBuildAlgo::ACE => Self::Ace,
}
}
}
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
#[non_exhaustive]
pub enum SearchAlgo {
SingleCta,
MultiCta,
MultiKernel,
Auto,
}
impl From<SearchAlgo> for ffi::cuvsCagraSearchAlgo {
fn from(v: SearchAlgo) -> Self {
match v {
SearchAlgo::SingleCta => Self::SINGLE_CTA,
SearchAlgo::MultiCta => Self::MULTI_CTA,
SearchAlgo::MultiKernel => Self::MULTI_KERNEL,
SearchAlgo::Auto => Self::AUTO,
}
}
}
impl From<ffi::cuvsCagraSearchAlgo> for SearchAlgo {
fn from(v: ffi::cuvsCagraSearchAlgo) -> Self {
match v {
ffi::cuvsCagraSearchAlgo::SINGLE_CTA => Self::SingleCta,
ffi::cuvsCagraSearchAlgo::MULTI_CTA => Self::MultiCta,
ffi::cuvsCagraSearchAlgo::MULTI_KERNEL => Self::MultiKernel,
ffi::cuvsCagraSearchAlgo::AUTO => Self::Auto,
}
}
}
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
#[non_exhaustive]
pub enum HashMode {
Hash,
Small,
Auto,
}
impl From<HashMode> for ffi::cuvsCagraHashMode {
fn from(v: HashMode) -> Self {
match v {
HashMode::Hash => Self::HASH,
HashMode::Small => Self::SMALL,
HashMode::Auto => Self::AUTO_HASH,
}
}
}
impl From<ffi::cuvsCagraHashMode> for HashMode {
fn from(v: ffi::cuvsCagraHashMode) -> Self {
match v {
ffi::cuvsCagraHashMode::HASH => Self::Hash,
ffi::cuvsCagraHashMode::SMALL => Self::Small,
ffi::cuvsCagraHashMode::AUTO_HASH => Self::Auto,
}
}
}
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum CagraError {
#[error(transparent)]
Library(#[from] LibraryError),
#[error(transparent)]
DLPack(#[from] DLPackError),
#[error("path contains an interior NUL byte")]
InvalidPath(#[from] std::ffi::NulError),
#[error("invalid parameter: {0}")]
Validation(String),
}