Release 0.6.3

Merged
ST
14d ago
+6296-1559

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_lp and solve_milp accept sparse rows, senses, lb/ub and binary; the 0.6.2 call form stays unchanged.
  • MilpModel adds rows and re-solves warm from a kept simplex basis; solve_lexicographic optimizes 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 pagerank backend.

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 with abi3-py312, and the minimum supported Rust is 1.88; lint and type-check CI no longer build the extension, and a new rust-lint job 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.