This is the biggest leap in SciRS2’s history — hundreds of new algorithms across every crate, and an entire modern deep-learning stack, all in Pure Rust.
Today we released SciRS2 0.3.0 — the largest feature expansion in the project’s history, adding hundreds of new algorithms across deep learning, statistics, signal processing, optimization, and more.
No C. No Fortran. No NumPy system dependencies. Where SciPy leans on FFTW, where NumPy leans on OpenBLAS, where scikit-learn leans on a tower of compiled C extensions, SciRS2 leans on nothing but Rust. Linear algebra runs on OxiBLAS, FFTs run on OxiFFT, compression runs on oxiarc — every layer is memory-safe Rust. The result compiles to a single static binary (or WASM) and runs everywhere: Linux, macOS, Windows, and the browser.
Why SciRS2 0.3.0 is a game changer
The scientific Python stack is powerful, but it is also a maze of native dependencies. Pinning the right BLAS, matching FFTW versions, fighting glibc mismatches, shipping wheels that break on the next platform — every team that has tried to deploy NumPy/SciPy/scikit-learn at scale knows this pain. SciRS2 0.3.0 makes that whole class of problems disappear, and it does so while expanding what you can compute:
- Hundreds of new algorithms across all crates. Two development waves (internally Waves 17 & 18) touched nearly every crate in the workspace, from linear algebra to time series to special functions.
- A modern deep-learning stack in Pure Rust. Transformers (GPT-2, T5, ViT), graph neural networks, diffusion models, Mixture of Experts, and RLHF — no PyTorch, no CUDA-only lock-in, no C++ runtime.
- Advanced statistics that go far beyond the textbook. Gaussian process regression, full MCMC (NUTS/HMC/Gibbs), survival analysis, copulas, Bayesian networks, and causal inference.
- Scale that speaks for itself. 19,644 tests (a 72% jump from 0.2.0), ~2.59M lines of Rust across 45+ workspace crates, 0 compilation errors and 0 test failures. The README badges put it simply: 29 workspace crates, 2.59M lines, 20,000+ tests.
- Now usable from Python and Julia. A new Julia interface ships alongside re-added PyO3 Python bindings with NumPy interop — the same Pure Rust core, three languages.
Technical Deep Dive: Two Waves Across the Whole Stack
SciRS2 0.3.0 is organized as two sweeping development waves that reach into every corner of the workspace. Here is how the new capabilities layer up.
(a) AI / ML. scirs2-neural grew an entire research-grade deep-learning toolkit. Attention now comes in many flavors — RoPE, Grouped-Query Attention, plus linear, sparse, efficient, and multi-head-latent variants. On top of that sit Mixture of Experts (top-k routing with load balancing), capsule networks, Spiking Neural Networks, and a full RLHF/preference stack (PPO, DPO, reward modeling). Graph neural networks (GCN, GAT, GraphSAGE, GIN, graph pooling), vision backbones (SWIN, UNet, CLIP, ConvNeXt, ViT), transformers (GPT-2, T5, full encoder-decoder), and generative models (DDPM/DDIM diffusion, VAE, GAN, normalizing flows) round it out. Training utilities cover federated learning, knowledge distillation, pruning, quantization, MAML meta-learning, and contrastive/self-supervised methods — with gradient checkpointing for memory-efficient training. Underneath, scirs2-autograd supplies the gradient checkpointing and higher-order differentiation these models need.
(b) Classical scientific computing. scirs2-linalg added iterative solvers (GMRES, PCG, BiCGStab, MINRES, QMR), matrix functions (expm, logm, sqrtm, signm via Schur/Padé), tensor decompositions (CP-ALS, Tucker, tensor train), and control theory (Riccati/Lyapunov, controllability/observability) — all on the OxiBLAS core. scirs2-sparse brought LOBPCG and IRAM eigensolvers, Algebraic Multigrid (AMG), BCSR/ELLPACK/SELL-C-σ formats, and block preconditioners (Block Jacobi, SPAI, additive Schwarz). scirs2-fft added sublinear sparse FFT, the Prony method, spectral estimation (MUSIC, Lomb-Scargle, Burg), advanced transforms (Chirp-Z, Fractional Fourier, NTT), all eight DCT/DST variants, and mixed-radix with Rader/Bluestein for prime-length FFTs — on the OxiFFT core. scirs2-special reached into the deep end of mathematical physics: Mathieu and Coulomb wave functions, spherical harmonics, Wigner 3j/6j/9j symbols, Jacobi theta, Fox H, Heun, Appell, q-analogs, and Weierstrass.
(c) Statistics, time series, and signal. scirs2-stats added Sequential Monte Carlo / particle filters, MCMC (Gibbs, slice, NUTS, HMC), heavy-tailed and directional distributions (alpha-stable/Lévy, GPD, von Mises-Fisher, Tweedie, truncated), copulas (Frank/Clayton/Gumbel/Gaussian/Student-t), Gaussian process regression (Matérn/RBF/periodic kernels, sparse GP, deep kernel learning), hierarchical and nonparametric Bayes (Dirichlet process mixtures), survival analysis (Cox PH, Kaplan-Meier, Nelson-Aalen, AFT, competing risks), causal inference (do-calculus, IV, diff-in-diff), Bayesian networks, extreme value theory, and spatial statistics (variogram, kriging, Moran’s I). scirs2-series gained VAR/VECM with Johansen cointegration, Dynamic Factor Models, volatility models (EGARCH, FIGARCH, GJR-GARCH), and deep forecasters (Temporal Fusion Transformer, N-BEATS, DeepAR). scirs2-signal added radar processing (matched filter, CFAR, range-Doppler, pulse compression), state estimation (Kalman/EKF/UKF, particle filter), compressed sensing (OMP, ISTA/FISTA, CoSaMP), audio features (MFCC, chroma), time-frequency analysis (EMD, Hilbert-Huang, synchrosqueezing, Wigner-Ville), array processing (MUSIC, ESPRIT, MVDR), and source separation (FastICA, JADE, NMF).
(d) Interop and quality. A brand-new Julia interface (julia/SciRS2: ExtendedFFT, ExtendedLinalg, ExtendedOptimize, ExtendedStats, Interpolate) joins re-added PyO3 Python bindings with NumPy interop as a first-class workspace member. A new criterion benchmark suite and a cross-crate integration test framework keep the whole thing honest. This release also lands notable correctness fixes: a proper implicit-shifted QL Lanczos eigensolver with deflation, a Bartels-Stewart Sylvester solver with correct 2×2 Schur block handling, and a fixed bicubic Hermite transpose. The numbers behind it: 19,644 tests, ~2.59M lines of Rust, 0 failures (165 tests skipped by design).
Getting Started
cargo add scirs2
That pulls in the standard feature set. For the deep-learning stack add the ai group, and for optional accelerated backends:
cargo add scirs2 --features ai
cargo add scirs2 --features oxifft,cuda
A small taste — solve a linear system and run a quick FFT through the umbrella crate:
use scirs2::linalg::solve;
use scirs2::fft::fft;
use scirs2::ndarray::{array, Array1};
fn main() {
// Solve A x = b
let a = array![[3.0, 2.0], [1.0, 2.0]];
let b = array![5.0, 5.0];
let x = solve(&a.view(), &b.view()).expect("solve failed");
println!("x = {:?}", x);
// FFT of a short signal
let signal: Array1<f64> = array![0.0, 1.0, 0.0, -1.0];
let spectrum = fft(&signal.view(), None);
println!("spectrum = {:?}", spectrum);
}
What’s New in 0.3.0
- Deep Learning (
scirs2-neural,scirs2-autograd): transformers (GPT-2, T5, ViT), GNNs (GCN/GAT/GraphSAGE/GIN), diffusion (DDPM/DDIM), Mixture of Experts, Spiking Neural Networks, RLHF (PPO/DPO), plus knowledge distillation, MAML, and gradient checkpointing. - Statistics (
scirs2-stats): Gaussian process regression, MCMC (NUTS/HMC/Gibbs), survival analysis (Cox/Kaplan-Meier), copulas, Bayesian networks, and causal inference. - Signal (
scirs2-signal): radar (matched filter/CFAR/range-Doppler), compressed sensing (OMP/FISTA), EMD/Hilbert-Huang, and source separation (FastICA/JADE/NMF). - Linear algebra & sparse (
scirs2-linalg,scirs2-sparse): matrix functions (expm/logm/sqrtm), the GMRES family of iterative solvers, LOBPCG/IRAM eigensolvers, and Algebraic Multigrid. - Time series (
scirs2-series): Temporal Fusion Transformer, N-BEATS, EGARCH/FIGARCH, and VAR/VECM with Johansen cointegration. - Optimization (
scirs2-optimize): Mixed-Integer Programming (branch-and-bound + Gomory cuts), conic (SDP/SOCP), NSGA-III/MOEA-D, and Bayesian optimization. - FFT (
scirs2-fft): sublinear sparse FFT, NTT, Chirp-Z, Fractional Fourier, and all eight DCT/DST variants. - Vision (
scirs2-vision): stereo disparity (SGM/BM), monocular depth, ICP point-cloud registration, PnP pose, and a SLAM framework. - Bindings: a new Julia interface plus re-added Python PyO3 bindings with NumPy interop.
- Quality: 19,644 tests, 0 failures, and key correctness fixes (Lanczos QL, Bartels-Stewart, bicubic Hermite).
Tips
- Call SciRS2 from Julia or Python. The new
julia/SciRS2interface exposes ExtendedFFT, ExtendedLinalg, ExtendedOptimize, and ExtendedStats; the PyO3 bindings give you NumPy interop from Python. The same Pure Rust core powers all three. - Pull the deep-learning stack in one line with
cargo add scirs2 --features ai, which brings in bothscirs2-neuralandscirs2-autograd. - Train large transformers on a tight memory budget by enabling gradient checkpointing in
scirs2-neural— it trades a little recompute for a large drop in activation memory. - Reach for LOBPCG or IRAM in
scirs2-sparsefor large sparse eigenproblems, and use AMG as a preconditioner to accelerate convergence on stiff systems. - Use the new sparse FFT in
scirs2-fftwhen your signal has only a handful of significant frequencies — it runs in sublinear time rather than the full O(n log n).
This is the foundation
SciRS2 sits at the center of the COOLJAPAN pure-Rust stack. It computes on OxiBLAS for linear algebra and OxiFFT for transforms, compresses with oxiarc, and shares the data-science layer with NumRS2 and PandRS; the independent OptiRS project complements it for optimization workloads. With 0.3.0 it now also reaches beyond Rust, exposing its core through new Python (PyO3) and Julia bindings. One memory-safe foundation, no native dependency maze, and the same numbers everywhere it runs.
Repository: https://github.com/cool-japan/scirs
Star the repo if you believe scientific computing and AI deserve a sovereign, dependency-free foundation. Pure Rust scientific computing and AI is here — fast, safe, and sovereign.
— KitaSan at COOLJAPAN OÜ March 5, 2026