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 splineax

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.1.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.1-py3-none-any.whl (25.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: splineax-0.2.1.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.1.tar.gz
Algorithm Hash digest
SHA256 6470f3e1650d392c2527e44e59e3d14fb90b6e34f5aa7621e9aaf012b254fac5
MD5 79f8df942636e1f989aeb3162a40f15c
BLAKE2b-256 fda38f647d74f79b40e13c4fadbd807a68182188f7b3c457f4cae9ca06d2812e

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax-0.2.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: splineax-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 25.9 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 58b32ee3daea91a2c167eb8f1c7eb37b71ec87de9ac7adc0ec6251e71bd054c8
MD5 e1f677adbd5bd7cd7448eb86178cc829
BLAKE2b-256 2929e6a1909e1f4fbfeb3033627eda37433992ec0807e61c55dd19daa6d7d4d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax-0.2.1-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