sparsax
JAX & PyTensor -native sparse Cholesky via CHOLMOD.
Solves with symmetric positive definite sparse matrices run at full native speed
inside @jax.jit (and lax.scan / lax.fori_loop) — no Python callback overhead.
Why?
- No open-source JIT framework (JAX, PyTorch, TensorFlow) exposes sparse Cholesky as a
compilable primitive;
klujaxcovers sparse LU, which is ~2× slower than Cholesky for SPD systems. - The target workload is Gibbs samplers (e.g. Bayesian spatial econometrics), where an SPD precision matrix is solved thousands of times with the same sparsity pattern but changing values, inside a JIT-compiled loop.
- Benchmarks (M-series macOS, 2D grid Laplacian, values changing every iteration): matches a
hand-written scikit-sparse Python loop per iteration and is ~2.7× faster than
scipy.sparse.linalg.splu, while running entirely insidejax.jit.
How it works
solve and logdet are XLA FFI custom calls into
CHOLMOD. The extension caches symbolic analyses (fill-reducing ordering + elimination tree)
keyed on the sparsity pattern, so repeated calls with the same pattern only pay for the numeric
refactorization — and calls with unchanged values skip even that, sharing one factorization
between solve and logdet. There are no handles to manage and nothing to pass through JIT
boundaries; the caching is transparent.
Installation
conda env create -f environment.yml # suitesparse, jax, nanobind, cmake, ...
conda activate sparsax
pip install --no-build-isolation .
Quick start
import jax
import jax.numpy as jnp
import numpy as np
import sparsax
jax.config.update("jax_enable_x64", True) # required: CHOLMOD is float64
# SPD matrix in COO form. Entries with Ai <= Aj are used (upper triangle);
# pass the full symmetric matrix or just its upper triangle.
Ai = np.array([0, 0, 1, 1, 1, 2, 2], dtype=np.int32)
Aj = np.array([0, 1, 0, 1, 2, 1, 2], dtype=np.int32)
Ax = jnp.array([4.0, 1.0, 1.0, 5.0, 2.0, 2.0, 6.0])
b = jnp.array([1.0, 2.0, 3.0])
x = sparsax.solve(Ai, Aj, Ax, b) # eager
ld = sparsax.logdet(Ai, Aj, Ax, n=3) # log|A| from the same factorization
@jax.jit # ...or fully JIT-compiled
def gibbs_step(Ax, b):
x = sparsax.solve(Ai, Aj, Ax, b) # full CHOLMOD speed, no callbacks
ld = sparsax.logdet(Ai, Aj, Ax, n=3) # factorization shared with solve
return x, ld
Features:
jit/lax.scan: the symbolic analysis is computed once and reused across iterations.- Autodiff:
solvehas a custom VJP (reverse-mode) in bothAxandb;logdethas one inAx(via the selected inverse — see below). Together they give the gradient of a Gaussian log-density, so the precision matrix's values can be fit by gradient-based inference (HMC/NUTS, empirical Bayes). vmap:jax.vmap(solve)lowers to a single native FFI call that loops over the batch in C++ (reusing the cached analysis), rather than XLA per-iteration dispatch. Composes withgrad(vmap(grad(solve))batches too). Map overAx,b, or both.- Multiple right-hand sides:
bmay be(n,)or(n, n_rhs). - Factor-part solves:
mode=sparsax.MODE_LTetc. expose CHOLMOD's solve systems (P' L L' P = A). Samplingy ~ N(0, A^{-1}):y = solve(..., solve(..., z, mode=MODE_LT), mode=MODE_PT). - Not positive definite → runtime exception (the factor is always a true LL').
Factor once, do everything: factor_solve / sample_gaussian
solve and logdet are separate primitives, so a Gibbs sweep that needs a posterior mean, a
correlated draw, and a log-determinant factors the same A several times — and under vmap
that is one factorization per solve per batch element. factor_solve factors A once and
serves every requested solve (each a chain of MODE_* codes) plus an optional logdet from
that single factor. Under vmap it lowers to one batched FFI call that factors once per
element, whatever the number of chains.
# Gibbs Gaussian step: posterior mean, a draw ~ N(mean, A^-1), and log|A|,
# from ONE factorization. eta = mean + P' L^-T z (since A = P' L L' P).
eta, mean, ld = sparsax.sample_gaussian(Ai, Aj, Ax, b, z, want_logdet=True)
# ...or spell it out with the general primitive:
(mean, w), ld = sparsax.factor_solve(
Ai, Aj, Ax,
[(b, sparsax.MODE_A), # A^-1 b
(z, (sparsax.MODE_LT, sparsax.MODE_PT))], # P' L^-T z (chain)
want_logdet=True)
eta = mean + w
Each rhs entry is (b, modes) where modes is one MODE_* or a sequence applied left to
right. sparsax.factorization_count() reports how many real factorizations have happened —
handy for confirming the fusion. Benchmarked Gibbs draw (mean + sample + logdet) vmapped over a
batch of different A's: 4× fewer factorizations and ~3.3–3.6× faster than issuing the
separate solve/logdet primitives. factor_solve is forward-only (no autodiff rule); use
solve/logdet when you need gradients.
Gradients & the selected inverse
solve and logdet are the two halves of a Gaussian log-density's gradient, so
a precision matrix A(θ) with a fixed pattern and θ-dependent values can be fit
by gradient-based inference — HMC/NUTS (e.g. via numpyro/blackjax, or PyMC's JAX
sampling backend), VI, or empirical-Bayes/MAP optimization:
def neg_log_post(Ax): # up to constants
quad = b @ sparsax.solve(Ai, Aj, Ax, b) # b' A^-1 b (solve VJP)
return 0.5 * quad - 0.5 * sparsax.logdet(Ai, Aj, Ax, n) # log|A| (logdet VJP)
grad_Ax = jax.grad(neg_log_post)(Ax) # works under jit / vmap
logdet's reverse-mode rule uses that d log|A| / dA = A^{-1}, evaluated only
at A's sparsity pattern by Takahashi's selected-inversion
recurrence over the Cholesky factor —
never the dense inverse. That quantity is exposed directly:
z = sparsax.selinv(Ai, Aj, Ax, n) # z[k] == (A^-1)[Ai[k], Aj[k]]
var = z[Ai == Aj] # diag(A^-1): Gaussian marginal variances
selinv shares the factorization cache, is JIT-compilable and vmap-able, and
costs one selected-inversion pass over the factor (O(nnz(L))-ish), not n
solves. factor_solve / sample_gaussian remain forward-only.
PyMC / PyTensor (NUTS)
The same CHOLMOD core is exposed as a PyTensor frontend for PyMC's default backend, so gradient-based samplers (NUTS) can differentiate through the sparse solve and log-determinant without going through JAX/XLA. It's an optional extra — the base package stays JAX-only:
pip install "sparsax[pytensor]"
import pytensor.tensor as pt
import sparsax.pytensor as cjpt
Ax = pt.dvector("Ax") # the precision-matrix values (θ-dependent)
# Gaussian log-density (up to constants); grad flows into Ax
logp = -0.5 * pt.dot(b, cjpt.solve(Ai, Aj, Ax, b)) + 0.5 * cjpt.logdet(Ai, Aj, Ax, n)
g = pt.grad(logp, Ax) # solve VJP + logdet (selected-inverse) VJP
cjpt.solve, cjpt.logdet, and cjpt.selinv mirror the JAX functions and carry
the same reverse-mode rules (solve in Ax/b, logdet in Ax); the pattern
(Ai, Aj) is non-differentiable data. On PyTensor ≥ 3.1 the gradient routes
through Op.pullback; older versions use grad.
Use the C backend, not numba
These Ops implement a pure-Python perform (it calls the native core, which
holds no GIL and does the real work — the CHOLMOD call dominates). PyTensor's
C backend (FAST_RUN, the default) calls that perform directly with no
penalty. PyTensor's numba backend cannot JIT a Python perform, so it falls
back to object mode and prints a UserWarning on every call — functionally
correct but with per-call overhead. Prefer the C backend:
import pytensor
pytensor.config.mode = "FAST_RUN" # C backend (default); avoids numba object mode
# For PyMC, this is the default; if you sample through the numba/JAX linker
# instead, drive NUTS via the JAX frontend (numpyro/blackjax) rather than these Ops.
Concretely: keep PyMC on its default sampler (C backend) to use these Ops, and switch to the JAX frontend above if you deliberately run PyMC's JAX/numba linker.
JAX sparse (BCOO)
JAX's native sparse type is jax.experimental.sparse.BCOO, whose .indices is (nnz, 2) and
.data is (nnz,). Convenience wrappers accept one directly:
from jax.experimental import sparse as jsparse
A = jsparse.BCOO.fromdense(A_dense) # or build however you like
x = sparsax.solve_bcoo(A, b) # == solve(A.indices[:,0], A.indices[:,1], A.data, b)
ld = sparsax.logdet_bcoo(A)
x = sparsax.update_solve_bcoo(A, c, b) # rank-k update, as below
The analysis-reuse speedup is unaffected: the pattern cache keys on the concrete index values
(exactly a BCOO's .indices), so a stable pattern across jit/vmap calls keeps hitting the
cache. A full-symmetric BCOO works directly (only the upper triangle is read), and
unsorted/duplicate entries are handled. Only a plain 2D BCOO (n_batch=0, n_dense=0) is
supported.
Rank-k update / downdate
update_solve solves (A ± C C') x = b by applying CHOLMOD's cholmod_updown to a working
copy of A's cached factor, instead of refactoring the modified matrix from scratch. A is
factored once; each call is O(k · path) where path is the elimination-tree path touched by
C's nonzeros.
# Add an observation (rank-1, sparse update column) and re-solve, cheaply:
x = sparsax.update_solve(Ai, Aj, Ax, c, b) # (A + c c') x = b
x = sparsax.update_solve(Ai, Aj, Ax, c, b, downdate=True) # (A - c c') x = b
x, ld = sparsax.update_solve(Ai, Aj, Ax, C, b, return_logdet=True) # C is (n, k)
When it pays off: the update column(s) C must be sparse (a few nonzeros — e.g. one
data point and its neighbors). On the grid-Laplacian benchmark a rank-1 sparse update is ~3×
faster than a full factorize+solve. A dense C walks the whole tree and is slower than
refactoring — use plain solve on the reassembled matrix in that case. The base cached factor
is never mutated, so update_solve is a pure function (works under jit; not differentiable).
Options
sparsax.set_options(supernodal="simplicial") # or "auto" (default), "supernodal"
sparsax.clear_cache() # free cached factorizations
For very sparse matrices (e.g. planar/grid graphs), "simplicial" often gives faster
triangular solves; "supernodal" (BLAS-based) wins on denser problems. "auto" lets
CHOLMOD choose based on the matrix.
Status / roadmap
-
solve(all CHOLMOD solve modes),logdet, symbolic + numeric caching, custom VJP, multi-RHS, tests, benchmarks - Native batching:
jax.vmap(solve)→ one FFI call looping over the batch in C++ -
cholmod_updownrank-k update/downdate (update_solve) - Cache the simplicial LDL' base factor for updown (rebuilt only on refactor), so the LL'→LDL' conversion is paid once per base change, not once per call
-
factor_solve/sample_gaussian: factor once, serve many solve chains + logdet from one factor; fuses undervmapto one factorization per batch element - Differentiable
logdet(reverse-mode inAx) and theselinvselected inverse (Takahashi recurrence over the factor); pairs withsolve's VJP for full Gaussian log-density gradients - PyTensor frontend (
sparsax.pytensor, optional extra) with matching autodiff, for PyMC's default backend / NUTS — a second frontend over the same CHOLMOD core - float32 (CHOLMOD 5 single precision) and int64 indices
- Autodiff rule for
factor_solve(currently forward-only) - Wheels / conda-forge packaging
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sparsax-0.7.0.tar.gz.
File metadata
- Download URL: sparsax-0.7.0.tar.gz
- Upload date:
- Size: 54.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f932423142e134d9e26f6392eb1bd352d2991c08f9714587415add1bd697f0e5
|
|
| MD5 |
1dfeaf60eb564b9c14fcbecd6bb3d905
|
|
| BLAKE2b-256 |
cfdd533876d9127b3bdd44ed104b83dd6149e5b8afd628c040b93d808633c668
|
Provenance
The following attestation bundles were made for sparsax-0.7.0.tar.gz:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0.tar.gz -
Subject digest:
f932423142e134d9e26f6392eb1bd352d2991c08f9714587415add1bd697f0e5 - Sigstore transparency entry: 2286963575
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sparsax-0.7.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: sparsax-0.7.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 7.0 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
329f70ae966b7a2c2efe8dadee327c4bea0c8f6307b355b4e5c32de566989528
|
|
| MD5 |
fb1a66e3a5b0ccdbebb59661453ae00a
|
|
| BLAKE2b-256 |
83a96494ee52999b5292753cadf47bb1d1b40b188c57f48cb751185fbf0c0601
|
Provenance
The following attestation bundles were made for sparsax-0.7.0-cp313-cp313-win_amd64.whl:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0-cp313-cp313-win_amd64.whl -
Subject digest:
329f70ae966b7a2c2efe8dadee327c4bea0c8f6307b355b4e5c32de566989528 - Sigstore transparency entry: 2286963859
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sparsax-0.7.0-cp313-cp313-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: sparsax-0.7.0-cp313-cp313-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 6.3 MB
- Tags: CPython 3.13, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01d2b8348e59e2f69e357b97c9edbd81ad2fd1450e2d4d1349f8d35bc2116c88
|
|
| MD5 |
e04c4f95611196083d50245e44449ef4
|
|
| BLAKE2b-256 |
d389ab2aab5af0d82fc46a834d7b1900dd274642d73151eab5536ae0a27017d2
|
Provenance
The following attestation bundles were made for sparsax-0.7.0-cp313-cp313-manylinux_2_28_x86_64.whl:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0-cp313-cp313-manylinux_2_28_x86_64.whl -
Subject digest:
01d2b8348e59e2f69e357b97c9edbd81ad2fd1450e2d4d1349f8d35bc2116c88 - Sigstore transparency entry: 2286963937
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sparsax-0.7.0-cp313-cp313-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: sparsax-0.7.0-cp313-cp313-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 6.0 MB
- Tags: CPython 3.13, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1eb269a5481f3cd23c945c8ccb71273f337b8c5f0639f399ac1c9fb34ced617e
|
|
| MD5 |
2c94ecdb42774b33588e3a7a79f60d0c
|
|
| BLAKE2b-256 |
5341dd50b10cbd803f3eb39e322fdb5c5c66c6fbee73c849755f594e73de1698
|
Provenance
The following attestation bundles were made for sparsax-0.7.0-cp313-cp313-manylinux_2_28_aarch64.whl:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0-cp313-cp313-manylinux_2_28_aarch64.whl -
Subject digest:
1eb269a5481f3cd23c945c8ccb71273f337b8c5f0639f399ac1c9fb34ced617e - Sigstore transparency entry: 2286963818
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sparsax-0.7.0-cp313-cp313-macosx_15_0_arm64.whl.
File metadata
- Download URL: sparsax-0.7.0-cp313-cp313-macosx_15_0_arm64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.13, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4770e00c8861c90ceb77111597cb41656d097460c40af70cccdb5a84426c0db3
|
|
| MD5 |
0fb5054b1e242a3b203b13a97fccd77c
|
|
| BLAKE2b-256 |
bcad99b92c3e8beb31dd86efac74b74e1df31044209740b376c141b0e41dcced
|
Provenance
The following attestation bundles were made for sparsax-0.7.0-cp313-cp313-macosx_15_0_arm64.whl:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0-cp313-cp313-macosx_15_0_arm64.whl -
Subject digest:
4770e00c8861c90ceb77111597cb41656d097460c40af70cccdb5a84426c0db3 - Sigstore transparency entry: 2286963788
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sparsax-0.7.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: sparsax-0.7.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 7.0 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a88eb1f89ad63f5816ee7054676670d8b4c2b40840f58a4132f6d0f9e2337f0
|
|
| MD5 |
d5f172873285a8eaae83d3d550160482
|
|
| BLAKE2b-256 |
5c9f6f34937eaadf15f97bf93eb2f321421b7d245769f284ec7319d41adb796c
|
Provenance
The following attestation bundles were made for sparsax-0.7.0-cp312-cp312-win_amd64.whl:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0-cp312-cp312-win_amd64.whl -
Subject digest:
3a88eb1f89ad63f5816ee7054676670d8b4c2b40840f58a4132f6d0f9e2337f0 - Sigstore transparency entry: 2286963615
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sparsax-0.7.0-cp312-cp312-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: sparsax-0.7.0-cp312-cp312-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 6.3 MB
- Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c291c0e2e94ca6b5be79b133fa58158c323c549a55b62ddf782951b4d4c54645
|
|
| MD5 |
adca93de5e4ddc7375ebab7162363c49
|
|
| BLAKE2b-256 |
ee80ccccf478ac7d672f89f6fcc7c6414fa149666cff596d42bef31bc59ee0e3
|
Provenance
The following attestation bundles were made for sparsax-0.7.0-cp312-cp312-manylinux_2_28_x86_64.whl:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0-cp312-cp312-manylinux_2_28_x86_64.whl -
Subject digest:
c291c0e2e94ca6b5be79b133fa58158c323c549a55b62ddf782951b4d4c54645 - Sigstore transparency entry: 2286963726
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sparsax-0.7.0-cp312-cp312-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: sparsax-0.7.0-cp312-cp312-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 6.0 MB
- Tags: CPython 3.12, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3aaf9f40e499509f26b3b1c1d1dbcd76ebe13b19d58e19ba4a456f2062839b75
|
|
| MD5 |
33421c9f6fcd52927acfc59407082182
|
|
| BLAKE2b-256 |
74e4ae3b78ca03168fd0ed0d820ea30aea35b30791a865710192c890186c8fe7
|
Provenance
The following attestation bundles were made for sparsax-0.7.0-cp312-cp312-manylinux_2_28_aarch64.whl:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0-cp312-cp312-manylinux_2_28_aarch64.whl -
Subject digest:
3aaf9f40e499509f26b3b1c1d1dbcd76ebe13b19d58e19ba4a456f2062839b75 - Sigstore transparency entry: 2286963646
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sparsax-0.7.0-cp312-cp312-macosx_15_0_arm64.whl.
File metadata
- Download URL: sparsax-0.7.0-cp312-cp312-macosx_15_0_arm64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.12, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
105a306e76cdd9c41a00031fd3401ef0bfffb9d8b0380482ceb9fb019525a710
|
|
| MD5 |
84f737283a2ee94c79ef75e7d8fd2db2
|
|
| BLAKE2b-256 |
ff5fd2fea8ecf8cc83bfd2395ee43bd018872703c3cbca920bd7b1e551c9fa98
|
Provenance
The following attestation bundles were made for sparsax-0.7.0-cp312-cp312-macosx_15_0_arm64.whl:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0-cp312-cp312-macosx_15_0_arm64.whl -
Subject digest:
105a306e76cdd9c41a00031fd3401ef0bfffb9d8b0380482ceb9fb019525a710 - Sigstore transparency entry: 2286963704
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sparsax-0.7.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: sparsax-0.7.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 7.0 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23f8d7073d743039e8ea55f2dcff6db92129f147bcf4b6712414976c4788dc0a
|
|
| MD5 |
2b9c03acb35beb1662b7f918db1f3a4d
|
|
| BLAKE2b-256 |
f607280c447e97daaa6816712669625f11ff33c153fa9029eb5bcabff3f71f5a
|
Provenance
The following attestation bundles were made for sparsax-0.7.0-cp311-cp311-win_amd64.whl:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0-cp311-cp311-win_amd64.whl -
Subject digest:
23f8d7073d743039e8ea55f2dcff6db92129f147bcf4b6712414976c4788dc0a - Sigstore transparency entry: 2286963679
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sparsax-0.7.0-cp311-cp311-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: sparsax-0.7.0-cp311-cp311-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 6.4 MB
- Tags: CPython 3.11, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a43c66aacb8bad67c85335d0f9cc8474422062fc683e9c74a301eb2c261a464d
|
|
| MD5 |
8ce2a6bfb9a15ac846b1cc0c33a615a1
|
|
| BLAKE2b-256 |
a07228153e56cd5f906f024442a892caf6871820f749d4e1dc784c6ec7b16f71
|
Provenance
The following attestation bundles were made for sparsax-0.7.0-cp311-cp311-manylinux_2_28_x86_64.whl:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0-cp311-cp311-manylinux_2_28_x86_64.whl -
Subject digest:
a43c66aacb8bad67c85335d0f9cc8474422062fc683e9c74a301eb2c261a464d - Sigstore transparency entry: 2286963973
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sparsax-0.7.0-cp311-cp311-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: sparsax-0.7.0-cp311-cp311-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 6.0 MB
- Tags: CPython 3.11, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e083887d8b740f6025f5f6f9af0f11858c25bcdc3a12a4e371c2c942d020651
|
|
| MD5 |
0fbe013d5ce6e01eb4de1735fef778f5
|
|
| BLAKE2b-256 |
1c8d4eeb7c590b35fde1f4e92116ad5603a94d7307c4d0a65d9706ecaac85ed2
|
Provenance
The following attestation bundles were made for sparsax-0.7.0-cp311-cp311-manylinux_2_28_aarch64.whl:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0-cp311-cp311-manylinux_2_28_aarch64.whl -
Subject digest:
9e083887d8b740f6025f5f6f9af0f11858c25bcdc3a12a4e371c2c942d020651 - Sigstore transparency entry: 2286963893
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sparsax-0.7.0-cp311-cp311-macosx_15_0_arm64.whl.
File metadata
- Download URL: sparsax-0.7.0-cp311-cp311-macosx_15_0_arm64.whl
- Upload date:
- Size: 1.8 MB
- Tags: CPython 3.11, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc5fc5d569022e4a7919e10f3993877eeaa92873dd895d95a0d2112f19ad1d9b
|
|
| MD5 |
2abe0bfcac44942b5cd1c0f72bb84bed
|
|
| BLAKE2b-256 |
ef6bd3bf2b1d1b703a7542a9f614fe374580107102764bcfe06ecf5e9449d787
|
Provenance
The following attestation bundles were made for sparsax-0.7.0-cp311-cp311-macosx_15_0_arm64.whl:
Publisher:
build-wheels.yml on knaaptime/sparsax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sparsax-0.7.0-cp311-cp311-macosx_15_0_arm64.whl -
Subject digest:
dc5fc5d569022e4a7919e10f3993877eeaa92873dd895d95a0d2112f19ad1d9b - Sigstore transparency entry: 2286963755
- Sigstore integration time:
-
Permalink:
knaaptime/sparsax@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/knaaptime
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-wheels.yml@b5a11e7a63188d06edd8e1daaadb3f7ef266039c -
Trigger Event:
push
-
Statement type: