COOLJAPAN
← All posts

SciRS2 0.3.2 Released — pyo3 0.28.2 + Free-Threaded Python, Zero Deprecation Warnings

SciRS2 is a pure-Rust SciPy/NumPy/scikit-learn replacement — 2.59M SLoC, 19,700+ tests, 29 crates, no C or Fortran. The 0.3.2 patch upgrades the Python bindings to pyo3 0.28.2 (Python::attach) for free-threaded CPython 3.13, plus benchmark modernization with std::hint::black_box.

release scirs2 scientific-computing ai numpy scipy pure-rust python pyo3

The scientific computing stack you control, end to end — now warning-free against the very latest PyO3 and free-threaded Python.

Today we released SciRS2 0.3.2 — a focused compatibility and polish release that brings the Python bindings up to pyo3 0.28.2 and clears every deprecation warning across the 0.3.x line.

No C. No Fortran. No NumPy system dependencies. SciRS2 is a pure-Rust replacement for the SciPy/NumPy/scikit-learn stack, built on OxiBLAS (pure-Rust BLAS/LAPACK), OxiFFT (FFTW-comparable FFT), and OxiCode for serialization — replacing OpenBLAS, LAPACK, MKL, and the C/Fortran numerical core wholesale. It compiles to a single static binary or to WebAssembly and runs everywhere, with no apt install, no conda channel, no shared-library hunt.

Why SciRS2 0.3.2 matters

If you have ever shipped Python extensions, you know the pain: the CPython ABI churns, PyO3 deprecates APIs between minor versions, and the GIL quietly shapes everything you can do with threads. On top of that sits the eternal tax of system-dependency installs — a numerical stack that breaks the moment a BLAS shared library moves.

SciRS2 0.3.2 is a maintenance release that hardens the 0.3.x line against exactly this churn:

This is honest scope: 0.3.2 is a compatibility and polish release, not a feature drop. It is the kind of quiet work that keeps a 2.59M-line library shipping cleanly for the next year.

Technical Deep Dive

SciRS2 is a 29-crate workspace. Three layers carry this release.

Core (scirs2-core). SIMD-accelerated primitives, memory pools, and GPU backends underpin everything above. This is the substrate that makes the 10-100x performance gains possible without leaving Rust.

Scientific. OxiBLAS-backed dense linear algebra (SVD, condition numbers, decompositions), OxiFFT spectral transforms, sparse solvers (LOBPCG, IRAM, AMG), statistics, and optimization (SQP, MIP, SDP, SOCP). The 0.3.x line already ships Transformers, GNNs, diffusion models, Gaussian processes, survival analysis, compressed sensing, and computer vision — all pure Rust.

Python / Interop (scirs2-python, on PyPI via PyO3 0.28.2; plus WASM). This is where 0.3.2 lands. Conceptually, the old GIL-token pattern looked like Python::with_gil(|py| { ... }), where py was a token proving the GIL was held. In a free-threaded world that framing no longer fits, so PyO3 0.28 moved to Python::attach(|py| { ... }) — you attach the current thread to the interpreter rather than acquiring a global lock. We migrated this across optimize.rs, integrate.rs, optimize_ext.rs, and stats/mcmc_gp.rs, and added a from_py_object attribute to the #[pyclass] on PyTimeSeries in series.rs to clear the last deprecation warning. The net effect: SciRS2’s Python bindings build warning-free against the latest PyO3 and modern CPython, free-threaded builds included.

Getting Started

Add SciRS2 to your project:

cargo add scirs2
use scirs2::prelude::*;
use ndarray::Array2;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let a = Array2::from_shape_vec((3, 3), vec![
        1.0, 2.0, 3.0,
        4.0, 5.0, 6.0,
        7.0, 8.0, 9.0,
    ])?;

    // SVD via the pure-Rust OxiBLAS-backed linalg module
    let (_u, s, _vt) = scirs2::linalg::decomposition::svd(&a)?;
    println!("Singular values: {:.4?}", s);

    let cond = scirs2::linalg::basic::condition(&a, None)?;
    println!("Condition number: {:.4}", cond);

    Ok(())
}

Prefer Python? The bindings ship on PyPI and now build cleanly on pyo3 0.28.2 / modern CPython, including free-threaded 3.13:

pip install scirs2

What’s New in 0.3.2

Tips

This is the foundation

SciRS2 is the numerical bedrock of the COOLJAPAN ecosystem. As of March 2026 it sits alongside OxiBLAS (pure-Rust BLAS/LAPACK), OxiFFT (FFT), and OxiCode / oxiarc (serialization and compression) at the low level, and powers higher-level siblings: ToRSh (deep learning), OxiMedia (media and computer vision), OxiHuman, OxiGDAL, OxiRAG, Spintronics, NumRS2, PandRS, and OptiRS. One pure-Rust stack, from BLAS kernels to AI models — no C, no Fortran, no system dependencies.

Repository: https://github.com/cool-japan/scirs

Star the repo if you want a scientific computing stack you can compile, audit, and ship as a single binary.

Pure Rust scientific computing and AI is here — fast, safe, and sovereign.

KitaSan at COOLJAPAN OÜ March 17, 2026

↑ Back to all posts