COOLJAPAN
← All posts

NumRS2 0.3.3 Released — Benchmarks for I/O, Complex, and Sparse, Plus a Dependency Refresh

A measurement-focused patch for NumRS2, the pure Rust NumPy alternative. 0.3.3 adds criterion benchmark suites for I/O, complex-number, and sparse-matrix operations, refreshes every dependency to its latest version, clears clippy warnings, and nudges the distributed-optimization module forward. Same numerical core, on SciRS2 0.3.0 and OxiBLAS.

release numrs2 numpy numerical-computing scirs2 pure-rust python

You can’t keep what you don’t measure — so this release teaches NumRS2 to measure more of itself.

Today we released NumRS2 0.3.3 — a measurement-and-maintenance patch that adds proper benchmark coverage across I/O, complex arithmetic, and sparse matrices, refreshes the dependency tree, clears the warning bar, and pushes the distributed-optimization groundwork a little further.

No C. No Fortran. No system BLAS/LAPACK. NumRS2 is still a single static binary (or WASM) with no Python interpreter overhead and no FFI in the hot path. 0.3.3 doesn’t change that core — it adds the instrumentation that keeps it honest as the ecosystem grows.

Why NumRS2 0.3.3 matters

This is a patch, and a focused one. The numerical core carries over unchanged from the 0.3.x line. The value is in what we can now see and trust:

“We measure what we ship” is the whole idea of this release.

What changed under the hood

Three short layers, all on top of the unchanged 0.3.x core (SciRS2 0.3.0 + OxiBLAS):

  1. Three new criterion benchmark suites.

    • bench/io_benchmarks.rs exercises the I/O path — the kind of read/write work that backs .npz and array serialization — so file throughput is tracked over time.
    • benches/complex_benchmark.rs measures complex-number operations, the arithmetic that FFT and signal work lean on.
    • benches/sparse_benchmark.rs covers sparse-matrix operations across the supported formats, where memory layout dominates performance.
  2. The distributed-optimization module. src/distributed/optimization.rs received an enhancement that advances the distributed-computing groundwork. Treat it as in-progress scaffolding maturing release by release, not a turnkey cluster solver.

  3. A clean dependency bump. All crates in Cargo.toml moved to their latest versions, and the clippy warnings that surfaced in the new benchmark and distributed code were cleared — so the refresh landed without loosening the quality bar.

Getting Started

cargo add numrs2
use numrs2::prelude::*;

fn main() -> Result<()> {
    // Dense arrays
    let a = Array::from_vec(vec![1.0, 2.0, 3.0, 4.0]).reshape(&[2, 2]);
    let product = a.matmul(&a)?;
    println!("matmul:\n{}", product);

    // Sparse arrays — the angle 0.3.3's new benchmarks now track
    let mut sparse = SparseArray::new(&[10, 10]);
    sparse.set(&[0, 0], 1.0)?;
    sparse.set(&[5, 5], 2.0)?;
    println!("density: {}", sparse.density());

    Ok(())
}

The new benchmark suites cover exactly this surface — dense I/O, complex arithmetic, and the sparse path shown above — so the operations you write are the operations we measure.

What’s New in 0.3.3

The numerical core — N-d arrays with broadcasting, OxiBLAS linear algebra (SVD / QR / LU / Cholesky / eigh), SIMD math, statistics, FFT, .npz with pure-Rust DEFLATE, and PyO3 / maturin Python bindings — carries over from 0.3.x unchanged.

Tips

This is the foundation

NumRS2 is the array core the wider COOLJAPAN stack computes on, and by mid-April 2026 that stack is broad and clearly maturing:

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

Star the repo if you want numerical computing that is benchmarked, warning-free, and free of NumPy’s C/Fortran baggage.

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

KitaSan at COOLJAPAN OÜ April 18, 2026

↑ Back to all posts