Skip to main content

High-performance Parquet reader for loading data directly into NumPy arrays and PyTorch tensors

Project description

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 cache
  • io_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 ~= 24.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)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jollyjack-0.25.0.tar.gz (205.3 kB view details)

Uploaded Source

Built Distributions

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

jollyjack-0.25.0-cp314-cp314t-win_amd64.whl (293.4 kB view details)

Uploaded CPython 3.14tWindows x86-64

jollyjack-0.25.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

jollyjack-0.25.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

jollyjack-0.25.0-cp314-cp314t-macosx_11_0_arm64.whl (109.0 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

jollyjack-0.25.0-cp314-cp314-win_amd64.whl (289.8 kB view details)

Uploaded CPython 3.14Windows x86-64

jollyjack-0.25.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2 MB view details)

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

jollyjack-0.25.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1 MB view details)

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

jollyjack-0.25.0-cp314-cp314-macosx_11_0_arm64.whl (102.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

jollyjack-0.25.0-cp313-cp313-win_amd64.whl (281.0 kB view details)

Uploaded CPython 3.13Windows x86-64

jollyjack-0.25.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2 MB view details)

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

jollyjack-0.25.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1 MB view details)

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

jollyjack-0.25.0-cp313-cp313-macosx_11_0_arm64.whl (102.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

jollyjack-0.25.0-cp312-cp312-win_amd64.whl (281.5 kB view details)

Uploaded CPython 3.12Windows x86-64

jollyjack-0.25.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2 MB view details)

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

jollyjack-0.25.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1 MB view details)

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

jollyjack-0.25.0-cp312-cp312-macosx_11_0_arm64.whl (102.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

jollyjack-0.25.0-cp311-cp311-win_amd64.whl (280.7 kB view details)

Uploaded CPython 3.11Windows x86-64

jollyjack-0.25.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2 MB view details)

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

jollyjack-0.25.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1 MB view details)

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

jollyjack-0.25.0-cp311-cp311-macosx_11_0_arm64.whl (102.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

jollyjack-0.25.0-cp310-cp310-win_amd64.whl (280.6 kB view details)

Uploaded CPython 3.10Windows x86-64

jollyjack-0.25.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

jollyjack-0.25.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

jollyjack-0.25.0-cp310-cp310-macosx_11_0_arm64.whl (103.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file jollyjack-0.25.0.tar.gz.

File metadata

  • Download URL: jollyjack-0.25.0.tar.gz
  • Upload date:
  • Size: 205.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for jollyjack-0.25.0.tar.gz
Algorithm Hash digest
SHA256 f93ca16039188930a2f390e3a06e860f39aff03cd7cf844dad5c7785bd5cecd8
MD5 d47c37ce483261ce4118f252fdedb0fd
BLAKE2b-256 1ffd228db30ec3484336607ff894739120a51e4533d87c3f009ee5fe28166956

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0.tar.gz:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: jollyjack-0.25.0-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 293.4 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for jollyjack-0.25.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 9b3bf098590abea092012b9fff33d923c3631daa9e665f142eb20d4a35622a30
MD5 5f3b6e1f1dd60e35f94cbd26ce7046b2
BLAKE2b-256 8f632bced47955dab0be6f02e568cc6aee2911a9e119f5bcffb8b10b2ec5eb41

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp314-cp314t-win_amd64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3b2143a75ae95e640c4335bb5684273beb4050cc22f9bc2d30416256ac839524
MD5 64858999a3403a9378ca68c11ac65637
BLAKE2b-256 894a089dde29b89fd148757d7fab2b64fddb9f2eafe6ebc0c75743943ee35df2

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 23b0c01a173b4620c17b3c75cb96380aa0b0d8a9ca08df406cedb3a5f5838bbf
MD5 dc09ced896e44d86a1f0207bdd042856
BLAKE2b-256 2dda010e2fd49914b637d2402a781a30986c90f10f85d2a710859784a3ef4f30

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 512cc4c616ba31cc9a9b3be1af5e65c5d77a4ffc24792853a9cde6061a610eac
MD5 87ed86fc789d591f19123a4b7ac56f94
BLAKE2b-256 945cbf9bc2d8d757d15bcca5c945ea75040776c0838d16035f6e1329c44d306b

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: jollyjack-0.25.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 289.8 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for jollyjack-0.25.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1d7632c00a5e8ebe63cc1fdede654e14ea0804a198fe2b78895121d9e366d93f
MD5 ae27ff286a55f6ad7b7a76dcd542e1d0
BLAKE2b-256 37ff54489a2cd28d7761cb7c7bd5e22d727ed597f3733483a74ab7512b365b88

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp314-cp314-win_amd64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a4da2d2ae8b75a0cb10a4db67c516436e862f12d98ab77a8a43bae617eeb41c9
MD5 0442b3dbb7c62120c5b6ca9785f928b6
BLAKE2b-256 08aa6c519f96270e588a473bbde7b0b81799872e4e19ce0f5f26963ce7f240d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7b155c2550fa8930f1ce10a871357d74cf6311226db333db2abb27c8f042c766
MD5 b03131924552df49196b296541866aee
BLAKE2b-256 40ee83a0b34f10d61d1cfa1d2e2525b5313bf1cd4758efae2929d0ab81a4ccbc

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b107f5f6af6a72198e21e5e8dc5390c7eece4c0ba2da8c561bdb77bb6bd184e4
MD5 ada6d06d95425aa22e09b5caea23cd6d
BLAKE2b-256 5e63fd209cbc7aac67a62acf745e0825e2cd0c498a577c226db7da5e8724eb8f

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: jollyjack-0.25.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 281.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for jollyjack-0.25.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b106d07fa5475a1a503e81cea60af7c57a344f4fd08d71649beec8ff1ca529a4
MD5 0d09f230f4dccacc0c79a64b0766d979
BLAKE2b-256 c4a26d40259c524c88a7c78beb48690d8634e99403ac067f37e411753cbab99d

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp313-cp313-win_amd64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a820223203487d53990bbab7df6a4f2acfdc05aa796bf68490e084f03d05a935
MD5 ec94e0c5f507decf119c4add2e64677a
BLAKE2b-256 a054c234e878804b51faa8701bda7a195dd82170337e6585dfd72341a9b17857

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 733770098389a9b795cc9b9c212f0d9ccc23560e04d07aa15c50f8ba5d8dc85a
MD5 30d4d53521d4dfa0762020a5815050eb
BLAKE2b-256 851e8c8cac6eac89f8e7e1e7181318c9a089892e7f85a6e3501f5eb88a311302

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9a569a05069c479b91ed1b39ad87e242743feb1a11fc3f13166de11b28f53f1c
MD5 2b831282bcaf6ff7a5999ae8281ffae8
BLAKE2b-256 f82398d2e39534c4e22e2d8710f9fe86c377a0e7dcc735f202676d9da4f3e488

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: jollyjack-0.25.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 281.5 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for jollyjack-0.25.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c11dbf6b59f24fc15507de02a07ac366fef931387979290d2a0724c3498ecdc1
MD5 e97348ea079e3b7356ce9bbd68874294
BLAKE2b-256 1e26aa504dcf3cba7b2ecf389cdbcbfea20083459dd8403868b9e250539b430f

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp312-cp312-win_amd64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 713684f59bab8c2e6b3d2adb78182e6ebb2b24a8122824a5d11f2c2b373d7fef
MD5 335817f92975d8468a416e366f16f630
BLAKE2b-256 bf59041e38f4917b7461f1f2479783517e80270ccf10d5779f5b08a2e621ac18

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b0beed8bc1361a7d887631d545aef2cbc1f3f3a93098e948ef548b9e3ef48d32
MD5 da9bdea08bd9aad1fde5b548ad560f66
BLAKE2b-256 8134d3562a998f3ba215b95f46e0b9b154ccef53bfdd3c9c56d03847b4e2586d

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6e428ea7d1a4195b6712b4fc53e8d2d4bbfae0ceb581cbdae40488e0e417ac25
MD5 1b36c8315711eeee8e5e4c2430d760b3
BLAKE2b-256 5806ffbcfd5e015b6d55e3e3d59d2cd863d273675a893ded15c28948e0b05a22

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: jollyjack-0.25.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 280.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for jollyjack-0.25.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b2e9820ce4087ac853140539ad6088b551db93da54477972f57ddafffb0cf3ae
MD5 cadc97960dd9f3b0494b1af3d06e2648
BLAKE2b-256 7a497647f0d34316011d610dfba41b7ba6225421bce7dc80bb23e25b777bd15b

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp311-cp311-win_amd64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b3eb5c83af7ecc7f8a5d265c83422d7a64202547a66145fa471518f7a9bf162a
MD5 3f36b0262d51f407c7c8b43b60e3ab30
BLAKE2b-256 b0192cf4acc5c4814d3f45da4dfe03cc0686e79d4e15c0bb179a7a62e8eceec9

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 52958968c9fe50af501d430de719cf5506238c00ef5f5e02ff204f7412424fc1
MD5 9218ddfcfbea782becda3f504f045b50
BLAKE2b-256 bfaeebe9e4a8b24db7aa17006d202700ad174bbf0f6b83ac3e8488faf037c76e

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c78e9f51ea8824ccda7115b368a452079b1bf99c4abd7e91bfea7fde52158957
MD5 8038c2cdded62df2517769013da23675
BLAKE2b-256 0536b2bed8939d6b6b1d04e89983633e35947253617239a41b80f48eb7bc8370

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: jollyjack-0.25.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 280.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for jollyjack-0.25.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3bb07c2eb0d7bab47fdf6a258afa0a429f9ee682e2e1db29b2f2e69f331a7ca0
MD5 074871067404fecdb7336594fe5ebbeb
BLAKE2b-256 cb5de0eca0e8910eb2012be7a0776553573454e1ff596b3492889b013922f98a

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp310-cp310-win_amd64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 05d23963a2a156b5da64cbe8b6f71ff147c9eb09ccf6ea2da8ade6e159153c99
MD5 db9f384e46e712165dd8e351afec5e2a
BLAKE2b-256 3779db4ebac115748d7e7caaaa85bf6276dad41c0f00be07e8f406dacbb1f7be

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a89d440c01751c75fa7d0e0133532493a3e92a39775bd41cd96d08a2b8feffb7
MD5 d1fa8a6d096682c4cfcedad52c14f33d
BLAKE2b-256 029bf823ee7f007d464a8bd204a0ce8b1f1f3e1635dce2ab675df3a95d1239fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: python.yml on G-Research/JollyJack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jollyjack-0.25.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jollyjack-0.25.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 617af6db4977d6bf477644002ebdbd0bb6a6371f778bbf5c7e0879fcabd668ea
MD5 798fae297d31e176407a13e460f50122
BLAKE2b-256 a0802301a8cc7944b0156aff83f79ac961ac650dc672d3a9b85ec5fa10ce0f8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.25.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: python.yml on G-Research/JollyJack

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