Release 0.6.3
Merged
ST
14d ago+6296+6296+0123456789012345678901234567890123456789-1559-1559-0123456789012345678901234567890123456789
Summary by cubic
Merges dev into main as release 0.6.3. Adds new LP/MILP input forms (sparse rows, per-row senses, variable bounds, binary variables), an incremental MilpModel with warm re-solves, and makes strongly_connected_components, articulation_points and bridges iterative so deep graphs no longer raise RecursionError. Graph and solver results no longer depend on set/input order, and the Python and Rust backends are bit-identical.
Behavior changes
solve_lpandsolve_milpaccept sparse rows,senses,lb/ubandbinary; the 0.6.2 call form stays unchanged.MilpModeladds rows and re-solves warm from a kept simplex basis;solve_lexicographicoptimizes objectives in priority order.- Louvain now aggregates communities to a coarser graph; PageRank convergence checks the largest score change against
tol. - A new bounded-variable dense-tableau simplex kernel (Python and Rust) powers all LP/MILP solves, and PageRank gains a Rust
pagerankbackend.
Tooling and release
- Version now lives only in
rust/Cargo.toml; publishing builds abi3 wheels per platform with maturin and reads the release tag from Cargo.toml. - Rust is pinned via
rust-toolchain.toml, PyO3 bumped to 0.29 withabi3-py312, and the minimum supported Rust is 1.88; lint and type-check CI no longer build the extension, and a newrust-lintjob runs clippy on the pinned toolchain. - Golden-result and determinism tests pin solver outputs; an intended output change must also update the digests and CHANGELOG
Result changes.