use iqdb_distance::{compute, compute_batch};
use iqdb_types::DistanceMetric;
fn main() -> Result<(), iqdb_types::IqdbError> {
let metric = DistanceMetric::Euclidean;
let query = [0.0_f32, 0.0, 0.0];
let candidate = [3.0_f32, 4.0, 0.0];
println!(
"single: {:?} distance = {:.4}",
metric,
compute(metric, &query, &candidate)?,
);
let candidates: [&[f32]; 3] = [&[1.0, 0.0, 0.0], &[0.0, 2.0, 0.0], &[3.0, 4.0, 0.0]];
let mut out = [0.0_f32; 3];
compute_batch(metric, &query, &candidates, &mut out)?;
println!("batch: {out:?}");
for metric in [
DistanceMetric::Cosine,
DistanceMetric::DotProduct,
DistanceMetric::Euclidean,
DistanceMetric::Manhattan,
DistanceMetric::Hamming,
] {
let d = compute(metric, &query, &candidate)?;
println!(" {metric:?}: {d:.4}");
}
Ok(())
}