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 annrow-row matrix isdata[i + j * nrow]. - 0-based indices and
usizelengths, 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'sINFO, withINFO < 0mapped toBadShapeandINFO > 0toSingularorConvergence. - An AVX2+FMA micro-kernel is selected at run time on x86-64; every other target
(including
wasm32) takes the portable blocked kernel.
Tests
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 \
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
- 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