JollyJack
JollyJack is a high-performance Parquet reader designed to load data directly into NumPy arrays and PyTorch tensors with minimal overhead.
Features
- Load Parquet straight into NumPy arrays or PyTorch tensors (fp16, fp32, fp64, int32, int64)
- Up to 6× faster and with lower memory use than vanilla PyArrow
- Compatibility with PalletJack
- Optional io_uring + O_DIRECT backend for I/O-bound workloads
Known limitations
- Data must not contain null values
- Destination NumPy arrays and PyTorch tensors must be column-major (Fortran-style)
Selecting a reader backend
By default, the reader uses the regular file API via
parquet::ParquetFileReader. In most cases, this is the recommended choice.
An alternative reader backend based on io_uring is also available. It may provide better performance for some workloads, particularly when used together with O_DIRECT.
To enable the alternative backend, set the JJ_READER_BACKEND environment
variable to one of the following values:
io_uring- Uses io_uring for async I/O with the page cacheio_uring_odirect- Uses io_uring with O_DIRECT (bypasses the page cache)
Performance tuning tips
JollyJack performance is primarily determined by I/O, threading, and memory allocation behavior. The optimal configuration depends on whether your workload is I/O-bound or memory-/CPU-bound.
Threading strategy
- JollyJack can be safely called concurrently from multiple threads.
- Parallel reads usually improve throughput, but oversubscribing threads can cause contention and degrade performance.
Reuse destination arrays
- Reusing NumPy arrays or PyTorch tensors avoids repeated memory allocation.
- While allocation itself is fast, it can trigger kernel contention and degrade performance.
Large datasets (exceeding filesystem cache)
For datasets larger than the available page cache, performance is typically
I/O-bound. Enabling either pre_buffer=True or prefetch_page_cache=True
brings throughput close to the raw I/O ceiling, but prefetch_page_cache
avoids the increased LLC miss rate caused by pre_buffer
(see Page cache prefetching below).
Recommended configuration:
use_threads = True,prefetch_page_cache = True,pre_buffer = False, with the default reader backend.
Small datasets (fitting in filesystem cache)
For datasets that comfortably fit in RAM, performance is typically CPU- or
memory-bound. Using pre_buffer is not recommended because it leads to an
increased LLC miss rate and suboptimal performance
(see Page cache prefetching below).
Recommended configuration:
use_threads = True,prefetch_page_cache = True,pre_buffer = False, with the default reader backend.
Page cache prefetching with prefetch_page_cache
The prefetch_page_cache option calls posix_fadvise(POSIX_FADV_WILLNEED) to tell
the kernel to start loading the relevant byte ranges into the page cache.
Each worker thread then reads directly via pread into its own
locally-allocated buffer, keeping data hot in its local CPU caches.
This avoids the LLC (Last Level Cache) miss problem with pre_buffer=True,
where Arrow's IO thread pool fills temporary buffers on one core and worker
threads on different cores later consume cold data.
This is only useful for local or network-mounted file systems that have a page cache. Remote file systems such as S3 will not benefit from this.
The Linux kernel's force_page_cache_ra
caps the number of pages read per posix_fadvise call to the block device's
readahead window.
Any bytes beyond this cap are silently ignored. The readahead window is
typically 128 KB or higher. Check the value for your device:
cat /sys/block/<device>/queue/read_ahead_kb
If range_size_limit exceeds this value, most of each coalesced range will
not be prefetched. Set range_size_limit to match or stay below the device's
read_ahead_kb:
cache_options = pa.CacheOptions(
hole_size_limit=8192,
range_size_limit=128*1024, # must not exceed read_ahead_kb
lazy=False,
)
There are two ways to enable page cache prefetching:
As a parameter on read_into_numpy:
jj.read_into_numpy(
source=path,
metadata=pr.metadata,
np_array=np_array,
row_group_indices=range(pr.metadata.num_row_groups),
column_indices=range(pr.metadata.num_columns),
prefetch_page_cache=True,
cache_options=cache_options,
)
As a standalone call:
jj.prefetch_page_cache(
source=path,
metadata=pr.metadata,
row_group_indices=range(pr.metadata.num_row_groups),
column_indices=range(pr.metadata.num_columns),
cache_options=cache_options,
)
The standalone call is useful for sliding-window prefetching, where you prefetch the next files while processing the current one:
# Prime the pump
for path in file_paths[:PREFETCH_DEPTH]:
jj.prefetch_page_cache(source=path, ...)
# Main loop
for i, path in enumerate(file_paths):
# Slide the window
ahead_index = i + PREFETCH_DEPTH
if ahead_index < len(file_paths):
jj.prefetch_page_cache(source=file_paths[ahead_index], ...)
# Page cache should already be warm
jj.read_into_numpy(source=path, np_array=np_array, ...)
process(np_array)
Column ordering and use_threads:
When using prefetch_page_cache, the order in which columns are read matters.
Sorting column_indices by source column index produces a sequential I/O
pattern, which can significantly improve throughput. The effect depends on the
storage device and kernel readahead settings. Use a dict to preserve the
original target mapping:
# column_indices_to_read is an unsorted list, e.g. [5, 2, 8]
# Sort by source column index, preserving the original target mapping.
col_indices = {
src: dst
for src, dst in sorted(
zip(column_indices_to_read, range(len(column_indices_to_read)))
)
}
# Result: {2: 1, 5: 0, 8: 2} — reads columns in file order,
# writes each to the same target column as the unsorted list.
For similar reasons, avoid setting use_threads=True with
prefetch_page_cache. Arrow's internal thread pool dispatches column reads
across cores in an unpredictable order, breaking the sequential I/O pattern
that makes prefetching effective. Use multiple worker threads at the
application level instead, each reading its own file or row group with use_threads=False.
Pre-buffering and cache_options
If you use pre_buffer=True instead of prefetch_page_cache, the following
tuning applies.
When pre_buffer=True, Arrow merges nearby column ranges and reads them into
temporary buffers. The default maximum merged range is 32 MB
(range_size_limit).
Arrow supports several memory allocators (mimalloc, jemalloc, system). With
mimalloc (the default on most platforms), allocations above
~16 MB
go straight to the OS (mmap/munmap) instead of the internal arena. This
means the memory cannot be reused between calls, and each call pays the cost
of mapping and zeroing fresh pages. Other allocators may behave similarly.
To avoid this, lower range_size_limit so that merged ranges fit inside the
allocator's arena:
cache_options = pa.CacheOptions(
hole_size_limit=8192, # default
range_size_limit=16*1024*1024, # 16 MB, fits in mimalloc arena
lazy=False,
)
jj.read_into_numpy(
source=path,
metadata=None,
np_array=np_array,
row_group_indices=[0],
column_indices=range(n_columns),
pre_buffer=True,
cache_options=cache_options,
)
To debug allocator issues with mimalloc, run with MIMALLOC_SHOW_STATS=1 and
MIMALLOC_VERBOSE=1. This prints allocation statistics at process exit.
Pre-buffering and ARROW_IO_THREADS
When pre_buffer=True, Arrow dispatches reads to its IO thread pool,
configured via the ARROW_IO_THREADS environment variable (default: 8).
Tuning this value may improve performance.
Requirements
- pyarrow ~= 25.0.0
JollyJack builds on top of PyArrow. While the source package may work with newer versions, the prebuilt binary wheels are built and tested against pyarrow 24.x.
Installation
pip install jollyjack
How to use
Generating a sample Parquet file
import jollyjack as jj
import pyarrow.parquet as pq
import pyarrow as pa
import numpy as np
from pyarrow import fs
chunk_size = 3
n_row_groups = 2
n_columns = 5
n_rows = n_row_groups * chunk_size
path = "my.parquet"
data = np.random.rand(n_rows, n_columns).astype(np.float32)
pa_arrays = [pa.array(data[:, i]) for i in range(n_columns)]
schema = pa.schema([(f"column_{i}", pa.float32()) for i in range(n_columns)])
table = pa.Table.from_arrays(pa_arrays, schema=schema)
pq.write_table(
table,
path,
row_group_size=chunk_size,
use_dictionary=False,
write_statistics=True,
store_schema=False,
write_page_index=True,
)
Generating a NumPy array to read into
# Create an array of zeros
np_array = np.zeros((n_rows, n_columns), dtype="f", order="F")
Reading an entire file into a NumPy array
pr = pq.ParquetReader()
pr.open(path)
row_begin = 0
row_end = 0
for rg in range(pr.metadata.num_row_groups):
row_begin = row_end
row_end = row_begin + pr.metadata.row_group(rg).num_rows
# To define which subset of the NumPy array we want read into,
# we need to create a view which shares underlying memory with the target NumPy array
subset_view = np_array[row_begin:row_end, :]
jj.read_into_numpy(
source=path,
metadata=pr.metadata,
np_array=subset_view,
row_group_indices=[rg],
column_indices=range(pr.metadata.num_columns),
)
# Alternatively
with fs.LocalFileSystem().open_input_file(path) as f:
jj.read_into_numpy(
source=f,
metadata=None,
np_array=np_array,
row_group_indices=range(pr.metadata.num_row_groups),
column_indices=range(pr.metadata.num_columns),
)
Reading columns in reverse order
with fs.LocalFileSystem().open_input_file(path) as f:
jj.read_into_numpy(
source=f,
metadata=None,
np_array=np_array,
row_group_indices=range(pr.metadata.num_row_groups),
column_indices={
i: pr.metadata.num_columns - i - 1 for i in range(pr.metadata.num_columns)
},
)
Reading column 3 into multiple destination columns
with fs.LocalFileSystem().open_input_file(path) as f:
jj.read_into_numpy(
source=f,
metadata=None,
np_array=np_array,
row_group_indices=range(pr.metadata.num_row_groups),
column_indices=((3, 0), (3, 1)),
)
Sparse reading
np_array = np.zeros((n_rows, n_columns), dtype="f", order="F")
with fs.LocalFileSystem().open_input_file(path) as f:
jj.read_into_numpy(
source=f,
metadata=None,
np_array=np_array,
row_group_indices=[0],
row_ranges=[slice(0, 1), slice(4, 6)],
column_indices=range(pr.metadata.num_columns),
)
print(np_array)
Using cache options
np_array = np.zeros((n_rows, n_columns), dtype="f", order="F")
cache_options = pa.CacheOptions(
hole_size_limit=8192, # default
range_size_limit=16*1024*1024, # 16 MB, fits in mimalloc arena
lazy=False,
)
with fs.LocalFileSystem().open_input_file(path) as f:
jj.read_into_numpy(
source=f,
metadata=None,
np_array=np_array,
row_group_indices=[0],
row_ranges=[slice(0, 1), slice(4, 6)],
column_indices=range(pr.metadata.num_columns),
cache_options=cache_options,
pre_buffer=True,
)
print(np_array)
Using page cache prefetching
np_array = np.zeros((n_rows, n_columns), dtype="f", order="F")
pr = pq.ParquetReader()
pr.open(path)
# cache_options controls which byte ranges are prefetched into the page cache.
# range_size_limit should not exceed the device's read_ahead_kb,
# because the kernel silently ignores readahead beyond that cap.
cache_options = pa.CacheOptions(
hole_size_limit=8192,
range_size_limit=128*1024, # must not exceed read_ahead_kb
lazy=False,
)
# Prefetch and read in one call
jj.read_into_numpy(
source=path,
metadata=pr.metadata,
np_array=np_array,
row_group_indices=range(pr.metadata.num_row_groups),
column_indices=range(pr.metadata.num_columns),
cache_options=cache_options,
prefetch_page_cache=True,
)
# Or prefetch separately, then read
jj.prefetch_page_cache(
source=path,
metadata=pr.metadata,
row_group_indices=range(pr.metadata.num_row_groups),
column_indices=range(pr.metadata.num_columns),
cache_options=cache_options,
)
jj.read_into_numpy(
source=path,
metadata=pr.metadata,
np_array=np_array,
row_group_indices=range(pr.metadata.num_row_groups),
column_indices=range(pr.metadata.num_columns),
pre_buffer=False,
)
Generating a PyTorch tensor to read into
import torch
# Create a tensor and transpose it to get Fortran-style order
tensor = torch.zeros(n_columns, n_rows, dtype=torch.float32).transpose(0, 1)
Reading an entire file into a PyTorch tensor
pr = pq.ParquetReader()
pr.open(path)
jj.read_into_torch(
source=path,
metadata=pr.metadata,
tensor=tensor,
row_group_indices=range(pr.metadata.num_row_groups),
column_indices=range(pr.metadata.num_columns),
pre_buffer=True,
use_threads=True,
)
print(tensor)
Metadata
Release files for jollyjack 0.26.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jollyjack-0.26.0.tar.gz | 206.6 kB | Details |
Built distributions (wheels)
Total release size: 28.6 MB
Release files / jollyjack-0.26.0.tar.gz
| Download URL | jollyjack-0.26.0.tar.gz |
|---|---|
| Size | 206.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8570e7371173e82e0685cd4a1ce78c0d1f5d44b9461c038a8f47945742bcfff7
|
|
BLAKE2b-256 checksum How to use checksums |
26a2f6558b215fae1e88dfab67199af329d6e3c120f1bdc255c4d351a12a8d29
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp314-cp314t-win_amd64.whl
| Download URL | jollyjack-0.26.0-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 294.2 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f1087bb4017765dcc76490f3aaf550916b7f9e28c68477a57868dadf96cc7705
|
|
BLAKE2b-256 checksum How to use checksums |
831f92dcf719208aed08c8795bd995bc791efe9f151f3c73f962b83ad3940bae
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | jollyjack-0.26.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
157a7c87a280cdca87676532a8ed88bac53d79ceaf35ba89c553bcb18fba2065
|
|
BLAKE2b-256 checksum How to use checksums |
411a4782c86d324e77ddf24479ea2e568c126ef9abc5afe060a989c57ee40990
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
| Download URL | jollyjack-0.26.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
e1948ed3bbfa408d51d6e379236d6f3b7479613c7d008b4360110de53758ac6f
|
|
BLAKE2b-256 checksum How to use checksums |
c86bf4d59e66ae0a23415d46fd190b5e070c11581b603738b16f895dc11aab33
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | jollyjack-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 111.4 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8c25baf798409e232c3435b1c690c82b0bd1aeb00ed36289af1ce2189cee7a57
|
|
BLAKE2b-256 checksum How to use checksums |
7123cfe862a6cc01ab1e2c9b7f12e2a10f5a1d26cf46e05467a79bcd90b766ef
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp314-cp314-win_amd64.whl
| Download URL | jollyjack-0.26.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 290.6 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
cb71308ed34ebbd46fce941dc28159e55d206c33a3d01ffe2dc5c1e35ced41d9
|
|
BLAKE2b-256 checksum How to use checksums |
67d5eff0622dbb64a508c35955ffc08ef91341d289a6697050d02865b1dc5388
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | jollyjack-0.26.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | CPython 3.14 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
ae1cae8e3094890a3ffec493ca5eaa4fd846e2ae7eab227d535097a10243c039
|
|
BLAKE2b-256 checksum How to use checksums |
e757077890295e9bb6b85242ecbbc6f6ed26c61f0bf4d55c74045f702b466a4d
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
| Download URL | jollyjack-0.26.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.14 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
4803f7f18c7124939c42a8b3b2a7b1304ac6eb156a43289239c0ca7ab99f6abc
|
|
BLAKE2b-256 checksum How to use checksums |
09e8fc368934fdf37cddba94b9a6ec3989decb12ced26ca9d63231382e06c8df
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | jollyjack-0.26.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 105.3 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f33bc5d9c7a7f01df8bfb27e6f735e207657eedcae01944aa13ecff7c7c3da77
|
|
BLAKE2b-256 checksum How to use checksums |
086b32883d33e44c16df9f744878fafc8ca54f633612644e162793ad2ac2ad01
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp313-cp313-win_amd64.whl
| Download URL | jollyjack-0.26.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 281.8 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8d12fe16ba123d88b81a18be34886d68fa887998c37d97d8dd725ede0205e4c0
|
|
BLAKE2b-256 checksum How to use checksums |
9baf27c52774444a4fbd03d7a9b730c1c4355be40e30f43f9540b5b5e55a2b1f
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | jollyjack-0.26.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | CPython 3.13 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
6e44fbac35cc73a1363e55f97e864029c9f745db2651916185b8d87f5bbcd489
|
|
BLAKE2b-256 checksum How to use checksums |
f2409a3b6705c0d1fd3a6bb80605ead08e9d3f73c93b2dedddf3443e52279073
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
| Download URL | jollyjack-0.26.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.13 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
e82e9cd81156375ad49cccd49b9ad6a009553422b6c4a6f0bdacb9f90d13c98f
|
|
BLAKE2b-256 checksum How to use checksums |
844909210cec2a2e421d031feb51f7f08260da3954794233dc006d8a283e5c44
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | jollyjack-0.26.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 105.5 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
49b9b21110e191c0c312257dd075ee6bd5e8be6425057f42b9fa505c79223149
|
|
BLAKE2b-256 checksum How to use checksums |
825a159bfa5e2af1514f4d1877d27e409797cfdd812b0224393280bb0430c484
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp312-cp312-win_amd64.whl
| Download URL | jollyjack-0.26.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 282.4 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d7eac4d373f3de6ab39351646fcf58a25c585c5718bfaff634630906a640b937
|
|
BLAKE2b-256 checksum How to use checksums |
13108ce5bf06dfc80dc21e6f5bd2a990219e91f2f8f0a125d787cbd59f780e21
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | jollyjack-0.26.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | CPython 3.12 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
61a11998ed521728fd42eb8277d600c0ba979a899c8ad58f191fa0ab3c6cb326
|
|
BLAKE2b-256 checksum How to use checksums |
07396b027b2edf5db8c25db1b3620d9048c7d58384cbfe6939f98b01cc6814d7
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
| Download URL | jollyjack-0.26.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.12 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
086f2a54ffb522934e7496f9f0e193c8c52a0bb311eb7aeee014cff7c1d5e478
|
|
BLAKE2b-256 checksum How to use checksums |
429ae1cc3d5c36787ca6204d93068218f9fb62543b01fd231d5e18376c36c4da
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | jollyjack-0.26.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 105.9 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
49a879edd8550f91e88ad08753e817e369ca5e809bf6a2cbcbe6befd808a42f4
|
|
BLAKE2b-256 checksum How to use checksums |
7d83ecc38c94c58c104b90a33493d93306aa965271175ff54c1c09202c8b5911
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp311-cp311-win_amd64.whl
| Download URL | jollyjack-0.26.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 281.5 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f4f1ce86654427e9562fc2e7f4bd41d48ce6f3696bd67bae692edbf943e48044
|
|
BLAKE2b-256 checksum How to use checksums |
efe93bde0a5fd378dec4352dc34dcb3362bae9ef6999550adadcc16f02f1d47b
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | jollyjack-0.26.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | CPython 3.11 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
af66efbba3fba7020169a880f32a98a5c9d3e9d25e65a817165d91eba93850ce
|
|
BLAKE2b-256 checksum How to use checksums |
3d361f8294e1962e2f1bd8b9a9c8509513e67b95493427cd9f0bae1c91cc19ec
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
| Download URL | jollyjack-0.26.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | CPython 3.11 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
798fab6bb1d9f014f2f450f5ec2f1dc28863025fc00c449d60aa22c908009fca
|
|
BLAKE2b-256 checksum How to use checksums |
ef641f19f6ea6914d8349134d4f61cc4f1058edf3e75a11db661b492d6550257
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | jollyjack-0.26.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 106.1 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
05bcf6334467d7ae48d2ae683af5f2acbe7072fe9f05d0a149ea8935192b2d61
|
|
BLAKE2b-256 checksum How to use checksums |
4052ed3dd0a28f850d3d9ef0b5831148a5784ea8d8a19df14f91d8f21ced822b
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp310-cp310-win_amd64.whl
| Download URL | jollyjack-0.26.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 281.3 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f7de6e6970560ce29d9cfc16c583dd17644cc49c1e8a0a5e62880ec84ef149e9
|
|
BLAKE2b-256 checksum How to use checksums |
1ebcbc7fb96c12f1575dceba67ff338433fb373ed612e17864dd3e544047d308
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | jollyjack-0.26.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | CPython 3.10 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
d00ded315765dce5b72913cc3b9a7c0c4835076feef3185aa40783d4b7ca4bd4
|
|
BLAKE2b-256 checksum How to use checksums |
dd3041f7d5948eb857026e1340e4a133ab5d6b3e927447b37cd8609798d2f452
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
| Download URL | jollyjack-0.26.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.10 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
e29d0209f8ceb21e951e353a67a9595908107f3265de6abd004169da93ce6b0d
|
|
BLAKE2b-256 checksum How to use checksums |
40277f535a607122e98b73d67fc394417790c406e9f01d03af3907a451ed4897
|
| 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 Aug 19, 2026.
Transparency logRelease files / jollyjack-0.26.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | jollyjack-0.26.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 106.2 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e1ed35a6cf6e401ff028ebeded745aa81643cb391429152c91dbcf1e8d7f2784
|
|
BLAKE2b-256 checksum How to use checksums |
5ce48d737f32b6f4ab1007b7200b836e610160a0068c355445624899386bc246
|
| 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 Aug 19, 2026.
Transparency log