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 (exceed 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 (fit 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.

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,
)

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),
)

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)

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
cache_options = pa.CacheOptions(
    hole_size_limit=8192,
    range_size_limit=16*1024*1024,
    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.24.0.tar.gz (199.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.24.0-cp314-cp314t-win_amd64.whl (290.8 kB view details)

Uploaded CPython 3.14tWindows x86-64

jollyjack-0.24.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

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

jollyjack-0.24.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.24.0-cp314-cp314t-macosx_11_0_arm64.whl (104.2 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

jollyjack-0.24.0-cp314-cp314-win_amd64.whl (284.6 kB view details)

Uploaded CPython 3.14Windows x86-64

jollyjack-0.24.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

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

jollyjack-0.24.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.24.0-cp314-cp314-macosx_11_0_arm64.whl (97.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

jollyjack-0.24.0-cp313-cp313-win_amd64.whl (275.7 kB view details)

Uploaded CPython 3.13Windows x86-64

jollyjack-0.24.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

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

jollyjack-0.24.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.24.0-cp313-cp313-macosx_11_0_arm64.whl (97.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

jollyjack-0.24.0-cp312-cp312-win_amd64.whl (276.0 kB view details)

Uploaded CPython 3.12Windows x86-64

jollyjack-0.24.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

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

jollyjack-0.24.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.24.0-cp312-cp312-macosx_11_0_arm64.whl (97.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

jollyjack-0.24.0-cp311-cp311-win_amd64.whl (275.5 kB view details)

Uploaded CPython 3.11Windows x86-64

jollyjack-0.24.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

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

jollyjack-0.24.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.24.0-cp311-cp311-macosx_11_0_arm64.whl (98.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

jollyjack-0.24.0-cp310-cp310-win_amd64.whl (274.8 kB view details)

Uploaded CPython 3.10Windows x86-64

jollyjack-0.24.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

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

jollyjack-0.24.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.24.0-cp310-cp310-macosx_11_0_arm64.whl (98.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: jollyjack-0.24.0.tar.gz
  • Upload date:
  • Size: 199.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.24.0.tar.gz
Algorithm Hash digest
SHA256 9b3a858c767d755a809b18a05037acf8278cbca2934116792b7b538329963ae4
MD5 24f0ba010de1dd46d218ea41a905835d
BLAKE2b-256 64647a7450520e6450af45c28df6f24e745ed82d5b898f949bae587a4ac6e806

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: jollyjack-0.24.0-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 290.8 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.24.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 75e7ef6fe3c3e27a9147e708a11bb7c45f6929817ead0e852dada6f4cbfbcb46
MD5 e4033b2c5a8c659d07ac69e8545e35c2
BLAKE2b-256 32e5b9f74cd3122491f66a08696eb8a3550c1e4971f2c4db8dfa66bdb9663790

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ebddfe6d74117ceeed2f524149aa0e11fd8cc2d570d92c3277a2a45551fb8f6a
MD5 46e0dee77cd57dc7786b7eb17e8c3d2c
BLAKE2b-256 76fe8c446fe50aa1dd32ded600076c4f4e020347781f041ac74e67b21f5ce424

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7a2b56b6ab03742f4549361e7a024ecd600a47a5e71b370c102e04597131ce7c
MD5 6870f82e540eee63cf417a06b8b35917
BLAKE2b-256 ad4fe3faabdb7c19b2065d0d47804639e76f43cfceb05b1836f920209b64135b

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ebfa1b61f44dea8744071e677b82d82699e47cc48895d01684471a3ef4d16918
MD5 9318e25e5ac85a62ed8cb9110b871904
BLAKE2b-256 06176c89606ae4b924d1190bef3adb4f1f5c50b879121049bb27b87032ee80d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: jollyjack-0.24.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 284.6 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.24.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 c741056e58087fc9c4e1f26bc642c16e5530b7ade1499f7edfdf040e3f7e8afb
MD5 89835c6abe28329b6226fa99279ffd23
BLAKE2b-256 59c4ea6ddedc12a5ea46eee0871885eee22b8ccd477b66f89d49e52a4f9498d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8d784799b523fb42b52cc54f5686b850a828f1c59c6721acd22e31858525d106
MD5 ce43a8c53e05b16fbf86b0103e66ad95
BLAKE2b-256 618f6c2564c05b2e4215bee0823d947bfe05aced0f0aa02b2ec18627041d7084

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 40509e4fb2822e1bd6ca8e728cefe23422c147a09ff6727b6bc4b1f1bf1368e1
MD5 d565af377e10cddbf2f3236d01e42485
BLAKE2b-256 48cc0f32c26623688d9820a4f643ad9c60bbfc771f7f00bc3d6d5f12b96e5505

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40fdbcdee0ee65f26569e0e276228dee85fd540a088015a80ad813beacada9bb
MD5 0865cf49ed49dd3f5187a33c6c26fbe6
BLAKE2b-256 88c7b66a6c9c8a4d3b7f9325eca786889278a72ce4af7487034167dea4f3db59

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: jollyjack-0.24.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 275.7 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.24.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a9a7d6f0fbe4ee53da35aa314ccd49c5f103e107565fa94742b3a945d77398c3
MD5 df90bb3687f17de3a98a1a6accf6c293
BLAKE2b-256 c892f829bf0c342e239960cb19d07625a3634a30715e204dc94d07cee33ec61a

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3bf854afef94a648b8779b32c2bfdcb82b30635301a28e7fceb74c20f2e6f197
MD5 49b5a79acff276394450c6a5cc5353f6
BLAKE2b-256 5ee3c76e088a69e44cb49cacd3c9d7ce7052def8020900b7422e605df26df96d

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 51d60ed565fc873f1dda43548ad76fc7ea43f6dc0cc893ffa3ecf8ceffbddd97
MD5 cc760115d70b36d1259d2d4c9afaa294
BLAKE2b-256 f18bdf1e6adfadfb99a529ec062da9433993347ff87f64e5668b7fbd3f9194c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c0c35dd3347b0cd7b9935f049d324c28051bc5c336428e70e02513e205c7a74e
MD5 fb78efcde937a0adb6d1e4fed6aa4a78
BLAKE2b-256 72b093242c36761b7456fa37bfa0af1d2dbd88f934965108b9fd7579564751c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: jollyjack-0.24.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 276.0 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.24.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e2b1bf1764ca7bdae79e886476c57b78f3d6792c3b45094499123d8961c9ce8e
MD5 6a6313870055383922f369618e50f181
BLAKE2b-256 3a3409c0963b24ae997b1cec1e8bf1a1672129f2d9e66c54f8c5af3e75ff57a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 515a28be07463cb73bfe04e3ec96a064cee7c9fc16e7fccc30c62a2df901133c
MD5 693f073643dbf228cdaba08a0482e967
BLAKE2b-256 ff25d06d00a4de4d0ff99023851aa23b2407a87efad2a0ec0966b91e87ae5776

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8853454bc7667cfa5f0f0235df2bfdf964d7de79d19e7402ccf58e19cdf8c288
MD5 40434576f6c59ddbd295e54e6c86103b
BLAKE2b-256 e00b9db05924e644b8e29a4d25cd594baa94e81f8895579431a5c09af86e1caa

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bf95aab2848c2f19304b62d36e27b1400c4de24933313d08769fb31342f61636
MD5 48e551b43bbab85009e04f284a682707
BLAKE2b-256 8961fd86164ce054cc0cb2116727225837bff9a01f2d8589e8e8dccc383b345c

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: jollyjack-0.24.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 275.5 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.24.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4fc6c68726729b0338cbf5dec47978ebe9144dcd5cbf02242cd336ec2b6913cd
MD5 44577eb1850d98f002a2456bd5995798
BLAKE2b-256 041c9536224e6e63d99e244d49aede93eaf107a668e1caa904c0850726666cc2

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 195cfd58a696aea674ed41fd55c37aad0e7b45ba10e632d243e6d87a15f38172
MD5 0d6ec0ac68ee13a96afc3122dd675853
BLAKE2b-256 1f6230fc48f1096d02f10672b78b155087eaefb15b8c57feeaa9f55c8b910630

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 46a288de6d312b456f8ae0643738839cf69abb7e85b291dff5f5088b1158a3c7
MD5 75e9581c3b26dcece30d980fa7932f3f
BLAKE2b-256 44ebd7cbaefc274fc2c5514baf91a1a32984f0d1a6d370ea5d9630b7ad85092a

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8c6aee2b32cc5363b8b70290438313c3d25667aa547059a9ff44172b369600e5
MD5 8e5b4e8a25094c5250c12dffc13dfeee
BLAKE2b-256 a9aadfeec262e51ab55d99b7ced3263e4a8dc101a9fc5b77cb1f9423e75af838

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: jollyjack-0.24.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 274.8 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.24.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b97922d13d07e94db2a8e28aebe6beb69f94376d3fe49b10af26b4e2a2f99716
MD5 8b942a206b779af48c3f6d41c56bf56e
BLAKE2b-256 5d5b78437e5ae52a6fc628c64dd6ca2ec67605eb9a376f9f7ee979621194a30b

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 65d011032771cc83dca108fbffb7a2a30c8b8445298da3e84ef4e16627140a4b
MD5 e6504c8efd15f078b3c50f38cf0c9a04
BLAKE2b-256 7c3a6b67dac81983f664a7d69de1ff7c5a1b38ab4f2125bc8877e6e171b15769

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 af096fcfa688ddb49e9f7da94c463eef7088547af6099bb6fbeb737f7529ed64
MD5 624c2d24f17ebff7cbbe40f2491cb818
BLAKE2b-256 4820970783cb7d369602ab4b3de7d4154728d2cb34962d433bea009b8d83c109

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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.24.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jollyjack-0.24.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 51978e30ef00cd2260899e7b958e0432273d956fc320c3b00246cc14c7b66c51
MD5 1d1df05f7ed1231b47df1819aae8d88f
BLAKE2b-256 9c19fb3330253e87d8b52f14bd8222bc0720ae4d7d76dcbb11bdbe90eadda4f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for jollyjack-0.24.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