SparseLu
Sparse LU factorization P·B·Q = L·U of an m × m matrix, with Markowitz threshold pivoting: at each step the pivot (near-)minimises fill (the Markowitz count (rowNnz−1)·(colNnz−1) over the active submatrix, searched over a bounded set of lowest-count candidate columns à la Suhl & Suhl) among entries that are numerically acceptable (|a| ≥ τ·max|column|), so the factors stay sparse instead of filling toward O(m²). Both a row permutation P and a column permutation Q are produced; only the nonzeros of L/U are stored, so memory is O(nnz).
Right-looking Gaussian elimination over per-row hash maps; the factors are frozen into sparse arrays in both orientations (indexed by pivot position) so both solve directions are O(nnz) triangular solves. The forward direction's result is scattered back to original-column order by Q; the transposed direction's right-hand side is gathered by Q.
The portable SparseFactorization. Produced by SparseLapack.factor rather than constructed directly, so a caller that holds the interface can be handed a host solver's factors instead without changing. A singular matrix yields SingularSparseFactorization, never an instance of this class — every SparseLu is a complete factorization, which is why failedAt is constantly NOT_SINGULAR.
Functions
determinant
det(B) in floating point: sign(P)·sign(Q)·∏ uDiag / ∏ eᵢ — the factors are of E·B, so the row-equilibration product is divided back out (a no-op when equilibration is off). For an integer matrix the true determinant is an integer; this float value is only a guess of it.
solveInto
Solve B x = b, or Bᵀ x = b when transpose, into out.
The two directions are a simplex's FTRAN and BTRAN, and were spelled ftran/btran here until the sparse and dense halves were made to agree on one vocabulary: this is the same operation the dense Lapack.solve performs, so it carries the same name and the same transpose flag rather than a private one. b is indexed by original row and the result by original column.