algebra_linear 1.2.0

Pure-Rust BLAS, LAPACK, and sparse LU
Documentation

algebra_linear - Pure-Rust BLAS, LAPACK, and sparse LU

No external library, no C in a normal build, nothing to link — it compiles for any target, including wasm32-unknown-unknown.

What is here

module contents
blas level 1–3: dgemm (+tn/nt/tt), dgemv (+trans), ddot, dnrm2, dasum, idamax, daxpy, dlange, dger, dsyrk, dtrsv (+transpose), dtrsm, and the complex twins zgemm (+transposes), zgemv (+trans), zger, zherk, zsyrk, zaxpy, zscal, ztrsv (+transpose), ztrsm, dznrm2
lapack drivers: dgesv, dgetrf, dgetrf_rect (the nrows x ncols panel), dgetri, dpotrf, dsyev, dgesvd, dgeev (+left vectors), dggev, and the complex zgesv, zgetrf, zgetrf_rect, zgetri, zpotrf, zheev, zgeev, zgesvd, zggev, plus the auxiliary routines; the TESTING/LIN accuracy checkers and the TESTING/MATGEN families are test-only and are not compiled into the crate
sparse a simplicial* sparse LU (CscView, SymbolicLu, LuFactors) and a supernodal* one (SymbolicSupernodal, SupernodalLu) in CSC form, with real and complex scalars, plus the ported COLAMD ordering; LuSymbolic/LuMethod choose between the methods *ported from faer -- see also reference #1

Not every BLAS or LAPACK routine is here: the port covers the drivers a dense linear-algebra caller needs, plus a sparse LU with a COLAMD ordering. Each function names the reference source it follows (for example "transcription of dsytrd/dlatrd") so it can be checked against LAPACK 3.12.1.

Conventions

  • Column-major, so element (i, j) of an nrow-row matrix is data[i + j * nrow].
  • 0-based indices and usize lengths, unlike the Fortran the routines are derived from.
  • No workspace arguments. The workspace a Fortran routine asks the caller for is allocated internally here.
  • Functions return Result<(), LapackError> rather than LAPACK's INFO, with INFO < 0 mapped to BadShape and INFO > 0 to Singular or Convergence.
  • An AVX2+FMA micro-kernel is selected at run time on x86-64; every other target (including wasm32) takes the portable blocked kernel.

Tests

cargo test                      # the kernels against closed-form results and invariants

The reference-parity harness is development-only and lives behind a feature: it compiles c_code/reference_lapack.c against a locally built LAPACK 3.12.1 and compares the kernels against it.

ALGEBRA_LINEAR_DEV_LAPACK_ROOT=/path/to/lapack/build \
  cargo test --features dev_lapack            # the same, plus the parity tests

Do not reach for --all-features here: dev_lapack is the only feature, so it selects the harness, which cannot build without a local LAPACK.

ALGEBRA_LINEAR_DEV_LAPACK_ROOT must be a CMake build directory holding include/lapack.h and lib/liblapack.so. There is no default: recording one would put a developer's directory layout into released source.

License

BSD 3-Clause. The dense kernels are based on LAPACK 3.12.1 and BLAS. Their licenses are in the LICENSE file. The sparse LU and its COLAMD ordering are based on faer (MIT) and SuiteSparse COLAMD (BSD 3-Clause). Their notices are also in the license file. The Rust code is by Dorival Pedroso. If you share a binary that statically links this crate, you must include the LICENSE file (BSD 3-Clause, clause 2).

References

  1. Kazdadi, S. Q. E., (2026). faer: A linear algebra library for the Rust programming language. Journal of Open Source Software, 11(123), 6099, https://doi.org/10.21105/joss.06099