Skip to main content

rslab (Python bindings)

NumPy/SciPy bindings for RSLAB, a pure-Rust sparse direct solver and preconditioner: complex/real symmetric LDL^T (Bunch-Kaufman), unsymmetric LU, and a KLU-style path for circuit-shaped matrices. A thin wrapper, all numeric work happens in Rust.

Install

pip install rslab

Usage

import numpy as np
import scipy.sparse as sp
import rslab

# Symmetric system (real or complex; the dtype selects the path).
A = sp.random(5000, 5000, density=1e-3, format="csc") + sp.eye(5000) * 10
A = A + A.T
b = np.random.rand(5000)

# One-shot solve.
x = rslab.spsolve(A, b)

# Factor once, solve many right-hand sides.
f = rslab.ldlt(A)
x1 = f.solve(b)
X = f.solve_many(np.random.rand(5000, 8))   # n x nrhs

print(f.n, f.factor_nnz, f.inertia, f.dtype)

Complex-symmetric matrices (EM/FEM, PARDISO mtype 6) work identically:

A = A.astype(np.complex128); A.data += 1j * 0.3 * A.data.real
x = rslab.ldlt(A).solve(np.ones(A.shape[0], dtype=np.complex128))

Unsymmetric matrices use the LU path:

f = rslab.lu(A_general)
x = f.solve(b)

Circuit-shaped matrices (MNA / SPICE-class: very sparse, unsymmetric, near-triangularizable) use the KLU path, bit-deterministic, with a numeric-only refactor for fixed-pattern sweeps:

f = rslab.klu(A_circuit)
x = f.solve(b)
A_circuit.data *= 1.5            # frequency sweep: same pattern, new values
f.refactor(A_circuit.data)       # no symbolic work, no pivot search
x2 = f.solve(b)
y = f.solve_transpose(b)         # A.T @ y = b on the same factors (adjoint)

solve_transpose is the plain transpose; for the conjugate-transpose adjoint use f.solve_transpose(b.conj()).conj().

Preconditioner mode

Never-fail static pivoting plus iterative refinement for hard/indefinite systems:

f = rslab.ldlt(A, preconditioner=1e-4)
x = f.solve(b, refine=20)        # refine against the original A

Configuration (keyword arguments)

By default ldlt, lu and spsolve use RSLAB's deterministic heuristic pick, the adaptive ordering plus an exact nested-dissection bakeoff on large systems (adopted only on a clear predicted win with no fill/memory regression). A one-time rslab.install_diagnose() measures this machine's throughput and speedup curve and caches it; afterwards the default also picks its worker count from the calibration (until then the conservative capped default applies). Keyword arguments override the pick:

kwarg default meaning
threads None (auto) None = calibrated/structural per-matrix pick; int = fixed (0 = all)
preconditioner None static-pivot floor (e.g. 1e-4); never-fail, refine to solve
drop_tol None incomplete-factor threshold (preconditioner)
method "left_looking" "left_looking" or "multifrontal"
memory "low" "low" or "eager" factor emit strategy
force_accept False accept tiny pivots in exact mode instead of failing

klu accepts:

kwarg default meaning
pivot_tol 1e-3 diagonal-preference threshold; 1.0 = plain partial pivoting
row_scaling True divide each row by its max-magnitude entry before factoring
btf True permute to block upper triangular form first (keep it on)
parallel None per-block parallel factor/refactor over the BTF blocks; None = auto gate (>=4 blocks, >=8000 nnz, no dominant block), True/False force on/off; bit-identical result in every mode

Supported dtypes: float64, float32, complex128, complex64.

API

Everything ships in the flat rslab namespace; full parameter documentation lives in the docstrings (help(rslab.klu) etc.).

Functions

function meaning
spsolve(A, b, **kw) one-shot factor-and-solve; detects symmetry and picks the LDL^T or LU path
ldlt(A, **kw) -> Ldlt factor a real/complex symmetric matrix (Bunch-Kaufman LDL^T)
lu(A, **kw) -> Lu factor a general unsymmetric matrix (supernodal multifrontal LU)
klu(A, **kw) -> Klu factor a circuit-shaped matrix (BTF + per-block Gilbert-Peierls LU)
install_diagnose() one-time machine calibration; caches the measured thread-speedup curve

Factor handles - factor once, then:

method / attribute Ldlt Lu Klu meaning
solve(b, refine=0) yes yes yes solve one RHS, optional iterative-refinement steps against the original A
solve_many(B) yes yes yes solve n x nrhs RHS in one batched pass
solve_transpose(b) - - yes solve A^T y = b on the same factors (plain transpose, not conjugate)
refactor(data) - - yes numeric-only re-factorization for new values on the same pattern (no symbolic work, no pivot search)
gmres(b, tol=1e-8, maxit=400, restart=None, x0=None, recycle=None) yes yes yes GMRES with this factor as preconditioner
gmres_block(B, tol=1e-8, maxit=400, restart=None, x0=None) yes yes yes block GMRES for multiple RHS
recycle(k) yes yes yes a Recycle workspace holding up to k deflation vectors across gmres calls
n, factor_nnz, n_perturbed, dtype yes yes yes dimension, stored factor entries, perturbed pivots (always 0 for Klu), NumPy dtype name
inertia yes - - (n_pos, n_neg, n_zero) eigenvalue counts from LDL^T
n_blocks - - yes number of BTF diagonal blocks

Recycle - deflation-subspace carrier for sweeps: attributes k, active, dtype; clear() resets it.

License

MIT.

Release files for rslab 0.30.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rslab 0.30.0
File Size Uploaded
rslab-0.30.0.tar.gz 1.2 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for rslab 0.30.0
File
rslab-0.30.0-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
rslab-0.30.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details
rslab-0.30.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details
rslab-0.30.0-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
rslab-0.30.0-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 11.5 MB

Release files / rslab-0.30.0.tar.gz

Download URL rslab-0.30.0.tar.gz
Size 1.2 MB
Tags Source
SHA-256 checksum
How to use checksums
9ef5aaa7d84338007e75787f56fab1eb3a723fb70f1b03c355361e609391e08a
BLAKE2b-256 checksum
How to use checksums
95885d10a8dd7ec38a2190a902c6ab22e72048630068db4e0432901e861b212f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.

Transparency log

Release files / rslab-0.30.0-cp39-abi3-win_amd64.whl

Download URL rslab-0.30.0-cp39-abi3-win_amd64.whl
Size 2.0 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
3898801f86d638e429eafc790e488562ffb88b4160f01c05ea51522bc11a2b20
BLAKE2b-256 checksum
How to use checksums
57135019c8f3ebbda9740e94f3942041c1f29be07a818ee920b871cb166b730d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.

Transparency log

Release files / rslab-0.30.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL rslab-0.30.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.3 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
a069c6073663ee0fc813648a06ab0d43d6f2f0ae021cf8eb50d39e45498728a7
BLAKE2b-256 checksum
How to use checksums
e935cb1ab6857c60000409a59c87a241f44b3000a54d337835082c1c39ad79d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.

Transparency log

Release files / rslab-0.30.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL rslab-0.30.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 2.1 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
dd1d04dbacbada1c00e747d91ee341a7331a402033cf2bf54a86faea6a9abf13
BLAKE2b-256 checksum
How to use checksums
b380dcc0c47a2d7ee7b1a43e08a3d48503b134f20f2618e9379b7bf0345f1903
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.

Transparency log

Release files / rslab-0.30.0-cp39-abi3-macosx_11_0_arm64.whl

Download URL rslab-0.30.0-cp39-abi3-macosx_11_0_arm64.whl
Size 1.9 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
dda5214a09d94a7fac411b666045db582c04b2cbcb63bc46f850fccb2d6874e8
BLAKE2b-256 checksum
How to use checksums
057f7121320d94ae5beba57920cc49846e89b806327aff05ce99397595213c8c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.

Transparency log

Release files / rslab-0.30.0-cp39-abi3-macosx_10_12_x86_64.whl

Download URL rslab-0.30.0-cp39-abi3-macosx_10_12_x86_64.whl
Size 2.0 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
ed5e0284ca324fd02d08b96ad94ea4483813dbd5bfffcfe1a327c91659260ad8
BLAKE2b-256 checksum
How to use checksums
dd80f3959417affe90507e4181153f9418d09a6dd28da74eae72b67be724bd57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page