Repository navigation
refactor!: split RaBitQ into core, FastScan, and index components - #139
Merged
Merged
Conversation
Expose independent CMake components and a stable float32 quantization API with caller-owned workspace. Keep ANN implementations behind lightweight headers and support core/FastScan consumers without OpenMP. Consolidate SIMD dispatch and reusable query preparation, harden ownership, index loading and Python boundaries, and expand consumer/regression coverage. Update examples, benchmarks and documentation for the modular API. BREAKING CHANGE: remove the umbrella target and legacy forwarding headers; consumers must select the appropriate module targets and canonical headers.
Use a shared exported Eigen alignment policy so native libraries and generic consumers agree on TLS/storage allocation and deallocation. Verify the ABI requirements in installed consumers and document the configuration. Normalize source paths before FetchContent generates its CMake subbuild, and exercise Windows-style paths in the consumer matrix on every host. Reject non-finite scoring comparisons. Compare successful fault-injection attempts and retries against complete reference codes and factors while preserving the upstream OpenMP 2.0 compatibility changes. Validated native/generic installed and source consumers, the OpenMP ON/OFF core/FastScan matrix, full native and sanitizer C++ suites, Python tests, clang-tidy, formatting, and the strict documentation build on Linux x86-64.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Split RaBitQ into
core,fastscan, andindexso applications can use quantization and batch scoring without linking ANN indexes. Core and FastScan also support builds without OpenMP.Add the stable float32 core API v1 with caller-owned buffers and workspace, move index implementations out of public headers, and update CMake packages and examples for the new components.
This is a breaking C++ change for 0.7.0: the umbrella target and forwarding headers are removed. HNSW
num_pointsnow counts live points;num_stored_pointsincludes removed records. Python imports and index class names stay the same, and saved index formats remain compatible with 0.6.0.Refresh the documentation layout, expand the migration and integration guides, and clarify the rotation and FastScan precision descriptions against the papers and implementation. Historical benchmark results remain separate from measurements of this branch.
Testing
Cross-platform validation is complete. Windows checks used MSVC 2026 and Python 3.13 with native optimization disabled:
Full clang-tidy 15 validation remains for CI; that version was unavailable in the local Windows setup.