Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

eZarr

Easily store any Python object inside zarr hierarchies. This package defines proxies for regular Python lists (EZList) and dicts (EZDict), built as wrappers around zarr Arrays and Groups. It also defines a Protocol for writing and loading any object in zarr hierarchies.

EZList

An EZlist is a proxy for a Python list built on top of a zarr.Array. It allows storing mixed arbitrary objects in a 1 dimensional sequence.

Examples

>>> from ezarr import EZList
>>> from pathlib import Path

# EZList creation from a zarr.Array:
>>> EZList(zarr.array([1, 2, 3]))
EZList[1, 2, 3]

# EZList creation from a list:
>>> data = [1, "some text", Path("some/path.txt")]
>>> ez_list = EZList.from_list(data, store={}, name="data")
                                      #    ~~        ~~~~ a name for the list inside the store
                                      #    |
                                      #    or any zarr StoreLike object to store the list

>>> ez_list
EZList[1, 'some text', PosixPath('some/path.txt')]

# EZLists support general list methods:
>>> ez_list[0]
1

>>> del ez_list[1]
>>> ez_list
EZList[1, PosixPath('some/path.txt')]

>>> ez_list.append(3.14)
>>> ez_list
EZList[1, PosixPath('some/path.txt'), 3.14]

>>> ez_list.insert(0, [1, 2, 3])
>>> ez_list
EZList[[1, 2, 3], 1, PosixPath('/some/path.txt'), 3.14]

# EZList save to zarr store:
>>> ez_list.save("path/to/store", name="saved_list")

# EZList load from zarr store:
>>> EZList.open("path/to/store", name="saved_list")
EZList[[1, 2, 3], 1, PosixPath('/some/path.txt'), 3.14]

# EZList conversion to a regular list:
>>> ez_list.copy()
[[1, 2, 3], 1, PosixPath('some/path.txt'), 3.14]

EZDict

An EZDict is a proxy for a Python dict built on top of a zarr.Group. It expands zarr.Groups to store and retrieve arbitrary objects.

Examples

>>> from ezarr import EZDict

# EZdDct creation for a zarr.Group:
>>> EZDict(zarr.open_group({}))
EZDict{}

# EZDict creation for a dict:
>>> data = {"a": 1, "b": [1, 2, 3], "c": {"d": "some text"}}
>>> ez_dict = EZDict.from_dict(data, store={})
                                    #      ~~ or any zarr StoreLike object to store the dict into                                    #      |

# EZDict lazy representation:
>>> ez_dict
EZDict{
        a: 1,
        b: [1 2 3],
        c: {...}                    # <-- note the nested dict was not loaded for the representation
}

# EZDict save to zarr store:
>>> ez_dict.save("path/to/store", name="saved_dict")

# EZDict load from zarr store:
>>> EZDict.open("path/to/store", name="saved_dict")
EZDict{
        a: 1,
        b: [1 2 3],
        c: {...}
}

# EZDict conversion to a regular dict:
>>> ez_dict.copy()
{'a': np.int64(1), 'b': array([1, 2, 3]), 'c': {'d': np.str_('some text')}}

SupportsEZReadWrite

The SupportsEZReadWrite protocol, once implemented on an object, allows it to be store in and retrieved from a zarr hierarchy.

@runtime_checkable
class SupportsEZRead(Protocol):
    @classmethod
    def __ez_read__(cls, grp: zarr.Group) -> Self: ...


@runtime_checkable
class SupportsEZWrite(Protocol):
    def __ez_write__(self, grp: zarr.Group) -> None: ...


@runtime_checkable
class SupportsEZReadWrite(SupportsEZRead, SupportsEZWrite, Protocol): ...

This protocol has 2 parts:

  • SupportsEZRead defines the classmethod __ez_read__(cls, grp: zarr.Group) -> Self for reconstructing an object from a zarr.Group.
  • SupportsEZWrite defines the method __ez_write__(self, grp: zarr.Group) -> None for storing an object in a zarr.Group.

Once implemented on an object, this protocol allows that object to be automatically saved and loaded in EZLists and EZDicts.

Metadata

Release files for ezarr 1.3.2rc3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ezarr 1.3.2rc3
File Size Uploaded Provenance
ezarr-1.3.2rc3.tar.gz 47.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for ezarr 1.3.2rc3
File Interpreter ABI Platform
ezarr-1.3.2rc3-py3-none-any.whl Python 3 none any Details

Total release size: 110.6 kB

Release files / ezarr-1.3.2rc3.tar.gz

Download URL ezarr-1.3.2rc3.tar.gz
Size 47.6 kB
Tags Source
SHA-256 checksum
How to use checksums
5850a1906ba9ad8b965c2f801c8de3fa54aa4539d32d7c3e8d2ed76124edbfd6
BLAKE2b-256 checksum
How to use checksums
19685e4f5f74d606869aaef3af1e15a8149e71dce11db0a80a83900f9e614471
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Manjaro Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / ezarr-1.3.2rc3-py3-none-any.whl

Download URL ezarr-1.3.2rc3-py3-none-any.whl
Size 63.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f65c59067d1385a5c60f89450a624cda0c945781f73c7c8c7cfb444e4f6b51ed
BLAKE2b-256 checksum
How to use checksums
eff740a6bf0da8d9b1e5924f73bd7c9aebca148448bcf2ce96e810056f2726ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Manjaro Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for ezarr 1.3.2rc3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page