COOLJAPAN
← All posts

SciRS2 0.3.0 Released — The Largest Feature Expansion Yet: Modern Deep Learning, Advanced Statistics, and Signal Processing in Pure Rust

SciRS2 is a pure-Rust SciPy/NumPy/scikit-learn replacement, and 0.3.0 is the biggest release yet — transformers, GNNs, diffusion, MoE/RLHF, Gaussian processes, MCMC, survival analysis, radar/compressed sensing, LOBPCG/AMG, plus new Julia and Python bindings. 19,644 tests, ~2.59M lines of Rust. No C, no Fortran.

release scirs2 scientific-computing ai machine-learning deep-learning pure-rust numpy scipy scikit-learn

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:

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

Tips

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

↑ Back to all posts