Skip to main content

KLUJAX

version: 0.5.0.post5

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

This is a fork of the original klujax package, meant for use in splineax. The aim is to eventually merge the changes here into the upstream package and remove this fork. In the meantime, the version number will stay as 0.5.0.postN, and N will be incremented sequentially on each new published version.

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 float32/complex64 arrays will be cast to float64/complex128!

Basic Usage

The klujax library provides a basic function solve(Ai, Aj, Ax, b), which solves for x in the sparse linear system Ax=b, where A is explicitly given in COO-format (Ai, Aj, Ax).

NOTE: the sparse matrix represented by (Ai, Aj, Ax) needs to be coalesced! KLUJAX provides a coalesce function (which unfortunately is not jax-jittable).

Supported shapes (? suffix means optional):

  • Ai: (n_nz,)
  • Aj: (n_nz,)
  • Ax: (n_lhs?, n_nz)
  • b: (n_lhs?, n_col, n_rhs?)
  • A (represented by (Ai, Aj, Ax)): (n_lhs?, n_col, n_col)

KLUJAX will automatically select a sensible way to act on underdefined dimensions of Ax and b:

dim(Ax) dim(b) assumed shape(Ax) assumed shape(b)
1D 1D n_nz n_col
1D 2D n_nz n_col x n_rhs
1D 3D n_nz n_lhs x n_col x n_rhs
2D 1D n_lhs x n_nz n_col
2D 2D n_lhs x n_nz n_lhs x n_col
2D 3D n_lhs x n_nz n_lhs x n_col x n_rhs

Where the A is always acting on the n_col dimension of b. The n_lhs dim is a shared batch dimension between A and b.

Additional dimensions can be added with jax.vmap (alternatively any higher dimensional problem can be reduced to the one above by properly transposing and reshaping Ax and b).

NOTE: JAX now has an experimental sparse library (jax.experimental.sparse). Using this natively in KLUJAX is not yet supported (but converting from BCOO or COO to Ai, Aj, Ax is trivial).

Basic Example

Script:

import klujax
import jax.numpy as jnp

b = jnp.array([8, 45, -3, 3, 19])
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],
    ]
)
Ai, Aj = jnp.where(jnp.abs(A_dense) > 0)
Ax = A_dense[Ai, Aj]

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

print(jnp.abs(result - result_ref) < 1e-12)
print(result)

Output:

[ True True True True True]
[1. 2. 3. 4. 5.]

Advanced Usage

For high-performance applications like transient simulations or iterative solvers, you should avoid using the high-level klujax.solve function. The klujax.solve is in fact a wrapper around three distinct parts of the KLU algorithm:

  1. Analyze (Symbolic): Inspects the sparsity pattern ($A_i, A_j$) to find optimal permutations and block triangular forms. This depends only on the structure of the matrix.
  2. Factorize (Numeric): Performs the actual LU decomposition. This depends on the values ($A_x$) and requires a symbolic handle.
  3. Solve (Numeric): Executes forward and backward substitution to find $x$. This depends on the right-hand side ($b$) and requires a numeric handle.

Significant performance gains are achieved by hoisting the "Analysis" or "Factorization" steps out of your inner loops.

1. High-Performance Transient Pattern (Reusing Symbolic)

In a simulation where the sparsity pattern is constant but the values ($A_x$) and right-hand side ($b$) change, you should perform the expensive analyze step exactly once outside your JIT loop.

import jax
import klujax

# 1. Analyze once in Python (CPU)
# Returns a SymbolToken: a cache handle that is freed automatically
symbolic = klujax.analyze(Ai, Aj, n_col)

@jax.jit
def simulation_step(Ax_t, b_t, sym):
    # 2. Use the symbolic handle inside JIT
    # The solver will perform numeric factorization and solve
    return klujax.solve_with_symbol(Ai, Aj, Ax_t, b_t, sym)

for t in range(steps):
    x_t = simulation_step(Ax[t], b[t], symbolic)

Fine-Grained Control (Numeric Factorization)

If you need to solve the same system with many different $b$ vectors while the matrix $A$ remains constant, you can further split the numeric factorization. This is often performed in a modified Newton-Raphson loop where the computationally expensive jacobian+factorization is only evaluated once and the solve stage is deemed "cheap" in comparison

# Factorize the matrix once
numeric = klujax.factor(Ai, Aj, Ax, symbolic)

@jax.jit
def fast_solve(b_t, num, sym):
    # This call is extremely fast as it skips factorization entirely
    return klujax.solve_with_numeric(num, b_t, sym)

for i in range(100):
    x_i = fast_solve(b_batch[i], numeric, symbolic)

Safe Refactorization (Status Codes & Conditioning)

klujax.refactor reuses the pivot order picked for the original matrix. That is what makes it fast, but it also means the factorization can fail, or silently lose accuracy, once the values have drifted far enough. Two additions make that recoverable.

klujax.refactor_with_status reports a failure through a status code rather than raising, so it can be branched on under jax.jit where an error would abort everything. klujax.refactor_and_solve_with_status does the same for the fused path.

numeric, status = klujax.refactor_with_status(Ai, Aj, Ax_new, numeric, symbolic)
if status[0] != klujax.KLUStatus.OK:
    # the numeric object is unusable for a solve, but the symbolic one is fine
    klujax.free_numeric(numeric)
    numeric = klujax.factor(Ai, Aj, Ax_new, symbolic)

When status != OK the numeric object may be partially overwritten and must not be used for a solve. It remains valid to pass to free_numeric, and the symbolic object is unaffected and may be reused for a fresh factor.

Degradation short of outright failure is caught by klujax.rcond, the reciprocal pivot growth estimate min|Uii| / max|Uii|. It costs O(n), far less than solving with a probe vector and measuring the residual. klujax.condest gives a proper 1-norm condition number estimate and is the usual follow-up when rcond is borderline.

if klujax.rcond(symbolic, numeric)[0] < 1e-10:
    ...  # pivots have degraded, re-factor from scratch

Lifecycle & Memory Safety

klujax.analyze and klujax.factor return handle tokens (SymbolToken, NumericToken). A token is a small cache id bundled with the arrays it can rebuild from, not a raw pointer, so handles are memory-safe by construction.

  • Forgetting to free leaks only a bounded amount. Handles live in a process-wide cache that holds a fixed number of KLU objects (eight by default, set by KLUJAX_FACTOR_CACHE). When it overflows, the least recently used object is evicted.

  • Using a freed or evicted handle is safe. Every call carries the matrix the handle needs, so a call that lands on a missing handle rebuilds it on the spot and continues. This is why freeing is optional and there is no ghost-pointer hazard: there is no pointer to dereference.

Because of this, creating a token inside jax.jit needs no special care. The id threads through the trace as data. A bare free is unordered against the solve, so to actually free inside the trace, order it after the solve by tracking the solution (or passing it as dependency):

@jax.jit
def dynamic_solve(Ai, Aj, Ax, b):
    sym = klujax.analyze(Ai, Aj, 5)
    x = klujax.solve_with_symbol(Ai, Aj, Ax, b, sym)
    klujax.free_symbolic(sym.track(x))   # ordered after the solve
    return x

Summary of Best Practices

  1. Hoist Creations: for best performance, call analyze or factor once outside JIT loops and reuse the handle.

  2. Freeing is optional: use free_symbolic / free_numeric (or the token's close(), or a with block) only to release memory sooner. The token stays usable afterwards.

  3. Watch rebuild_count(): a count that climbs during steady-state solving means the working set is larger than KLUJAX_FACTOR_CACHE. Set KLUJAX_STRICT_CACHE to turn a rebuild into an error while debugging. See the Memory Management guide.

Installation

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

pip install splineax-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 (see Installing from Source)

Installing from Source

NOTE: Installing from source should only be necessary when developing the library. If you as the user experience an install from source please create an issue.

Before installing, clone the build dependencies:

git clone --depth 1 --branch v7.2.0 https://github.com/DrTimothyAldenDavis/SuiteSparse suitesparse
git clone --depth 1 --branch main https://github.com/openxla/xla xla
git clone --depth 1 --branch stable https://github.com/pybind/pybind11 pybind11

Linux

On linux, you'll need gcc and g++, then inside the repo:

pip install .

MacOs

On MacOS, you'll need clang, then inside the repo:

pip install .

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 .

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.

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

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

splineax_klujax-0.5.0.post5-cp314-cp314-win_arm64.whl (206.7 kB view details)

Uploaded CPython 3.14Windows ARM64

splineax_klujax-0.5.0.post5-cp314-cp314-win_amd64.whl (221.5 kB view details)

Uploaded CPython 3.14Windows x86-64

splineax_klujax-0.5.0.post5-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ x86-64manylinux: glibc 2.28+ x86-64

splineax_klujax-0.5.0.post5-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

splineax_klujax-0.5.0.post5-cp314-cp314-macosx_11_0_arm64.whl (290.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

splineax_klujax-0.5.0.post5-cp313-cp313-win_arm64.whl (200.1 kB view details)

Uploaded CPython 3.13Windows ARM64

splineax_klujax-0.5.0.post5-cp313-cp313-win_amd64.whl (216.7 kB view details)

Uploaded CPython 3.13Windows x86-64

splineax_klujax-0.5.0.post5-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ x86-64manylinux: glibc 2.28+ x86-64

splineax_klujax-0.5.0.post5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

splineax_klujax-0.5.0.post5-cp313-cp313-macosx_11_0_arm64.whl (290.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

splineax_klujax-0.5.0.post5-cp312-cp312-win_arm64.whl (200.0 kB view details)

Uploaded CPython 3.12Windows ARM64

splineax_klujax-0.5.0.post5-cp312-cp312-win_amd64.whl (216.7 kB view details)

Uploaded CPython 3.12Windows x86-64

splineax_klujax-0.5.0.post5-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ x86-64manylinux: glibc 2.28+ x86-64

splineax_klujax-0.5.0.post5-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

splineax_klujax-0.5.0.post5-cp312-cp312-macosx_11_0_arm64.whl (290.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

splineax_klujax-0.5.0.post5-cp311-cp311-win_arm64.whl (201.3 kB view details)

Uploaded CPython 3.11Windows ARM64

splineax_klujax-0.5.0.post5-cp311-cp311-win_amd64.whl (216.3 kB view details)

Uploaded CPython 3.11Windows x86-64

splineax_klujax-0.5.0.post5-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ x86-64manylinux: glibc 2.28+ x86-64

splineax_klujax-0.5.0.post5-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

splineax_klujax-0.5.0.post5-cp311-cp311-macosx_11_0_arm64.whl (290.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file splineax_klujax-0.5.0.post5-cp314-cp314-win_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 8be7b49a7a663b29f6abc16601e83d2cc80de136dafb0b98023c64b6c2ef7ff8
MD5 9482830cfbc955f4c429eeed92302c88
BLAKE2b-256 95aeb1e89e99d73d7731b03803879bd03e22dde69256e7b31281fe1818f341e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp314-cp314-win_arm64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 3de743ba62402bfb27f81b388196acb88247e708d48be379f0160e262522a86d
MD5 d26406c76f880e2da79fa16ebfcd7fad
BLAKE2b-256 a7464763117cb0fc603024c31606e9275acf173b8e1e142771c2a1492969f15c

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp314-cp314-win_amd64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 96611b76457f5d21ca4b9cfa91f9bfdee8a77859552526068c0cf2e679af27f7
MD5 8ecc4bcf69acbd404ee9bfb97f5bceca
BLAKE2b-256 073d0e9fc83efd30e3bf73cefa3f60d144f5cc8d9e294d94f13f2987034f5168

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 879d8fd3ad36a5558034d543eb94826a98dd0eaeb676be12ecc19b64a52edc3d
MD5 adcc28f2805c1667f30f4eb400d82e75
BLAKE2b-256 d01eb04662249a7f6e16ebef04f780f10018385f8391ccfd100b302083858c01

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 288971aef873b0437353a6b49b257e86ba1aa0a635681d6f962b1cf2e027f34b
MD5 946c32ab6bf02b53e5df721494d85617
BLAKE2b-256 528b24c1b5b1cad9869f8f67be5d9d2603fb8a745d022963ae6d5c4480c7d51f

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp313-cp313-win_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 9f0eb412270afe6a66d70f95a6dbc22017b2c440d2187b2d200b3470a8df8949
MD5 4f415eac51835c2c09de1f3ae76b6f49
BLAKE2b-256 7a067c295edeacb6ea8a4acfc3529ab0aaae815eebc73cc543c26c53080fd864

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp313-cp313-win_arm64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f526db96e27953af209ddfa93cab4a0434c4a925c41f009b5d8520b5583e00a1
MD5 872491ef55a5ba55dfc9f929cdcde4d7
BLAKE2b-256 31b33156cdcc5cffbcab73b94b4ac7b6130963b6e92a385e1021427470eb2dd4

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp313-cp313-win_amd64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ebb2e631ad59cfb1dae897e9218cb8e74910f06828a807123555b3b48e4ec8f6
MD5 daca01ebacec31408d8e7bd5f724f32a
BLAKE2b-256 a16d514280ca91f0e696b9560ac1ca5a493c2d532a69fe362cde9995f484f239

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 681c7b870f8eb4aba89fcd76555d369dc88006a97a732286e592cea3fec50447
MD5 4dff8615a603d762272a663f7339adf1
BLAKE2b-256 f1c56e592229b709861bebe9c8ff19b18f90cf1e690dea37e0a43b6e6eaedd0b

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 59d2342cd3e1caec2a0c4e3e626d41666b9847af5ee028326ed912b048f151c7
MD5 13204c978e0a1fb104cfb214d9ebb850
BLAKE2b-256 9f8f0e9690059a65a774244b92c6ab7ff4af4866a17c4472aaac69d2c7b73d79

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp312-cp312-win_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 ef781479f3f67f1cfd4602e7f354b1bff03252dc6ffb1e24716f3939d334574d
MD5 eef1c2bd4fc24f5671468ac53ece1d04
BLAKE2b-256 d9393807635d0a4f0aada9d7e3707f6b701ab89e8387f7b24ab721d28137d54d

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp312-cp312-win_arm64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 71f9e0164adc2eb30c3229854d954a81eae03eba39cea53f8e5d2c2e3bef1221
MD5 e03838f47555088c2236be89b93c9c6f
BLAKE2b-256 ddc8a28873ba80e8d6ccef64351c3be1fd1c30ab4c3f4dcbcd36664a1c963849

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp312-cp312-win_amd64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 958856fa8a4177c336060c8016f2f70d3a8dae396c49f011dc9272f02d041bbf
MD5 c3eaffa9a763bedbb1a658fa95eb3e30
BLAKE2b-256 c886427b47eeefb37cb235a0ab5e6d27be6d25682ed746d708c3492c72c3ae9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 26a0eb40cac7c3b634d75eb7e2ee33b24f23c37e5f847fffe183b951975ec3a5
MD5 d499e1f14a66499fcf30787d0b8a8dc3
BLAKE2b-256 6155652f1755bad77e84f7cf2cba7773f088191540571a129796de3807aff67c

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a7dbbaea935d87942cdc9ef457f0946634cb8de3b37b32a0b7bde19dfd0533d2
MD5 5a8c490766f94673562432d3027ece51
BLAKE2b-256 0dfa1d0f0c24588a9bb0779bd25d725650c08de968edd9b55afccb57d66093a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp311-cp311-win_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 5187910d462b7a8cdc5b4af5eb704c1466dad509599aa5bb869703b33ba5adf6
MD5 abc5509434bdcef96c8d4c8d09bcf162
BLAKE2b-256 e0065178cda8dc249b952f2c1e966948bb5be8cb37a7e64d4750c954cebf3e70

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp311-cp311-win_arm64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 995032000c62f0d28db7ba6fbb50cf9f7b444deeee5aa28119033bbda5b2c6c3
MD5 dede6ddaf6426aa0c3bd6626943266f8
BLAKE2b-256 df3d94da695891e3512050b48f087fb812ee5f371da30518ebe3d3a6d3657057

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp311-cp311-win_amd64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 85096c17d01e63f6d8c187159060fd3fa6b63a270aafd0415928f78d0e455e02
MD5 9fe54db45e1512f6667ac7a5f89feff8
BLAKE2b-256 f7f5518c4525f24891fef81d490d7e872220aca5005af691e121a9c59025131f

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9cd6f43e957c7e3fa1c42a0466dccd4ec651a95b5a4601d20f9f674e921887ac
MD5 53572461a203a43e525b913f459ca702
BLAKE2b-256 d703122c4a832029d77a7c6f2cda2afdf042d14031355e21b8969e43177d5951

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: main.yml on nardi/splineax-klujax

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_klujax-0.5.0.post5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0bcd403a783d3b2b7cc839cf6317f81433658fe80861bd1c565c00cbaec04a69
MD5 e2ec4b31f3c2d09e31a8edaf293e925a
BLAKE2b-256 93a9f545a0e03bb5caa0ae8326a6c9726b7f906fc8e0c82acf3068a45a7fd042

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post5-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: main.yml on nardi/splineax-klujax

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

Release history Release notifications | RSS feed

This release

0.5.0.post5 This release

20 files

0.5.0.post4

20 files

0.5.0.post3

20 files

0.5.0.post2

20 files

0.5.0.post1

20 files

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