///|
/// Sparse revised simplex kernel.
///
/// What the kernel solves is the standard form
///
/// min cᵀx subject to A x = b, x ≥ 0
///
/// with `A` stored in CSC form. Model level constraints (`≤` / `≥` / `=`) become
/// that form by adding slack, surplus and artificial columns; model level bounds
/// become shifts, free-variable splits and explicit bound rows — `problem.mbt`
/// documents each transformation and its effect on the objective constant.
///
/// Two implementation choices are deliberate and worth stating:
///
/// - **Sparse columns, sparse basis factors.** Pricing walks CSC columns, so the
/// cost of one reduced cost is proportional to that column's nonzeros rather than
/// to the number of rows. The basis is factored as a sparse LU and updated in
/// product form between factorizations (`P·B = L·U`, `B⁻¹ = E_k·…·E₁·B₀⁻¹`), so
/// both the problem data and the linear algebra are sparse: the memory a run
/// needs follows `O(nnz + fill)` rather than the `m²` a dense inverse costs.
/// `lu.mbt` documents the factorization and `revised.mbt` the iteration.
/// - **Every failure is a status.** Infeasible, unbounded, iteration limit and
/// numerical failure stay distinct, and a problem the kernel did not solve
/// never comes back with a plausible looking answer.