diff --git a/src/zarr/__init__.py b/src/zarr/__init__.py index 227b0cf63e..0259672f74 100644 --- a/src/zarr/__init__.py +++ b/src/zarr/__init__.py @@ -26,9 +26,9 @@ zeros, zeros_like, ) -from zarr.array import Array, AsyncArray -from zarr.config import config -from zarr.group import AsyncGroup, Group +from zarr.core.array import Array, AsyncArray +from zarr.core.config import config +from zarr.core.group import AsyncGroup, Group # in case setuptools scm screw up and find version to be 0.0.0 assert not __version__.startswith("0.0.0") diff --git a/src/zarr/abc/codec.py b/src/zarr/abc/codec.py index 9223019fab..fa76399f90 100644 --- a/src/zarr/abc/codec.py +++ b/src/zarr/abc/codec.py @@ -8,17 +8,28 @@ from zarr.abc.metadata import Metadata from zarr.abc.store import ByteGetter, ByteSetter -from zarr.buffer import Buffer, NDBuffer -from zarr.chunk_grids import ChunkGrid -from zarr.common import ChunkCoords, concurrent_map -from zarr.config import config +from zarr.core.buffer import Buffer, NDBuffer +from zarr.core.chunk_grids import ChunkGrid +from zarr.core.common import ChunkCoords, concurrent_map +from zarr.core.config import config if TYPE_CHECKING: from typing_extensions import Self - from zarr.array_spec import ArraySpec - from zarr.common import JSON - from zarr.indexing import SelectorTuple + from zarr.core.array_spec import ArraySpec + from zarr.core.common import JSON + from zarr.core.indexing import SelectorTuple + +__all__ = [ + "CodecInput", + "CodecOutput", + "ArrayArrayCodec", + "ArrayBytesCodec", + "BytesBytesCodec", + "ArrayBytesCodecPartialDecodeMixin", + "ArrayBytesCodecPartialEncodeMixin", + "CodecPipeline", +] CodecInput = TypeVar("CodecInput", bound=NDBuffer | Buffer) CodecOutput = TypeVar("CodecOutput", bound=NDBuffer | Buffer) @@ -112,7 +123,7 @@ async def decode( ------- Iterable[CodecInput | None] """ - return await batching_helper(self._decode_single, chunks_and_specs) + return await _batching_helper(self._decode_single, chunks_and_specs) async def _encode_single( self, chunk_data: CodecInput, chunk_spec: ArraySpec @@ -135,7 +146,7 @@ async def encode( ------- Iterable[CodecOutput | None] """ - return await batching_helper(self._encode_single, chunks_and_specs) + return await _batching_helper(self._encode_single, chunks_and_specs) class ArrayArrayCodec(_Codec[NDBuffer, NDBuffer]): @@ -401,18 +412,18 @@ def from_dict(cls, data: Iterable[JSON | Codec]) -> Self: return cls(**data) -async def batching_helper( +async def _batching_helper( func: Callable[[CodecInput, ArraySpec], Awaitable[CodecOutput | None]], batch_info: Iterable[tuple[CodecInput | None, ArraySpec]], ) -> list[CodecOutput | None]: return await concurrent_map( list(batch_info), - noop_for_none(func), + _noop_for_none(func), config.get("async.concurrency"), ) -def noop_for_none( +def _noop_for_none( func: Callable[[CodecInput, ArraySpec], Awaitable[CodecOutput | None]], ) -> Callable[[CodecInput | None, ArraySpec], Awaitable[CodecOutput | None]]: async def wrap(chunk: CodecInput | None, chunk_spec: ArraySpec) -> CodecOutput | None: diff --git a/src/zarr/abc/metadata.py b/src/zarr/abc/metadata.py index a14ffb8ce9..0ddf762766 100644 --- a/src/zarr/abc/metadata.py +++ b/src/zarr/abc/metadata.py @@ -8,7 +8,9 @@ from dataclasses import dataclass, fields -from zarr.common import JSON +from zarr.core.common import JSON + +__all__ = ["Metadata"] @dataclass(frozen=True) diff --git a/src/zarr/abc/store.py b/src/zarr/abc/store.py index 449816209b..00b81a3aad 100644 --- a/src/zarr/abc/store.py +++ b/src/zarr/abc/store.py @@ -4,8 +4,10 @@ from typing_extensions import Self -from zarr.buffer import Buffer, BufferPrototype -from zarr.common import AccessModeLiteral, BytesLike +from zarr.core.buffer import Buffer, BufferPrototype +from zarr.core.common import AccessModeLiteral, BytesLike + +__all__ = ["Store", "AccessMode", "ByteGetter", "ByteSetter", "set_or_delete"] class AccessMode(NamedTuple): diff --git a/src/zarr/api/asynchronous.py b/src/zarr/api/asynchronous.py index a7171b4915..ad89584b44 100644 --- a/src/zarr/api/asynchronous.py +++ b/src/zarr/api/asynchronous.py @@ -9,17 +9,45 @@ import numpy.typing as npt from zarr.abc.codec import Codec -from zarr.array import Array, AsyncArray -from zarr.buffer import NDArrayLike -from zarr.chunk_key_encodings import ChunkKeyEncoding -from zarr.common import JSON, AccessModeLiteral, ChunkCoords, MemoryOrder, ZarrFormat -from zarr.group import AsyncGroup -from zarr.metadata import ArrayV2Metadata, ArrayV3Metadata +from zarr.core.array import Array, AsyncArray +from zarr.core.buffer import NDArrayLike +from zarr.core.chunk_key_encodings import ChunkKeyEncoding +from zarr.core.common import JSON, AccessModeLiteral, ChunkCoords, MemoryOrder, ZarrFormat +from zarr.core.group import AsyncGroup +from zarr.core.metadata import ArrayV2Metadata, ArrayV3Metadata from zarr.store import ( StoreLike, make_store_path, ) +__all__ = [ + "consolidate_metadata", + "copy", + "copy_all", + "copy_store", + "load", + "open", + "open_consolidated", + "save", + "save_array", + "save_group", + "tree", + "array", + "group", + "open_group", + "create", + "empty", + "empty_like", + "full", + "full_like", + "ones", + "ones_like", + "open_array", + "open_like", + "zeros", + "zeros_like", +] + # TODO: this type could use some more thought, noqa to avoid "Variable "asynchronous.ArrayLike" is not valid as a type" ArrayLike = Union[AsyncArray | Array | npt.NDArray[Any]] # noqa PathLike = str diff --git a/src/zarr/api/synchronous.py b/src/zarr/api/synchronous.py index eef87aab7e..d3d674c3fd 100644 --- a/src/zarr/api/synchronous.py +++ b/src/zarr/api/synchronous.py @@ -3,12 +3,40 @@ from typing import Any import zarr.api.asynchronous as async_api -from zarr.array import Array, AsyncArray -from zarr.buffer import NDArrayLike -from zarr.common import JSON, AccessModeLiteral, ChunkCoords, ZarrFormat -from zarr.group import Group +from zarr.core.array import Array, AsyncArray +from zarr.core.buffer import NDArrayLike +from zarr.core.common import JSON, AccessModeLiteral, ChunkCoords, ZarrFormat +from zarr.core.group import Group +from zarr.core.sync import sync from zarr.store import StoreLike -from zarr.sync import sync + +__all__ = [ + "consolidate_metadata", + "copy", + "copy_all", + "copy_store", + "load", + "open", + "open_consolidated", + "save", + "save_array", + "save_group", + "tree", + "array", + "group", + "open_group", + "create", + "empty", + "empty_like", + "full", + "full_like", + "ones", + "ones_like", + "open_array", + "open_like", + "zeros", + "zeros_like", +] def consolidate_metadata(*args: Any, **kwargs: Any) -> Group: diff --git a/src/zarr/codecs/_v2.py b/src/zarr/codecs/_v2.py index 60854bee34..3dc5c8e4a7 100644 --- a/src/zarr/codecs/_v2.py +++ b/src/zarr/codecs/_v2.py @@ -6,9 +6,9 @@ from numcodecs.compat import ensure_bytes, ensure_ndarray from zarr.abc.codec import ArrayArrayCodec, ArrayBytesCodec -from zarr.array_spec import ArraySpec -from zarr.buffer import Buffer, NDBuffer, default_buffer_prototype -from zarr.common import JSON, to_thread +from zarr.core.array_spec import ArraySpec +from zarr.core.buffer import Buffer, NDBuffer, default_buffer_prototype +from zarr.core.common import JSON, to_thread from zarr.registry import get_ndbuffer_class diff --git a/src/zarr/codecs/blosc.py b/src/zarr/codecs/blosc.py index d03ecbcbf2..8e01524992 100644 --- a/src/zarr/codecs/blosc.py +++ b/src/zarr/codecs/blosc.py @@ -9,9 +9,9 @@ from numcodecs.blosc import Blosc from zarr.abc.codec import BytesBytesCodec -from zarr.array_spec import ArraySpec -from zarr.buffer import Buffer, as_numpy_array_wrapper -from zarr.common import JSON, parse_enum, parse_named_configuration, to_thread +from zarr.core.array_spec import ArraySpec +from zarr.core.buffer import Buffer, as_numpy_array_wrapper +from zarr.core.common import JSON, parse_enum, parse_named_configuration, to_thread from zarr.registry import register_codec if TYPE_CHECKING: diff --git a/src/zarr/codecs/bytes.py b/src/zarr/codecs/bytes.py index 1fe9d900eb..c2ef0ee4f6 100644 --- a/src/zarr/codecs/bytes.py +++ b/src/zarr/codecs/bytes.py @@ -8,9 +8,9 @@ import numpy as np from zarr.abc.codec import ArrayBytesCodec -from zarr.array_spec import ArraySpec -from zarr.buffer import Buffer, NDArrayLike, NDBuffer -from zarr.common import JSON, parse_enum, parse_named_configuration +from zarr.core.array_spec import ArraySpec +from zarr.core.buffer import Buffer, NDArrayLike, NDBuffer +from zarr.core.common import JSON, parse_enum, parse_named_configuration from zarr.registry import register_codec if TYPE_CHECKING: diff --git a/src/zarr/codecs/crc32c_.py b/src/zarr/codecs/crc32c_.py index 5c94558b00..d40b95ef0c 100644 --- a/src/zarr/codecs/crc32c_.py +++ b/src/zarr/codecs/crc32c_.py @@ -7,9 +7,9 @@ from crc32c import crc32c from zarr.abc.codec import BytesBytesCodec -from zarr.array_spec import ArraySpec -from zarr.buffer import Buffer -from zarr.common import JSON, parse_named_configuration +from zarr.core.array_spec import ArraySpec +from zarr.core.buffer import Buffer +from zarr.core.common import JSON, parse_named_configuration from zarr.registry import register_codec if TYPE_CHECKING: diff --git a/src/zarr/codecs/gzip.py b/src/zarr/codecs/gzip.py index 915ae79832..bab81a104b 100644 --- a/src/zarr/codecs/gzip.py +++ b/src/zarr/codecs/gzip.py @@ -6,9 +6,9 @@ from numcodecs.gzip import GZip from zarr.abc.codec import BytesBytesCodec -from zarr.array_spec import ArraySpec -from zarr.buffer import Buffer, as_numpy_array_wrapper -from zarr.common import JSON, parse_named_configuration, to_thread +from zarr.core.array_spec import ArraySpec +from zarr.core.buffer import Buffer, as_numpy_array_wrapper +from zarr.core.common import JSON, parse_named_configuration, to_thread from zarr.registry import register_codec if TYPE_CHECKING: diff --git a/src/zarr/codecs/pipeline.py b/src/zarr/codecs/pipeline.py index 1582cd6adb..9c615d3d2c 100644 --- a/src/zarr/codecs/pipeline.py +++ b/src/zarr/codecs/pipeline.py @@ -18,17 +18,17 @@ CodecPipeline, ) from zarr.abc.store import ByteGetter, ByteSetter -from zarr.buffer import Buffer, BufferPrototype, NDBuffer -from zarr.chunk_grids import ChunkGrid -from zarr.common import JSON, ChunkCoords, concurrent_map, parse_named_configuration -from zarr.config import config -from zarr.indexing import SelectorTuple, is_scalar, is_total_slice +from zarr.core.buffer import Buffer, BufferPrototype, NDBuffer +from zarr.core.chunk_grids import ChunkGrid +from zarr.core.common import JSON, ChunkCoords, concurrent_map, parse_named_configuration +from zarr.core.config import config +from zarr.core.indexing import SelectorTuple, is_scalar, is_total_slice from zarr.registry import get_codec_class, register_pipeline if TYPE_CHECKING: from typing_extensions import Self - from zarr.array_spec import ArraySpec + from zarr.core.array_spec import ArraySpec T = TypeVar("T") U = TypeVar("U") diff --git a/src/zarr/codecs/sharding.py b/src/zarr/codecs/sharding.py index be236beff1..fa706f57c7 100644 --- a/src/zarr/codecs/sharding.py +++ b/src/zarr/codecs/sharding.py @@ -18,18 +18,18 @@ CodecPipeline, ) from zarr.abc.store import ByteGetter, ByteSetter -from zarr.array_spec import ArraySpec -from zarr.buffer import ( +from zarr.codecs.bytes import BytesCodec +from zarr.codecs.crc32c_ import Crc32cCodec +from zarr.core.array_spec import ArraySpec +from zarr.core.buffer import ( Buffer, BufferPrototype, NDBuffer, default_buffer_prototype, numpy_buffer_prototype, ) -from zarr.chunk_grids import ChunkGrid, RegularChunkGrid -from zarr.codecs.bytes import BytesCodec -from zarr.codecs.crc32c_ import Crc32cCodec -from zarr.common import ( +from zarr.core.chunk_grids import ChunkGrid, RegularChunkGrid +from zarr.core.common import ( ChunkCoords, ChunkCoordsLike, parse_enum, @@ -37,8 +37,14 @@ parse_shapelike, product, ) -from zarr.indexing import BasicIndexer, SelectorTuple, c_order_iter, get_indexer, morton_order_iter -from zarr.metadata import parse_codecs +from zarr.core.indexing import ( + BasicIndexer, + SelectorTuple, + c_order_iter, + get_indexer, + morton_order_iter, +) +from zarr.core.metadata import parse_codecs from zarr.registry import get_ndbuffer_class, get_pipeline_class, register_codec if TYPE_CHECKING: @@ -46,7 +52,7 @@ from typing_extensions import Self - from zarr.common import JSON + from zarr.core.common import JSON MAX_UINT_64 = 2**64 - 1 ShardMapping = Mapping[ChunkCoords, Buffer] diff --git a/src/zarr/codecs/transpose.py b/src/zarr/codecs/transpose.py index 3f9ae61676..ada45b1b53 100644 --- a/src/zarr/codecs/transpose.py +++ b/src/zarr/codecs/transpose.py @@ -7,10 +7,10 @@ import numpy as np from zarr.abc.codec import ArrayArrayCodec -from zarr.array_spec import ArraySpec -from zarr.buffer import NDBuffer -from zarr.chunk_grids import ChunkGrid -from zarr.common import JSON, ChunkCoordsLike, parse_named_configuration +from zarr.core.array_spec import ArraySpec +from zarr.core.buffer import NDBuffer +from zarr.core.chunk_grids import ChunkGrid +from zarr.core.common import JSON, ChunkCoordsLike, parse_named_configuration from zarr.registry import register_codec if TYPE_CHECKING: diff --git a/src/zarr/codecs/zstd.py b/src/zarr/codecs/zstd.py index 3b3d3f33dd..92a2665425 100644 --- a/src/zarr/codecs/zstd.py +++ b/src/zarr/codecs/zstd.py @@ -8,9 +8,9 @@ from numcodecs.zstd import Zstd from zarr.abc.codec import BytesBytesCodec -from zarr.array_spec import ArraySpec -from zarr.buffer import Buffer, as_numpy_array_wrapper -from zarr.common import JSON, parse_named_configuration, to_thread +from zarr.core.array_spec import ArraySpec +from zarr.core.buffer import Buffer, as_numpy_array_wrapper +from zarr.core.common import JSON, parse_named_configuration, to_thread from zarr.registry import register_codec if TYPE_CHECKING: diff --git a/src/zarr/convenience.py b/src/zarr/convenience.py index be0a6b2813..f0ff602d07 100644 --- a/src/zarr/convenience.py +++ b/src/zarr/convenience.py @@ -14,22 +14,22 @@ tree, ) -warnings.warn( - "zarr.convenience is deprecated, use zarr.api.synchronous", - DeprecationWarning, - stacklevel=2, -) - __all__ = [ "open", - "save_array", - "save_group", "save", "load", - "tree", - "copy_store", + "save_array", + "save_group", "copy", "copy_all", + "copy_store", + "tree", "consolidate_metadata", "open_consolidated", ] + +warnings.warn( + "zarr.convenience is deprecated, use zarr.api.synchronous", + DeprecationWarning, + stacklevel=2, +) diff --git a/src/zarr/core/__init__.py b/src/zarr/core/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/zarr/array.py b/src/zarr/core/array.py similarity index 98% rename from src/zarr/array.py rename to src/zarr/core/array.py index 7aaf9e15ba..3738b0859b 100644 --- a/src/zarr/array.py +++ b/src/zarr/core/array.py @@ -1,14 +1,6 @@ from __future__ import annotations import json - -# Notes on what I've changed here: -# 1. Split Array into AsyncArray and Array -# 3. Added .size and .attrs methods -# 4. Temporarily disabled the creation of ArrayV2 -# 5. Added from_dict to AsyncArray -# Questions to consider: -# 1. Was splitting the array into two classes really necessary? from asyncio import gather from collections.abc import Iterable from dataclasses import dataclass, field, replace @@ -19,13 +11,17 @@ from zarr.abc.codec import Codec, CodecPipeline from zarr.abc.store import set_or_delete -from zarr.attributes import Attributes -from zarr.buffer import BufferPrototype, NDArrayLike, NDBuffer, default_buffer_prototype -from zarr.chunk_grids import RegularChunkGrid, _guess_chunks -from zarr.chunk_key_encodings import ChunkKeyEncoding, DefaultChunkKeyEncoding, V2ChunkKeyEncoding from zarr.codecs import BytesCodec from zarr.codecs._v2 import V2Compressor, V2Filters -from zarr.common import ( +from zarr.core.attributes import Attributes +from zarr.core.buffer import BufferPrototype, NDArrayLike, NDBuffer, default_buffer_prototype +from zarr.core.chunk_grids import RegularChunkGrid, _guess_chunks +from zarr.core.chunk_key_encodings import ( + ChunkKeyEncoding, + DefaultChunkKeyEncoding, + V2ChunkKeyEncoding, +) +from zarr.core.common import ( JSON, ZARR_JSON, ZARRAY_JSON, @@ -35,8 +31,8 @@ concurrent_map, product, ) -from zarr.config import config, parse_indexing_order -from zarr.indexing import ( +from zarr.core.config import config, parse_indexing_order +from zarr.core.indexing import ( BasicIndexer, BasicSelection, BlockIndex, @@ -59,13 +55,13 @@ is_scalar, pop_fields, ) -from zarr.metadata import ArrayMetadata, ArrayV2Metadata, ArrayV3Metadata +from zarr.core.metadata import ArrayMetadata, ArrayV2Metadata, ArrayV3Metadata +from zarr.core.sync import sync from zarr.registry import get_pipeline_class from zarr.store import StoreLike, StorePath, make_store_path -from zarr.store.core import ( +from zarr.store.common import ( ensure_no_existing_node, ) -from zarr.sync import sync def parse_array_metadata(data: Any) -> ArrayV2Metadata | ArrayV3Metadata: diff --git a/src/zarr/array_spec.py b/src/zarr/core/array_spec.py similarity index 80% rename from src/zarr/array_spec.py rename to src/zarr/core/array_spec.py index d5717944b4..d2f46057e4 100644 --- a/src/zarr/array_spec.py +++ b/src/zarr/core/array_spec.py @@ -1,12 +1,15 @@ from __future__ import annotations from dataclasses import dataclass -from typing import Any, Literal +from typing import TYPE_CHECKING, Any, Literal import numpy as np -from zarr.buffer import BufferPrototype -from zarr.common import ChunkCoords, parse_dtype, parse_fill_value, parse_order, parse_shapelike +from zarr.core.common import parse_dtype, parse_fill_value, parse_order, parse_shapelike + +if TYPE_CHECKING: + from zarr.core.buffer import BufferPrototype + from zarr.core.common import ChunkCoords @dataclass(frozen=True) diff --git a/src/zarr/attributes.py b/src/zarr/core/attributes.py similarity index 82% rename from src/zarr/attributes.py rename to src/zarr/core/attributes.py index 079ae38a33..09677f7bdc 100644 --- a/src/zarr/attributes.py +++ b/src/zarr/core/attributes.py @@ -1,13 +1,15 @@ from __future__ import annotations -from collections.abc import Iterator, MutableMapping +from collections.abc import MutableMapping from typing import TYPE_CHECKING -from zarr.common import JSON +from zarr.core.common import JSON if TYPE_CHECKING: - from zarr.array import Array - from zarr.group import Group + from collections.abc import Iterator + + from zarr.core.array import Array + from zarr.core.group import Group class Attributes(MutableMapping[str, JSON]): diff --git a/src/zarr/buffer.py b/src/zarr/core/buffer.py similarity index 99% rename from src/zarr/buffer.py rename to src/zarr/core/buffer.py index 9c75ba1410..50252590dd 100644 --- a/src/zarr/buffer.py +++ b/src/zarr/core/buffer.py @@ -15,7 +15,7 @@ import numpy as np import numpy.typing as npt -from zarr.common import ChunkCoords +from zarr.core.common import ChunkCoords from zarr.registry import ( get_buffer_class, get_ndbuffer_class, @@ -27,7 +27,7 @@ from typing_extensions import Self from zarr.codecs.bytes import Endian - from zarr.common import BytesLike + from zarr.core.common import BytesLike @runtime_checkable diff --git a/src/zarr/chunk_grids.py b/src/zarr/core/chunk_grids.py similarity index 98% rename from src/zarr/chunk_grids.py rename to src/zarr/core/chunk_grids.py index b494a3e5e8..f912872251 100644 --- a/src/zarr/chunk_grids.py +++ b/src/zarr/core/chunk_grids.py @@ -12,14 +12,14 @@ import numpy as np from zarr.abc.metadata import Metadata -from zarr.common import ( +from zarr.core.common import ( JSON, ChunkCoords, ChunkCoordsLike, parse_named_configuration, parse_shapelike, ) -from zarr.indexing import ceildiv +from zarr.core.indexing import ceildiv if TYPE_CHECKING: from typing_extensions import Self diff --git a/src/zarr/chunk_key_encodings.py b/src/zarr/core/chunk_key_encodings.py similarity index 98% rename from src/zarr/chunk_key_encodings.py rename to src/zarr/core/chunk_key_encodings.py index 30db8ff5a8..45174bf4af 100644 --- a/src/zarr/chunk_key_encodings.py +++ b/src/zarr/core/chunk_key_encodings.py @@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, Literal, cast from zarr.abc.metadata import Metadata -from zarr.common import ( +from zarr.core.common import ( JSON, ChunkCoords, parse_named_configuration, diff --git a/src/zarr/common.py b/src/zarr/core/common.py similarity index 100% rename from src/zarr/common.py rename to src/zarr/core/common.py diff --git a/src/zarr/config.py b/src/zarr/core/config.py similarity index 96% rename from src/zarr/config.py rename to src/zarr/core/config.py index ec78747a6b..67f5c74347 100644 --- a/src/zarr/config.py +++ b/src/zarr/core/config.py @@ -60,8 +60,8 @@ def reset(self) -> None: "sharding_indexed": "zarr.codecs.sharding.ShardingCodec", "transpose": "zarr.codecs.transpose.TransposeCodec", }, - "buffer": "zarr.buffer.Buffer", - "ndbuffer": "zarr.buffer.NDBuffer", + "buffer": "zarr.core.buffer.Buffer", + "ndbuffer": "zarr.core.buffer.NDBuffer", } ], ) diff --git a/src/zarr/group.py b/src/zarr/core/group.py similarity index 98% rename from src/zarr/group.py rename to src/zarr/core/group.py index a02fa6196a..86d27e3a97 100644 --- a/src/zarr/group.py +++ b/src/zarr/core/group.py @@ -13,11 +13,11 @@ from zarr.abc.codec import Codec from zarr.abc.metadata import Metadata from zarr.abc.store import set_or_delete -from zarr.array import Array, AsyncArray -from zarr.attributes import Attributes -from zarr.buffer import Buffer, BufferPrototype, default_buffer_prototype -from zarr.chunk_key_encodings import ChunkKeyEncoding -from zarr.common import ( +from zarr.core.array import Array, AsyncArray +from zarr.core.attributes import Attributes +from zarr.core.buffer import default_buffer_prototype +from zarr.core.chunk_key_encodings import ChunkKeyEncoding +from zarr.core.common import ( JSON, ZARR_JSON, ZARRAY_JSON, @@ -26,15 +26,17 @@ ChunkCoords, ZarrFormat, ) -from zarr.config import config +from zarr.core.config import config +from zarr.core.sync import SyncMixin, sync from zarr.store import StoreLike, StorePath, make_store_path -from zarr.store.core import ensure_no_existing_node -from zarr.sync import SyncMixin, sync +from zarr.store.common import ensure_no_existing_node if TYPE_CHECKING: from collections.abc import AsyncGenerator, Iterable from typing import Any + from zarr.core.buffer import Buffer, BufferPrototype + logger = logging.getLogger("zarr.group") diff --git a/src/zarr/indexing.py b/src/zarr/core/indexing.py similarity index 99% rename from src/zarr/indexing.py rename to src/zarr/core/indexing.py index 6987f69c11..153483330c 100644 --- a/src/zarr/indexing.py +++ b/src/zarr/core/indexing.py @@ -23,12 +23,13 @@ import numpy as np import numpy.typing as npt -from zarr.buffer import NDArrayLike -from zarr.common import ChunkCoords, product +from zarr.core.buffer import NDArrayLike +from zarr.core.common import product if TYPE_CHECKING: - from zarr.array import Array - from zarr.chunk_grids import ChunkGrid + from zarr.core.array import Array + from zarr.core.chunk_grids import ChunkGrid + from zarr.core.common import ChunkCoords IntSequence = list[int] | npt.NDArray[np.intp] ArrayOfIntOrBool = npt.NDArray[np.intp] | npt.NDArray[np.bool_] @@ -197,7 +198,7 @@ def is_pure_orthogonal_indexing(selection: Selection, ndim: int) -> TypeGuard[Or def get_chunk_shape(chunk_grid: ChunkGrid) -> ChunkCoords: - from zarr.chunk_grids import RegularChunkGrid + from zarr.core.chunk_grids import RegularChunkGrid assert isinstance( chunk_grid, RegularChunkGrid diff --git a/src/zarr/metadata.py b/src/zarr/core/metadata.py similarity index 98% rename from src/zarr/metadata.py rename to src/zarr/core/metadata.py index e801a6f966..d541e43205 100644 --- a/src/zarr/metadata.py +++ b/src/zarr/core/metadata.py @@ -12,10 +12,9 @@ from zarr.abc.codec import ArrayArrayCodec, ArrayBytesCodec, BytesBytesCodec, Codec, CodecPipeline from zarr.abc.metadata import Metadata -from zarr.buffer import Buffer, BufferPrototype, default_buffer_prototype -from zarr.chunk_grids import ChunkGrid, RegularChunkGrid -from zarr.chunk_key_encodings import ChunkKeyEncoding, parse_separator -from zarr.config import config +from zarr.core.buffer import Buffer, BufferPrototype, default_buffer_prototype +from zarr.core.chunk_grids import ChunkGrid, RegularChunkGrid +from zarr.core.chunk_key_encodings import ChunkKeyEncoding, parse_separator from zarr.registry import get_codec_class, get_pipeline_class if TYPE_CHECKING: @@ -23,8 +22,8 @@ import numcodecs.abc -from zarr.array_spec import ArraySpec -from zarr.common import ( +from zarr.core.array_spec import ArraySpec +from zarr.core.common import ( JSON, ZARR_JSON, ZARRAY_JSON, @@ -35,7 +34,7 @@ parse_named_configuration, parse_shapelike, ) -from zarr.config import parse_indexing_order +from zarr.core.config import config, parse_indexing_order # For type checking _bool = bool diff --git a/src/zarr/sync.py b/src/zarr/core/sync.py similarity index 99% rename from src/zarr/sync.py rename to src/zarr/core/sync.py index 8af14f602e..ff7f9a43af 100644 --- a/src/zarr/sync.py +++ b/src/zarr/core/sync.py @@ -1,18 +1,17 @@ from __future__ import annotations -from typing import TYPE_CHECKING, TypeVar - -if TYPE_CHECKING: - from collections.abc import AsyncIterator, Coroutine - from typing import Any - import asyncio import threading from concurrent.futures import wait +from typing import TYPE_CHECKING, TypeVar from typing_extensions import ParamSpec -from zarr.config import config +from zarr.core.config import config + +if TYPE_CHECKING: + from collections.abc import AsyncIterator, Coroutine + from typing import Any P = ParamSpec("P") T = TypeVar("T") diff --git a/src/zarr/creation.py b/src/zarr/creation.py index df3f764610..aa4b5a8088 100644 --- a/src/zarr/creation.py +++ b/src/zarr/creation.py @@ -15,12 +15,6 @@ zeros_like, ) -warnings.warn( - "zarr.creation is deprecated, use zarr.api.synchronous", - DeprecationWarning, - stacklevel=2, -) - __all__ = [ "create", "empty", @@ -35,3 +29,9 @@ "full_like", "open_like", ] + +warnings.warn( + "zarr.creation is deprecated, use zarr.api.synchronous", + DeprecationWarning, + stacklevel=2, +) diff --git a/src/zarr/errors.py b/src/zarr/errors.py index 140229b2eb..f6321e474b 100644 --- a/src/zarr/errors.py +++ b/src/zarr/errors.py @@ -23,3 +23,10 @@ class ContainsArrayAndGroupError(_BaseZarrError): "Only one of these files may be present in a given directory / prefix. " "Remove the .zarray file, or the .zgroup file, or both." ) + + +__all__ = [ + "ContainsGroupError", + "ContainsArrayError", + "ContainsArrayAndGroupError", +] diff --git a/src/zarr/registry.py b/src/zarr/registry.py index ac373f401d..cde3b7d848 100644 --- a/src/zarr/registry.py +++ b/src/zarr/registry.py @@ -2,16 +2,28 @@ import warnings from collections import defaultdict +from importlib.metadata import entry_points as get_entry_points from typing import TYPE_CHECKING, Any, Generic, TypeVar -if TYPE_CHECKING: - from zarr.abc.codec import Codec, CodecPipeline - from zarr.buffer import Buffer, NDBuffer +from zarr.core.config import BadConfigError, config -from importlib.metadata import EntryPoint -from importlib.metadata import entry_points as get_entry_points +if TYPE_CHECKING: + from importlib.metadata import EntryPoint -from zarr.config import BadConfigError, config + from zarr.abc.codec import Codec, CodecPipeline + from zarr.core.buffer import Buffer, NDBuffer + +__all__ = [ + "Registry", + "register_codec", + "register_pipeline", + "register_buffer", + "register_ndbuffer", + "get_codec_class", + "get_pipeline_class", + "get_buffer_class", + "get_ndbuffer_class", +] T = TypeVar("T") diff --git a/src/zarr/store/__init__.py b/src/zarr/store/__init__.py index fbdcdb9255..3a9e8201e8 100644 --- a/src/zarr/store/__init__.py +++ b/src/zarr/store/__init__.py @@ -1,4 +1,4 @@ -from zarr.store.core import StoreLike, StorePath, make_store_path +from zarr.store.common import StoreLike, StorePath, make_store_path from zarr.store.local import LocalStore from zarr.store.memory import MemoryStore from zarr.store.remote import RemoteStore diff --git a/src/zarr/store/utils.py b/src/zarr/store/_utils.py similarity index 94% rename from src/zarr/store/utils.py rename to src/zarr/store/_utils.py index 17c9234221..04a06351c5 100644 --- a/src/zarr/store/utils.py +++ b/src/zarr/store/_utils.py @@ -1,4 +1,4 @@ -from zarr.buffer import Buffer +from zarr.core.buffer import Buffer def _normalize_interval_index( diff --git a/src/zarr/store/core.py b/src/zarr/store/common.py similarity index 96% rename from src/zarr/store/core.py rename to src/zarr/store/common.py index 4d31118a54..6a88de7760 100644 --- a/src/zarr/store/core.py +++ b/src/zarr/store/common.py @@ -2,15 +2,19 @@ import json from pathlib import Path -from typing import Any, Literal +from typing import TYPE_CHECKING, Any, Literal from zarr.abc.store import AccessMode, Store -from zarr.buffer import Buffer, BufferPrototype, default_buffer_prototype -from zarr.common import ZARR_JSON, ZARRAY_JSON, ZGROUP_JSON, AccessModeLiteral, ZarrFormat +from zarr.core.buffer import Buffer, default_buffer_prototype +from zarr.core.common import ZARR_JSON, ZARRAY_JSON, ZGROUP_JSON, ZarrFormat from zarr.errors import ContainsArrayAndGroupError, ContainsArrayError, ContainsGroupError from zarr.store.local import LocalStore from zarr.store.memory import MemoryStore +if TYPE_CHECKING: + from zarr.core.buffer import BufferPrototype + from zarr.core.common import AccessModeLiteral + def _dereference_path(root: str, path: str) -> str: assert isinstance(root, str) diff --git a/src/zarr/store/local.py b/src/zarr/store/local.py index 3cc42c6c0e..6510305844 100644 --- a/src/zarr/store/local.py +++ b/src/zarr/store/local.py @@ -5,10 +5,15 @@ import shutil from collections.abc import AsyncGenerator from pathlib import Path +from typing import TYPE_CHECKING from zarr.abc.store import Store -from zarr.buffer import Buffer, BufferPrototype -from zarr.common import AccessModeLiteral, concurrent_map, to_thread +from zarr.core.buffer import Buffer +from zarr.core.common import concurrent_map, to_thread + +if TYPE_CHECKING: + from zarr.core.buffer import BufferPrototype + from zarr.core.common import AccessModeLiteral def _get( diff --git a/src/zarr/store/memory.py b/src/zarr/store/memory.py index dd3e52e703..999d750755 100644 --- a/src/zarr/store/memory.py +++ b/src/zarr/store/memory.py @@ -1,11 +1,16 @@ from __future__ import annotations from collections.abc import AsyncGenerator, MutableMapping +from typing import TYPE_CHECKING from zarr.abc.store import Store -from zarr.buffer import Buffer, BufferPrototype -from zarr.common import AccessModeLiteral, concurrent_map -from zarr.store.utils import _normalize_interval_index +from zarr.core.buffer import Buffer +from zarr.core.common import concurrent_map +from zarr.store._utils import _normalize_interval_index + +if TYPE_CHECKING: + from zarr.core.buffer import BufferPrototype + from zarr.core.common import AccessModeLiteral # TODO: this store could easily be extended to wrap any MutableMapping store from v2 diff --git a/src/zarr/store/remote.py b/src/zarr/store/remote.py index 84f01c7852..f5ea694b0a 100644 --- a/src/zarr/store/remote.py +++ b/src/zarr/store/remote.py @@ -6,16 +6,15 @@ import fsspec from zarr.abc.store import Store -from zarr.buffer import BufferPrototype -from zarr.common import AccessModeLiteral -from zarr.store.core import _dereference_path +from zarr.core.buffer import Buffer +from zarr.store.common import _dereference_path if TYPE_CHECKING: from fsspec.asyn import AsyncFileSystem from upath import UPath - from zarr.buffer import Buffer, BufferPrototype - from zarr.common import BytesLike + from zarr.core.buffer import BufferPrototype + from zarr.core.common import AccessModeLiteral, BytesLike class RemoteStore(Store): diff --git a/src/zarr/strategies.py b/src/zarr/strategies.py index 91a8542ce9..bfd83e1e51 100644 --- a/src/zarr/strategies.py +++ b/src/zarr/strategies.py @@ -5,9 +5,8 @@ import numpy as np from hypothesis import given, settings # noqa -from .array import Array -from .group import Group -from .store import MemoryStore, StoreLike +from zarr import Array, Group +from zarr.store import MemoryStore, StoreLike # Copied from Xarray _attr_keys = st.text(st.characters(), min_size=1) diff --git a/src/zarr/testing/__init__.py b/src/zarr/testing/__init__.py index 35b91f9167..0b4d8cf417 100644 --- a/src/zarr/testing/__init__.py +++ b/src/zarr/testing/__init__.py @@ -6,4 +6,8 @@ else: warnings.warn("pytest not installed, skipping test suite", stacklevel=2) -__all__ = ["StoreTests"] +from zarr.testing.utils import assert_bytes_equal + +# TODO: import public buffer tests? + +__all__ = ["StoreTests", "assert_bytes_equal"] diff --git a/src/zarr/testing/buffer.py b/src/zarr/testing/buffer.py index d2da1c5a6e..ee170a5dd3 100644 --- a/src/zarr/testing/buffer.py +++ b/src/zarr/testing/buffer.py @@ -7,13 +7,20 @@ import numpy as np import numpy.typing as npt -from zarr.buffer import Buffer, BufferPrototype, NDBuffer +from zarr.core.buffer import Buffer, BufferPrototype, NDBuffer from zarr.store import MemoryStore if TYPE_CHECKING: from typing_extensions import Self +__all__ = [ + "TestBuffer", + "NDBufferUsingTestNDArrayLike", + "StoreExpectingTestBuffer", +] + + class TestNDArrayLike(np.ndarray): """An example of a ndarray-like class""" diff --git a/src/zarr/testing/store.py b/src/zarr/testing/store.py index 4fdf497a68..ebef4824f7 100644 --- a/src/zarr/testing/store.py +++ b/src/zarr/testing/store.py @@ -3,10 +3,13 @@ import pytest from zarr.abc.store import AccessMode, Store -from zarr.buffer import Buffer, default_buffer_prototype -from zarr.store.utils import _normalize_interval_index +from zarr.core.buffer import Buffer, default_buffer_prototype +from zarr.store._utils import _normalize_interval_index from zarr.testing.utils import assert_bytes_equal +__all__ = ["StoreTests"] + + S = TypeVar("S", bound=Store) diff --git a/src/zarr/testing/utils.py b/src/zarr/testing/utils.py index 67c6c72de7..3a70f96d44 100644 --- a/src/zarr/testing/utils.py +++ b/src/zarr/testing/utils.py @@ -1,7 +1,9 @@ from __future__ import annotations -from zarr.buffer import Buffer -from zarr.common import BytesLike +from zarr.core.buffer import Buffer +from zarr.core.common import BytesLike + +__all__ = ["assert_bytes_equal"] def assert_bytes_equal(b1: Buffer | BytesLike | None, b2: Buffer | BytesLike | None) -> None: diff --git a/tests/v3/conftest.py b/tests/v3/conftest.py index 0a672d1f2e..d8af484ee6 100644 --- a/tests/v3/conftest.py +++ b/tests/v3/conftest.py @@ -6,10 +6,9 @@ from _pytest.compat import LEGACY_PATH -from zarr import config +from zarr import AsyncGroup, config from zarr.abc.store import Store -from zarr.common import ChunkCoords, MemoryOrder, ZarrFormat -from zarr.group import AsyncGroup +from zarr.core.common import ChunkCoords, MemoryOrder, ZarrFormat if TYPE_CHECKING: from typing import Any, Literal diff --git a/tests/v3/package_with_entrypoint/__init__.py b/tests/v3/package_with_entrypoint/__init__.py index 4d626808d8..0e84cde0d5 100644 --- a/tests/v3/package_with_entrypoint/__init__.py +++ b/tests/v3/package_with_entrypoint/__init__.py @@ -3,10 +3,10 @@ from numpy import ndarray from zarr.abc.codec import ArrayBytesCodec, CodecInput, CodecPipeline -from zarr.array_spec import ArraySpec -from zarr.buffer import Buffer, NDBuffer from zarr.codecs import BytesCodec -from zarr.common import BytesLike +from zarr.core.array_spec import ArraySpec +from zarr.core.buffer import Buffer, NDBuffer +from zarr.core.common import BytesLike class TestEntrypointCodec(ArrayBytesCodec): diff --git a/tests/v3/test_array.py b/tests/v3/test_array.py index 9fd135ad5c..fb726757dc 100644 --- a/tests/v3/test_array.py +++ b/tests/v3/test_array.py @@ -3,12 +3,11 @@ import numpy as np import pytest -from zarr.array import Array -from zarr.common import ZarrFormat +from zarr import Array, Group +from zarr.core.common import ZarrFormat from zarr.errors import ContainsArrayError, ContainsGroupError -from zarr.group import Group from zarr.store import LocalStore, MemoryStore -from zarr.store.core import StorePath +from zarr.store.common import StorePath @pytest.mark.parametrize("store", ("local", "memory"), indirect=["store"]) diff --git a/tests/v3/test_buffer.py b/tests/v3/test_buffer.py index d53e98d42d..298a7f7eed 100644 --- a/tests/v3/test_buffer.py +++ b/tests/v3/test_buffer.py @@ -3,15 +3,15 @@ import numpy as np import pytest -from zarr.array import AsyncArray -from zarr.buffer import ArrayLike, BufferPrototype, NDArrayLike, numpy_buffer_prototype +from zarr import AsyncArray from zarr.codecs.blosc import BloscCodec from zarr.codecs.bytes import BytesCodec from zarr.codecs.crc32c_ import Crc32cCodec from zarr.codecs.gzip import GzipCodec from zarr.codecs.transpose import TransposeCodec from zarr.codecs.zstd import ZstdCodec -from zarr.store.core import StorePath +from zarr.core.buffer import ArrayLike, BufferPrototype, NDArrayLike, numpy_buffer_prototype +from zarr.store.common import StorePath from zarr.testing.buffer import ( NDBufferUsingTestNDArrayLike, StoreExpectingTestBuffer, diff --git a/tests/v3/test_chunk_grids.py b/tests/v3/test_chunk_grids.py index 3cc6b64e57..e1b4df10a7 100644 --- a/tests/v3/test_chunk_grids.py +++ b/tests/v3/test_chunk_grids.py @@ -1,7 +1,7 @@ import numpy as np import pytest -from zarr.chunk_grids import _guess_chunks +from zarr.core.chunk_grids import _guess_chunks @pytest.mark.parametrize( diff --git a/tests/v3/test_codecs/test_blosc.py b/tests/v3/test_codecs/test_blosc.py index 33ca9eba77..5de4c9fa99 100644 --- a/tests/v3/test_codecs/test_blosc.py +++ b/tests/v3/test_codecs/test_blosc.py @@ -3,11 +3,11 @@ import numpy as np import pytest +from zarr import AsyncArray from zarr.abc.store import Store -from zarr.array import AsyncArray -from zarr.buffer import default_buffer_prototype from zarr.codecs import BloscCodec, BytesCodec, ShardingCodec -from zarr.store.core import StorePath +from zarr.core.buffer import default_buffer_prototype +from zarr.store.common import StorePath @pytest.mark.parametrize("store", ("local", "memory"), indirect=["store"]) diff --git a/tests/v3/test_codecs/test_codecs.py b/tests/v3/test_codecs/test_codecs.py index 2a1b99c42f..7e717e5b50 100644 --- a/tests/v3/test_codecs/test_codecs.py +++ b/tests/v3/test_codecs/test_codecs.py @@ -7,19 +7,18 @@ import pytest import zarr.v2 +from zarr import Array, AsyncArray, config from zarr.abc.codec import Codec from zarr.abc.store import Store -from zarr.array import Array, AsyncArray -from zarr.buffer import default_buffer_prototype from zarr.codecs import ( BytesCodec, GzipCodec, ShardingCodec, TransposeCodec, ) -from zarr.common import MemoryOrder -from zarr.config import config -from zarr.indexing import Selection, morton_order_iter +from zarr.core.buffer import default_buffer_prototype +from zarr.core.common import MemoryOrder +from zarr.core.indexing import Selection, morton_order_iter from zarr.store import StorePath from zarr.testing.utils import assert_bytes_equal diff --git a/tests/v3/test_codecs/test_endian.py b/tests/v3/test_codecs/test_endian.py index 6f3e1c9482..f97d95d9b7 100644 --- a/tests/v3/test_codecs/test_endian.py +++ b/tests/v3/test_codecs/test_endian.py @@ -4,11 +4,11 @@ import pytest import zarr.v2 +from zarr import AsyncArray from zarr.abc.store import Store -from zarr.array import AsyncArray -from zarr.buffer import default_buffer_prototype from zarr.codecs import BytesCodec -from zarr.store.core import StorePath +from zarr.core.buffer import default_buffer_prototype +from zarr.store.common import StorePath from zarr.testing.utils import assert_bytes_equal from .test_codecs import _AsyncArrayProxy diff --git a/tests/v3/test_codecs/test_gzip.py b/tests/v3/test_codecs/test_gzip.py index f982bacb87..6495f8236c 100644 --- a/tests/v3/test_codecs/test_gzip.py +++ b/tests/v3/test_codecs/test_gzip.py @@ -1,10 +1,10 @@ import numpy as np import pytest +from zarr import Array from zarr.abc.store import Store -from zarr.array import Array from zarr.codecs import BytesCodec, GzipCodec -from zarr.store.core import StorePath +from zarr.store.common import StorePath @pytest.mark.parametrize("store", ("local", "memory"), indirect=["store"]) diff --git a/tests/v3/test_codecs/test_sharding.py b/tests/v3/test_codecs/test_sharding.py index 27667ca9dd..e5f66224e9 100644 --- a/tests/v3/test_codecs/test_sharding.py +++ b/tests/v3/test_codecs/test_sharding.py @@ -3,9 +3,8 @@ import numpy as np import pytest +from zarr import Array, AsyncArray from zarr.abc.store import Store -from zarr.array import Array, AsyncArray -from zarr.buffer import default_buffer_prototype from zarr.codecs import ( BloscCodec, BytesCodec, @@ -13,7 +12,8 @@ ShardingCodecIndexLocation, TransposeCodec, ) -from zarr.store.core import StorePath +from zarr.core.buffer import default_buffer_prototype +from zarr.store.common import StorePath from ..conftest import ArrayRequest from .test_codecs import _AsyncArrayProxy, order_from_dim diff --git a/tests/v3/test_codecs/test_transpose.py b/tests/v3/test_codecs/test_transpose.py index bea7435122..b9aa6cc4b6 100644 --- a/tests/v3/test_codecs/test_transpose.py +++ b/tests/v3/test_codecs/test_transpose.py @@ -2,14 +2,13 @@ import pytest import zarr.v2 +from zarr import Array, AsyncArray, config from zarr.abc.codec import Codec from zarr.abc.store import Store -from zarr.array import Array, AsyncArray -from zarr.buffer import default_buffer_prototype from zarr.codecs import BytesCodec, ShardingCodec, TransposeCodec -from zarr.common import MemoryOrder -from zarr.config import config -from zarr.store.core import StorePath +from zarr.core.buffer import default_buffer_prototype +from zarr.core.common import MemoryOrder +from zarr.store.common import StorePath from .test_codecs import _AsyncArrayProxy diff --git a/tests/v3/test_codecs/test_zstd.py b/tests/v3/test_codecs/test_zstd.py index 1e1b1e02c9..0726e5944c 100644 --- a/tests/v3/test_codecs/test_zstd.py +++ b/tests/v3/test_codecs/test_zstd.py @@ -1,10 +1,10 @@ import numpy as np import pytest +from zarr import Array from zarr.abc.store import Store -from zarr.array import Array from zarr.codecs import BytesCodec, ZstdCodec -from zarr.store.core import StorePath +from zarr.store.common import StorePath @pytest.mark.parametrize("store", ("local", "memory"), indirect=["store"]) diff --git a/tests/v3/test_common.py b/tests/v3/test_common.py index bb59789843..f919b4d5f7 100644 --- a/tests/v3/test_common.py +++ b/tests/v3/test_common.py @@ -9,8 +9,8 @@ import numpy as np import pytest -from zarr.common import parse_name, parse_shapelike, product -from zarr.config import parse_indexing_order +from zarr.core.common import parse_name, parse_shapelike, product +from zarr.core.config import parse_indexing_order @pytest.mark.parametrize("data", [(0, 0, 0, 0), (1, 3, 4, 5, 6), (2, 4)]) diff --git a/tests/v3/test_config.py b/tests/v3/test_config.py index 8e7b868520..881833797c 100644 --- a/tests/v3/test_config.py +++ b/tests/v3/test_config.py @@ -11,11 +11,11 @@ from zarr import Array, zeros from zarr.abc.codec import CodecInput, CodecOutput, CodecPipeline from zarr.abc.store import ByteSetter -from zarr.array_spec import ArraySpec -from zarr.buffer import NDBuffer from zarr.codecs import BatchedCodecPipeline, BloscCodec, BytesCodec, Crc32cCodec, ShardingCodec -from zarr.config import BadConfigError, config -from zarr.indexing import SelectorTuple +from zarr.core.array_spec import ArraySpec +from zarr.core.buffer import NDBuffer +from zarr.core.config import BadConfigError, config +from zarr.core.indexing import SelectorTuple from zarr.registry import ( fully_qualified_name, get_buffer_class, @@ -46,8 +46,8 @@ def test_config_defaults_set() -> None: "path": "zarr.codecs.pipeline.BatchedCodecPipeline", "batch_size": 1, }, - "buffer": "zarr.buffer.Buffer", - "ndbuffer": "zarr.buffer.NDBuffer", + "buffer": "zarr.core.buffer.Buffer", + "ndbuffer": "zarr.core.buffer.NDBuffer", "codecs": { "blosc": "zarr.codecs.blosc.BloscCodec", "gzip": "zarr.codecs.gzip.GzipCodec", diff --git a/tests/v3/test_group.py b/tests/v3/test_group.py index daa5979b27..39921c26d8 100644 --- a/tests/v3/test_group.py +++ b/tests/v3/test_group.py @@ -6,14 +6,14 @@ import pytest from _pytest.compat import LEGACY_PATH -from zarr.array import Array, AsyncArray -from zarr.buffer import Buffer -from zarr.common import ZarrFormat +from zarr import Array, AsyncArray, AsyncGroup, Group +from zarr.core.buffer import Buffer +from zarr.core.common import ZarrFormat +from zarr.core.group import GroupMetadata +from zarr.core.sync import sync from zarr.errors import ContainsArrayError, ContainsGroupError -from zarr.group import AsyncGroup, Group, GroupMetadata from zarr.store import LocalStore, MemoryStore, StorePath -from zarr.store.core import make_store_path -from zarr.sync import sync +from zarr.store.common import make_store_path from .conftest import parse_store diff --git a/tests/v3/test_indexing.py b/tests/v3/test_indexing.py index 12547765a9..7895151b5f 100644 --- a/tests/v3/test_indexing.py +++ b/tests/v3/test_indexing.py @@ -12,9 +12,9 @@ import zarr from zarr.abc.store import Store -from zarr.buffer import BufferPrototype, NDBuffer -from zarr.common import ChunkCoords -from zarr.indexing import ( +from zarr.core.buffer import BufferPrototype, NDBuffer +from zarr.core.common import ChunkCoords +from zarr.core.indexing import ( make_slice_selection, normalize_integer_selection, oindex, @@ -22,7 +22,7 @@ replace_ellipsis, ) from zarr.registry import get_ndbuffer_class -from zarr.store.core import StorePath +from zarr.store.common import StorePath from zarr.store.memory import MemoryStore diff --git a/tests/v3/test_metadata/test_v2.py b/tests/v3/test_metadata/test_v2.py index 2d6f4d0cf5..54f26d91ca 100644 --- a/tests/v3/test_metadata/test_v2.py +++ b/tests/v3/test_metadata/test_v2.py @@ -10,7 +10,7 @@ import pytest from zarr.codecs import GzipCodec -from zarr.metadata import ArrayV2Metadata, parse_zarr_format_v2 +from zarr.core.metadata import ArrayV2Metadata, parse_zarr_format_v2 def test_parse_zarr_format_valid() -> None: diff --git a/tests/v3/test_metadata/test_v3.py b/tests/v3/test_metadata/test_v3.py index 2b25c776e0..eedcdf6234 100644 --- a/tests/v3/test_metadata/test_v3.py +++ b/tests/v3/test_metadata/test_v3.py @@ -4,8 +4,8 @@ from typing import TYPE_CHECKING, Literal from zarr.abc.codec import Codec -from zarr.chunk_key_encodings import DefaultChunkKeyEncoding, V2ChunkKeyEncoding from zarr.codecs.bytes import BytesCodec +from zarr.core.chunk_key_encodings import DefaultChunkKeyEncoding, V2ChunkKeyEncoding if TYPE_CHECKING: from typing import Any @@ -15,9 +15,9 @@ import numpy as np import pytest -from zarr.metadata import ArrayV3Metadata, parse_dimension_names -from zarr.metadata import parse_fill_value_v3 as parse_fill_value -from zarr.metadata import parse_zarr_format_v3 as parse_zarr_format +from zarr.core.metadata import ArrayV3Metadata, parse_dimension_names +from zarr.core.metadata import parse_fill_value_v3 as parse_fill_value +from zarr.core.metadata import parse_zarr_format_v3 as parse_zarr_format bool_dtypes = ("bool",) diff --git a/tests/v3/test_store/test_core.py b/tests/v3/test_store/test_core.py index 1d277cf502..23821acfa6 100644 --- a/tests/v3/test_store/test_core.py +++ b/tests/v3/test_store/test_core.py @@ -2,7 +2,7 @@ import pytest -from zarr.store.core import make_store_path +from zarr.store.common import make_store_path from zarr.store.local import LocalStore from zarr.store.memory import MemoryStore diff --git a/tests/v3/test_store/test_local.py b/tests/v3/test_store/test_local.py index 6b7f91b87d..8afa4fef3a 100644 --- a/tests/v3/test_store/test_local.py +++ b/tests/v3/test_store/test_local.py @@ -2,7 +2,7 @@ import pytest -from zarr.buffer import Buffer +from zarr.core.buffer import Buffer from zarr.store.local import LocalStore from zarr.testing.store import StoreTests diff --git a/tests/v3/test_store/test_memory.py b/tests/v3/test_store/test_memory.py index 5b8f1ef875..51ecf46709 100644 --- a/tests/v3/test_store/test_memory.py +++ b/tests/v3/test_store/test_memory.py @@ -2,7 +2,7 @@ import pytest -from zarr.buffer import Buffer +from zarr.core.buffer import Buffer from zarr.store.memory import MemoryStore from zarr.testing.store import StoreTests diff --git a/tests/v3/test_store/test_remote.py b/tests/v3/test_store/test_remote.py index be9fa5ef67..2eec9d29cf 100644 --- a/tests/v3/test_store/test_remote.py +++ b/tests/v3/test_store/test_remote.py @@ -4,9 +4,9 @@ import pytest from upath import UPath -from zarr.buffer import Buffer, default_buffer_prototype +from zarr.core.buffer import Buffer, default_buffer_prototype +from zarr.core.sync import sync from zarr.store import RemoteStore -from zarr.sync import sync from zarr.testing.store import StoreTests s3fs = pytest.importorskip("s3fs") diff --git a/tests/v3/test_sync.py b/tests/v3/test_sync.py index 7e3b8dd111..a335f9b48c 100644 --- a/tests/v3/test_sync.py +++ b/tests/v3/test_sync.py @@ -4,7 +4,7 @@ import pytest -from zarr.sync import SyncError, SyncMixin, _get_lock, _get_loop, sync +from zarr.core.sync import SyncError, SyncMixin, _get_lock, _get_loop, sync @pytest.fixture(params=[True, False]) diff --git a/tests/v3/test_v2.py b/tests/v3/test_v2.py index 7a7d728067..4f4dc5aed3 100644 --- a/tests/v3/test_v2.py +++ b/tests/v3/test_v2.py @@ -3,8 +3,8 @@ import numpy as np import pytest +from zarr import Array from zarr.abc.store import Store -from zarr.array import Array from zarr.store import MemoryStore, StorePath