Skip to main content

a KLU solver for JAX

Project description

KLUJAX

A sparse linear solver for JAX based on the efficient KLU algorithm.

CPU & float64

This library is a wrapper around the SuiteSparse KLU algorithms. This means the algorithm is only implemented for C-arrays and hence is only available for CPU arrays with double precision, i.e. float64 or complex128.

Note that this will be enforced at import of klujax!

Usage

The klujax library provides a single function solve(A, b), which solves for x in the linear system Ax=b A is a sparse tensor in COO-format with shape mxm and x and b have shape mxn. Note that JAX does not have a native sparse matrix representation and hence A should be represented as a tuple of two index arrays and a value array: (Ai, Aj, Ax).

import jax.numpy as jnp
from klujax import solve

b = jnp.array([8, 45, -3, 3, 19], dtype=jnp.float64)
A_dense = jnp.array([[2, 3, 0, 0, 0],
                     [3, 0, 4, 0, 6],
                     [0, -1, -3, 2, 0],
                     [0, 0, 1, 0, 0],
                     [0, 4, 2, 0, 1]], dtype=jnp.float64)
Ai, Aj = jnp.where(jnp.abs(A_dense) > 0)
Ax = A_dense[Ai, Aj]

result_ref = jnp.linalg.inv(A_dense)@b
result = solve(Ai, Aj, Ax, b)

print(jnp.abs(result - result_ref) < 1e-12)
print(result)
[ True True True True True]
[1. 2. 3. 4. 5.]

Installation

The library is statically linked to the SuiteSparse C++ library. It can be installed on most platforms as follows:

pip install klujax

There exist pre-built wheels for Linux and Windows (python 3.8+). If no compatible wheel is found, however, pip will attempt to install the library from source... make sure you have the necessary build dependencies installed.

Linux

On linux, you'll need gcc and g++. Then just do a normal pip install:

pip install klujax

Windows

On Windows, installing from source is a bit more involved as typically the build dependencies are not installed. To install those, download Visual Studio Community 2017 from here. During installation, go to Workloads and select the following workloads:

  • Desktop development with C++
  • Python development

Then go to Individual Components and select the following additional items:

  • C++/CLI support
  • VC++ 2015.3 v14.00 (v140) toolset for desktop

Then, download and install Microsoft Visual C++ Redistributable from here.

After these installation steps, run the following commands inside a x64 Native Tools Command Prompt for VS 2017:

set DISTUTILS_USE_SDK=1
pip install klujax

License & Credits

© Floris Laporte 2022, LGPL-2.1

This library was partly based on:

This library vendors an unmodified version of the SuiteSparse libraries in its source (.tar.gz) distribution to allow for static linking. This is in accordance with their LGPL licence.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

klujax-0.2.5-pp310-pypy310_pp73-win_amd64.whl (106.4 kB view hashes)

Uploaded PyPy Windows x86-64

klujax-0.2.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (679.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

klujax-0.2.5-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (732.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

klujax-0.2.5-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (206.5 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

klujax-0.2.5-pp39-pypy39_pp73-win_amd64.whl (106.4 kB view hashes)

Uploaded PyPy Windows x86-64

klujax-0.2.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (679.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

klujax-0.2.5-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (732.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

klujax-0.2.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (206.5 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

klujax-0.2.5-pp38-pypy38_pp73-win_amd64.whl (106.4 kB view hashes)

Uploaded PyPy Windows x86-64

klujax-0.2.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (680.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

klujax-0.2.5-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (733.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

klujax-0.2.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (206.5 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

klujax-0.2.5-cp312-cp312-win_amd64.whl (106.5 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

klujax-0.2.5-cp312-cp312-win32.whl (90.1 kB view hashes)

Uploaded CPython 3.12 Windows x86

klujax-0.2.5-cp312-cp312-musllinux_1_1_x86_64.whl (3.3 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

klujax-0.2.5-cp312-cp312-musllinux_1_1_i686.whl (3.2 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

klujax-0.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

klujax-0.2.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (1.7 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

klujax-0.2.5-cp312-cp312-macosx_11_0_arm64.whl (169.2 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

klujax-0.2.5-cp312-cp312-macosx_10_9_x86_64.whl (216.2 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

klujax-0.2.5-cp311-cp311-win_amd64.whl (107.6 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

klujax-0.2.5-cp311-cp311-win32.whl (90.8 kB view hashes)

Uploaded CPython 3.11 Windows x86

klujax-0.2.5-cp311-cp311-musllinux_1_1_x86_64.whl (3.3 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

klujax-0.2.5-cp311-cp311-musllinux_1_1_i686.whl (3.2 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

klujax-0.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

klujax-0.2.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (1.7 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

klujax-0.2.5-cp311-cp311-macosx_11_0_arm64.whl (171.6 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

klujax-0.2.5-cp311-cp311-macosx_10_9_x86_64.whl (218.9 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

klujax-0.2.5-cp310-cp310-win_amd64.whl (106.6 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

klujax-0.2.5-cp310-cp310-win32.whl (89.4 kB view hashes)

Uploaded CPython 3.10 Windows x86

klujax-0.2.5-cp310-cp310-musllinux_1_1_x86_64.whl (3.3 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

klujax-0.2.5-cp310-cp310-musllinux_1_1_i686.whl (3.2 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

klujax-0.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

klujax-0.2.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (1.7 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

klujax-0.2.5-cp310-cp310-macosx_11_0_arm64.whl (170.5 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

klujax-0.2.5-cp310-cp310-macosx_10_9_x86_64.whl (217.4 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

klujax-0.2.5-cp39-cp39-win_amd64.whl (106.7 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

klujax-0.2.5-cp39-cp39-win32.whl (89.7 kB view hashes)

Uploaded CPython 3.9 Windows x86

klujax-0.2.5-cp39-cp39-musllinux_1_1_x86_64.whl (3.3 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

klujax-0.2.5-cp39-cp39-musllinux_1_1_i686.whl (3.2 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

klujax-0.2.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

klujax-0.2.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (1.7 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

klujax-0.2.5-cp39-cp39-macosx_11_0_arm64.whl (170.6 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

klujax-0.2.5-cp39-cp39-macosx_10_9_x86_64.whl (217.6 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

klujax-0.2.5-cp38-cp38-win_amd64.whl (106.6 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

klujax-0.2.5-cp38-cp38-win32.whl (89.6 kB view hashes)

Uploaded CPython 3.8 Windows x86

klujax-0.2.5-cp38-cp38-musllinux_1_1_x86_64.whl (3.3 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

klujax-0.2.5-cp38-cp38-musllinux_1_1_i686.whl (3.2 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

klujax-0.2.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

klujax-0.2.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (1.7 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

klujax-0.2.5-cp38-cp38-macosx_11_0_arm64.whl (170.4 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

klujax-0.2.5-cp38-cp38-macosx_10_9_x86_64.whl (217.4 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

Supported by

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