Skip to main content

HDF5 VOL connector for cloud object storage (AWS S3, Azure Blob)

Project description

ArrayMorph

Build Status License: MIT

ArrayMorph enables efficient storage and retrieval of array data from cloud object stores, supporting AWS S3 and Azure Blob Storage. It is an HDF5 Virtual Object Layer (VOL) plugin that transparently routes HDF5 file operations to cloud storage — existing h5py or HDF5 C++ code works unchanged once the plugin is loaded.

Tag: CI4AI


How-To Guides

Install ArrayMorph

pip install arraymorph

Once installed, jump straight to Configure credentials for AWS S3 or Azure below.

If you need the standalone lib_arraymorph binary, you can download a pre-built release or build from source.

Configure credentials for AWS S3

Use the Python API before opening any HDF5 files:

import arraymorph

arraymorph.configure_s3(
    bucket="my-bucket",
    access_key="MY_ACCESS_KEY",
    secret_key="MY_SECRET_KEY",
    region="us-east-1",
    use_tls=True,
)
arraymorph.enable()

Or set environment variables directly:

export STORAGE_PLATFORM=S3
export BUCKET_NAME=my-bucket
export AWS_ACCESS_KEY_ID=MY_ACCESS_KEY
export AWS_SECRET_ACCESS_KEY=MY_SECRET_KEY
export AWS_REGION=us-east-1
export HDF5_PLUGIN_PATH=$(python -c "import arraymorph; print(arraymorph.get_plugin_path())")
export HDF5_VOL_CONNECTOR=arraymorph

Configure credentials for Azure Blob Storage

import arraymorph

arraymorph.configure_azure(
    container="my-container",
    connection_string="DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net",
)
arraymorph.enable()

Or set environment variables directly:

export STORAGE_PLATFORM=Azure
export BUCKET_NAME=my-container
export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;..."
export HDF5_PLUGIN_PATH=$(python -c "import arraymorph; print(arraymorph.get_plugin_path())")
export HDF5_VOL_CONNECTOR=arraymorph

Use an S3-compatible object store (MinIO, Ceph, Garage)

Pass endpoint, addressing_style=True, and use_signed_payloads=True to match the requirements of most self-hosted S3-compatible stores:

import arraymorph

arraymorph.configure_s3(
    bucket="my-bucket",
    access_key="MY_ACCESS_KEY",
    secret_key="MY_SECRET_KEY",
    endpoint="http://localhost:9000",
    region="us-east-1",
    use_tls=False,
    addressing_style=True,
    use_signed_payloads=True,
)
arraymorph.enable()

Download a pre-built lib_arraymorph

Each GitHub release attaches standalone pre-compiled binaries of lib_arraymorph for all supported platforms:

File Platform
lib_arraymorph-linux-x86_64.so Linux x86_64
lib_arraymorph-linux-aarch64.so Linux aarch64
lib_arraymorph-macos-arm64.dylib macOS Apple Silicon

Download the file for your platform from the release assets and set HDF5_PLUGIN_PATH to the directory containing it before calling arraymorph.enable() or setting HDF5_VOL_CONNECTOR manually.

Build from source

Use this path if you want to compile lib_arraymorph yourself — for example to target a specific platform, contribute changes, or build a custom wheel.

Prerequisites

  • vcpkg — installs the AWS and Azure C++ SDKs via CMake
  • CMake and Ninja
  • uv — Python package manager

Step 1 — Clone and create a virtual environment

git clone https://github.com/ICICLE-ai/ArrayMorph.git
cd ArrayMorph
uv venv
source .venv/bin/activate

Step 2 — Install h5py

lib_arraymorph links against an HDF5 shared library at build time. Rather than requiring a separate system-wide HDF5 installation, the build system points CMake at the .so / .dylib that h5py already bundles. Install h5py first so those libraries are present:

uv pip install h5py

On macOS the bundled libraries land in .venv/lib/python*/site-packages/h5py/.dylibs/; on Linux in .venv/lib/python*/site-packages/h5py.libs/.

Step 3 — Configure and build the shared library

export HDF5_DIR=$(.venv/bin/python -c "import h5py,os; d=os.path.dirname(h5py.__file__); print(os.path.join(d,'.dylibs') if os.path.exists(os.path.join(d,'.dylibs')) else os.path.join(os.path.dirname(d),'h5py.libs'))")

cmake -B lib/build -S lib \
    -DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT:-~/.vcpkg}/scripts/buildsystems/vcpkg.cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -G Ninja

cmake --build lib/build

This produces lib/build/lib_arraymorph.dylib on macOS or lib/build/lib_arraymorph.so on Linux.

Optional — Python package

If you also want to use the Python API, install the package in editable mode:

HDF5_DIR=$HDF5_DIR \
CMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT:-~/.vcpkg}/scripts/buildsystems/vcpkg.cmake \
uv pip install -e .

Or build a redistributable wheel:

HDF5_DIR=$HDF5_DIR \
CMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT:-~/.vcpkg}/scripts/buildsystems/vcpkg.cmake \
uv build --wheel --no-build-isolation

The wheel is written to dist/. Install it in any environment with:

pip install dist/arraymorph-*.whl

Tutorials

Write and read a chunked array on AWS S3

This tutorial walks through writing a 2-D NumPy array to a cloud HDF5 file and reading a slice of it back.

Prerequisites

  • An AWS account with an S3 bucket, or an S3-compatible object store
  • ArrayMorph installed (pip install arraymorph)

Step 1 — Configure and enable ArrayMorph

import arraymorph

arraymorph.configure_s3(
    bucket="my-bucket",
    access_key="MY_ACCESS_KEY",
    secret_key="MY_SECRET_KEY",
    region="us-east-1",
    use_tls=True,
)
arraymorph.enable()

arraymorph.enable() sets HDF5_PLUGIN_PATH and HDF5_VOL_CONNECTOR in the current process. Any h5py.File(...) call made after this point is routed through ArrayMorph.

Step 2 — Write array data

import h5py
import numpy as np

data = np.fromfunction(lambda i, j: i + j, (100, 100), dtype="i4")

with h5py.File("demo.h5", "w") as f:
    f.create_dataset("values", data=data, chunks=(10, 10))

Each 10×10 chunk is stored as a separate object in your S3 bucket.

Step 3 — Read a slice back

import h5py

with h5py.File("demo.h5", "r") as f:
    dset = f["values"]
    print(dset.dtype)           # int32
    print(dset[5:15, 5:15])     # fetches only the chunks that overlap this slice

Only the chunks that overlap the requested hyperslab are fetched from cloud storage — no full-file download occurs.


Explanation

How ArrayMorph works

ArrayMorph is implemented as an HDF5 Virtual Object Layer (VOL) connector. The VOL is an abstraction layer inside the HDF5 library that separates the public API from the storage implementation. By providing a plugin that registers itself as a VOL connector, ArrayMorph intercepts every HDF5 file operation before it reaches the native POSIX layer.

When arraymorph.enable() is called:

  1. HDF5_PLUGIN_PATH is set to the directory containing the compiled shared library (lib_arraymorph.so / lib_arraymorph.dylib).
  2. HDF5_VOL_CONNECTOR=arraymorph tells HDF5 to load and activate that plugin for all subsequent file operations.

From this point, a call like h5py.File("demo.h5", "w") does not touch the local filesystem. Instead, the VOL connector:

  1. Reads cloud credentials from environment variables and constructs an AWS S3 or Azure Blob client (selected by STORAGE_PLATFORM).
  2. On dataset read/write, translates the HDF5 hyperslab selection into a list of chunks and dispatches asynchronous get/put requests against the object store — one object per chunk.

Chunked storage model

HDF5 datasets are divided into fixed-size chunks (e.g. chunks=(64, 64) for a 2-D dataset). ArrayMorph stores each chunk as an independent object in the bucket. The object key encodes the dataset path and chunk coordinates, so a partial read only fetches the chunks that overlap the requested slice. For large chunks, ArrayMorph can issue byte-range requests to retrieve only the needed bytes within a chunk object.

Async I/O

Both the S3 and Azure backends use asynchronous operations dispatched to a thread pool. This allows ArrayMorph to fetch multiple chunks in parallel, which is important for workloads that access many chunks per read (e.g. strided access patterns in machine learning data loaders).

Compatibility

Because the interception happens at the VOL layer, no changes to application code are required. Any program that opens HDF5 files with h5py or the HDF5 C++ API will automatically use ArrayMorph once the plugin is loaded.


References

Python API

arraymorph.enable() -> None

Sets HDF5_PLUGIN_PATH and HDF5_VOL_CONNECTOR in the current process environment. Must be called before any h5py.File(...) call.

arraymorph.get_plugin_path() -> str

Returns the directory containing the compiled VOL plugin. Useful when you need to set HDF5_PLUGIN_PATH manually.

arraymorph.configure_s3(bucket, access_key, secret_key, endpoint=None, region="us-east-2", use_tls=False, addressing_style=False, use_signed_payloads=False) -> None

Configures the S3 client. All parameters are written to environment variables consumed by the C++ plugin at file-open time.

Parameter Environment variable Default Description
bucket BUCKET_NAME S3 bucket name
access_key AWS_ACCESS_KEY_ID Access key ID
secret_key AWS_SECRET_ACCESS_KEY Secret access key
endpoint AWS_ENDPOINT_URL_S3 AWS default Custom endpoint for S3-compatible stores
region AWS_REGION us-east-2 SigV4 signing region
use_tls AWS_USE_TLS false Use HTTPS when True
addressing_style AWS_S3_ADDRESSING_STYLE virtual path when True; required for most non-AWS stores
use_signed_payloads AWS_SIGNED_PAYLOADS false Include request body in SigV4 signature

arraymorph.configure_azure(container, connection_string=None) -> None

Configures the Azure Blob client.

Parameter Environment variable Default Description
container BUCKET_NAME Azure container name
connection_string AZURE_STORAGE_CONNECTION_STRING From env Azure Storage connection string

Environment variables

All configuration can be applied via environment variables without using the Python API. This is useful when running HDF5 C++ programs directly.

Variable Description
HDF5_PLUGIN_PATH Directory containing lib_arraymorph.so / .dylib
HDF5_VOL_CONNECTOR Must be arraymorph to activate the plugin
STORAGE_PLATFORM S3 (default) or Azure
BUCKET_NAME Bucket or container name
AWS_ACCESS_KEY_ID S3 access key
AWS_SECRET_ACCESS_KEY S3 secret key
AWS_REGION SigV4 signing region
AWS_ENDPOINT_URL_S3 Custom S3-compatible endpoint URL
AWS_USE_TLS true / false
AWS_S3_ADDRESSING_STYLE path or virtual
AWS_SIGNED_PAYLOADS true / false
AZURE_STORAGE_CONNECTION_STRING Azure connection string

External references


Acknowledgements

This project is supported by the National Science Foundation (NSF) funded AI institute for Intelligent Cyberinfrastructure with Computational Learning in the Environment (ICICLE) (OAC 2112606).

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

arraymorph-0.2.0b4.tar.gz (43.0 kB view details)

Uploaded Source

Built Distributions

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

arraymorph-0.2.0b4-cp314-cp314-manylinux_2_28_x86_64.whl (8.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

arraymorph-0.2.0b4-cp314-cp314-manylinux_2_28_aarch64.whl (8.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

arraymorph-0.2.0b4-cp314-cp314-macosx_15_0_arm64.whl (5.5 MB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

arraymorph-0.2.0b4-cp313-cp313-manylinux_2_28_x86_64.whl (8.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

arraymorph-0.2.0b4-cp313-cp313-manylinux_2_28_aarch64.whl (8.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

arraymorph-0.2.0b4-cp313-cp313-macosx_15_0_arm64.whl (5.5 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

arraymorph-0.2.0b4-cp312-cp312-manylinux_2_28_x86_64.whl (8.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

arraymorph-0.2.0b4-cp312-cp312-manylinux_2_28_aarch64.whl (8.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

arraymorph-0.2.0b4-cp312-cp312-macosx_15_0_arm64.whl (5.5 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

arraymorph-0.2.0b4-cp311-cp311-manylinux_2_28_x86_64.whl (8.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

arraymorph-0.2.0b4-cp311-cp311-manylinux_2_28_aarch64.whl (8.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

arraymorph-0.2.0b4-cp311-cp311-macosx_15_0_arm64.whl (5.5 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

arraymorph-0.2.0b4-cp310-cp310-manylinux_2_28_x86_64.whl (8.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

arraymorph-0.2.0b4-cp310-cp310-manylinux_2_28_aarch64.whl (8.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

arraymorph-0.2.0b4-cp310-cp310-macosx_15_0_arm64.whl (5.5 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

arraymorph-0.2.0b4-cp39-cp39-manylinux_2_28_x86_64.whl (8.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

arraymorph-0.2.0b4-cp39-cp39-manylinux_2_28_aarch64.whl (8.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

arraymorph-0.2.0b4-cp39-cp39-macosx_15_0_arm64.whl (5.5 MB view details)

Uploaded CPython 3.9macOS 15.0+ ARM64

File details

Details for the file arraymorph-0.2.0b4.tar.gz.

File metadata

  • Download URL: arraymorph-0.2.0b4.tar.gz
  • Upload date:
  • Size: 43.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4.tar.gz
Algorithm Hash digest
SHA256 bc86ecc12372f98f122b43c8a85b9e9347eb77896eafeeccd9cc68ce2ba47177
MD5 34725e76326e4cacece39f22a4595f82
BLAKE2b-256 e5b73393eb8808f4c332b7e8af961331bb0cd922912b8b71b850727eee7bb5fd

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp314-cp314-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 8.9 MB
  • Tags: CPython 3.14, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 adc3584809cf1e4ee96312a5df4d1cbbb49ee77a4e342c9b469b5b34f2e8e733
MD5 eecaa1b66f9d170a1603fe800949deed
BLAKE2b-256 21033fd39c62850a36c2509ce7bb5b86366f8f65c98f9000cc029f79c7b84597

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp314-cp314-manylinux_2_28_aarch64.whl
  • Upload date:
  • Size: 8.8 MB
  • Tags: CPython 3.14, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7fc3e464eae586bc087f9331a0f73582a7d2263600d0cba5f4c090825345397b
MD5 bd4e41151328095aa043872411dfe90c
BLAKE2b-256 f8fa4a1680295bfc42518c66596e30ff7ef6a0f2298282ba02e9c4af7afaa82d

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp314-cp314-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 5.5 MB
  • Tags: CPython 3.14, macOS 15.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 c969f64ba2a371b90c4c344f1c279b15b3cb66f0940e209e18f523b647271f2d
MD5 741c37aa370bd9464e8a8bb261526370
BLAKE2b-256 e17569653321d1b5646b0d35eb1e1ed04e9956410f9ae66e20e62992aea70f84

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp313-cp313-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 8.9 MB
  • Tags: CPython 3.13, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d04a7bb34d29010805ca498d6a367c4ef144b453f95aa0ac818be4490f28ca90
MD5 0c7ad91d68cbeec5c0ad0e6ee28d9af7
BLAKE2b-256 8097abf848350895e3b36edd68ce0f74a6b2b9d89dc43418143ed1b5d4e7bb38

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp313-cp313-manylinux_2_28_aarch64.whl
  • Upload date:
  • Size: 8.8 MB
  • Tags: CPython 3.13, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e25964d770b91b885b75b1ef96bcf78a7ee8f66339b577edb7e396ebc026d116
MD5 25b911b91556a1bb05691e5d51dd1dca
BLAKE2b-256 8bb3a77edd1a51b8508fc77cffb7c9614fd0938d02c972ecc5edefc6f2a0283d

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp313-cp313-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 5.5 MB
  • Tags: CPython 3.13, macOS 15.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e45caec3253a67bb8076e43b97e60a98eb3c095707acb24f2b9e7248c573204d
MD5 c3fc7948de843c3b55af34097eeddb4f
BLAKE2b-256 34cc1512f7a4d515345cbcfba403c130d5520540260747dc2cef8a71c1e3df6b

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp312-cp312-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 8.9 MB
  • Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b2b60163d03b25b6eb18218f529bd27c3214d840f9c02fa156b85b68c6c6f868
MD5 3e791779820a76923b780b6e5417f050
BLAKE2b-256 bcb5afde9e4bb7c9119aa8a7d13046468e56192425671709e5bdcdff909175ac

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp312-cp312-manylinux_2_28_aarch64.whl
  • Upload date:
  • Size: 8.8 MB
  • Tags: CPython 3.12, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5c3db08368f50b876c48d524eec122833f3aca7f68348551c0dcc718d76207c5
MD5 19e1e28e2e95e724345bb2cae8cafe36
BLAKE2b-256 0574770e81e600dd37121fbdc97c6f6a8335c411ab190e672565567904c071fd

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp312-cp312-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 5.5 MB
  • Tags: CPython 3.12, macOS 15.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 2154bb2e18f0c9d073d5cf48ebb8a330ccaac1df107fe68d9ee275f86ab5368f
MD5 969d3479067520e0ebc5f8c297e3bea4
BLAKE2b-256 732e233e046ca1a65c710524d024532bedaf2eed43cb2793a9fa10de7bfc13e3

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp311-cp311-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 8.9 MB
  • Tags: CPython 3.11, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dd172ac0f0a0efce0d8c00139e19fca64e4ded1c08248de5011cd70f0b93efd0
MD5 335af55ff93b48b9807df953d38e045b
BLAKE2b-256 e3612c3fe1b699388bd4091b46e021f8c72c1676253554c030580d4e0ca9fc7d

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp311-cp311-manylinux_2_28_aarch64.whl
  • Upload date:
  • Size: 8.8 MB
  • Tags: CPython 3.11, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 69d3861f2349efa611fea791ca8827ac628f6a3fbc156cf9634fdf912d3c713e
MD5 157bc1df37b6c52b63c6054b4555e6dc
BLAKE2b-256 280ebcf247007b2ca6eaffcd8e61053103b6ebd3582c9b2e05993ca069b0b0cd

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp311-cp311-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 5.5 MB
  • Tags: CPython 3.11, macOS 15.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 bb8613b01fc8c3f57bb5255221171b7abfa6ce912db66937bb615fa97995789f
MD5 a351db3ba8966a378ab6f69c29e1fc0d
BLAKE2b-256 a428907e3dee11d613a7de2a45097430b6d7bb955e82bb0d5c3846dd9faf19d6

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp310-cp310-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 8.9 MB
  • Tags: CPython 3.10, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b726b0da3eb20487b29b048a8c2266b0dbd24cbdd60f722ef24ef5d71ac44d81
MD5 4f6b92a585c5e293552860cbfcc487d4
BLAKE2b-256 2bea5c1d3f5657750027103ef95db958a57e9087e611f8e8affac04ad259fb06

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp310-cp310-manylinux_2_28_aarch64.whl
  • Upload date:
  • Size: 8.8 MB
  • Tags: CPython 3.10, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 66c47aacd55e27d13590c1f85e39658db5635a785115224b9ace6df2473c3b58
MD5 19a2f666d249726c609de3c18c353a09
BLAKE2b-256 5e3b58786fc00b4b61729ccb0380654d4f82fba2081d037bc0c7ebe63a4bc6c3

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp310-cp310-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 5.5 MB
  • Tags: CPython 3.10, macOS 15.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 549535bbb2bbf9df9ff4f846bd3db2ec343551dc5084836fa6f0e1fc9ca98c28
MD5 4a388660a9cd333d74a08a3b00bf5115
BLAKE2b-256 e0489e42ba213db32e93534b2af9a913c3a9221b12471ddebd98e9042537966f

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp39-cp39-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 8.8 MB
  • Tags: CPython 3.9, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bd3d05bae5f4ca49522fe4f69bd645abfe29780d1ca51429862c973889c0e8d3
MD5 d5364b9d116e9d5e7481fec0aef85501
BLAKE2b-256 2b87a7be8bb77a690f86652eb4f65629ab254c295e561b09c238a39e3348d9e8

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp39-cp39-manylinux_2_28_aarch64.whl
  • Upload date:
  • Size: 8.6 MB
  • Tags: CPython 3.9, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0e9cf3c7732a5696caeff16d087de1de444ff28b2c9a5cd85edc21f3bbdeab96
MD5 301375f67b527e96401e57d4cba71734
BLAKE2b-256 873b84c959466b9fb142e4093dce4c0db60037b38eb9c5931f3ec26f79b06634

See more details on using hashes here.

File details

Details for the file arraymorph-0.2.0b4-cp39-cp39-macosx_15_0_arm64.whl.

File metadata

  • Download URL: arraymorph-0.2.0b4-cp39-cp39-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 5.5 MB
  • Tags: CPython 3.9, macOS 15.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for arraymorph-0.2.0b4-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 cf71ed8438f99df23fc4926d3274a68903628a6f2b3234186eefe9827f6fb4db
MD5 d59c3054dab36c76ce430d7756f25596
BLAKE2b-256 2b125aeab9e24fd2f17fd624dbede17102d2472321271fd6acc95dd73cf147af

See more details on using hashes here.

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