lightarray
A small-array library for Python with the NumPy interface. Arrays of up to a few thousand elements run faster than NumPy because the per-operation overhead smaller. Everything lightarray does not implement itself is delegated to NumPy.
import lightarray as np # instead of: import numpy as np
t = np.linspace(0.0, 3.0, 601)
omega = 2 * np.pi
p = np.sin(omega * t / 2) ** 2 # runs in Rust
print(p.mean(), p.argmax(), p.std()) # native reductions
print(np.polyfit(t, p, 3)) # NumPy, transparently
- Same names as NumPy.
lightarrayexposes every public name of thenumpymodule andlightarray.ndarrayevery method and property ofnumpy.ndarray. Names without a native implementation call NumPy on a zero-copy view and return lightarray arrays for float64, int64 and bool results. - NumPy interop both ways. The buffer protocol,
__array__,__array_ufunc__,__array_function__and DLPack are implemented, so matplotlib, SciPy and NumPy itself accept lightarray arrays, and NumPy functions called on them hand back lightarray arrays. - Mutable, like NumPy.
x[2, 3] = 2,x[:, 0] = row,x[mask] = 0,x += 1and in-place methods such asx.sort()all work;np.asarray(x)is a writable zero-copy view. - Rust core, PyO3 bindings. Contiguous float64, int64 and bool buffers
with inline shape and strides; the binding overhead was measured against a
hand-written C extension (
benchmarks/carray_reference) before choosing Rust.
Using it in place of NumPy
Change the import and nothing else:
import lightarray as np # was: import numpy as np
Downstream libraries keep their own numpy import; they receive lightarray
arrays through the buffer protocol and hand back NumPy arrays, which
lightarray accepts everywhere. examples/lmfit_model_fit.py
is lmfit's "Fitting with Model" documentation example with only the import
changed: the model evaluation, noise and residuals run in lightarray and
lmfit/SciPy perform the optimisation. tests/test_lmfit.py checks that it
reaches the same optimum as with NumPy.
To see how much of a script runs natively, read lightarray._fallback.calls
before and after: it counts the operations delegated to NumPy.
Taking over NumPy inside a library
A library such as lmfit keeps its own import numpy as np; its functions
look that name up at call time. lightarray.patch_module(lmfit) rebinds the
NumPy references in a loaded package (the np alias, ufuncs, names from
from numpy import ..., submodules) to lightarray, so the library's own
array work runs on lightarray without editing it. Classes such as
np.ndarray used in isinstance checks stay NumPy, and compiled code
receives lightarray arrays through the buffer protocol.
import lmfit
import lightarray as np
np.set_patched(lmfit, True) # on; False restores NumPy; is_patched() queries
with np.patched(lmfit): # on for a block
result = model.fit(y, x=x, amp=5, cen=5, wid=1)
LIGHTARRAY_PATCH=lmfit,scipy:numpy python my_script.py # no code change at all
For packages whose compiled kernels require real NumPy arrays (SciPy) use
conversions="numpy" (the :numpy suffix above): conversion functions
stay NumPy's and every other function runs on lightarray only when it
receives a lightarray argument. With both lmfit and SciPy patched, lmfit's
documentation examples reach the same optimum as with NumPy and the
per-evaluation path delegates nothing (examples/lmfit_internals.py,
tests/test_lmfit.py, tests/test_scipy_dropin.py).
Speed
Total time per operation in nanoseconds, best of 7 runs, benchmarked against NumPy 2.5.3 on Python 3.14.2.
| Operation | lightarray | NumPy |
|---|---|---|
a + b |
80 | 345 |
a * 2.0 |
80 | 533 |
np.sin(a) |
103 | 378 |
a.sum() |
65 | 499 |
a.std() |
66 | 6529 |
np.sum(a) |
62 | 1550 |
a > 0.5 |
90 | 535 |
a[a > 0.5] |
206 | 844 |
(a > 0.2) & (a < 0.8) |
251 | 1427 |
np.where(a > 0.5, a, 0.0) |
275 | 1411 |
i * 2 |
99 | 629 |
a[idx] |
116 | 144 |
m[1] |
74 | 78 |
m[:, 1] |
195 | 86 |
np.array(values) |
136 | 476 |
np.arange(10) |
113 | 401 |
np.zeros(10) |
114 | 176 |
a[3] = 2.0 |
40 | 39 |
a += 1.0 |
26 | 495 |
a and b are float64 arrays of 10 elements, m is a 10 x 10 float64
array, i is np.arange(10), idx an int64 array of 3 indices and values
a list of 10 floats (python benchmarks/readme_table.py regenerates the table).
Reductions return NumPy's scalar types (np.float64, np.int64), built
through NumPy's C API in about 25 ns. Creating a strided view (m[:, 1]) is the one
operation slower than NumPy: it allocates the contiguous cache the kernels
work on. Above roughly 10000 elements the two libraries converge; lightarray
is not a large-array library.
Status
Version 0.3.1. float64, int64 and bool arrays are native, with NumPy's
dtype inference (np.array([1, 2]) is int64, comparisons give bool arrays,
int and float mix to float64); every other dtype and the long tail of NumPy
functions go through NumPy at NumPy speed plus about 1 µs and come back as
NumPy arrays.
isinstance(a, numpy.ndarray) is True for a lightarray array, so library code
that checks for arrays (SciPy's root finders, OApackage's converters) takes
its array branch. The real type is still lightarray.ndarray:
type(a) is numpy.ndarray is False, and compiled code that demands an actual
NumPy array (Cython's typed arguments) converts through the buffer protocol
or rejects it. The reverse does not hold in a script that does
import lightarray as np: a NumPy array that lightarray hands back for a
dtype it does not hold is not an instance of np.ndarray there.
Indexing with integers and slices,
reshape, ravel and .T return views that share memory with the array, as
in NumPy (row = a[0]; row[:] = 0 and a[:, 1] *= 2 change a). The
kernels work on contiguous buffers: a contiguous selection is a window into
the base's buffer at no extra cost, while a strided one (a[:, 0], a[::2],
the transpose of a matrix) is gathered from the base when it is used, which
is cheap for small arrays and one extra pass over the data for large ones.
Views that NumPy returns for delegated operations (swapaxes, split,
a[..., 1]) stay views as well.
Where NumPy and the Array API disagree, lightarray follows NumPy. Against the
official Array API test suite it passes 1346 of 1374 tests; 27 of the 28
failures are tests NumPy lists as expected failures of its own
(tools/ci/array-api-xfails.txt): finfo returning NumPy scalars, complex
expm1 at infinities (numpy#21746) and floor_divide of infinities, where
NumPy follows Python. The last one is indexing a NumPy array with an empty
lightarray bool mask, which NumPy casts to an integer index. lightarray does
add the Array API keywords NumPy lacks (sort(descending=),
fft.fftfreq(dtype=)), since they change nothing NumPy does.
Development
python -m venv .venv && source .venv/bin/activate
pip install maturin "numpy>=2.3" pytest matplotlib lmfit
maturin develop --release
pytest # parity tests against NumPy
cargo test --release --lib # kernel tests
benchmarks/carray_reference/build.sh && python benchmarks/bench_overhead.py
python benchmarks/gate.py # coarse performance gate with absolute limits (CI)
python benchmarks/perf_check.py --save # record this machine's timings of 70 key operations ...
python benchmarks/perf_check.py # ... and fail when a later build is slower (1% overall, 6% per operation)
python examples/lmfit_model_fit.py # lmfit example running on lightarray
python examples/lmfit_internals.py # lmfit's own internals rebound to lightarray
Tested with the test suites of lmfit (650 of 650 with lmfit's internals on lightarray), OApackage (115 of 115, including its SWIG-wrapped C++ entry points) and parts of SciPy's and NumPy's.
New features must not cost the hot paths anything: run perf_check.py --save
before starting on a change and perf_check.py after rebuilding. It measures
in several fresh processes pinned to one core and compares with the saved
baseline, so it notices a few nanoseconds where gate.py only catches gross
regressions.
Requires Python 3.13+, NumPy 2.3+, and a stable Rust toolchain.
Release files for lightarray 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| lightarray-0.3.1.tar.gz | 115.5 kB | Details |
Built distributions (wheels)
Total release size: 7.5 MB
Release files / lightarray-0.3.1.tar.gz
| Download URL | lightarray-0.3.1.tar.gz |
|---|---|
| Size | 115.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b67eb13a35a3a599155aaf548ba5ca43d7ce9b7f31a8c94ece2f605f46f4eb76
|
|
BLAKE2b-256 checksum How to use checksums |
0fad2bcfc35ab7a6302fc1808e7442262932f6360aabd2495ecd604c8c3db49f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp314-cp314-win_amd64.whl
| Download URL | lightarray-0.3.1-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 446.1 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
1af31c85e915d9d0fcfdd14bbcd8d994219f7d52b79d8f53ead1a557d1c501fd
|
|
BLAKE2b-256 checksum How to use checksums |
cd1cbde18f97107fc5fdb459641612adbeb98ba9b8dfa6ca954acddcd4618616
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl
| Download URL | lightarray-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 617.9 kB |
| Tags | CPython 3.14 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
20dacac1573ad91a1842186e0f62669559eb37c6bc4c9b41d5dcd859e920d497
|
|
BLAKE2b-256 checksum How to use checksums |
05b617967cade48e84b4457faed42903b4c880931e1cb453344fe573b986f89b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp314-cp314-musllinux_1_2_aarch64.whl
| Download URL | lightarray-0.3.1-cp314-cp314-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 571.6 kB |
| Tags | CPython 3.14 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
2d79a2d7801c64e34a3bd217800a059d22b35264e81cde95f38431813ab54e6e
|
|
BLAKE2b-256 checksum How to use checksums |
2ad82672581b65be5bd08e04ec0fba41b3cb603d41c011fb3977091a9fafd04e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp314-cp314-manylinux_2_28_x86_64.whl
| Download URL | lightarray-0.3.1-cp314-cp314-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 537.2 kB |
| Tags | CPython 3.14 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
8799ecb3a88b7c0aa4d6234bf5f2f907ba221b537244fb9cda254511226ab147
|
|
BLAKE2b-256 checksum How to use checksums |
9d4df759ffb368d6c1a49e8d90f054a6b3999bc87359a300b591f734268c99ed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp314-cp314-manylinux_2_28_aarch64.whl
| Download URL | lightarray-0.3.1-cp314-cp314-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 508.3 kB |
| Tags | CPython 3.14 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
6e6e0b9af0841bcb90e84ddf650dfe27c98ef62366e5cfccc664b6726571900f
|
|
BLAKE2b-256 checksum How to use checksums |
37c193a5662c74e5b8c5569d1de9c580074139ed8a22147b4154ba78004ab6f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp314-cp314-macosx_11_0_x86_64.whl
| Download URL | lightarray-0.3.1-cp314-cp314-macosx_11_0_x86_64.whl |
|---|---|
| Size | 522.1 kB |
| Tags | CPython 3.14 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
61c8e52b7bae9bcfc9252d1ecf29a30d9811791dd739a382e2bfc2e6ac7395aa
|
|
BLAKE2b-256 checksum How to use checksums |
dc8f69507f67529d1123336bc0a487bc6404692a82e477091230acb4377acb52
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | lightarray-0.3.1-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 481.9 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
392d5a487602d7dd4dd1702527804e0662d893dc82594f1981a3f54ba65c5388
|
|
BLAKE2b-256 checksum How to use checksums |
f0d11b9e4426a6f703c1da8f96ef03f923bbf7a94d2822f5aa5f6b402ee83ae3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp313-cp313-win_amd64.whl
| Download URL | lightarray-0.3.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 445.5 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
89bf0f3a6a31860a142127dd43998536c4c0f09dce5fae0824ce39467ab08a2d
|
|
BLAKE2b-256 checksum How to use checksums |
287ccb99e49f6f8e87c95eb6ce8335413d726b64d5774592cf33a1228d17b9c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl
| Download URL | lightarray-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 618.1 kB |
| Tags | CPython 3.13 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
f2cd590f92e385c9a32461526a0646f454df5a7cef8e2ec85d40aecafaeb510f
|
|
BLAKE2b-256 checksum How to use checksums |
acefa99ce2ea97b6e4ca35a7583ca119f4c5c2416b4b80a73334f040dfa49a71
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl
| Download URL | lightarray-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 571.8 kB |
| Tags | CPython 3.13 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
f3cdd26f1301545ff8a134d7a1437f02f6955b6726b0e602c2ead1eb62644b22
|
|
BLAKE2b-256 checksum How to use checksums |
95f1cfabf4209ac68b2a2cfa08a2047094591d6efa340664aa45668e47e38db9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | lightarray-0.3.1-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 537.3 kB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
1652298fe7779dcd6796a84bbbee3b4e6b335aa99608216d7d0c11aa70e8064b
|
|
BLAKE2b-256 checksum How to use checksums |
533f6071e4a111429ed1bfba875523e975bf4e1eb259fe3d2aafc1ca1a2bd862
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp313-cp313-manylinux_2_28_aarch64.whl
| Download URL | lightarray-0.3.1-cp313-cp313-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 508.6 kB |
| Tags | CPython 3.13 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
3ec5ac5bec01ca3225088b02ab5ea97dee03a256adab4f861d89eed2931a651c
|
|
BLAKE2b-256 checksum How to use checksums |
14eaa81309b998ca513e6445cffb9e1903e56ecba9ea63686a97f73514363364
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp313-cp313-macosx_11_0_x86_64.whl
| Download URL | lightarray-0.3.1-cp313-cp313-macosx_11_0_x86_64.whl |
|---|---|
| Size | 521.7 kB |
| Tags | CPython 3.13 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
cffdef35569e79d7858e513ac85f439e6c39c2a65041186e52b696e54ffebf7d
|
|
BLAKE2b-256 checksum How to use checksums |
5e422980a7dc4419b2e1995fa0614e225f2d163a053a0cb6eb84a8c105cfc82a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / lightarray-0.3.1-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | lightarray-0.3.1-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 482.7 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
6a9f0b9a9013e63eafb1dc02dbd038a86ae7c747f9d199b203387f2882eacc68
|
|
BLAKE2b-256 checksum How to use checksums |
1f12133b2c0d8efefd1467cd17a6d30030b645aa1345bc75f841b7a06aa6c47d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency log