Skip to content

Strengthen arguments to robust_prune. - #1358

Open
Mark Hildebrand (hildebrandmw) wants to merge 5 commits into
mainfrom
mhildebr/sorted-neighbors
Open

Strengthen arguments to robust_prune.#1358
Mark Hildebrand (hildebrandmw) wants to merge 5 commits into
mainfrom
mhildebr/sorted-neighbors

Conversation

@hildebrandmw

Copy link
Copy Markdown
Contributor

Make the sorted_cache argument a SortedNeighbors instead to structurally require sortedness. This removes the Eq bound from SortedNeighbors, which is left over from #1273, and provides a helper map_in for projecting SortedNeighbors.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR strengthens the graph::internal::prune::robust_prune API by requiring its candidate input to be a SortedNeighbors, making the sorted-by-distance invariant structural rather than a debug assertion. It also removes the lingering Eq bound from SortedNeighbors (left over from #1273) and introduces a SortedNeighbors::map_in helper to project a sorted neighbor list into another storage buffer while preserving sortedness.

Changes:

  • Change robust_prune to accept SortedNeighbors<'_, Option<V>> instead of a raw &[(f32, Option<V>)], removing the runtime sortedness assertion.
  • Refactor SortedNeighbors to drop the Eq bound and add map_in to project IDs into a separate, linearly accessible cache while preserving order.
  • Extend VerboseEq support in tests (notably for str and references).

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
diskann/src/test/cmp.rs Adds VerboseEq impl for references and expands leaf VerboseEq coverage (incl. str).
diskann/src/graph/internal/sorted_neighbors.rs Drops Eq constraint, makes SortedNeighbors Copy/Clone, adds map_in, and adds tests for mapping behavior.
diskann/src/graph/internal/prune.rs Updates robust_prune to accept SortedNeighbors candidates and adapts indexing/lookup logic accordingly.
diskann/src/graph/index.rs Uses SortedNeighbors::map_in to build the prune candidate cache and updates the robust_prune call site.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread diskann/src/test/cmp.rs
Comment on lines +111 to +118
impl<T> VerboseEq for &T
where
T: VerboseEq + ?Sized,
{
fn verbose_eq(&self, other: &Self) -> ANNResult<()> {
(*self).verbose_eq(*other)
}
}
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 93.33333% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 91.55%. Comparing base (158126e) to head (cb09c2d).

Files with missing lines Patch % Lines
diskann/src/graph/internal/sorted_neighbors.rs 93.02% 3 Missing ⚠️
diskann/src/graph/internal/prune.rs 85.71% 1 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #1358      +/-   ##
==========================================
- Coverage   91.55%   91.55%   -0.01%     
==========================================
  Files         521      521              
  Lines      100371   100410      +39     
==========================================
+ Hits        91898    91927      +29     
- Misses       8473     8483      +10     
Flag Coverage Δ
miri 91.55% <93.33%> (-0.01%) ⬇️
unittests 91.23% <93.33%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
diskann/src/graph/index.rs 96.47% <100.00%> (-0.02%) ⬇️
diskann/src/test/cmp.rs 98.37% <100.00%> (+0.02%) ⬆️
diskann/src/graph/internal/prune.rs 84.90% <85.71%> (-0.15%) ⬇️
diskann/src/graph/internal/sorted_neighbors.rs 96.47% <93.02%> (-3.53%) ⬇️

... and 4 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants