Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions zarr/tests/test_group_v3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import pytest
import numpy as np

from zarr.v3.group import AsyncGroup, Group, GroupMetadata
from zarr.v3.store import LocalStore, StorePath
from zarr.v3.config import RuntimeConfiguration


@pytest.fixture
def store_path(tmpdir):
store = LocalStore(str(tmpdir))
p = StorePath(store)
return p


def test_group(store_path) -> None:

agroup = AsyncGroup(
metadata=GroupMetadata(),
store_path=store_path,
runtime_configuration=RuntimeConfiguration(),
)
group = Group(agroup)

assert agroup.metadata is group.metadata

# create two groups
foo = group.create_group("foo")
bar = foo.create_group("bar", attributes={"baz": "qux"})

# create an array from the "bar" group
data = np.arange(0, 4 * 4, dtype="uint16").reshape((4, 4))
arr = bar.create_array(
"baz", shape=data.shape, dtype=data.dtype, chunk_shape=(2, 2), exists_ok=True
)
arr[:] = data

# check the array
assert arr == bar["baz"]
assert arr.shape == data.shape
assert arr.dtype == data.dtype

# TODO: update this once the array api settles down
# assert arr.chunk_shape == (2, 2)

bar2 = foo["bar"]
assert dict(bar2.attrs) == {"baz": "qux"}

# update a group's attributes
bar2.attrs.update({"name": "bar"})
# bar.attrs was modified in-place
assert dict(bar2.attrs) == {"baz": "qux", "name": "bar"}

# and the attrs were modified in the store
bar3 = foo["bar"]
assert dict(bar3.attrs) == {"baz": "qux", "name": "bar"}
10 changes: 5 additions & 5 deletions zarr/v3/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from zarr.v3.array import Array # noqa: F401
from zarr.v3.array_v2 import ArrayV2 # noqa: F401
from zarr.v3.group import Group # noqa: F401
from zarr.v3.group_v2 import GroupV2 # noqa: F401
from zarr.v3.metadata import RuntimeConfiguration, runtime_configuration # noqa: F401
from zarr.v3.store import ( # noqa: F401
LocalStore,
Expand All @@ -22,18 +21,19 @@
async def open_auto_async(
store: StoreLike,
runtime_configuration_: RuntimeConfiguration = RuntimeConfiguration(),
) -> Union[Array, ArrayV2, Group, GroupV2]:
) -> Union[Array, ArrayV2, Group]:
store_path = make_store_path(store)
try:
return await Group.open_or_array(store_path, runtime_configuration=runtime_configuration_)
return await Array.open(store_path, runtime_configuration=runtime_configuration_)
except KeyError:
return await GroupV2.open_or_array(store_path, runtime_configuration_)
return await Group.open(store_path, runtime_configuration=runtime_configuration_)



def open_auto(
store: StoreLike,
runtime_configuration_: RuntimeConfiguration = RuntimeConfiguration(),
) -> Union[Array, ArrayV2, Group, GroupV2]:
) -> Union[Array, ArrayV2, Group]:
return _sync(
open_auto_async(store, runtime_configuration_),
runtime_configuration_.asyncio_loop,
Expand Down
140 changes: 0 additions & 140 deletions zarr/v3/abc/array.py

This file was deleted.

86 changes: 0 additions & 86 deletions zarr/v3/abc/group.py

This file was deleted.

7 changes: 3 additions & 4 deletions zarr/v3/array.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# Notes on what I've changed here:
# 1. Split Array into AsyncArray and Array
# 2. Inherit from abc (SynchronousArray, AsynchronousArray)
# 3. Added .size and .attrs methods
# 4. Temporarily disabled the creation of ArrayV2
# 5. Added from_json to AsyncArray
Expand All @@ -17,9 +16,9 @@
import numpy as np
from attr import evolve, frozen

from zarr.v3.abc.array import SynchronousArray, AsynchronousArray
from zarr.v3.abc.codec import ArrayBytesCodecPartialDecodeMixin


# from zarr.v3.array_v2 import ArrayV2
from zarr.v3.codecs import CodecMetadata, CodecPipeline, bytes_codec
from zarr.v3.common import (
Expand Down Expand Up @@ -48,7 +47,7 @@


@frozen
class AsyncArray(AsynchronousArray):
class AsyncArray:
metadata: ArrayMetadata
store_path: StorePath
runtime_configuration: RuntimeConfiguration
Expand Down Expand Up @@ -415,7 +414,7 @@ async def info(self):


@frozen
class Array(SynchronousArray):
class Array:
_async_array: AsyncArray

@classmethod
Expand Down
32 changes: 32 additions & 0 deletions zarr/v3/attributes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from __future__ import annotations
from collections.abc import MutableMapping
from typing import TYPE_CHECKING, Any, Union

if TYPE_CHECKING:
from zarr.v3.group import Group
from zarr.v3.array import Array


class Attributes(MutableMapping[str, Any]):
def __init__(self, obj: Union[Array, Group]):
# key=".zattrs", read_only=False, cache=True, synchronizer=None
self._obj = obj

def __getitem__(self, key):
return self._obj.metadata.attributes[key]

def __setitem__(self, key, value):
new_attrs = dict(self._obj.metadata.attributes)
new_attrs[key] = value
self._obj = self._obj.update_attributes(new_attrs)

def __delitem__(self, key):
new_attrs = dict(self._obj.metadata.attributes)
del new_attrs[key]
self._obj = self._obj.update_attributes(new_attrs)

def __iter__(self):
return iter(self._obj.metadata.attributes)

def __len__(self):
return len(self._obj.metadata.attributes)
Loading