Skip to main content

Performant streaming to Zarr storage, on filesystem or cloud

Project description

DOI

Acquire Zarr streaming library

Build Tests Chat PyPI - Version PyPI - Downloads Docs

This library supports chunked, compressed, multiscale streaming to Zarr version 3, with OME-NGFF metadata.

This code builds targets for Python and C.

For complete documentation, please visit the Acquire documentation site.

Installing

Precompiled binaries

C headers and precompiled binaries are available for Windows, Mac, and Linux on our releases page.

Python

The library is available on PyPI and can be installed using pip:

pip install acquire-zarr

Local Development Quickstart

The included justfile provides recipes for common development tasks. Install uv, if you don't have it already, and then Install just with your package manager of choice (e.g. brew install just).

# setup everything and install python bindings (using python 3.13, optional)
just install -p 3.13
# run python tests
just test

Run just without arguments to see all available recipes:

Available recipes:
    clean          # Clean build artifacts (keeps vcpkg)
    clean-all      # Clean everything including vcpkg
    cmake-build    # Requires cmake installed (e.g., `brew install cmake` or `uv tool install cmake`)
    install *args  # (args are passed to uv sync, e.g.: `just install -p 3.12`)
    setup-vcpkg    # Setup vcpkg (clone and bootstrap if needed)
    test *args     # (args are passed to pytest, e.g.: `just test -k test_function`)
    test-cpp *args # (args are passed to ctest, e.g.: `just test-cpp -R unit`)
    update-vcpkg   # Update vcpkg to latest
    uv-sync *args  # Run uv sync (includes testing dependencies)

Docker

Build and run the tests in a container:

docker build -t acquire-zarr .
docker run --rm acquire-zarr

Building

Installing dependencies

This library has the following dependencies:

We use vcpkg to install them, as it integrates well with CMake. To install vcpkg, clone the repository and bootstrap it:

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg && ./bootstrap-vcpkg.sh

and then add the vcpkg directory to your path. If you are using bash, you can do this by running the following snippet from the vcpkg/ directory:

cat >> ~/.bashrc <<EOF
export VCPKG_ROOT=${PWD}
export PATH=\$VCPKG_ROOT:\$PATH
EOF

If you're using Windows, learn how to set environment variables here. You will need to set both the VCPKG_ROOT and PATH variables in the system control panel.

On the Mac, you will also need to install OpenMP using Homebrew:

brew install libomp

Configuring

To build the library, you can use CMake:

cmake --preset=default -B /path/to/build /path/to/source

On Windows, you'll need to specify the target triplet to ensure that all dependencies are built as static libraries:

cmake --preset=default -B /path/to/build -DVCPKG_TARGET_TRIPLET=x64-windows-static /path/to/source

Aside from the usual CMake options, you can choose to disable tests by setting BUILD_TESTING to OFF:

cmake --preset=default -B /path/to/build -DBUILD_TESTING=OFF /path/to/source

To build the Python bindings, make sure pybind11 is installed. Then, you can set BUILD_PYTHON to ON:

cmake --preset=default -B /path/to/build -DBUILD_PYTHON=ON /path/to/source

Building

After configuring, you can build the library:

cmake --build /path/to/build

Installing for Python

To install the Python bindings, you can run:

pip install .

[!NOTE] It is highly recommended to use virtual environments for Python, e.g. using venv or conda. In this case, make sure pybind11 is installed in this environment, and that the environment is activated before installing the bindings.

Usage

The library provides two main interfaces. First, ZarrStream, representing an output stream to a Zarr dataset. Second, ZarrStreamSettings to configure a Zarr stream.

A typical use case for a single-array, 4-dimensional acquisition might look like this:

ZarrArraySettings array{
    .output_key =
      "my-array", // Optional: path within Zarr where data should be stored
    .data_type = ZarrDataType_uint16,
};

ZarrArraySettings_create_dimension_array(&array, 4);
array.dimensions[0] = (ZarrDimensionProperties){
    .name = "t",
    .type = ZarrDimensionType_Time,
    .array_size_px = 0,      // this is the append dimension
    .chunk_size_px = 100,    // 100 time points per chunk
    .shard_size_chunks = 10, // 10 chunks per shard
};

// ... rest of dimensions configuration ...

ZarrStreamSettings settings = (ZarrStreamSettings){
    .store_path = "my_stream.zarr",
    .overwrite = true, // Optional: remove existing data at store_path if true
    .arrays = &array,
    .array_count = 1, // Number of arrays in the stream
};

ZarrStream* stream = ZarrStream_create(&settings);

// You can now safely free the dimensions array
ZarrArraySettings_destroy_dimension_array(&array);

size_t bytes_written;
ZarrStream_append(stream,
                  my_frame_data,
                  my_frame_size,
                  &bytes_written,
                  "my-array"); // if you have just one array configured, this can be NULL
assert(bytes_written == my_frame_size);

Look at acquire.zarr.h for more details.

This acquisition in Python would look like this:

import acquire_zarr as aqz
import numpy as np

settings = aqz.StreamSettings(
    store_path="my_stream.zarr",
    overwrite=True  # Optional: remove existing data at store_path if true
)

settings.arrays = [
    aqz.ArraySettings(
        output_key="array1",
        data_type=np.uint16,
        dimensions = [
            aqz.Dimension(
                name="t",
                kind=aqz.DimensionType.TIME,
                array_size_px=0,
                chunk_size_px=100,
                shard_size_chunks=10
            ),
            aqz.Dimension(
                name="c",
                kind=aqz.DimensionType.CHANNEL,
                array_size_px=3,
                chunk_size_px=1,
                shard_size_chunks=1
            ),
            aqz.Dimension(
                name="y",
                kind=aqz.DimensionType.SPACE,
                array_size_px=1080,
                chunk_size_px=270,
                shard_size_chunks=2
            ),
            aqz.Dimension(
                name="x",
                kind=aqz.DimensionType.SPACE,
                array_size_px=1920,
                chunk_size_px=480,
                shard_size_chunks=2
            )
        ]
    )
]

# Generate some random data: one time point, all channels, full frame
my_frame_data = np.random.randint(0, 2 ** 16, (3, 1080, 1920), dtype=np.uint16)

stream = aqz.ZarrStream(settings)
stream.append(my_frame_data)

# ... append more data as needed ...

# When done, close the stream to flush any remaining data
stream.close()

Understanding the output hierarchy

The Zarr hierarchy produced by a stream depends on output_key and downsampling_method:

output_key downsampling_method Result at store_path
"" (empty) None Simple array at store_path/
"myarray" None Simple array at store_path/myarray/
"" (empty) set (e.g. MEAN) OME-NGFF multiscales group at store_path/, array at store_path/0/
"myarray" set (e.g. MEAN) OME-NGFF multiscales group at store_path/myarray/, array at store_path/myarray/0/

When downsampling_method is set, an OME-NGFF multiscales group is created at store_path/output_key/ (or at store_path/ if output_key is empty), containing the full-resolution array at level 0 plus additional downsampled levels. The number of levels is determined automatically from the chunk and array sizes. You can cap the pyramid depth with max_levels (0 means no limit, which is the default).

Organizing data within a Zarr container

The library allows you to stream multiple arrays to a single Zarr dataset by configuring multiple arrays. For example, a multichannel acquisition with both brightfield and fluorescence channels might look like this:

import acquire_zarr as aqz
import numpy as np

# configure the stream with two arrays
settings = aqz.StreamSettings(
    store_path="experiment.zarr",
    overwrite=True,  # Remove existing data at store_path if true
    arrays=[
        aqz.ArraySettings(
            output_key="sample1/brightfield",
            data_type=np.uint16,
            dimensions=[
                aqz.Dimension(
                    name="t",
                    kind=aqz.DimensionType.TIME,
                    array_size_px=0,
                    chunk_size_px=100,
                    shard_size_chunks=1
                ),
                aqz.Dimension(
                    name="c",
                    kind=aqz.DimensionType.CHANNEL,
                    array_size_px=1,
                    chunk_size_px=1,
                    shard_size_chunks=1
                ),
                aqz.Dimension(
                    name="y",
                    kind=aqz.DimensionType.SPACE,
                    array_size_px=1080,
                    chunk_size_px=270,
                    shard_size_chunks=2
                ),
                aqz.Dimension(
                    name="x",
                    kind=aqz.DimensionType.SPACE,
                    array_size_px=1920,
                    chunk_size_px=480,
                    shard_size_chunks=2
                )
            ]
        ),
        aqz.ArraySettings(
            output_key="sample1/fluorescence",
            data_type=np.uint16,
            dimensions=[
                aqz.Dimension(
                    name="t",
                    kind=aqz.DimensionType.TIME,
                    array_size_px=0,
                    chunk_size_px=100,
                    shard_size_chunks=1
                ),
                aqz.Dimension(
                    name="c",
                    kind=aqz.DimensionType.CHANNEL,
                    array_size_px=2,  # two fluorescence channels
                    chunk_size_px=1,
                    shard_size_chunks=1
                ),
                aqz.Dimension(
                    name="y",
                    kind=aqz.DimensionType.SPACE,
                    array_size_px=1080,
                    chunk_size_px=270,
                    shard_size_chunks=2
                ),
                aqz.Dimension(
                    name="x",
                    kind=aqz.DimensionType.SPACE,
                    array_size_px=1920,
                    chunk_size_px=480,
                    shard_size_chunks=2
                )
            ]
        )
    ]
)

stream = aqz.ZarrStream(settings)

# ... append data ...
stream.append(brightfield_frame_data, key="sample1/brightfield")
stream.append(fluorescence_frame_data, key="sample1/fluorescence")

# ... append more data as needed ...

# When done, close the stream to flush any remaining data
stream.close()

The overwrite parameter controls whether existing data at the store_path is removed. When set to true, the entire directory specified by store_path will be removed if it exists. When set to false, the stream will use the existing directory if it exists, or create a new one if it doesn't.

Writing custom metadata

Custom metadata can be written to any array in the stream using ZarrStream_write_custom_metadata (C) or stream.write_custom_metadata (Python). Metadata is written under the attributes key of the target array's zarr.json file, which is the standard location for user-defined metadata in Zarr v3.

The function takes three parameters:

  • array_key: The key of the array to write metadata to, matching the output_key set when configuring the array (see the array configuration examples above). If NULL (C) or None (Python) and the stream has only one array, that array is targeted automatically. Required when the stream has multiple arrays.
  • metadata_key: An optional key under attributes to nest the metadata under. If NULL/None or empty, metadata is written directly under attributes.
  • metadata: A JSON-formatted string containing the metadata to write.

[!NOTE] The ome key under attributes is reserved for OME-NGFF metadata and cannot be used as a metadata_key. Passing "ome" or, if no metadata key is provided, if any child of the metadata object has a key of "ome", the function will return an error.

In C:

// Write directly under 'attributes'
ZarrStream_write_custom_metadata(stream,
                                 "my-array",   // array_key
                                 NULL,          // metadata_key: write under 'attributes'
                                 "{\"device\": \"motor-1\", \"position\": 42}");

// Write under 'attributes/device'
ZarrStream_write_custom_metadata(stream,
                                 "my-array",
                                 "device",
                                 "{\"name\": \"motor-1\", \"position\": 42}");

In Python:

import json

# Write as a dict directly under 'attributes'
stream.write_custom_metadata(
    {"device": "motor-1", "position": 42},
    array_key="my-array"
)

# Write as a string directly under 'attributes'
stream.write_custom_metadata(
    json.dumps({"device": "motor-1", "position": 42}),
    array_key="my-array"
)

# Write under 'attributes/device'
stream.write_custom_metadata(
    {"name": "motor-1", "position": 42},
    array_key="my-array",
    metadata_key="device"
)

Metadata can be written at any point while the stream is active and will be flushed to disk when the stream is closed.

High-content screening workflows

The library supports high-content screening (HCS) datasets following the OME-NGFF 0.5 specification. HCS data is organized into plates, wells, and fields of view, with automatic generation of appropriate metadata.

Here's an example of creating an HCS dataset in Python:

import acquire_zarr as aqz
import numpy as np

# Create acquisition metadata
acquisition = aqz.Acquisition(
    id=0,
    name="Measurement_01",
    start_time=1343731272000,  # Unix timestamp in milliseconds
    end_time=1343737645000
)

# Configure wells with fields of view
well_a1 = aqz.Well(
    row_name="A",
    column_name="1",
    images=[
        aqz.FieldOfView(
            path="fov1", # Relative to the well: plate/A/1/fov1
            acquisition_id=0,
            array_settings=aqz.ArraySettings(
                output_key=None, # must be None for an FOV array; path is specified as a member of FieldOfView 
                data_type=np.uint16,
                dimensions=[
                    aqz.Dimension(
                        name="t",
                        kind=aqz.DimensionType.TIME,
                        array_size_px=0,
                        chunk_size_px=10,
                        shard_size_chunks=1
                    ),
                    aqz.Dimension(
                        name="c",
                        kind=aqz.DimensionType.CHANNEL,
                        array_size_px=3,
                        chunk_size_px=1,
                        shard_size_chunks=1
                    ),
                    aqz.Dimension(
                        name="y",
                        kind=aqz.DimensionType.SPACE,
                        array_size_px=512,
                        chunk_size_px=256,
                        shard_size_chunks=2
                    ),
                    aqz.Dimension(
                        name="x",
                        kind=aqz.DimensionType.SPACE,
                        array_size_px=512,
                        chunk_size_px=256,
                        shard_size_chunks=2
                    )
                ]
            )
        )
    ]
)

# Configure the plate
plate = aqz.Plate(
    path="experiment_plate",
    name="My HCS Experiment",
    row_names=["A", "B", "C", "D", "E", "F", "G", "H"],
    column_names=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
    wells=[well_a1],  # Add more wells as needed
    acquisitions=[acquisition]
)

# Create stream with HCS configuration
settings = aqz.StreamSettings(
    store_path="hcs_experiment.zarr",
    overwrite=True,
    hcs_plates=[plate]
)

stream = aqz.ZarrStream(settings)

# Write data to specific field of view
frame_data = np.random.randint(0, 2**16, (3, 512, 512), dtype=np.uint16)
stream.append(frame_data, key="experiment_plate/A/1/fov1")

# Close when done
stream.close()

You can also combine HCS plates with flat arrays in the same dataset:

# Add a labels array alongside HCS data
labels_array = aqz.ArraySettings(
    output_key="experiment_plate/A/1/labels",
    data_type=np.uint8,
    dimensions=[
        aqz.Dimension(
            name="y",
            kind=aqz.DimensionType.SPACE,
            array_size_px=512,
            chunk_size_px=256,
            shard_size_chunks=2
        ),
        aqz.Dimension(
            name="x",
            kind=aqz.DimensionType.SPACE,
            array_size_px=512,
            chunk_size_px=256,
            shard_size_chunks=2
        )
    ]
)

settings = aqz.StreamSettings(
    store_path="mixed_experiment.zarr",
    overwrite=True,
    arrays=[labels_array],  # Flat arrays
    hcs_plates=[plate]      # HCS structure
)

stream = aqz.ZarrStream(settings)

# Write to both HCS and flat arrays
stream.append(frame_data, key="experiment_plate/A/1/fov1")
labels_data = np.zeros((512, 512), dtype=np.uint8)
stream.append(labels_data, key="experiment_plate/A/1/labels")

stream.close()

In C, the equivalent HCS workflow would look like this:

#include "acquire.zarr.h"

// Create array settings for field of view
ZarrArraySettings fov_array = {
    .data_type = ZarrDataType_uint16,
};

ZarrArraySettings_create_dimension_array(&fov_array, 4);
fov_array.dimensions[0] = (ZarrDimensionProperties){
    .name = "t",
    .type = ZarrDimensionType_Time,
    .array_size_px = 0,
    .chunk_size_px = 10,
    .shard_size_chunks = 1,
};
fov_array.dimensions[1] = (ZarrDimensionProperties){
    .name = "c", 
    .type = ZarrDimensionType_Channel,
    .array_size_px = 3,
    .chunk_size_px = 1,
    .shard_size_chunks = 1,
};
fov_array.dimensions[2] = (ZarrDimensionProperties){
    .name = "y",
    .type = ZarrDimensionType_Space,
    .array_size_px = 512,
    .chunk_size_px = 256,
    .shard_size_chunks = 2,
};
fov_array.dimensions[3] = (ZarrDimensionProperties){
    .name = "x",
    .type = ZarrDimensionType_Space,
    .array_size_px = 512,
    .chunk_size_px = 256,
    .shard_size_chunks = 2,
};

// Create well with field of view
ZarrHCSWell well = {
    .row_name = "A",
    .column_name = "1",
};

ZarrHCSWell_create_image_array(&well, 1);
well.images[0] = (ZarrHCSFieldOfView){
    .path = "fov1", // Relative to well: plate/A/1/fov1
    .acquisition_id = 0,
    .has_acquisition_id = true,
    .array_settings = &fov_array,
};

// Create plate
ZarrHCSPlate plate = {
    .path = "experiment_plate",
    .name = "My HCS Experiment",
};

// Set up row and column names
ZarrHCSPlate_create_row_name_array(&plate, 8);
const char* row_names[] = {"A", "B", "C", "D", "E", "F", "G", "H"};
for (int i = 0; i < 8; i++) {
    plate.row_names[i] = row_names[i];
}

ZarrHCSPlate_create_column_name_array(&plate, 12);
const char* col_names[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"};
for (int i = 0; i < 12; i++) {
    plate.column_names[i] = col_names[i];
}

// Add wells and acquisitions
ZarrHCSPlate_create_well_array(&plate, 1);
plate.wells[0] = well;

ZarrHCSPlate_create_acquisition_array(&plate, 1);
plate.acquisitions[0] = (ZarrHCSAcquisition){
    .id = 0,
    .name = "Measurement_01",
    .start_time = 1343731272000,
    .has_start_time = true,
    .end_time = 1343737645000,
    .has_end_time = true,
};

// Create HCS settings
ZarrHCSSettings hcs_settings = {
    .plates = &plate,
    .plate_count = 1,
};

// Configure stream
ZarrStreamSettings settings = {
    .store_path = "hcs_experiment.zarr",
    .overwrite = true,
    .arrays = NULL,
    .array_count = 0,
    .hcs_settings = &hcs_settings,
};

ZarrStream* stream = ZarrStream_create(&settings);

// Write data
uint16_t* frame_data = /* your image data */;
size_t frame_size = 3 * 512 * 512 * sizeof(uint16_t);
size_t bytes_written;

ZarrStream_append(stream, frame_data, frame_size, &bytes_written, "experiment_plate/A/1/fov1");

// Cleanup
ZarrStream_destroy(stream);
ZarrHCSPlate_destroy_well_array(&plate);
ZarrArraySettings_destroy_dimension_array(&fov_array);

The resulting dataset will include proper OME-NGFF metadata for plates and wells.

S3

The library supports writing directly to S3-compatible storage. We authenticate with S3 through environment variables or an AWS credentials file. If you are using environment variables, set the following:

  • AWS_ACCESS_KEY_ID: Your AWS access key
  • AWS_SECRET_ACCESS_KEY: Your AWS secret key
  • AWS_SESSION_TOKEN: Optional session token for temporary credentials

These must be set in the environment where your application runs.

Important Note: You should ensure these environment variables are set before running your application or importing the library or Python module. They will not be available if set after the library is loaded. Configuration requires specifying the endpoint, bucket name, and region:

// ensure your environment is set up for S3 access before running your program
#include <acquire.zarr.h>

ZarrStreamSettings settings = { /* ... */ };

// Configure S3 storage
ZarrS3Settings s3_settings = {
    .endpoint = "https://s3.amazonaws.com",
    .bucket_name = "my-zarr-data",
    .region = "us-east-1"
};

settings.s3_settings = &s3_settings;

In Python, S3 configuration looks like:

# ensure your environment is set up for S3 access before importing acquire_zarr
import acquire_zarr as aqz

settings = aqz.StreamSettings()
# ...

# Configure S3 storage
s3_settings = aqz.S3Settings(
    endpoint="s3.amazonaws.com",
    bucket_name="my-zarr-data",
    region="us-east-1"
)

# Apply S3 settings to your stream configuration
settings.s3 = s3_settings

Anaconda GLIBCXX issue

If you encounter the error GLIBCXX_3.4.30 not found when working with the library in Python, it may be due to a mismatch between the version of libstdc++ that ships with Anaconda and the one used by acquire-zarr. This usually manifests like so:

ImportError: /home/eggbert/anaconda3/envs/myenv/lib/python3.10/site-packages/acquire_zarr/../../../lib/libstdc++.so.6: version `GLIBCXX_3.4.30` not found (required by /home/eggbert/anaconda3/envs/myenv/lib/python3.10/site-packages/acquire_zarr/../../../lib/libacquire_zarr.so)

To resolve this, you can install the libstdcxx-ng package from conda-forge:

conda install -c conda-forge libstdcxx-ng

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

acquire_zarr-0.8.1-cp314-cp314-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.14Windows x86-64

acquire_zarr-0.8.1-cp314-cp314-manylinux_2_28_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

acquire_zarr-0.8.1-cp314-cp314-manylinux_2_28_aarch64.whl (4.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

acquire_zarr-0.8.1-cp314-cp314-macosx_15_0_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.14macOS 15.0+ x86-64

acquire_zarr-0.8.1-cp314-cp314-macosx_15_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

acquire_zarr-0.8.1-cp313-cp313-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.13Windows x86-64

acquire_zarr-0.8.1-cp313-cp313-manylinux_2_28_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

acquire_zarr-0.8.1-cp313-cp313-manylinux_2_28_aarch64.whl (4.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

acquire_zarr-0.8.1-cp313-cp313-macosx_15_0_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.13macOS 15.0+ x86-64

acquire_zarr-0.8.1-cp313-cp313-macosx_15_0_arm64.whl (3.7 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

acquire_zarr-0.8.1-cp312-cp312-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.12Windows x86-64

acquire_zarr-0.8.1-cp312-cp312-manylinux_2_28_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

acquire_zarr-0.8.1-cp312-cp312-manylinux_2_28_aarch64.whl (4.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

acquire_zarr-0.8.1-cp312-cp312-macosx_15_0_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.12macOS 15.0+ x86-64

acquire_zarr-0.8.1-cp312-cp312-macosx_15_0_arm64.whl (3.7 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

acquire_zarr-0.8.1-cp311-cp311-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.11Windows x86-64

acquire_zarr-0.8.1-cp311-cp311-manylinux_2_28_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

acquire_zarr-0.8.1-cp311-cp311-manylinux_2_28_aarch64.whl (4.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

acquire_zarr-0.8.1-cp311-cp311-macosx_15_0_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.11macOS 15.0+ x86-64

acquire_zarr-0.8.1-cp311-cp311-macosx_15_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

acquire_zarr-0.8.1-cp310-cp310-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.10Windows x86-64

acquire_zarr-0.8.1-cp310-cp310-manylinux_2_28_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

acquire_zarr-0.8.1-cp310-cp310-manylinux_2_28_aarch64.whl (4.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

acquire_zarr-0.8.1-cp310-cp310-macosx_15_0_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.10macOS 15.0+ x86-64

acquire_zarr-0.8.1-cp310-cp310-macosx_15_0_arm64.whl (3.7 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

File details

Details for the file acquire_zarr-0.8.1-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 269d29c7f145621338eee46d6d10c52e4ac20dc4fdd2a71e962879a68ad72ae9
MD5 a512a86436f9d07e6e57cd82d4be657e
BLAKE2b-256 6380162740966b1c8993c2d2491d7286743536b015e5670dcf2369eee0e34770

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp314-cp314-win_amd64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3f7eeba90c1021d4a251caaac3b62ef9b58d862ce12ab53e4b8bb04be791f4d6
MD5 ce188827b5382e8b7483eec53875fa3c
BLAKE2b-256 982ffb2ac7565ccdcce2f176c9368adf814517078132ece0cb9597be557b8448

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp314-cp314-manylinux_2_28_x86_64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 717721b47c31ded953d1764b26134828c3fe15322de3f2877a1820dabe4434ec
MD5 f26dce464a294e621263137bc7b9128e
BLAKE2b-256 3a37f8300326d19ad83cef3bc7ff973dd48a1d79b38afe40fe610986ac3f972e

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp314-cp314-manylinux_2_28_aarch64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp314-cp314-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 f3ba7484c5f1427c36077514ee60dc51f019cf43265caa3c012f833a60695d67
MD5 50dadf4fc3164b0171bd93c0d34cfd69
BLAKE2b-256 9ce8d9823ae08b44119532c895918d72fb617309e782893177b1e776f7f0237d

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp314-cp314-macosx_15_0_x86_64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 8a49d320c45e5a608f3deaf48ab76f9ab4c896e720a08e68252e877d72e04d36
MD5 dd936c14d9f2bcb849f5a23daf514f8b
BLAKE2b-256 6e62bbe0629afecf8aa3dc2e3844cf7eeb6310998d77ac7c1cfab3f51bc507f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp314-cp314-macosx_15_0_arm64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 06cc5b2aa0224c258b29491682ce6d47fb984a82ce878976a5782c2b1a003bb3
MD5 3d0941d4f6fe7c646987fbed67d1e01d
BLAKE2b-256 b6c0593d7e51796984883bfa59e093f0f686105c5c49acef9ff20c4ffddcfdc6

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp313-cp313-win_amd64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 024be825fd3db2ecc41c3d3ec9ebc066ff1d950786b679ad436324033d0ff9dd
MD5 06441fe3bdbb9579e3c3132f5f2a9503
BLAKE2b-256 c42efc88a3e512bb48a07075e92d9098d251d8cf68aff4767dd301681cbb5ef7

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f1e1353bf001951bfa6839ef340d631f502271e54b6a3bfc0259fc84c3241f21
MD5 444d27cc9ffaefe3b089e66327c7adc2
BLAKE2b-256 af226347020eaae824e987f111876ff06552a29e021e83c55fb513a49875e288

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp313-cp313-manylinux_2_28_aarch64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp313-cp313-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 af7464041e7b1eef5001b2e3fb0b7e97c039939dfd81b5d895546cfd99201dfb
MD5 f02c73e6380f9c3da98ab9aaab7dc0e9
BLAKE2b-256 a2abd20ed4ae6d142b2d36e2a0830a5d5675f293f5106d731b8e0b8d94785bfc

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp313-cp313-macosx_15_0_x86_64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e440311522f41081575d6ad9df3f080c0078da081008fc08dadeaf2ba6744a67
MD5 eb9d484b15087d4c5608a175644d2531
BLAKE2b-256 69abad3ccfd775b5bbe14f0fa58195ed3563d670cc3bb2e9baadbad72e1e79b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp313-cp313-macosx_15_0_arm64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 713120c037f53b09459a971b01c88e25aa888e2ea16eadec361a1fccbca497a9
MD5 84b17426d2f47d03888363ca9d1b63e6
BLAKE2b-256 5229d4d0c7d7b138fc518ec45845c09227204230c734c7757f015c18bf32cb32

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp312-cp312-win_amd64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 78d8fc3c61be01ce0305093b2d1b07534fda2f1d5050f7377c52260f78c254dc
MD5 cc096c3261741d1003c9f82a09c10aa9
BLAKE2b-256 541a9849759e168b579d425b301a389d8a734b30c672a9db8c71d35947a2455e

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2b9816d265493fd143b0a11f781497cb11055daa03284b31a451489c533f747f
MD5 9948d826c5010b2b2c0c739f26f39f35
BLAKE2b-256 ca06774c82cb798bf0c8c98c1eda023324959d897ea7d53f04639ef88baba0b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp312-cp312-manylinux_2_28_aarch64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp312-cp312-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 dc2166557d28b35cd528cb42b9dc01c147c1f5dd7eca18d8ab8504622425e622
MD5 8803a752ea1f7356725310e093a1dd52
BLAKE2b-256 b19d90e5d2f1ae0ebacb4fef0e940c9eedfb630514b07d537eeb12b90499d4d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp312-cp312-macosx_15_0_x86_64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 1a005b515c224603d1b4444982136ab44b56d2b3c5e92561512056834cdf8f19
MD5 d8fcbe02e802ce5e036d8c1c15800766
BLAKE2b-256 bce537ab9e206f1f1ee3f207c683720f5a86af020d87b1036ce70d8997f1212a

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp312-cp312-macosx_15_0_arm64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f3e73766cfc44f2e7fbe7cd370615313f5f23fb238e8628a5ee0d0d8b4eecf3a
MD5 bf41ddb65b82c8cd071124ad515a106a
BLAKE2b-256 9a4c78ab49268540421f37389d6d2cdc2632829673eb3595e1618c97408100cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp311-cp311-win_amd64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1bd4d7f77e3a4588b9347dd67df4aced03669a78ac25de477cc748310b68508f
MD5 597cdd4baae354a06f1558e759711659
BLAKE2b-256 f9001ec97a3366ac84c14f945fd551cc8526c16c2bea0e616f8e97ad9353ece4

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8a87f32cf24e9f2985d7a1f0cde60e57cba1653a3adfb5ed9156780292eea998
MD5 ce6a70f218907bcd42e7012d217900d9
BLAKE2b-256 4b6c998aa97c263fa22d88a59605f612175352f08c78295aed660d35686cd663

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp311-cp311-manylinux_2_28_aarch64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp311-cp311-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 88cb2e865bcfb450556e49911663a4f4b4bd29576387a86244b89ab2765c6fa0
MD5 e0db1cb08a69dfe375778be03773b07e
BLAKE2b-256 fb792e81bf9da37569787a68f2d006009571fc5e63ef4541b594e6c7b850f98e

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp311-cp311-macosx_15_0_x86_64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 5da42acd236e0456b5095b5ac0128e0c381519d042e74ed7855801d25133c9d6
MD5 6914cc5a79a9969b94190ab6601a3ec2
BLAKE2b-256 c170bc13692efb80dd59a824b08369f3081520616f0268199a6d0cfc547121c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp311-cp311-macosx_15_0_arm64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 846d593d875e7fefef2db3e3be754de4c060d9b30623765f507027860113ab5d
MD5 83b8d23cb009e336f4eb1c43c9714cd2
BLAKE2b-256 fdc01dee83d8ab067293ce3dfc09170d82da56dd6a8cad56ad05d9b194fb1b17

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp310-cp310-win_amd64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a95262cad8f379ed7a7585b550fa4ab0dd8de09454a4a18546dda7b9ac170b52
MD5 0b5f5c8bb931225e9317a9db2ac5cff4
BLAKE2b-256 00de258a6e07230a7cf952a135a1182f298f903c901dd59e2dfdcdb19c658c96

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 45dff8417a8d01571ac9952057f5dcd206ab1aceb5a5b077292dbb355d72fa40
MD5 a68ab67e98ce37a519246730d735219f
BLAKE2b-256 b47631b1c6692ad2476c8a50245b1c96ef40be204ed5023fddfe297f7ef3694d

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp310-cp310-manylinux_2_28_aarch64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp310-cp310-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp310-cp310-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 c060cbe609fdd8bddfb80789ccb0a42430505534e75f1a1ccb6a8a5a4c061839
MD5 d9398077004629c7de2e2aef735e32ce
BLAKE2b-256 655ba7fdd2d10b05f16ac6aa5738bba90c9b84cb688f4286a5827bd9c96e8486

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp310-cp310-macosx_15_0_x86_64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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

File details

Details for the file acquire_zarr-0.8.1-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.1-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 2aa908fce8f9a51399bd5ae091e8e03774973852b500a7ac5ed1833b4f54c3b1
MD5 bd82561d6fbe5120a8147c2de7fa4372
BLAKE2b-256 5e5bd6d1aa2156518d926d63bfa22ad39c9f1a1d513c05353d28292f96331c18

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.1-cp310-cp310-macosx_15_0_arm64.whl:

Publisher: release.yml on acquire-project/acquire-zarr

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