Repository navigation
feat: release lance-csr 0.1.0 - #1
Merged
Merged
Conversation
Replace the lance-graph tree with lance-csr, developed on top of the same base commit (3014793): Lance 13 / DataFusion 54 / Arrow 58 / PyO3 0.28, a lazy and refreshable CypherEngine over Lance snapshots, CSR-backed traversal as DataFusion extension operators, much wider Cypher support (alternation, OPTIONAL MATCH, EXISTS, chained WITH, shortestPath, CASE, list functions), and fixes for several correctness bugs inherited from lance-graph. Delta Lake, Unity Catalog, the connector layer and the legacy application code are removed.
prrao87
marked this pull request as ready for review
October 24, 2026 01:34
Replace the unexercised wheels workflow with python-publish.yml: a manylinux_2_28 x86-64 wheel (zig) and a native macOS arm64 wheel plus an sdist, each wheel tested on CPython 3.11-3.13 in clean environments with Rust removed from PATH (a smoke test and the full suite), and PyPI trusted publishing on a published release through the pypi environment. Also fix the doctest path in python-test.yml and document installation.
rust-toolchain.toml pins 1.96.0, which overrides the toolchain the style workflow installs; that toolchain had no clippy component, so the clippy job failed before linting anything.
Build duplicated Rust Tests, and the coverage job uploaded to an unconfigured Codecov. Test, lint and format every workspace crate, point the Rust cache at the real target directories, and run Python Tests when any crate changes.
Build abi3-py312 wheels and test them on CPython 3.12, 3.13 and 3.14.
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.
Why
This fork starts at lance-graph
3014793. We developed lance-csr separately, on top of that same commit, and the changes are too broad to replay as separate diffs: dependency upgrades, removed subsystems, a new execution path and much wider Cypher support. This PR replaces the tree with lance-csr as its first release, 0.1.0, which we then plan to publish to PyPI aslance-csrand maintain from here.What changed
Dependencies and scope
lance_csr(distributionlance-csr). The Rust crates keep theirlance-graph*names for now.Engine
CypherEngineholds Lance snapshots instead of copies. You choose per table: passlance.dataset(...)to keep a table on disk (read lazily, and refreshable), or.to_table()to load it into memory.refresh()swaps in new Lance versions atomically, andexecute_batches()streams results.CSR traversal (
use_csr=True)refresh()updates the CSR incrementally (appended edges plus tombstones) instead of rebuilding it.Planning
Cypher, now enough for all 14 LDBC Interactive complex queries:
[:A|B]alternation, also inside variable-length paths (with optional endpoint labels per relationship type), and multi-label nodes;WITH, includingWITH DISTINCT,WITH ... WHERE, and nodes carried throughWITH;OPTIONAL MATCH,EXISTS { ... }and pattern predicates;shortestPathandallShortestPaths, as a breadth-first search over the CSR;CASE, arithmetic, list literals and indexing,range,size,coalesce,toString,date_part,to_epoch_ms, andcollect(DISTINCT ...).Correctness fixes to behavior inherited from lance-graph, each with a regression test:
WITHdidn't end variable scope.collect()kept nulls.LIMIT -1wrapped around.Packaging and wheels
NOTICEcrediting lance-graph.macos-14runners; lance-graph never shipped one. An sdist covers other platforms.PATH, on CPython 3.12, 3.13 and 3.14 (the minimum supported version is 3.12). There it runs a smoke test (in-memory and on-disk tables, CSR traversal,shortestPath,refresh()) and the full Python test suite.vX.Y.Zpublishes to PyPI after every build and test passes. It uses trusted publishing through a protectedpypienvironment, and checks the tag against the package version. Pull requests and manual dry runs build and test without publishing.Validation
All local checks were run on macOS (Apple M5) from this branch.
cargo test --allpasses 582 tests;cargo clippy --all-targets --all-featuresandcargo fmt --checkare clean.PATH. The workflow YAML parses.🤖 Generated with Claude Code
Extensive benchmarking runs and testing by @prrao87