A small version number, a meaningful correctness fix.
Today we released OxiBLAS 0.1.1 — a focused patch that fixes a subtle but important bug in the symmetric eigenvalue solver, one day after the 0.1.0 debut of pure Rust BLAS/LAPACK.
No C. No Fortran. No external shared libraries. No FFI overhead. No build hell. Just clean, memory-safe linear algebra that compiles to a single static binary and runs everywhere.
Why 0.1.1 matters
The symmetric eigenvalue decomposition (syev) reduces a matrix to tridiagonal form and then runs the implicit QR algorithm with Givens rotations to drive the off-diagonal to zero. In 0.1.0, the off-diagonal element during a QR sweep was stored as hypot(x, z) — which is always non-negative — instead of c * x - s * z, which preserves sign.
The consequence was precise and easy to miss: eigenvalues were correct, but for matrices that required multiple QR iterations the eigenvectors were computed incorrectly, because the Givens rotations were not accumulated into the eigenvector matrix with the right signs. Any code that consumed only the spectrum was fine; any code that relied on the eigenvectors — projections, PCA-style decompositions, spectral methods — could silently get wrong directions.
0.1.1 fixes the rotation bookkeeping so eigenvectors accumulate correctly across iterations. If you used eig/syev on real symmetric matrices in 0.1.0, this is the release you want.
Technical Deep Dive: where the fix lives
OxiBLAS keeps its eigensolvers in oxiblas-lapack, layered on the same workspace introduced in 0.1.0:
oxiblas-core— SIMD abstractions, scalar/complex types, memory managementoxiblas-matrix—Mat/MatRef/MatMutcolumn-major storageoxiblas-blas— Level 1/2/3 kernels that the QR sweep relies onoxiblas-lapack— LU, Cholesky, QR, SVD, and the symmetric/general EVD that this patch touches
The fix is in the tridiagonal QR step: the Givens rotation (c, s) that zeroes a sub-diagonal entry must produce the new off-diagonal value as c * x - s * z, and the same rotation must be applied to the accumulating eigenvector matrix. Restoring the signed update makes both halves — the implicit shift on the tridiagonal and the rotation of the eigenvectors — consistent, so the reconstructed A = V Λ Vᵀ holds to full precision again.
Getting Started
cargo add oxiblas
Symmetric eigendecomposition, now with trustworthy eigenvectors:
use oxiblas::prelude::*;
// A symmetric matrix whose eigenvectors matter
let a = Mat::from_rows(&[
&[2.0, 1.0, 0.0],
&[1.0, 2.0, 1.0],
&[0.0, 1.0, 2.0],
]);
let evd = SymmetricEvd::compute(a.as_ref()).expect("EVD failed");
let values = evd.eigenvalues(); // ascending eigenvalues
let vectors = evd.eigenvectors(); // columns are orthonormal eigenvectors
What’s New in 0.1.1
- Fixed: symmetric eigenvalue decomposition. The QR algorithm for tridiagonal matrices stored the off-diagonal as
hypot(x, z)(always positive) instead of the sign-preservingc * x - s * z. Eigenvalues were always correct, but eigenvectors could be wrong for matrices requiring multiple QR iterations. Givens rotations now accumulate into the eigenvector matrix correctly.
Tips
- Re-run anything that used
syeveigenvectors. If your 0.1.0 results depended only on eigenvalues, nothing changed; if they depended on eigenvectors and your matrices needed several QR sweeps, upgrade and recompute. - Validate spectral results cheaply. Reconstruct
AfromV * diag(λ) * Vᵀand check the residual norm — it should now be at machine-precision for symmetric inputs. - Check orthogonality. Eigenvectors of a real symmetric matrix should satisfy
Vᵀ V ≈ I; a quickgemmofVᵀagainstVis an easy regression guard in your own tests. - Patch-level upgrade, no API churn. 0.1.1 is a drop-in over 0.1.0 — bump the version and rebuild; no source changes are required.
This is the foundation
OxiBLAS is the linear algebra backend of the COOLJAPAN scientific stack, and as of today that role is concrete: SciRS2 0.1.0 launches this very day, and it builds its core numerical operations on OxiBLAS. A correct symmetric eigensolver is exactly the kind of primitive everything downstream depends on. OxiBLAS sits alongside the early COOLJAPAN siblings — VoiRS, TenRSo, TensorLogic, Spintronics, and Oxicode — in a sovereign, C/C++/Fortran-free ecosystem.
Repository: https://github.com/cool-japan/oxiblas
Star the repo if you want high-performance scientific computing without the traditional toolchain headaches.
Pure Rust numerical linear algebra is here — fast, safe, and sovereign.
— KitaSan at COOLJAPAN OÜ December 29, 2025