From a9d014f651ad1f1bf67cbb5fec5ec1aed110d473 Mon Sep 17 00:00:00 2001 From: Mark Hildebrand Date: Sat, 2 May 2026 12:15:12 -0700 Subject: [PATCH 1/2] Remove unnecessary distance function implementations. --- .../async_/bf_tree/quant_vector_provider.rs | 4 +- .../fast_memory_quant_vector_provider.rs | 4 +- .../async_/memory_quant_vector_provider.rs | 43 +++-------------- .../src/model/pq/distance/dynamic.rs | 46 ------------------- 4 files changed, 11 insertions(+), 86 deletions(-) diff --git a/diskann-providers/src/model/graph/provider/async_/bf_tree/quant_vector_provider.rs b/diskann-providers/src/model/graph/provider/async_/bf_tree/quant_vector_provider.rs index 0d26fa680..c3c08bb58 100644 --- a/diskann-providers/src/model/graph/provider/async_/bf_tree/quant_vector_provider.rs +++ b/diskann-providers/src/model/graph/provider/async_/bf_tree/quant_vector_provider.rs @@ -361,8 +361,8 @@ mod tests { let d = provider.distance_computer(); assert_eq!( d.evaluate_similarity( - &provider.get_vector_sync(0).unwrap(), - &provider.get_vector_sync(3).unwrap() + provider.get_vector_sync(0).unwrap().as_slice(), + provider.get_vector_sync(3).unwrap().as_slice(), ), 2.0 ); diff --git a/diskann-providers/src/model/graph/provider/async_/fast_memory_quant_vector_provider.rs b/diskann-providers/src/model/graph/provider/async_/fast_memory_quant_vector_provider.rs index 62d9c05e1..63aad4566 100644 --- a/diskann-providers/src/model/graph/provider/async_/fast_memory_quant_vector_provider.rs +++ b/diskann-providers/src/model/graph/provider/async_/fast_memory_quant_vector_provider.rs @@ -452,13 +452,13 @@ mod tests { // Distance Computer. let d = provider.distance_computer(); assert_eq!( - d.evaluate_similarity(&provider.get_vector_sync(0), &provider.get_vector_sync(3)), + d.evaluate_similarity(provider.get_vector_sync(0), provider.get_vector_sync(3),), 2.0 ); let slice: &[f32] = &[-0.5, -0.5]; assert_eq!( - d.evaluate_similarity(slice, &provider.get_vector_sync(3)), + d.evaluate_similarity(slice, provider.get_vector_sync(3)), expected, ); } diff --git a/diskann-providers/src/model/graph/provider/async_/memory_quant_vector_provider.rs b/diskann-providers/src/model/graph/provider/async_/memory_quant_vector_provider.rs index dca7ea762..4c79ce2e9 100644 --- a/diskann-providers/src/model/graph/provider/async_/memory_quant_vector_provider.rs +++ b/diskann-providers/src/model/graph/provider/async_/memory_quant_vector_provider.rs @@ -18,7 +18,7 @@ use diskann::{ANNError, ANNResult}; #[cfg(test)] use diskann_quantization::CompressInto; use diskann_utils::object_pool::ObjectPool; -use diskann_vector::{DistanceFunction, PreprocessedDistanceFunction, distance::Metric}; +use diskann_vector::distance::Metric; use super::{VectorGuard, common::TestCallCount}; #[cfg(test)] @@ -283,37 +283,6 @@ impl storage::bin::GetData for MemoryQuantVectorProviderAsync { } } -/// Overload `DistanceFunction` for `Guard>>` by dereferencing the -/// guard to a slice. -impl DistanceFunction<&[f32], &Guard>>, f32> for DistanceComputer { - #[inline(always)] - fn evaluate_similarity(&self, left: &[f32], right: &Guard>>) -> f32 { - let right: &[u8] = right; - self.evaluate_similarity(left, right) - } -} - -/// Overload `DistanceFunction` for `Guard>>` by dereferencing the -/// guard to a slice. -impl DistanceFunction<&Guard>>, &Guard>>, f32> for DistanceComputer { - #[inline(always)] - fn evaluate_similarity(&self, left: &Guard>>, right: &Guard>>) -> f32 { - let left: &[u8] = left; - let right: &[u8] = right; - self.evaluate_similarity(left, right) - } -} - -/// Overload `PreprocessedDistanceFunction` for `Guard>>` by dereferencing the -/// guard to a slice. -impl PreprocessedDistanceFunction<&Guard>>, f32> for QueryComputer { - #[inline(always)] - fn evaluate_similarity(&self, changing: &Guard>>) -> f32 { - let changing: &[u8] = changing; - self.evaluate_similarity(changing) - } -} - /////////// // Tests // /////////// @@ -322,6 +291,8 @@ impl PreprocessedDistanceFunction<&Guard>>, f32> for QueryComputer { mod tests { use std::num::NonZeroUsize; + use diskann_vector::{DistanceFunction, PreprocessedDistanceFunction}; + use crate::storage::VirtualStorageProvider; use super::*; @@ -372,7 +343,7 @@ mod tests { let c = provider.query_computer(&[-0.5, -0.5]).unwrap(); let expected: f32 = 1.5 * 1.5 * 2.0; assert_eq!( - c.evaluate_similarity(&provider.get_vector_sync(3).unwrap()), + c.evaluate_similarity(provider.get_vector_sync(3).unwrap().as_slice()), expected ); @@ -380,15 +351,15 @@ mod tests { let d = provider.distance_computer(); assert_eq!( d.evaluate_similarity( - &provider.get_vector_sync(0).unwrap(), - &provider.get_vector_sync(3).unwrap() + provider.get_vector_sync(0).unwrap().as_slice(), + provider.get_vector_sync(3).unwrap().as_slice(), ), 2.0 ); let slice: &[f32] = &[-0.5, -0.5]; assert_eq!( - d.evaluate_similarity(slice, &provider.get_vector_sync(3).unwrap()), + d.evaluate_similarity(slice, &**provider.get_vector_sync(3).unwrap()), expected, ); } diff --git a/diskann-providers/src/model/pq/distance/dynamic.rs b/diskann-providers/src/model/pq/distance/dynamic.rs index cefacacde..c41955efb 100644 --- a/diskann-providers/src/model/pq/distance/dynamic.rs +++ b/diskann-providers/src/model/pq/distance/dynamic.rs @@ -233,52 +233,6 @@ where } } -/// Perform a comparison between a full-precision vector and quantized vector. -impl DistanceFunction<&[f32], &&[u8], f32> for DistanceComputer -where - T: Deref, -{ - #[inline(always)] - fn evaluate_similarity(&self, fp: &[f32], q: &&[u8]) -> f32 { - let q: &[u8] = q; - self.evaluate_similarity(fp, q) - } -} - -impl DistanceFunction<&[f32], &Vec, f32> for DistanceComputer -where - T: Deref, -{ - #[inline(always)] - fn evaluate_similarity(&self, fp: &[f32], q: &Vec) -> f32 { - self.evaluate_similarity(fp, q.as_slice()) - } -} - -/// Perform a comparison between two quantized vectors. -impl DistanceFunction<&&[u8], &&[u8], f32> for DistanceComputer -where - T: Deref, -{ - #[inline(always)] - fn evaluate_similarity(&self, q0: &&[u8], q1: &&[u8]) -> f32 { - let q0: &[u8] = q0; - let q1: &[u8] = q1; - self.evaluate_similarity(q0, q1) - } -} - -/// Perform a comparison between two quantized vectors. -impl DistanceFunction<&Vec, &Vec, f32> for DistanceComputer -where - T: Deref, -{ - #[inline(always)] - fn evaluate_similarity(&self, q0: &Vec, q1: &Vec) -> f32 { - self.evaluate_similarity(q0.as_slice(), q1.as_slice()) - } -} - #[cfg(test)] mod tests { use std::marker::PhantomData; From 124dcd6f8100a2ae817205bd95becd3b7d9e5c7e Mon Sep 17 00:00:00 2001 From: Mark Hildebrand Date: Sat, 2 May 2026 13:55:41 -0700 Subject: [PATCH 2/2] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../model/graph/provider/async_/memory_quant_vector_provider.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/diskann-providers/src/model/graph/provider/async_/memory_quant_vector_provider.rs b/diskann-providers/src/model/graph/provider/async_/memory_quant_vector_provider.rs index 4c79ce2e9..06a22536e 100644 --- a/diskann-providers/src/model/graph/provider/async_/memory_quant_vector_provider.rs +++ b/diskann-providers/src/model/graph/provider/async_/memory_quant_vector_provider.rs @@ -359,7 +359,7 @@ mod tests { let slice: &[f32] = &[-0.5, -0.5]; assert_eq!( - d.evaluate_similarity(slice, &**provider.get_vector_sync(3).unwrap()), + d.evaluate_similarity(slice, provider.get_vector_sync(3).unwrap().as_slice()), expected, ); }