Skip to main content

rslab (Python bindings)

NumPy/SciPy bindings for RSLAB, a pure-Rust sparse direct solver and preconditioner: complex/real symmetric LDLᵀ (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ᵀ or LU path
ldlt(A, **kw) -> Ldlt factor a real/complex symmetric matrix (Bunch-Kaufman LDLᵀ)
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) ✓ ✓ ✓ solve one RHS, optional iterative-refinement steps against the original A
solve_many(B) ✓ ✓ ✓ solve n × nrhs RHS in one batched pass
solve_transpose(b) – – ✓ solve Aᵀ y = b on the same factors (plain transpose, not conjugate)
refactor(data) – – ✓ 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) ✓ ✓ ✓ GMRES with this factor as preconditioner
gmres_block(B, tol=1e-8, maxit=400, restart=None, x0=None) ✓ ✓ ✓ block GMRES for multiple RHS
recycle(k) ✓ ✓ ✓ a Recycle workspace holding up to k deflation vectors across gmres calls
n, factor_nnz, n_perturbed, dtype ✓ ✓ ✓ dimension, stored factor entries, perturbed pivots (always 0 for Klu), NumPy dtype name
inertia ✓ – – (n_pos, n_neg, n_zero) eigenvalue counts from LDLᵀ
n_blocks – – ✓ 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.28.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.28.0
File Size Uploaded
rslab-0.28.0.tar.gz 2.2 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for rslab 0.28.0
File
rslab-0.28.0-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
rslab-0.28.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.28.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details
rslab-0.28.0-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
rslab-0.28.0-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 12.3 MB

Release files / rslab-0.28.0.tar.gz

Download URL rslab-0.28.0.tar.gz
Size 2.2 MB
Tags Source
SHA-256 checksum
How to use checksums
12d16b310d3d8661cb460bcc720a23e629fd7a5482a182a803f7d64bd2ce51d8
BLAKE2b-256 checksum
How to use checksums
0a80912c362a1e965ad50e490543090f9a73f53000029d4de67b7d357b04bbf0
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 27, 2026.

Transparency log

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

Download URL rslab-0.28.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
4941e0c6a96feb1216cdad0ff35cefde62406d21a3692404f8cca86f4d8e51f7
BLAKE2b-256 checksum
How to use checksums
1492e1ea486a8c54d413a06e218b20e273e556e5d62c90b55d8c4d5cdbfa4954
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 27, 2026.

Transparency log

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

Download URL rslab-0.28.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.2 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
ffa4c7516ec60ebf1d6fb4a0cbff02a461c3c865d797fd9f1dd8b0b1c95ac2db
BLAKE2b-256 checksum
How to use checksums
592215dd0d70cf9d5914c2d24d4ed8effa023e82500de0db2c78be6ced55add9
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 27, 2026.

Transparency log

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

Download URL rslab-0.28.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 2.0 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
169a199f832bf9098f87831df80a083ede509d538c5863f25dda8fc04a7fdde7
BLAKE2b-256 checksum
How to use checksums
e651728f0ddd9c06987872ee780fba421f85c8bd5cd3cec2b438a0c499156b85
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 27, 2026.

Transparency log

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

Download URL rslab-0.28.0-cp39-abi3-macosx_11_0_arm64.whl
Size 1.8 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
dbc56692686a437e20749594e9cac34bfef020fca51dd912630390ad08c3814a
BLAKE2b-256 checksum
How to use checksums
dcf44fb2677062745b66313430e8174e449f21589c6c96cf55c0d89770c22cbb
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 27, 2026.

Transparency log

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

Download URL rslab-0.28.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
9e434a67e187fb2b7039a8afd82ed856030269de41d6bce35f3c6e4f265838f8
BLAKE2b-256 checksum
How to use checksums
7639acdae5e1098b8e554609f2f588a00322f8f9284f47e117fb5899fe4f78df
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 27, 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