Files
turso/core/vector/distance.rs

32 lines
909 B
Rust

use super::vector_types::Vector;
use crate::Result;
pub(crate) mod euclidean;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum DistanceType {
/// Euclidean distance. This is a very common distance metric that
/// accounts for both magnitude and direction when determining the distance
/// between vectors. Euclidean distance has a range of [0, ∞).
Euclidean,
// TODO(asukamilet): Refactor the current `vector_types.rs` to integrate
#[allow(dead_code)]
/// Cosine distance. This is a measure of similarity between two vectors
Cosine,
}
pub trait DistanceCalculator {
#[allow(unused)]
fn distance_type() -> DistanceType;
fn calculate(v1: &[Vector], v2: &[Vector]) -> Result<f64>;
#[allow(unused)]
fn batch_calculate<'a>(
v1: &'a [Vector],
v2: &'a [Vector],
) -> Box<dyn Iterator<Item = Result<f64>> + 'a>;
}