Skip to main content

a KLU solver for JAX

Project description

KLUJAX

version: 0.5.0.post1

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 KLUHandleManager that automatically cleans up C++ memory
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)

Lifecycle & Pointer Pitfalls

Because klujax.analyze and klujax.factor generate KLUHandleManager objects which wrap low level C++ pointers, there are strict rules for avoiding memory leaks and segmentation faults.

The "Ghost Pointer" Problem inside JIT:

JAX's jit works by tracing your code. During tracing, Python objects like the KLUHandleManager are converted into symbolic Tracers.

  • Outside JIT: The KLUHandleManager uses RAII (Resource Acquisition Is Initialization). When the Python variable is deleted or goes out of scope, the C++ memory is freed automatically.

  • Inside JIT: If you create a handle (via analyze or factor) inside a JIT-compiled function, the Python manager is "lost" during the conversion to XLA. XLA will allocate the C++ memory at runtime, but it will never call the free function.

The Fix: Explicit Destruction with Dependencies

If you must create a handle inside JIT, you must manually call free_symbolic or free_numeric inside that same function. To prevent the compiler from freeing the pointer before the solve is finished, you must pass the solution as a dependency.

@jax.jit
def dynamic_solve(Ai, Aj, Ax, b):
    # 1. Born inside JIT (No automatic cleanup!)
    sym = klujax.analyze(Ai, Aj, 5)

    # 2. Compute solution
    x = klujax.solve_with_symbol(Ai, Aj, Ax, b, sym)

    # 3. CRITICAL: Force XLA to free 'sym' ONLY AFTER 'x' is ready
    klujax.free_symbolic(sym, dependency=x)

    return x

Summary of Best Practices

  1. Hoist Creations: Always try to call analyze or factor outside of JIT blocks.

  2. One Manager, One Free: Do not manually call free_symbolic(manager) and then let the manager go out of scope; it will attempt a double-free (though the library has safeguards to prevent a crash).

  3. Check for Warnings: If you see a UserWarning: Allocating KLU handle inside JIT, your code is currently leaking memory. Use the dependency pattern shown above to fix it.

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.

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

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

splineax_klujax-0.5.0.post1-cp314-cp314-win_arm64.whl (174.2 kB view details)

Uploaded CPython 3.14Windows ARM64

splineax_klujax-0.5.0.post1-cp314-cp314-win_amd64.whl (188.9 kB view details)

Uploaded CPython 3.14Windows x86-64

splineax_klujax-0.5.0.post1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl (2.9 MB view details)

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

splineax_klujax-0.5.0.post1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (2.9 MB view details)

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

splineax_klujax-0.5.0.post1-cp314-cp314-macosx_11_0_arm64.whl (255.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

splineax_klujax-0.5.0.post1-cp313-cp313-win_arm64.whl (168.4 kB view details)

Uploaded CPython 3.13Windows ARM64

splineax_klujax-0.5.0.post1-cp313-cp313-win_amd64.whl (184.6 kB view details)

Uploaded CPython 3.13Windows x86-64

splineax_klujax-0.5.0.post1-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl (2.9 MB view details)

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

splineax_klujax-0.5.0.post1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (2.9 MB view details)

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

splineax_klujax-0.5.0.post1-cp313-cp313-macosx_11_0_arm64.whl (254.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

splineax_klujax-0.5.0.post1-cp312-cp312-win_arm64.whl (168.4 kB view details)

Uploaded CPython 3.12Windows ARM64

splineax_klujax-0.5.0.post1-cp312-cp312-win_amd64.whl (184.5 kB view details)

Uploaded CPython 3.12Windows x86-64

splineax_klujax-0.5.0.post1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl (2.9 MB view details)

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

splineax_klujax-0.5.0.post1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (2.9 MB view details)

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

splineax_klujax-0.5.0.post1-cp312-cp312-macosx_11_0_arm64.whl (254.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

splineax_klujax-0.5.0.post1-cp311-cp311-win_arm64.whl (169.3 kB view details)

Uploaded CPython 3.11Windows ARM64

splineax_klujax-0.5.0.post1-cp311-cp311-win_amd64.whl (184.1 kB view details)

Uploaded CPython 3.11Windows x86-64

splineax_klujax-0.5.0.post1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl (2.9 MB view details)

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

splineax_klujax-0.5.0.post1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (2.8 MB view details)

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

splineax_klujax-0.5.0.post1-cp311-cp311-macosx_11_0_arm64.whl (255.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 3d8955cadce55129c6ae416d7bd6f4ff40ed15dcc29b126b0b4ec9ab5b7adceb
MD5 d6c5e2f824cd7450ccfef04bba427de7
BLAKE2b-256 6c55366cf80396a3840b601836d7222e80a8096b3dca3ac6980805dffbda36be

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 7dfa425af82a066cdd4c8274fc6bd2f77a24e80e1c077a405263dedc8a54d0eb
MD5 3af56c26f03218f73eecf8d4a46d2b8d
BLAKE2b-256 96d892a1e90b4e22b237ba23bbf9d1b71b4e527765f7442ae6a4de1f05d78115

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3e250b0f80742532c11c3aeef9b6111daf4be4b26a71ee3218fa5467d7a448b0
MD5 dcb4837ffb5fe315eab56a1e4c759232
BLAKE2b-256 372bbf8213796d68f09195ad7ed417c0868868b5775ce5e4f8673f5f47309062

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1158e579869aaf62516a7f0c61d9ba7ebf085e9c2bfcf2856d6dc7f3ad32da9a
MD5 0e7865fcba1f8a9af80db6b0037215c4
BLAKE2b-256 c9ea9e2e23ec489d0b5e4daa505e2eae4ae64c28128f3eb224d2ef8ae079faf0

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 86c35259e2d38ad4a94c8752ac5de1cdf4ea894298fa954e38d5b05f099d5db1
MD5 7afe42b46fd7d4025e337deea9614edf
BLAKE2b-256 aaf1352b6cd5cbddccaea052cadb31a637f239a92c63a383dab1e0fac4961428

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp313-cp313-win_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 289aeb38566d1b2ac00ff8d96b079256b291436bbb4984e21c40b3ba9e82c6e5
MD5 481d2f6f2b600a9f01946c174a2ddec8
BLAKE2b-256 aa0005c36186176cf4a2afc68eb1d92b7f186b592a093055e69911507962c79e

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e21b5802552ca00c777b31e2b5c7fb919262d4ecf4377160d3c15a7c9cdc841d
MD5 041ce6ddd173cfd40098440b8de371bf
BLAKE2b-256 8ead1ef67741dbb40ddb9b8bb72fa00e9da44065c2a14b7c9997e6c22214b07a

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 209f305bdc1c3f4cd580cd59d23cc96cb329fad8bace8f27da3c41ee7568d1a1
MD5 b942b0e281284582561afb3dcbd27ae6
BLAKE2b-256 f1e3434f2e79be0ee60c07ee0695399495db9d2dcfa63d474531adb03780a081

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 941f43d8c9eb93a3e23f9088a85f048df0636d61419f5dc906f69556fb083b29
MD5 ff2eae7d5cb91468dbccbb6b61e2a0ff
BLAKE2b-256 3307009a79bb84051462c0febae1594cba4b08d99fdf1c56f36c79b51fe90d3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fdd6d0d4d1a44a83425e1b32ad1df2ff8c6359441ed3f90b786781bf2d550cc5
MD5 245e7900215a4246bfcf84f0f567546f
BLAKE2b-256 854d8c04863e139d7f08388231fc4b6e25b1f9f85d230c10352dd196d8093eef

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp312-cp312-win_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 e55142ed11963d77179f6676098516af83772cec4d803248925af662dc1f0786
MD5 7cc85b38bbc365b2cfe7b608272cf1b8
BLAKE2b-256 61bb160d2a0008844ecbfb9e5d6376230300f465177862e912910aa8c1484f2c

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 46954e72c1d393af788eb7d5888394b752ed96ac6eff4e200f38d254dee84e34
MD5 b3f2d6fc5c79ce2088bec5e1b9ce9d69
BLAKE2b-256 217f42ee0329adfe959891a36be47a18163afc6f24856cb1de235923f128740e

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6f7ac879796a661faeb4e48296c392f508094ba830887414cccd7f64fe1ce7cf
MD5 a8bdf3f157f6933cdca36ea99b699228
BLAKE2b-256 ce894603d96a473e49ceff9c377947061040ae54cd8db6a7421b4932b82357bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6adc2ed820c87da770f7800751d160ebd69c885890ac9382921b070b29d16485
MD5 565f2e6c6acd4f87ca48a3c0df91f31c
BLAKE2b-256 24cf64041b3e1353c2a8db5296c413f07c7bcf91c476e5417b68801b002228d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 565b4233dff67f723d2fe978a8576c0093078d14ee749267db491d3b8e1da141
MD5 9ee65290f2d34629c62ebcd1b3629efa
BLAKE2b-256 21926c2cc2a1541dc373a79c03b6bbb8956256fe0b1066043c5fd22c071d5de6

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp311-cp311-win_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 ed4d3225b2688aebfc2ee1d047b68176928d2c179793cbbc14966af42de97790
MD5 cebef866a228b3a1e8ebc64c5afb3d73
BLAKE2b-256 f0de88e9012880ecf3718936a7c55bd6afb69dde64fda0379c249b23c5731e66

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4d044dc3116af2d98ac2ecb3838d046c6b9b541f6ea73a5e94c9dfe584104c69
MD5 d604ac3fbf059032632b856541ad058f
BLAKE2b-256 1ece3f16a8dba83cdf0c92729a58a52e4c7f750225c1d326abb1294655215d95

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 abe578f6c8a6b7aef25a586bd70329fb9a6146626189eef2ca92d9f35152fcdb
MD5 e8c945fc7bc902df30e36d8fe2cbf82f
BLAKE2b-256 ca60bb0d2f268fa3741ae3037b0e55701f0d4e1e5138b0850f381f6c94c39ff0

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ead7d5241441fb9dbdc0cd7b14fea6170dd686b8edb8d823af3dc85c1ac0bd81
MD5 3e48ee2a0ff37b53b690ddfd141336a8
BLAKE2b-256 485fde17a94c897543a1651f0fd6d58f1da0a7e51d1e67ced4d88a62dc5aab11

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.post1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 117a96f3424cb80824cd2d446a068d6634138d40122b48ac152c4e72cf5b2f27
MD5 61d33af34c04bb89e2cd86a73e937157
BLAKE2b-256 9ea07e95de5bbfd75c9ae432310491d59fe04761653bbd257727227c0d15b57d

See more details on using hashes here.

Provenance

The following attestation bundles were made for splineax_klujax-0.5.0.post1-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.

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