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.0b2.tar.gz (42.4 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.0b2-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.0b2-cp314-cp314-manylinux_2_28_aarch64.whl (8.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14macOS 15.0+ ARM64

arraymorph-0.2.0b2-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.0b2-cp313-cp313-manylinux_2_28_aarch64.whl (8.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13macOS 15.0+ ARM64

arraymorph-0.2.0b2-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.0b2-cp312-cp312-manylinux_2_28_aarch64.whl (8.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.12macOS 15.0+ ARM64

arraymorph-0.2.0b2-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.0b2-cp311-cp311-manylinux_2_28_aarch64.whl (8.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11macOS 15.0+ ARM64

arraymorph-0.2.0b2-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.0b2-cp310-cp310-manylinux_2_28_aarch64.whl (8.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10macOS 15.0+ ARM64

arraymorph-0.2.0b2-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.0b2-cp39-cp39-manylinux_2_28_aarch64.whl (8.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

arraymorph-0.2.0b2-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.0b2.tar.gz.

File metadata

  • Download URL: arraymorph-0.2.0b2.tar.gz
  • Upload date:
  • Size: 42.4 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.0b2.tar.gz
Algorithm Hash digest
SHA256 d426c776c2d8c8d50f8ba75e2327a82b2d990c340459449a8a10c86c23f2156b
MD5 92454c1eb3b0772eff3d87c38050e190
BLAKE2b-256 e55f9e13f6dbecd1f00d65c3bb74045717b022a3eb0318d8084dde3193afb4d9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 606b76f73292fd975c3e14eca894748ea805679134aa17f45f163e4e8dafd489
MD5 3f67d3050d386d28fb0ec38cb5d3c4ce
BLAKE2b-256 5d5efa30a824841f30773328cd418ad5a9d67af73ad986ba6c1f8fa16e5e4d97

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3b23ead24c26b8d6e740ac99b889814632ec863d3fdf0db8f7e5f1014185c62f
MD5 b0122a1e3c0d3c089f9725a7b02b26f5
BLAKE2b-256 c83e974f1ab0e943c4a1b7d5ddfc49bbc248ed82130a9ea72fd339a1f8bb5339

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 50c2a49c2df9062582b5f128747e2cd7a09c4bcfe3ffafda10f12e33b9d5e3be
MD5 99f3550a915faff13074ca2da2087de1
BLAKE2b-256 576639f9eafcb338288d7e68ae0c8545e286eb406b96b2a479cbf9db637f1b0e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 01918427e4c0ae75cd0aa5dab382b14bc18d3a5050e714f63dfe7f71922de38a
MD5 7ce68ec3697aa8e494e7018ee9dd1ecc
BLAKE2b-256 c0f440106309232366f9a4b5b4bb41910f169bee5ecc320263faea5a5d542222

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1151693cba103e57a239203ba938d6de5f3d3e0f8c40e610e61145baedd6117a
MD5 ede85e43282cad4182b99662a2684434
BLAKE2b-256 3c397fe0f35b295de884d4d09401563bd4db148f8af480dabb673631ae4f9c1c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 ed719e22b8bcd253e75d0c12aab4e2b082b5c161f6764889b58e624578d17fb5
MD5 cb95a6e222b7e9d1fe2eea3f0aa858cd
BLAKE2b-256 abe4d672c4d39abaecfe3776827bbd0d9ea31c6a095da15229fd3a7b3b18d1a4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8c867378456875000b6e75d2e4adeaea21675a028a5f893d484a6129c71cb5cc
MD5 10d5261e1d2dc04f0749fb0ef1534b07
BLAKE2b-256 e000bbd74293d460a1ce4bb9532653958b7bbc46453e22d16a4ebc5902ec9bf8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fcc61287b47c24233507e1f82361cf7303b43c6d818f5359c0b49256a939c4a5
MD5 4137f113867ef98f7b63f2694085b518
BLAKE2b-256 e087650ab268a534bdba464b886dcfb8a68692f208a69415366ec2a5e2b5d4a3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 42b7c164cfb8ba9d8233cc16758f54a9f364b42dc337cf781a4129f59f88a2dd
MD5 c5e1939104ca995556cbbe5c3ed10baa
BLAKE2b-256 b33052880ff0eb11eff173b891bf5d73125746df64159c5f055d76a6ba289b69

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c827d8229dc7588a7c405ef053cb1d128a4a8ad9fff6cec7c570dd0aa0e445a2
MD5 878f54fdfd17c06b4572159ef20c54f4
BLAKE2b-256 19bc57c7eaf415a359a3faf03247ff50bdc1f8412d24ab699956058a02b7cd69

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3fa010186ff3b47cedcdaeb43a0c4d8c21225124be324f5f35f2a3ba081d799d
MD5 cd18decfaa38ea502069150c3b6849c9
BLAKE2b-256 665c4035d734a4d2d8651a2f878c1d20a9b596465a74e56176be4edd09df0986

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 5bef26ee7a5bedba8811a423334f0fe15cd463fbbfa58dd40e7a4ed322b5fe3f
MD5 679681c8906db39eaeecc3203b6d46d7
BLAKE2b-256 bdd3048372db8f3a9b73fa8fd1b76ea74a88c2dd1b0c9572a7d69b3f85beecd3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 36e4231903b3ebf8fcd66ac13f844ba325344800757cdbea23022fe2130d5ddd
MD5 4c7081f16d766c0fbd31296a2b2c09a7
BLAKE2b-256 f1ec216277a2e3226be338a27c2ae85e3bdfe37cde7de99e161f01984283f74a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 916f5cc0527d99722cfbbf4f39f976cba3190fcf00a0ffc6f2d4088141998384
MD5 d158372278723d935c95cdc590c6facb
BLAKE2b-256 063fd9ca34c00dae22a0fc8b5fd174e32ffe11932f0dc58849207c5ff2099585

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e6bcfa25ba8e6bad58d7511ea8f9a67fa82d2eb55e4a80f36562e3baeea7a50c
MD5 a37fec77d04c09040c2ad8a4990f48c5
BLAKE2b-256 707417c9e5e8f756db113c99cfe83192c6ad6f98adeb2f68355a7dcc9ae4fce5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b2533317f6942fa56d0f24e1fd36ff159f37685dda65a59d83585f3ced9584ca
MD5 a558648ce76b4fa7094d5cc8131302cd
BLAKE2b-256 04f04fec1a51ef15ef416f76e1525ae49a8a9556be428d99b51e0934b1a57c5b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 35496c603697e79b572e8004ec00911927828a2c39be3311c38462cec9c8fe49
MD5 2d07add4288eedc1a3d6848a8bd74802
BLAKE2b-256 4087081d7842bac398eac1d2714f475e4b782a9309527e146ab93aa7b871a494

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arraymorph-0.2.0b2-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.0b2-cp39-cp39-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 da2df18c2f34850ce8045fb8c09c918f9848822c0a80501ba7e490f4b4a7d3a8
MD5 49ba9904d1f7a7db676d8dd359158531
BLAKE2b-256 0474707100f67fcbe43696ab5c6d2d233ac870282d497020db93571a3bad57b1

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