Skip to main content

a KLU solver for JAX

Project description

KLUJAX

version: 0.5.0.post2

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.post2-cp314-cp314-win_arm64.whl (173.9 kB view details)

Uploaded CPython 3.14Windows ARM64

splineax_klujax-0.5.0.post2-cp314-cp314-win_amd64.whl (188.7 kB view details)

Uploaded CPython 3.14Windows x86-64

splineax_klujax-0.5.0.post2-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.post2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (2.8 MB view details)

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

splineax_klujax-0.5.0.post2-cp314-cp314-macosx_11_0_arm64.whl (255.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

splineax_klujax-0.5.0.post2-cp313-cp313-win_arm64.whl (168.1 kB view details)

Uploaded CPython 3.13Windows ARM64

splineax_klujax-0.5.0.post2-cp313-cp313-win_amd64.whl (184.5 kB view details)

Uploaded CPython 3.13Windows x86-64

splineax_klujax-0.5.0.post2-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.post2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (2.8 MB view details)

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

splineax_klujax-0.5.0.post2-cp313-cp313-macosx_11_0_arm64.whl (255.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

splineax_klujax-0.5.0.post2-cp312-cp312-win_arm64.whl (168.1 kB view details)

Uploaded CPython 3.12Windows ARM64

splineax_klujax-0.5.0.post2-cp312-cp312-win_amd64.whl (184.4 kB view details)

Uploaded CPython 3.12Windows x86-64

splineax_klujax-0.5.0.post2-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.post2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (2.8 MB view details)

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

splineax_klujax-0.5.0.post2-cp312-cp312-macosx_11_0_arm64.whl (255.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

splineax_klujax-0.5.0.post2-cp311-cp311-win_arm64.whl (169.0 kB view details)

Uploaded CPython 3.11Windows ARM64

splineax_klujax-0.5.0.post2-cp311-cp311-win_amd64.whl (184.0 kB view details)

Uploaded CPython 3.11Windows x86-64

splineax_klujax-0.5.0.post2-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.post2-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.post2-cp311-cp311-macosx_11_0_arm64.whl (255.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 ce151841353ad1f875f22bdd0627ff353b5e29fc0b85ef57c00eb37800ac1d80
MD5 60f87fe75023f05d23d2c44056de388b
BLAKE2b-256 9747f9784eaf81ea4d53464d35dff8b6fb73494db9032928bd9281b98129b9ed

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 aee94776c1ab4f856989864b83d3687351484ab3000b9ef34db2235983dbb4f7
MD5 cd865ce19f755ec431db8b923138372c
BLAKE2b-256 c0f046c9457ee94a6624ac5480184820ca1e147c3b581f726136c2fce23a715c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d02ae3908ed4f6e5f8c7d818b817ecef39711e977f9e5e97462c12ec62b71834
MD5 3a026460be387b5bc75a25637b952b5c
BLAKE2b-256 dcfd330cda78944bd2be5356ef8d93b8a52972f4bbb33e9adf97329bd81e9964

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a1a587610630f099f0699202f3eb32bf32506701c468379745c3b44ee482f101
MD5 861566fa151c132ff36efe91091dd28d
BLAKE2b-256 15e88e2a2eaf6f82c31d22def0b13026035a0481d9a22ecf61640e7bbb1adc51

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f9666b3461c57332c71884f4a2a64ae27edbb23ab4d8070c7adb523a907de1f2
MD5 4f7cf5b2437e855434c7749e635eb978
BLAKE2b-256 dd962a223295b99b033b0a7414489d3c45fa95283f7f24792073efc772dbfe96

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 f6b545402ed5ba6919449151ab30ffd30e74169e70fa75222ecc09fa8c048111
MD5 bbc23f8429734ba4872d4f9a1b767315
BLAKE2b-256 9ea15fc2ad17c3851015f268ece1cba50ce0fbc4f7090bf9c6c9a94a384aecbe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4bf91274822d1425a973e8589815a24675215613071e0ba171244a6c502ac3f7
MD5 5e9bc0f769a44a5fb28cf1b0577f41b0
BLAKE2b-256 b92ef0353e66935e3d8abe22cff1a8c992df5262045fbbae0d40c8dcb75a4e3e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dfde4b3433e3206c707b62b0b0a7e726c93203928fa4fb9d0f719193811fe184
MD5 c8b8c3bbdd162eff68638749969b61c9
BLAKE2b-256 21918569984fb5e2d4412fe747168918bdf4ea73cc8db640eaa322ac186d82b2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 930331be4153c78fb21f2721dee72b0a60020b97fbd68e423f8e0e6443579b15
MD5 65e5c050eb0e82ac4ee628f3b8531743
BLAKE2b-256 4e0538cd369a06063af43870f7bfe93e6a94ff34fe55ac2eebeb4cf04985e068

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 28e1ec17fb6104f7a71726fe8306c4db586aa38ac637ccd6e98337e40de97698
MD5 ce63796cdd849bbe613cd0c0e5bc2bd6
BLAKE2b-256 3cce6f79ee011970344263adde4d1a7e0a0a7a0981f582db3dab1890cfa11b49

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 224d616c565572b33e7abe770db77379d2b4357b438695ea1f3401d01b5b1301
MD5 e4013f4c30a8e9813824ea16a8e0e386
BLAKE2b-256 a064d36af4258b8a27740583e79246c7b21f8e73a7222fab36668d304bcba371

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 596dcbe4e1162500a3f942afe5d28be6769d345303a0a5d5a5fee8ba4eca8b4a
MD5 bb3a3aedcd5e718b9d8356b3dc0644b0
BLAKE2b-256 d82abeb9e2e54d2c57f52a4e5fc7e8b6c34b72d3df1c091802e48885b613132e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3d1c12ba8b2b18b168042ccedae32275203a92398dadbc2e04ac51044398d18c
MD5 c034239081a123313448a087a5b45f01
BLAKE2b-256 9b3e94440ea98788556095e736a72764a1fa4dac6621928468810ebb44b6db48

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fcf14be786809507e518f648f055e58e5faa131fb0db318faab7648ea2dd4623
MD5 fba7e93628140eb9b9b39dcf64837a8b
BLAKE2b-256 0d9b20bf9a479f4408ab089123687b7377575cc9fb74def05f644af0f9f4270e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e6a7bca145a78aa3b81ab201773098676e1c631f7c2103ba2990420e37c6532f
MD5 d161f6ab1c233ed95a0564b4c58df70c
BLAKE2b-256 da30be3495dc564aae675439faa5080a2065b0e66fe404abda39336c90f53830

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 04bec6fbe079de288435bbe75f8c3364608fb2c4bb01d69a7b7f09379a32904f
MD5 51032fac402981bfede16b3205cd83b5
BLAKE2b-256 13bd78d9e0c3168edfe7c2275fb2ba74bbb5a6737746012d49f838b70057bc0b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bc75fd2b8a3eec9bf91108c7b632ac403b7b14ac775e8bb0213be6d0bdd724a8
MD5 a0ec6f2ba5fa4b6e1e2cf992364e8e57
BLAKE2b-256 00ea41ed9254bd6bc80100208cf31090ef770d1134d5a29a4d1765bef66d3a8a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1ab11d969b6b168e2f3add9ea8adb5db8df7d7f94faf92ed6acdf6bf2ae7a548
MD5 be5124aa4fbbea5ff2dcb400aa5fe7d3
BLAKE2b-256 330d3f40c9ef7bb449d56f525a1c0094b37f9524fea5a3aded98eb81ac0fbb8d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 259b4ec05a70a3fb390f9478cf7f4927f643ed02769bf025b8e89cfb833ac679
MD5 a6ca41588dd8d8ca2c2af269ba655d5e
BLAKE2b-256 c4cbb3000b2cbced42a3f161b7e17fb28aed64ae8e27f5c01ca2df613bda7dd6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for splineax_klujax-0.5.0.post2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6b44dca15953e66dbcb0e58f039e2a72a7f2c485543b4ed0afc9f9a540d4b44c
MD5 4d67d59f30fb1f543f31818516c7b7be
BLAKE2b-256 72e63a81b09711142845d978ca0be6a887779dff7f442da20514ffb4fdac72ae

See more details on using hashes here.

Provenance

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