ruvector/crates
ruvnet e7f5a391f8 feat(ruvector-py): Python SDK M1 — RaBitQ wheel via PyO3 + maturin
First milestone of the ruvector Python SDK per
docs/sdk/04-milestones.md § "M1 — RaBitQ-only Python wheel". A new
workspace crate `crates/ruvector-py/` exposes ruvector-rabitq as a
Python extension module via PyO3 + maturin with an abi3-py39 wheel
target.

## Surface

```python
import numpy as np
import ruvector

vectors = np.random.randn(10_000, 768).astype(np.float32)
idx = ruvector.RabitqIndex.build(vectors, rerank_factor=20)
results = idx.search(vectors[0], k=10)  # → list[(id, distance)]

idx.save("vectors.rbpx")
idx2 = ruvector.RabitqIndex.load("vectors.rbpx")
```

## What ships

- `Cargo.toml`: cdylib crate, pyo3 0.22 with `extension-module` +
  `abi3-py39`, numpy 0.22, path dep on `ruvector-rabitq`.
- `pyproject.toml`: maturin build backend, `python-source = "python"`,
  `module-name = "ruvector._native"`. PyPI name: `ruvector`.
- `src/lib.rs`: defines the `_native` Python module, registers the
  `RabitqIndex` class and `RuVectorError` exception.
- `src/rabitq.rs`: `RabitqIndex` wrapping `RabitqPlusIndex` with
  `build` / `search` / `save` / `load` / `__len__` / `__repr__`.
  All hot paths release the GIL via `py.allow_threads`.
- `src/error.rs`: maps `RabitqError` → `RuVectorError(PyException)`.
- `python/ruvector/__init__.py`: thin re-export shim from `_native`.
- `python/ruvector/py.typed`: PEP 561 marker.
- Type stubs: `python/ruvector/__init__.pyi` + `stubs/ruvector/__init__.pyi`.
- `tests/test_smoke.py`: pytest coverage of build/search/save/load,
  dimension-mismatch error, len/repr, abi3 marker.
- `README.md`: install instructions + 30-second example.

## Real ruvector-rabitq API used

The plan's M1 sketch matched closely. Concrete surface:
- `RabitqPlusIndex::from_vectors_parallel(dim, seed, rerank_factor, items)`
  — used in `build()`. Added `seed` kwarg (default 42) since the ctor
  requires it.
- `idx.search_with_rerank(query, k, rerank_factor) -> Vec<SearchResult>`
  — used in `search()`.
- `persist::save_index` / `persist::load_index` / `persist::MAGIC`
  — `.rbpx` v1 wire format. `load()` peeks the 24-byte header to
  recover the seed before calling `load_index`.
- `idx.export_items()` — used in `save()` because the seed-based
  format needs the items handed back; `RabitqPlusIndex` doesn't
  expose `originals_flat` directly.

## Verification

  cargo build -p ruvector-py            → clean
  cargo clippy -p ruvector-py --all-targets --no-deps -- -D warnings  → exit 0
  cargo test -p ruvector-py             → 0 tests, 0 failed (no Rust unit
                                          tests yet; logic is in PyO3
                                          methods that need the Python
                                          interpreter)

`maturin develop` + `pytest` + `mypy --strict` not run — the
sandbox doesn't have those binaries. The Python tests are written
to the M1 acceptance shape and will run as soon as maturin is
present in the dev env.

## Deviations from the M1 plan (docs/sdk/04-milestones.md)

1. One `RabitqIndex` class instead of the plan's four
   (`FlatF32Index`, `RabitqIndex`, `RabitqPlusIndex`, `RabitqAsymIndex`).
   Adding the others is mechanical follow-up — same register pattern.
2. Single `RuVectorError` exception instead of the subclass tree
   (`DimensionMismatch`, `EmptyIndex`, `PersistError`). Subclasses
   are M2+ scope per the plan.
3. No `_typing.py`, no `_version.py`. `__version__` sourced from
   `env!("CARGO_PKG_VERSION")` via the compiled module.
4. No CI workflow, no Sphinx, no notebook — deferred. Scoped to
   "everything needed for pip install to work".
5. `build()` takes a `seed` kwarg (default 42) — not in the M1
   sketch but required by the underlying ctor.

## Two pyo3 0.22 quirks worth flagging

- `pyo3::create_exception!` macro emits `cfg(feature = "gil-refs")`
  unexpected_cfg warnings. Worked around with `#![allow(unexpected_cfgs)]`
  at crate root, comment explains the upstream issue.
- `#[pymethods]` macro expansion triggers
  `clippy::useless_conversion` false-positives on `?`-on-PyResult.
  Suppressed at crate root with comment.

LoC total: 881 (Cargo.lock excluded; 768 source + 113 lockfile drift).
M1 plan budgeted ~1300 — under because we shipped the user-requested
single-class scope, not the plan's full surface.

Refs: docs/sdk/04-milestones.md M1, docs/sdk/02-strategy.md

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-25 20:41:52 -04:00
..
agentic-robotics-benchmarks feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00
agentic-robotics-core feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00
agentic-robotics-embedded feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00
agentic-robotics-mcp feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00
agentic-robotics-node feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00
agentic-robotics-rt feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00
cognitum-gate-kernel chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
cognitum-gate-tilezero chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
mcp-brain chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
mcp-brain-server chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
mcp-gate style: apply rustfmt across entire codebase 2026-01-28 17:00:26 +00:00
micro-hnsw-wasm feat(quality): ADR-144 monorepo quality analysis — Phase 1 critical fixes (#336) 2026-04-06 21:19:13 -04:00
neural-trader-coherence style: apply cargo fmt formatting 2026-03-12 20:57:18 -04:00
neural-trader-core feat: add neural-trader-wasm crate with WASM bindings and ADR-086 2026-03-08 16:17:58 +00:00
neural-trader-replay style: apply cargo fmt formatting 2026-03-12 20:57:18 -04:00
neural-trader-strategies chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
neural-trader-wasm style: apply cargo fmt formatting 2026-03-12 20:57:18 -04:00
prime-radiant chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
profiling Reorganize repository structure 2025-11-19 20:53:37 +00:00
ruQu chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruqu-algorithms chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruqu-core chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruqu-exotic chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruqu-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-attention chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-attention-cli fix: migrate attention/dag/tiny-dancer to workspace versioning and fix all dep version specs 2026-02-23 13:29:46 +00:00
ruvector-attention-node chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-attention-unified-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-attention-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-attn-mincut chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-bench chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-cli chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-cluster chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-cnn docs(sdk): add deep planning review for ruvector Python SDK 2026-04-25 20:28:54 -04:00
ruvector-cnn-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-cognitive-container fix: format all files, add EXO crate READMEs, convert path deps to version deps 2026-02-27 16:21:14 +00:00
ruvector-coherence chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-collections chore(workspace): cargo fmt — mechanical whitespace fix across 427 files 2026-04-24 10:44:02 -04:00
ruvector-consciousness chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-consciousness-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-core chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-crv chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-dag chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-dag-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-decompiler chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-decompiler-wasm feat(decompiler): WASM Louvain pipeline — npx now produces 589+ modules 2026-04-03 15:25:23 +00:00
ruvector-delta-consensus chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-delta-core chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-delta-graph chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-delta-index chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-delta-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-diskann chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-diskann-node chore(workspace): cargo fmt — mechanical whitespace fix across 427 files 2026-04-24 10:44:02 -04:00
ruvector-dither chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-domain-expansion chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-domain-expansion-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-economy-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-exotic-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-filter chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-fpga-transformer chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-fpga-transformer-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-gnn chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-gnn-node chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-gnn-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-graph chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-graph-node chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-graph-transformer chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-graph-transformer-node chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-graph-transformer-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-graph-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-hyperbolic-hnsw feat(prime-radiant): Universal Coherence Engine with Sheaf Laplacian AI Safety (#131) 2026-01-22 21:27:27 -05:00
ruvector-hyperbolic-hnsw-wasm feat(training): RuvLTRA v2.4 Ecosystem Edition - 100% routing accuracy (#123) 2026-01-20 20:08:30 -05:00
ruvector-kalshi chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-learning-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-math chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-math-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-metrics feat(quality): ADR-144 monorepo quality analysis — Phase 1 critical fixes (#336) 2026-04-06 21:19:13 -04:00
ruvector-mincut chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-mincut-brain-node fix(brain): defer sparsifier build on startup for large graphs 2026-03-24 12:29:52 +00:00
ruvector-mincut-gated-transformer chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-mincut-gated-transformer-wasm fix: resolve compilation errors across workspace 2026-03-16 23:15:25 -04:00
ruvector-mincut-node chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-mincut-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-nervous-system chore(workspace): fix pre-existing test flakes + add CI -D warnings enforcement 2026-04-25 20:17:47 -04:00
ruvector-nervous-system-wasm style: apply rustfmt across entire codebase 2026-01-28 17:00:26 +00:00
ruvector-node chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-postgres chore: bump workspace to v2.2.0, sona to v0.2.0 2026-04-20 13:56:53 -04:00
ruvector-profiler fix: apply cargo fmt across workspace and fix CI issues 2026-02-21 20:56:38 +00:00
ruvector-py feat(ruvector-py): Python SDK M1 — RaBitQ wheel via PyO3 + maturin 2026-04-25 20:41:52 -04:00
ruvector-rabitq perf(rabitq): AVX-512 VPOPCNTDQ scan variant — +10.5% single-thread at n=100k 2026-04-24 09:55:12 -04:00
ruvector-raft chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-replication chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-robotics chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-router-cli fix: add version specs to path dependencies for crates.io publishing 2026-02-23 03:14:45 +00:00
ruvector-router-core chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-router-ffi fix(router): 7 bugs in @ruvector/router — broken wrapper, score inversion, DB crashes (#333) 2026-04-06 16:27:46 -04:00
ruvector-router-wasm fix: add version specs to path dependencies for crates.io publishing 2026-02-23 03:14:45 +00:00
ruvector-rulake chore(rulake): add version to ruvector-rabitq path dep for crates.io 2026-04-24 10:15:18 -04:00
ruvector-server chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-snapshot chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-solver chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-solver-node chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-solver-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-sparse-inference chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-sparse-inference-wasm fix: resolve 5 P0 critical issues + 2 pre-existing compile errors 2026-03-06 14:03:42 +00:00
ruvector-sparsifier chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-sparsifier-wasm chore(workspace): cargo fmt — mechanical whitespace fix across 427 files 2026-04-24 10:44:02 -04:00
ruvector-temporal-tensor chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-temporal-tensor-wasm feat: Add ADR-017 temporal tensor compression with tiered quantization 2026-02-06 00:28:21 +00:00
ruvector-tiny-dancer-core chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-tiny-dancer-node chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-tiny-dancer-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-verified chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-verified-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvector-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvix chore(workspace): make full cargo build --workspace exit 0 2026-04-25 18:06:27 -04:00
ruvllm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvllm-cli chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
ruvllm-wasm chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
rvAgent chore(workspace): fix pre-existing test flakes + add CI -D warnings enforcement 2026-04-25 20:17:47 -04:00
rvf chore(workspace): cargo fmt nested workspaces — rvf/, examples/* 2026-04-24 10:51:14 -04:00
rvlite chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
rvm feat(quality): ADR-144 monorepo quality analysis — Phase 1 critical fixes (#336) 2026-04-06 21:19:13 -04:00
sona chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
thermorust chore(workspace): clippy-clean every crate under -D warnings + fmt + repair pre-existing broken benches 2026-04-25 17:00:20 -04:00
agentic-robotics-README.md feat: Add agentic-robotics crates and SOTA integration research 2026-02-27 02:54:01 +00:00