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.0-cp314-cp314-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.14Windows x86-64

acquire_zarr-0.8.0-cp314-cp314-manylinux_2_28_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

acquire_zarr-0.8.0-cp314-cp314-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

acquire_zarr-0.8.0-cp314-cp314-macosx_15_0_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.14macOS 15.0+ x86-64

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

Uploaded CPython 3.14macOS 15.0+ ARM64

acquire_zarr-0.8.0-cp313-cp313-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.13Windows x86-64

acquire_zarr-0.8.0-cp313-cp313-manylinux_2_28_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

acquire_zarr-0.8.0-cp313-cp313-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

acquire_zarr-0.8.0-cp313-cp313-macosx_15_0_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.13macOS 15.0+ x86-64

acquire_zarr-0.8.0-cp313-cp313-macosx_15_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

acquire_zarr-0.8.0-cp312-cp312-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.12Windows x86-64

acquire_zarr-0.8.0-cp312-cp312-manylinux_2_28_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

acquire_zarr-0.8.0-cp312-cp312-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

acquire_zarr-0.8.0-cp312-cp312-macosx_15_0_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.12macOS 15.0+ x86-64

acquire_zarr-0.8.0-cp312-cp312-macosx_15_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

acquire_zarr-0.8.0-cp311-cp311-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.11Windows x86-64

acquire_zarr-0.8.0-cp311-cp311-manylinux_2_28_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

acquire_zarr-0.8.0-cp311-cp311-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

acquire_zarr-0.8.0-cp311-cp311-macosx_15_0_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.11macOS 15.0+ x86-64

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

Uploaded CPython 3.11macOS 15.0+ ARM64

acquire_zarr-0.8.0-cp310-cp310-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.10Windows x86-64

acquire_zarr-0.8.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

acquire_zarr-0.8.0-cp310-cp310-manylinux_2_28_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

acquire_zarr-0.8.0-cp310-cp310-macosx_15_0_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.10macOS 15.0+ x86-64

acquire_zarr-0.8.0-cp310-cp310-macosx_15_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

File details

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

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 3f15d463c5dd89610fbd4b59f6bf675a6a1e1db11ea35d82c29309155fe9d216
MD5 7b856b6b2d880272fa8fa9bad0e341c5
BLAKE2b-256 6eb8278dd31f783a19b91d049e81c7ac56e4dd57813e592555689f92be405338

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e07dff191f9edcbe97f23684ecbfa0c936e6fc5aaf2a4cfc22d2312a72042a78
MD5 caf848e43979152327562eee7876108b
BLAKE2b-256 8b2b786ddbbbdecbdefc6e19ecd2f16b46a9160c37026c9d89182ea5390ccbd3

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7a9d043872c54597906e5a261e74b8540b74cc103d9c888afbff323357f480a4
MD5 7634cf262a95399c991c954f76102c8d
BLAKE2b-256 dbf867952af42e0313663b563b14a00234386e30a25b1d1b21402583a5e334b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp314-cp314-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 95eabef4ed939d1114889959c5900238db1745c5a15a22bace4b48990c0777ab
MD5 acef0eb8e2ee6f2be7cd44a9f62f0bfe
BLAKE2b-256 c4d9afa0918b4e9ee9dd4cc841b36ab5927e1d4932806b784ffd2afe3bef1365

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 2f4da03dc53919f3c1087f2a6b491047b32f3d57a3dd1cf6980da03da49b4606
MD5 4f3f2e6e1e31bb022857066b295676b3
BLAKE2b-256 ff8b9d045456bdfe89332369b39fddb1ea4cba7cc3be2d780f507dcdb489ec73

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 98ec767c7355525aaed1b4b369b753e908a10dc09ba3ed9e140c083642ca36c7
MD5 2bfdc3c3b631604697aa29443a817f57
BLAKE2b-256 fbd4f097e99bbae37e9d240986b03b7cec78781cc5bb9a5c55e71e635dd72c7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a489d350c91d36cdb830f62028d6448439e31bebd8a97c6d887185867b0dadf9
MD5 80d022d3880bf66fbc378b0c4e2d0d71
BLAKE2b-256 67d9327f53566c128f99e84d7806284220a65425777167d9516d4c1a6fdfd1e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 34917c92037fdd130878e9dcec54c000dd225d2f96b2e4b53f2e754323dcc535
MD5 54c6357666b2366543d22ee595bd4b10
BLAKE2b-256 3d03a2ee70dd33f0f969eca98d156fccdf6261714dd28f6320ca4b93d11be8d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp313-cp313-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 0c3d150600ceeecc334a6dc6748e78ec06def0a7b3aa700558edcc1ae1583a97
MD5 5f1b4cf1ff50fecdd9ec5341bef2b52f
BLAKE2b-256 d57f0124d4263ad53ba2af487da946da31b203efdb956409c6470d580bc86fc5

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 49fbd0a0c738e197293e253c3dd2a4e3703f1ec83064e8a5b610fc7c8b0801f0
MD5 7021e5d3e0dcd0695c5b387b1e291486
BLAKE2b-256 b4b306c00fa7add8bc7047bdc8a2a953b1ea8ab33ebe96e4792b65a7eddd1076

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c29cb8368289820ab60b65496d56fd0b4b72887a2b7f5ed860515ac8c5512219
MD5 e738a4133364286feeecd043e22a6438
BLAKE2b-256 c6be1aa3216faf9b3fc13953e2e63b24474f5142935dcb36c189fbaa89c6873a

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3b5273714ddc122d61c5e36da58e490689c3743e28593b785feabbdd05bd7769
MD5 d3e3f0d8b9dda7da835c100989ce460a
BLAKE2b-256 b667b5ce692a6b909c5a49c0a9ab910f26e4350ef2360d60a74aaf28ff4518b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8bfb74b927e7fb99c8aa74d82d1ac84b7cce68841f6c7ccfc02cf06c33715f6b
MD5 df82bfbb695131cf67f5d0d804cc9636
BLAKE2b-256 375c46bee9687594067dab154ef362aa6327af2dc5a2abd4a478f6d480576224

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp312-cp312-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 53737a87f5bb0a5718ba75f342c8e4898bac00993f002152a8192ba6f9c232c7
MD5 a317be842c772ef8af8451986ad47be1
BLAKE2b-256 b39beff2c9364d688c8837d1bab272e6d4bf31517f22de512b55ffeaec479c26

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 256460719b79b8c4124c01eaa213fc94d517f33ed97b6deff3a256ca95305b51
MD5 962745045279ef00bee6e9762678c3ca
BLAKE2b-256 5a41bb322a56e042a420bb62ee9f1170542676b7c9db684ea80940ffea423f5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b956d281cb421206f7d07c219e95042b88ea0983071f2d364ae049ddd14f90ab
MD5 237684c2901c9cf5bdd93be84bdcae31
BLAKE2b-256 e9c495f1286eaba2bee69773727eac67ba3a252860072b5a225cf56c904eb206

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0bbb02347a32fa0eed444408d4e9ca86f1d1aa9c6d8ed452bec7a816891a2631
MD5 3600df44d1d00a6798bc5a74fac68c2b
BLAKE2b-256 29312dc0e39299e818823a724f633aff52e784ee361d3a5f942b28b2fb539c40

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c7da8476be5743d6d4142e56b02abe61504272595128b42b121deeb345f965cc
MD5 398adf4e7f0c2c09b3199b9f67b17f37
BLAKE2b-256 bf2c38cbceada635b436ad523cb0cda83bed9ad4428dc26a33cdd5fa97ac3459

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp311-cp311-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 cdf6e6c656344a68069ddba41dae67dcabb1807af88ef7b1f02298c0c706d232
MD5 148ff34193eb97a3f5c3eb2772195806
BLAKE2b-256 cf5aee94bf1d343d4c230bce63909f86ed1152f6d2637ecf835974c5b1fd47fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 c8cc594f5a1c72b3d3960416a7349dcd9fdaa7d5c6a603ffdf62ddaf74c2d411
MD5 08a8714616cba559b560d0c30e8c1a5d
BLAKE2b-256 99c2459a7279704f0e7faea52aebc6003f644c74e1f1676624e97d87dd9db5cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a21f3923ed06582134f1c1753cb4862313f90f853c0b17a49f509a9a561abe0b
MD5 53313dcd15683af0695635c06624fb60
BLAKE2b-256 74655fe25caa5d6bb23b4427f8e7d0ed4b14c4fe0c37e5e5bdf344e5320ac608

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9ee986d5479719466bfe83ce5765bc814816520836522f47d907222476929fdb
MD5 fa306514c49f4d07dcf95df9f17d425e
BLAKE2b-256 a0a10f5ca402b712608bbb6f209412ffc3377014d595976c615307aef0c3bf3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 467dcccd85629506c0a2059644aab58950d9dc9a23b53a84dd00a8cb6a1a9854
MD5 de734b849e02f47a8c0eff4e7dbe0921
BLAKE2b-256 4a12ea57d5269338d9df5d009c937dbbcb5ab912c60963c3ecc23eeca78e2a9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp310-cp310-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp310-cp310-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 c7f383e4df633f0140d848418ab82ddd9e3cb60d8e3c8afe88821b9df00aada0
MD5 024cdba34a1d01fe4638d83ed727ba71
BLAKE2b-256 62328ed584ec521a7314425c6d2bd9e6c1a9b5a0cf2ba172b22151b56f14fced

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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.0-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for acquire_zarr-0.8.0-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 7475c62725d7831e8faf525d0bfbf80f5e99da349981b558b629f31e8e334642
MD5 5d9c95102c64ba86e7dc0a52a5c454d3
BLAKE2b-256 448f76adce76a10843eed2964d6994881b63b1b5bea8a8870dd23975549caf5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for acquire_zarr-0.8.0-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