diff --git a/bench/compress_normal.py b/bench/compress_normal.py index 803d54b76..608cfe8dc 100644 --- a/bench/compress_normal.py +++ b/bench/compress_normal.py @@ -1,9 +1,9 @@ import sys import timeit +import line_profiler import numpy as np -import line_profiler import zarr from zarr import blosc diff --git a/docs/release.rst b/docs/release.rst index e2f9f3de8..d2e73f4ec 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -26,6 +26,9 @@ Unreleased Enhancements ~~~~~~~~~~~~ +* Enable ruff/isort rules (I) and fix issues. + By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1704`. + Docs ~~~~ diff --git a/pyproject.toml b/pyproject.toml index dacd45ec2..b77da145e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -105,7 +105,8 @@ exclude = [ [tool.ruff.lint] extend-select = [ - "B" + "B", + "I" ] [tool.black] diff --git a/zarr/_storage/absstore.py b/zarr/_storage/absstore.py index 1e49754f3..b23f5800b 100644 --- a/zarr/_storage/absstore.py +++ b/zarr/_storage/absstore.py @@ -1,19 +1,20 @@ """This module contains storage classes related to Azure Blob Storage (ABS)""" -from typing import Optional import warnings +from typing import Optional from numcodecs.compat import ensure_bytes -from zarr.util import normalize_storage_path + from zarr._storage.store import ( + V3_DEPRECATION_MESSAGE, + Store, + StoreV3, _get_metadata_suffix, data_root, meta_root, - Store, - StoreV3, - V3_DEPRECATION_MESSAGE, ) from zarr.types import DIMENSION_SEPARATOR +from zarr.util import normalize_storage_path __doctest_requires__ = { ("ABSStore", "ABSStore.*"): ["azure.storage.blob"], diff --git a/zarr/_storage/store.py b/zarr/_storage/store.py index dba29d13c..c182927e4 100644 --- a/zarr/_storage/store.py +++ b/zarr/_storage/store.py @@ -7,10 +7,10 @@ from string import ascii_letters, digits from typing import Any, Dict, List, Mapping, Optional, Sequence, Tuple, Union -from zarr.meta import Metadata2, Metadata3 -from zarr.util import normalize_storage_path from zarr.context import Context +from zarr.meta import Metadata2, Metadata3 from zarr.types import ZARR_VERSION +from zarr.util import normalize_storage_path # v2 store keys array_meta_key = ".zarray" diff --git a/zarr/_storage/v3.py b/zarr/_storage/v3.py index 4987f820c..7200a048d 100644 --- a/zarr/_storage/v3.py +++ b/zarr/_storage/v3.py @@ -3,39 +3,36 @@ from collections import OrderedDict from collections.abc import MutableMapping from threading import Lock -from typing import Union, Dict, Any, Optional - -from zarr.errors import ( - MetadataError, - ReadOnlyError, -) -from zarr.util import buffer_size, json_loads, normalize_storage_path -from zarr.types import DIMENSION_SEPARATOR +from typing import Any, Dict, Optional, Union from zarr._storage.absstore import ABSStoreV3 # noqa: F401 from zarr._storage.store import ( # noqa: F401 + BaseStore, + Store, + StoreV3, _get_hierarchy_metadata, _get_metadata_suffix, _listdir_from_keys, + _path_to_prefix, + _prefix_to_array_key, + _prefix_to_group_key, _rename_from_keys, _rename_metadata_v3, _rmdir_from_keys, _rmdir_from_keys_v3, - _path_to_prefix, - _prefix_to_array_key, - _prefix_to_group_key, array_meta_key, attrs_key, data_root, group_meta_key, meta_root, - BaseStore, - Store, - StoreV3, +) +from zarr.errors import ( + MetadataError, + ReadOnlyError, ) from zarr.storage import ( - DBMStore, ConsolidatedMetadataStore, + DBMStore, DirectoryStore, FSStore, KVStore, @@ -48,6 +45,8 @@ ZipStore, _getsize, ) +from zarr.types import DIMENSION_SEPARATOR +from zarr.util import buffer_size, json_loads, normalize_storage_path __doctest_requires__ = { ("RedisStore", "RedisStore.*"): ["redis"], diff --git a/zarr/_storage/v3_storage_transformers.py b/zarr/_storage/v3_storage_transformers.py index 00467d44f..132616571 100644 --- a/zarr/_storage/v3_storage_transformers.py +++ b/zarr/_storage/v3_storage_transformers.py @@ -1,15 +1,14 @@ import functools import itertools import os -from typing import NamedTuple, Tuple, Optional, Union, Iterator +from typing import Iterator, NamedTuple, Optional, Tuple, Union -from numcodecs.compat import ensure_bytes import numpy as np +from numcodecs.compat import ensure_bytes from zarr._storage.store import StorageTransformer, StoreV3, _rmdir_from_keys_v3 -from zarr.util import normalize_storage_path from zarr.types import DIMENSION_SEPARATOR - +from zarr.util import normalize_storage_path MAX_UINT_64 = 2**64 - 1 diff --git a/zarr/convenience.py b/zarr/convenience.py index bd284e084..f90b91d8d 100644 --- a/zarr/convenience.py +++ b/zarr/convenience.py @@ -4,29 +4,27 @@ import os import re from collections.abc import Mapping, MutableMapping +from typing import Union -from zarr._storage.store import data_root, meta_root, assert_zarr_v3_api_available +from zarr._storage.store import assert_zarr_v3_api_available, data_root, meta_root +from zarr._storage.v3 import ConsolidatedMetadataStoreV3 from zarr.core import Array from zarr.creation import array as _create_array from zarr.creation import open_array from zarr.errors import CopyError, PathNotFoundError -from zarr.hierarchy import Group +from zarr.hierarchy import Group, open_group from zarr.hierarchy import group as _create_group -from zarr.hierarchy import open_group from zarr.meta import json_dumps, json_loads from zarr.storage import ( + BaseStore, + ConsolidatedMetadataStore, _get_metadata_suffix, contains_array, contains_group, normalize_store_arg, - BaseStore, - ConsolidatedMetadataStore, ) -from zarr._storage.v3 import ConsolidatedMetadataStoreV3 from zarr.util import TreeViewer, buffer_size, normalize_storage_path -from typing import Union - StoreLike = Union[BaseStore, MutableMapping, str, None] _builtin_open = open # builtin open is later shadowed by a local open function diff --git a/zarr/core.py b/zarr/core.py index 6aa86b646..2f63d7932 100644 --- a/zarr/core.py +++ b/zarr/core.py @@ -14,17 +14,17 @@ from zarr.attrs import Attributes from zarr.codecs import AsType, get_codec from zarr.context import Context -from zarr.errors import ArrayNotFoundError, ReadOnlyError, ArrayIndexError +from zarr.errors import ArrayIndexError, ArrayNotFoundError, ReadOnlyError from zarr.indexing import ( BasicIndexer, + BlockIndex, + BlockIndexer, CoordinateIndexer, MaskIndexer, OIndex, OrthogonalIndexer, - VIndex, - BlockIndex, - BlockIndexer, PartialChunkIterator, + VIndex, check_fields, check_no_multi_fields, ensure_tuple, @@ -36,18 +36,21 @@ pop_fields, ) from zarr.storage import ( + KVStore, _get_hierarchy_metadata, _prefix_to_array_key, - KVStore, getsize, listdir, normalize_store_arg, ) from zarr.util import ( ConstantMap, - all_equal, InfoReporter, + PartialReadBuffer, + UncompressedPartialReadBufferV3, + all_equal, check_array_shape, + ensure_ndarray_like, human_readable_size, is_total_slice, nolock, @@ -55,9 +58,6 @@ normalize_resize_args, normalize_shape, normalize_storage_path, - PartialReadBuffer, - UncompressedPartialReadBufferV3, - ensure_ndarray_like, ) __all__ = ["Array"] diff --git a/zarr/creation.py b/zarr/creation.py index 9b2b1d6d4..2a36c6395 100644 --- a/zarr/creation.py +++ b/zarr/creation.py @@ -1,5 +1,5 @@ from collections.abc import MutableMapping -from typing import Optional, Tuple, Union, Sequence +from typing import Optional, Sequence, Tuple, Union from warnings import warn import numpy as np @@ -7,7 +7,7 @@ from numcodecs.abc import Codec from numcodecs.registry import codec_registry -from zarr._storage.store import DEFAULT_ZARR_VERSION +from zarr._storage.store import DEFAULT_ZARR_VERSION, StorageTransformer from zarr.core import Array from zarr.errors import ( ArrayNotFoundError, @@ -22,9 +22,8 @@ normalize_storage_path, normalize_store_arg, ) -from zarr._storage.store import StorageTransformer from zarr.sync import Synchronizer -from zarr.types import ZARR_VERSION, DIMENSION_SEPARATOR, MEMORY_ORDER, MetaArray, PathLike +from zarr.types import DIMENSION_SEPARATOR, MEMORY_ORDER, ZARR_VERSION, MetaArray, PathLike from zarr.util import normalize_dimension_separator diff --git a/zarr/hierarchy.py b/zarr/hierarchy.py index 8894a5ed5..b8bae1025 100644 --- a/zarr/hierarchy.py +++ b/zarr/hierarchy.py @@ -4,12 +4,13 @@ import numpy as np from zarr._storage.store import ( + DEFAULT_ZARR_VERSION, _get_metadata_suffix, + assert_zarr_v3_api_available, data_root, meta_root, - DEFAULT_ZARR_VERSION, - assert_zarr_v3_api_available, ) +from zarr._storage.v3 import MemoryStoreV3 from zarr.attrs import Attributes from zarr.core import Array from zarr.creation import ( @@ -25,17 +26,17 @@ zeros_like, ) from zarr.errors import ( + ArrayNotFoundError, ContainsArrayError, ContainsGroupError, - ArrayNotFoundError, GroupNotFoundError, ReadOnlyError, ) from zarr.storage import ( - _get_hierarchy_metadata, - _prefix_to_group_key, BaseStore, MemoryStore, + _get_hierarchy_metadata, + _prefix_to_group_key, attrs_key, contains_array, contains_group, @@ -46,7 +47,6 @@ rename, rmdir, ) -from zarr._storage.v3 import MemoryStoreV3 from zarr.util import ( InfoReporter, TreeViewer, diff --git a/zarr/indexing.py b/zarr/indexing.py index 2f2402fe2..a9c3d1f11 100644 --- a/zarr/indexing.py +++ b/zarr/indexing.py @@ -5,13 +5,12 @@ import numpy as np - from zarr.errors import ( ArrayIndexError, + BoundsCheckError, NegativeStepError, - err_too_many_indices, VindexInvalidSelectionError, - BoundsCheckError, + err_too_many_indices, ) diff --git a/zarr/meta.py b/zarr/meta.py index 5430ab305..45305387e 100644 --- a/zarr/meta.py +++ b/zarr/meta.py @@ -1,6 +1,8 @@ import base64 import itertools from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, List, Optional, Union, cast +from typing import Mapping as MappingType import numcodecs import numpy as np @@ -9,8 +11,6 @@ from zarr.errors import MetadataError from zarr.util import json_dumps, json_loads -from typing import cast, Union, Any, List, Mapping as MappingType, Optional, TYPE_CHECKING - if TYPE_CHECKING: # pragma: no cover from zarr._storage.store import StorageTransformer @@ -458,8 +458,8 @@ def _encode_storage_transformer_metadata( @classmethod def _decode_storage_transformer_metadata(cls, meta: Mapping) -> "StorageTransformer": - from zarr.tests.test_storage_v3 import DummyStorageTransfomer from zarr._storage.v3_storage_transformers import ShardingStorageTransformer + from zarr.tests.test_storage_v3 import DummyStorageTransfomer # This might be changed to a proper registry in the future KNOWN_STORAGE_TRANSFORMERS = [DummyStorageTransfomer, ShardingStorageTransformer] diff --git a/zarr/n5.py b/zarr/n5.py index 3d3e9afa2..c25f10b1a 100644 --- a/zarr/n5.py +++ b/zarr/n5.py @@ -4,8 +4,8 @@ import os import struct import sys -from typing import Any, Dict, Optional, cast import warnings +from typing import Any, Dict, Optional, cast import numpy as np from numcodecs.abc import Codec @@ -13,8 +13,7 @@ from numcodecs.registry import get_codec, register_codec from .meta import ZARR_FORMAT, json_dumps, json_loads -from .storage import FSStore -from .storage import NestedDirectoryStore, _prog_ckey, _prog_number, normalize_storage_path +from .storage import FSStore, NestedDirectoryStore, _prog_ckey, _prog_number, normalize_storage_path from .storage import array_meta_key as zarr_array_meta_key from .storage import attrs_key as zarr_attrs_key from .storage import group_meta_key as zarr_group_meta_key diff --git a/zarr/storage.py b/zarr/storage.py index f412870f7..803719dca 100644 --- a/zarr/storage.py +++ b/zarr/storage.py @@ -25,6 +25,8 @@ import shutil import sys import tempfile +import time +import uuid import warnings import zipfile from collections import OrderedDict @@ -33,28 +35,50 @@ from os import scandir from pickle import PicklingError from threading import Lock, RLock -from typing import Sequence, Mapping, Optional, Union, List, Tuple, Dict, Any -import uuid -import time +from typing import Any, Dict, List, Mapping, Optional, Sequence, Tuple, Union from numcodecs.abc import Codec -from numcodecs.compat import ensure_bytes, ensure_text, ensure_contiguous_ndarray_like +from numcodecs.compat import ensure_bytes, ensure_contiguous_ndarray_like, ensure_text from numcodecs.registry import codec_registry -from zarr.context import Context -from zarr.types import PathLike as Path, DIMENSION_SEPARATOR -from zarr.util import NoLock +from zarr._storage.absstore import ABSStore # noqa: F401 +from zarr._storage.store import ( # noqa: F401 + DEFAULT_ZARR_VERSION, + V3_DEPRECATION_MESSAGE, + BaseStore, + Store, + _get_hierarchy_metadata, + _get_metadata_suffix, + _listdir_from_keys, + _path_to_prefix, + _prefix_to_array_key, + _prefix_to_group_key, + _rename_from_keys, + _rename_metadata_v3, + _rmdir_from_keys, + _rmdir_from_keys_v3, + array_meta_key, + attrs_key, + data_root, + group_meta_key, + meta_root, +) +from zarr.context import Context from zarr.errors import ( - MetadataError, BadCompressorError, ContainsArrayError, ContainsGroupError, FSPathExistNotDir, + MetadataError, ReadOnlyError, ) from zarr.meta import encode_array_metadata, encode_group_metadata +from zarr.types import DIMENSION_SEPARATOR +from zarr.types import PathLike as Path from zarr.util import ( + NoLock, buffer_size, + ensure_contiguous_ndarray_or_bytes, json_loads, nolock, normalize_chunks, @@ -65,30 +89,6 @@ normalize_shape, normalize_storage_path, retry_call, - ensure_contiguous_ndarray_or_bytes, -) - -from zarr._storage.absstore import ABSStore # noqa: F401 -from zarr._storage.store import ( # noqa: F401 - _get_hierarchy_metadata, - _get_metadata_suffix, - _listdir_from_keys, - _rename_from_keys, - _rename_metadata_v3, - _rmdir_from_keys, - _rmdir_from_keys_v3, - _path_to_prefix, - _prefix_to_array_key, - _prefix_to_group_key, - array_meta_key, - attrs_key, - data_root, - group_meta_key, - meta_root, - DEFAULT_ZARR_VERSION, - BaseStore, - Store, - V3_DEPRECATION_MESSAGE, ) __doctest_requires__ = { diff --git a/zarr/tests/test_attrs.py b/zarr/tests/test_attrs.py index 2d9553971..0d37923a3 100644 --- a/zarr/tests/test_attrs.py +++ b/zarr/tests/test_attrs.py @@ -1,15 +1,15 @@ import json - import pathlib + import pytest import zarr from zarr._storage.store import meta_root -from zarr.attrs import Attributes -from zarr.storage import KVStore, DirectoryStore from zarr._storage.v3 import KVStoreV3 -from zarr.tests.util import CountingDict, CountingDictV3 +from zarr.attrs import Attributes from zarr.hierarchy import group +from zarr.storage import DirectoryStore, KVStore +from zarr.tests.util import CountingDict, CountingDictV3 @pytest.fixture(params=[2, 3]) diff --git a/zarr/tests/test_convenience.py b/zarr/tests/test_convenience.py index 7d190adc2..203336613 100644 --- a/zarr/tests/test_convenience.py +++ b/zarr/tests/test_convenience.py @@ -9,17 +9,26 @@ from numpy.testing import assert_array_equal import zarr +from zarr._storage.store import v3_api_available +from zarr._storage.v3 import ( + ConsolidatedMetadataStoreV3, + DirectoryStoreV3, + FSStoreV3, + KVStoreV3, + MemoryStoreV3, + SQLiteStoreV3, +) from zarr.convenience import ( consolidate_metadata, copy, + copy_all, copy_store, load, open, open_consolidated, save, - save_group, save_array, - copy_all, + save_group, ) from zarr.core import Array from zarr.errors import CopyError @@ -31,17 +40,8 @@ MemoryStore, atexit_rmtree, data_root, - meta_root, getsize, -) -from zarr._storage.store import v3_api_available -from zarr._storage.v3 import ( - ConsolidatedMetadataStoreV3, - DirectoryStoreV3, - FSStoreV3, - KVStoreV3, - MemoryStoreV3, - SQLiteStoreV3, + meta_root, ) from zarr.tests.util import have_fsspec diff --git a/zarr/tests/test_core.py b/zarr/tests/test_core.py index 730f72431..6a595f7f4 100644 --- a/zarr/tests/test_core.py +++ b/zarr/tests/test_core.py @@ -1,12 +1,13 @@ import atexit import os -import sys import pickle import shutil -from typing import Any, Literal, Optional, Tuple, Union, Sequence +import sys import unittest from itertools import zip_longest from tempfile import mkdtemp +from typing import Any, Literal, Optional, Sequence, Tuple, Union + import numpy as np import packaging.version import pytest @@ -36,11 +37,22 @@ BaseStore, v3_api_available, ) -from .._storage.v3_storage_transformers import ShardingStorageTransformer, v3_sharding_available +from zarr._storage.v3 import ( + ABSStoreV3, + DBMStoreV3, + DirectoryStoreV3, + FSStoreV3, + KVStoreV3, + LMDBStoreV3, + LRUStoreCacheV3, + RmdirV3, + SQLiteStoreV3, + StoreV3, +) from zarr.core import Array from zarr.errors import ArrayNotFoundError, ContainsGroupError from zarr.meta import json_loads -from zarr.n5 import N5Store, N5FSStore, n5_keywords +from zarr.n5 import N5FSStore, N5Store, n5_keywords from zarr.storage import ( ABSStore, DBMStore, @@ -59,20 +71,7 @@ meta_root, normalize_store_arg, ) -from zarr._storage.v3 import ( - ABSStoreV3, - DBMStoreV3, - DirectoryStoreV3, - FSStoreV3, - KVStoreV3, - LMDBStoreV3, - LRUStoreCacheV3, - RmdirV3, - SQLiteStoreV3, - StoreV3, -) from zarr.tests.test_storage_v3 import DummyStorageTransfomer -from zarr.util import buffer_size from zarr.tests.util import ( abs_container, have_bsddb3, @@ -83,6 +82,9 @@ skip_test_env_var, ) from zarr.types import DIMENSION_SEPARATOR +from zarr.util import buffer_size + +from .._storage.v3_storage_transformers import ShardingStorageTransformer, v3_sharding_available # noinspection PyMethodMayBeStatic diff --git a/zarr/tests/test_creation.py b/zarr/tests/test_creation.py index 8e586abff..db1944439 100644 --- a/zarr/tests/test_creation.py +++ b/zarr/tests/test_creation.py @@ -7,7 +7,8 @@ import pytest from numpy.testing import assert_array_equal -from zarr._storage.store import DEFAULT_ZARR_VERSION +from zarr._storage.store import DEFAULT_ZARR_VERSION, v3_api_available +from zarr._storage.v3 import DirectoryStoreV3, KVStoreV3 from zarr.codecs import Zlib from zarr.core import Array from zarr.creation import ( @@ -27,12 +28,9 @@ from zarr.hierarchy import open_group from zarr.n5 import N5Store from zarr.storage import DirectoryStore, KVStore -from zarr._storage.store import v3_api_available -from zarr._storage.v3 import DirectoryStoreV3, KVStoreV3 from zarr.sync import ThreadSynchronizer from zarr.tests.test_storage_v3 import DummyStorageTransfomer -from zarr.tests.util import mktemp, have_fsspec - +from zarr.tests.util import have_fsspec, mktemp _VERSIONS = (None, 2, 3) if v3_api_available else (None, 2) _VERSIONS2 = (2, 3) if v3_api_available else (2,) diff --git a/zarr/tests/test_dim_separator.py b/zarr/tests/test_dim_separator.py index 0a5814e65..6554e024b 100644 --- a/zarr/tests/test_dim_separator.py +++ b/zarr/tests/test_dim_separator.py @@ -1,15 +1,14 @@ import pathlib +from functools import partial import pytest from numpy.testing import assert_array_equal -from functools import partial import zarr from zarr.core import Array -from zarr.storage import DirectoryStore, NestedDirectoryStore, FSStore +from zarr.storage import DirectoryStore, FSStore, NestedDirectoryStore from zarr.tests.util import have_fsspec - needs_fsspec = pytest.mark.skipif(not have_fsspec, reason="needs fsspec") diff --git a/zarr/tests/test_hierarchy.py b/zarr/tests/test_hierarchy.py index 161e1eb81..dc2494750 100644 --- a/zarr/tests/test_hierarchy.py +++ b/zarr/tests/test_hierarchy.py @@ -1,9 +1,9 @@ import atexit import operator import os -import sys import pickle import shutil +import sys import tempfile import textwrap import unittest @@ -20,6 +20,18 @@ from numpy.testing import assert_array_equal from zarr._storage.store import _get_metadata_suffix, v3_api_available +from zarr._storage.v3 import ( + ABSStoreV3, + DBMStoreV3, + DirectoryStoreV3, + FSStoreV3, + KVStoreV3, + LMDBStoreV3, + LRUStoreCacheV3, + MemoryStoreV3, + SQLiteStoreV3, + ZipStoreV3, +) from zarr.attrs import Attributes from zarr.core import Array from zarr.creation import open_array @@ -27,9 +39,9 @@ from zarr.storage import ( ABSStore, DBMStore, - KVStore, DirectoryStore, FSStore, + KVStore, LMDBStore, LRUStoreCache, MemoryStore, @@ -45,21 +57,8 @@ init_group, meta_root, ) -from zarr._storage.v3 import ( - ABSStoreV3, - KVStoreV3, - DirectoryStoreV3, - MemoryStoreV3, - FSStoreV3, - ZipStoreV3, - DBMStoreV3, - LMDBStoreV3, - SQLiteStoreV3, - LRUStoreCacheV3, -) +from zarr.tests.util import abs_container, have_fsspec, mktemp, skip_test_env_var from zarr.util import InfoReporter, buffer_size -from zarr.tests.util import skip_test_env_var, have_fsspec, abs_container, mktemp - _VERSIONS = (2, 3) if v3_api_available else (2,) diff --git a/zarr/tests/test_indexing.py b/zarr/tests/test_indexing.py index a3afc101c..156f4b300 100644 --- a/zarr/tests/test_indexing.py +++ b/zarr/tests/test_indexing.py @@ -5,14 +5,13 @@ import zarr from zarr.indexing import ( + PartialChunkIterator, make_slice_selection, normalize_integer_selection, oindex, oindex_set, replace_ellipsis, - PartialChunkIterator, ) - from zarr.tests.util import CountingDict diff --git a/zarr/tests/test_meta.py b/zarr/tests/test_meta.py index f9010d678..effc11355 100644 --- a/zarr/tests/test_meta.py +++ b/zarr/tests/test_meta.py @@ -9,18 +9,18 @@ from zarr.errors import MetadataError from zarr.meta import ( ZARR_FORMAT, + Metadata3, + _default_entry_point_metadata_v3, + _v3_complex_types, + _v3_datetime_types, decode_array_metadata, decode_dtype, + decode_fill_value, decode_group_metadata, encode_array_metadata, encode_dtype, encode_fill_value, - decode_fill_value, get_extended_dtype_info, - _v3_complex_types, - _v3_datetime_types, - _default_entry_point_metadata_v3, - Metadata3, ) from zarr.util import normalize_dtype, normalize_fill_value diff --git a/zarr/tests/test_meta_array.py b/zarr/tests/test_meta_array.py index 2545c6d62..9313dcdff 100644 --- a/zarr/tests/test_meta_array.py +++ b/zarr/tests/test_meta_array.py @@ -1,7 +1,7 @@ from typing import Optional + import numpy as np import pytest - from numcodecs.abc import Codec from numcodecs.compat import ensure_contiguous_ndarray_like from numcodecs.registry import get_codec, register_codec @@ -9,7 +9,7 @@ import zarr.codecs from zarr.core import Array from zarr.creation import array, empty, full, ones, open_array, zeros -from zarr.hierarchy import open_group, group +from zarr.hierarchy import group, open_group from zarr.storage import DirectoryStore, MemoryStore, Store, ZipStore diff --git a/zarr/tests/test_n5.py b/zarr/tests/test_n5.py index 2602aa06c..b66cc4fcf 100644 --- a/zarr/tests/test_n5.py +++ b/zarr/tests/test_n5.py @@ -1,14 +1,14 @@ +import atexit +import json +from typing import Tuple + +import numpy as np import pytest +from numcodecs import GZip -from zarr.n5 import N5ChunkWrapper, N5FSStore from zarr.creation import create +from zarr.n5 import N5ChunkWrapper, N5FSStore from zarr.storage import atexit_rmtree -from numcodecs import GZip -import numpy as np -from typing import Tuple -import json -import atexit - from zarr.tests.util import have_fsspec diff --git a/zarr/tests/test_storage.py b/zarr/tests/test_storage.py index da690f595..95357d142 100644 --- a/zarr/tests/test_storage.py +++ b/zarr/tests/test_storage.py @@ -3,9 +3,9 @@ import json import os import pathlib -import sys import pickle import shutil +import sys import tempfile from contextlib import contextmanager from pickle import PicklingError @@ -13,25 +13,26 @@ import numpy as np import pytest -from numpy.testing import assert_array_almost_equal, assert_array_equal - from numcodecs.compat import ensure_bytes +from numpy.testing import assert_array_almost_equal, assert_array_equal import zarr from zarr._storage.store import _get_hierarchy_metadata +from zarr._storage.v3 import KVStoreV3 from zarr.codecs import BZ2, AsType, Blosc, Zlib from zarr.context import Context from zarr.convenience import consolidate_metadata from zarr.errors import ContainsArrayError, ContainsGroupError, MetadataError from zarr.hierarchy import group from zarr.meta import ZARR_FORMAT, decode_array_metadata -from zarr.n5 import N5Store, N5FSStore, N5_FORMAT, n5_attrs_key +from zarr.n5 import N5_FORMAT, N5FSStore, N5Store, n5_attrs_key from zarr.storage import ( ABSStore, ConsolidatedMetadataStore, DBMStore, DictStore, DirectoryStore, + FSStore, KVStore, LMDBStore, LRUStoreCache, @@ -53,13 +54,13 @@ group_meta_key, init_array, init_group, - migrate_1to2, + listdir, meta_root, + migrate_1to2, normalize_store_arg, + rename, ) -from zarr.storage import FSStore, rename, listdir -from zarr._storage.v3 import KVStoreV3 -from zarr.tests.util import CountingDict, have_fsspec, skip_test_env_var, abs_container, mktemp +from zarr.tests.util import CountingDict, abs_container, have_fsspec, mktemp, skip_test_env_var from zarr.util import ConstantMap, json_dumps diff --git a/zarr/tests/test_storage_v3.py b/zarr/tests/test_storage_v3.py index e8675786e..608d0931d 100644 --- a/zarr/tests/test_storage_v3.py +++ b/zarr/tests/test_storage_v3.py @@ -11,23 +11,10 @@ import zarr from zarr._storage.store import ( + StorageTransformer, _get_hierarchy_metadata, assert_zarr_v3_api_available, v3_api_available, - StorageTransformer, -) -from zarr._storage.v3_storage_transformers import ShardingStorageTransformer, v3_sharding_available -from zarr.core import Array -from zarr.meta import _default_entry_point_metadata_v3 -from zarr.storage import ( - atexit_rmglob, - atexit_rmtree, - data_root, - default_compressor, - getsize, - init_array, - meta_root, - normalize_store_arg, ) from zarr._storage.v3 import ( ABSStoreV3, @@ -46,7 +33,20 @@ StoreV3, ZipStoreV3, ) -from zarr.tests.util import CountingDictV3, have_fsspec, skip_test_env_var, mktemp +from zarr._storage.v3_storage_transformers import ShardingStorageTransformer, v3_sharding_available +from zarr.core import Array +from zarr.meta import _default_entry_point_metadata_v3 +from zarr.storage import ( + atexit_rmglob, + atexit_rmtree, + data_root, + default_compressor, + getsize, + init_array, + meta_root, + normalize_store_arg, +) +from zarr.tests.util import CountingDictV3, have_fsspec, mktemp, skip_test_env_var # pytest will fail to run if the following fixtures aren't imported here from .test_storage import StoreTests as _StoreTests @@ -67,7 +67,6 @@ from .test_storage import TestZipStore as _TestZipStore from .test_storage import dimension_separator_fixture, s3, skip_if_nested_chunks # noqa - pytestmark = pytest.mark.skipif(not v3_api_available, reason="v3 api is not available") diff --git a/zarr/tests/test_util.py b/zarr/tests/test_util.py index d908c7b2d..27ba45462 100644 --- a/zarr/tests/test_util.py +++ b/zarr/tests/test_util.py @@ -23,8 +23,8 @@ normalize_shape, retry_call, tree_array_icon, - tree_group_icon, tree_get_icon, + tree_group_icon, tree_widget, ) diff --git a/zarr/tests/util.py b/zarr/tests/util.py index b3c3249ca..13175c042 100644 --- a/zarr/tests/util.py +++ b/zarr/tests/util.py @@ -2,13 +2,13 @@ import os import tempfile from typing import Any, Mapping, Sequence -from zarr.context import Context - -from zarr.storage import Store -from zarr._storage.v3 import StoreV3 import pytest +from zarr._storage.v3 import StoreV3 +from zarr.context import Context +from zarr.storage import Store + class CountingDict(Store): def __init__(self): @@ -94,8 +94,8 @@ def skip_test_env_var(name): def abs_container(): - from azure.core.exceptions import ResourceExistsError import azure.storage.blob as asb + from azure.core.exceptions import ResourceExistsError URL = "http://127.0.0.1:10000" ACCOUNT_NAME = "devstoreaccount1" diff --git a/zarr/util.py b/zarr/util.py index 8a96f92c2..60ec5808c 100644 --- a/zarr/util.py +++ b/zarr/util.py @@ -1,36 +1,37 @@ import inspect import json import math -import numbers -from textwrap import TextWrapper import mmap +import numbers import time +from textwrap import TextWrapper from typing import ( Any, Callable, Dict, + Iterable, Iterator, Mapping, Optional, Tuple, TypeVar, Union, - Iterable, cast, ) import numpy as np from asciitree import BoxStyle, LeftAligned from asciitree.traversal import Traversal +from numcodecs.blosc import cbuffer_metainfo, cbuffer_sizes from numcodecs.compat import ( - ensure_text, - ensure_ndarray_like, ensure_bytes, ensure_contiguous_ndarray_like, + ensure_ndarray_like, + ensure_text, ) from numcodecs.ndarray_like import NDArrayLike from numcodecs.registry import codec_registry -from numcodecs.blosc import cbuffer_sizes, cbuffer_metainfo + from zarr.types import DIMENSION_SEPARATOR KeyType = TypeVar("KeyType")