Neighbors Brute Force Module

View as Markdown

Rust module: cuvs::neighbors::brute_force

Source: rust/cuvs/src/neighbors/brute_force.rs

Brute-force (exact) k-NN.

Build an [Index] over a dataset, then search it with device-resident queries and output buffers. Tensors are borrowed through the AsDlTensor / AsDlTensorMut traits; see the dlpack module for the tensor model and examples/cagra.rs for the same build/search workflow.

crate::neighbors::filters::{Bitmap, Bitset, Filter, FilterKind}

1pub use crate::neighbors::filters::{Bitmap, Bitset, Filter, FilterKind};

Source: rust/cuvs/src/neighbors/brute_force.rs:20

BruteForceError

1#[derive(Debug, thiserror::Error)]
2#[non_exhaustive]
3pub enum BruteForceError {
4 /* variants omitted */
5}

Error type for brute-force operations.

Source: rust/cuvs/src/neighbors/brute_force.rs:28

Index

1#[derive(Debug)]
2pub struct Index<'d> {
3 /* private fields */
4}

Brute-force KNN index.

Methods

NameSource
buildrust/cuvs/src/neighbors/brute_force.rs:54
searchrust/cuvs/src/neighbors/brute_force.rs:86
search_filteredrust/cuvs/src/neighbors/brute_force.rs:105

build

1pub fn build<T>(res: &Resources, metric: DistanceType, dataset: &'d T) -> Result<Index<'d>>
2where
3T: AsDlTensor + ?Sized,

Builds a brute-force index over dataset for exact k-NN search.

metric selects the distance (use [DistanceType::LpUnexpanded] to set the Minkowski exponent p). dataset is a row-major matrix on the host or device implementing [AsDlTensor]; the C++ index keeps a non-owning view of it, so the returned [Index] borrows it for 'd and cannot outlive it.

Source: rust/cuvs/src/neighbors/brute_force.rs:54

1pub fn search<Q, N, D>(
2&self,
3res: &Resources,
4queries: &Q,
5neighbors: &mut N,
6distances: &mut D,
7) -> Result<()>
8where
9Q: AsDlTensor + ?Sized,
10N: AsDlTensorMut + ?Sized,
11D: AsDlTensorMut + ?Sized,

Searches the index for the k nearest neighbors of each query.

queries, neighbors, and distances must reside in device memory and implement [AsDlTensor] / [AsDlTensorMut]. neighbors receives the neighbor indices and distances their distances; both are written in place.

Source: rust/cuvs/src/neighbors/brute_force.rs:86

search_filtered

1pub fn search_filtered<Q, N, D, K>(
2&self,
3res: &Resources,
4queries: &Q,
5neighbors: &mut N,
6distances: &mut D,
7filter: &Filter<'_, K>,
8) -> Result<()>
9where
10Q: AsDlTensor + ?Sized,
11N: AsDlTensorMut + ?Sized,
12D: AsDlTensorMut + ?Sized,
13K: FilterKind,

Searches the index using a row bitset or per-query bitmap filter.

Source: rust/cuvs/src/neighbors/brute_force.rs:105

Source: rust/cuvs/src/neighbors/brute_force.rs:39