Skip to main content

Sparse linear operators and solvers for Lineax

Project description

splineax

Sparse linear operators and direct solvers for Lineax.

splineax lets you keep a linear system in its native sparse storage (jax.experimental.sparse.BCOO / BCSR) and solve it with a sparse direct solver that plugs straight into lineax.linear_solve. It also interfaces with asdex for calculating sparse Jacobians and using them as operators.

  • Operators: BCOOLinearOperator, BCSRLinearOperator, SparseJacobianLinearOperator.
  • Solvers: Spsolve (any backend), KLU (CPU-only, SuiteSparse, factorization reuse), and AutoSparseLinearSolver (picks one based on the platform).
  • A SparseLinearSolver protocol for separating factorization from solving.

Installation

pip install git+https://github.com/nardi/splineax.git@v0.1.1

Example

Solve a 10000 x 10000 system. As a dense matrix it would need 10^8 entries, but kept sparse it has only ~3 x 10^4 nonzeros, and the solver never materialises the dense form.

import jax.numpy as jnp
import lineax as lx
import numpy as np
from jax.experimental.sparse import BCOO

import splineax

n = 10000
np.random.seed(0)

# A large, randomly sparse matrix with a heavy diagonal (so it is invertible).
diagonal_indices = np.stack([np.arange(n), np.arange(n)], axis=1)
off_diagonal_indices = np.unique(np.random.randint(0, n, size=(2 * n, 2)), axis=0)
indices = jnp.concatenate([diagonal_indices, off_diagonal_indices])
values = jnp.concatenate(
    [
        np.full(n, float(n)),
        np.random.uniform(low=-1, high=1, size=off_diagonal_indices.shape[0]),
    ]
)
matrix = BCOO((values, indices), shape=(n, n)).sum_duplicates()

operator = splineax.BCOOLinearOperator(matrix)
vectors = [jnp.ones(n), jnp.arange(n) % 2]
solver = splineax.AutoSparseLinearSolver()

# Calculate factorization once...
with solver.factorize(operator) as factorized_state:
    # ...and reuse for multiple solves.
    solution = lx.linear_solve(
        operator, vectors[0], solver=solver, state=factorized_state
    )
    assert jnp.allclose(matrix @ solution.value, vectors[0], atol=1e-4)

    solution = lx.linear_solve(
        operator, vectors[1], solver=solver, state=factorized_state
    )
    assert jnp.allclose(matrix @ solution.value, vectors[1], atol=1e-4)

Documentation

Build the docs locally with uv run mkdocs serve, or view the user guide and API reference here.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

splineax-0.2.0.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

splineax-0.2.0-py3-none-any.whl (26.0 kB view details)

Uploaded Python 3

File details

Details for the file splineax-0.2.0.tar.gz.

File metadata

  • Download URL: splineax-0.2.0.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for splineax-0.2.0.tar.gz
Algorithm Hash digest
SHA256 07d52e4b804dfe195f38e34994a2081114fce3946fb4eeec542c489703a4e432
MD5 b83b4569ad7544d274e8f495431576bb
BLAKE2b-256 4290d4741f0180b00aab178212608a2a12a40ffb0872a39401b7b81d06ee7a31

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax-0.2.0.tar.gz:

Publisher: release.yml on nardi/splineax

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file splineax-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: splineax-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 26.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for splineax-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 86552a7f2275fc639d46d424587ecceaa6572349b66eaab6d2a29eb2186c6d1c
MD5 1d6159cefdff42260e22160afa221fd3
BLAKE2b-256 e6adf80154f59caa761bf595054030504414df2f8bba774b6f68d14cc9847ec8

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax-0.2.0-py3-none-any.whl:

Publisher: release.yml on nardi/splineax

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page