From 287dbd9db267fa826d2398e6339f2eda214fb4cf Mon Sep 17 00:00:00 2001 From: Joseph Hamman Date: Sat, 12 Oct 2024 21:42:14 -0700 Subject: [PATCH 01/36] ci: run test actions on support branch --- .github/workflows/minimal.yml | 4 ++-- .github/workflows/python-package.yml | 4 ++-- .github/workflows/windows-testing.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/minimal.yml b/.github/workflows/minimal.yml index b5b2f48d62..d166cd33df 100644 --- a/.github/workflows/minimal.yml +++ b/.github/workflows/minimal.yml @@ -4,9 +4,9 @@ name: Minimal installation on: push: - branches: [ main ] + branches: [ main, support/2.x ] pull_request: - branches: [ main ] + branches: [ main, support/2.x ] jobs: minimum_build: diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index b1be7e425d..2257ba8d5b 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -5,9 +5,9 @@ name: Linux Testing on: push: - branches: [ main ] + branches: [ main, support/2.x ] pull_request: - branches: [ main ] + branches: [ main, support/2.x ] jobs: build: diff --git a/.github/workflows/windows-testing.yml b/.github/workflows/windows-testing.yml index 1e22fec6d1..626f8cd4f3 100644 --- a/.github/workflows/windows-testing.yml +++ b/.github/workflows/windows-testing.yml @@ -5,9 +5,9 @@ name: Python package on: push: - branches: [ main ] + branches: [ main, support/2.x ] pull_request: - branches: [ main ] + branches: [ main, support/2.x ] jobs: windows: From fb3c24d42532be9af63d5c1297afc64346345fae Mon Sep 17 00:00:00 2001 From: Joseph Hamman Date: Sun, 13 Oct 2024 06:17:46 -0700 Subject: [PATCH 02/36] remove main, change branch name --- .github/workflows/minimal.yml | 4 ++-- .github/workflows/python-package.yml | 4 ++-- .github/workflows/windows-testing.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/minimal.yml b/.github/workflows/minimal.yml index d166cd33df..76e7951954 100644 --- a/.github/workflows/minimal.yml +++ b/.github/workflows/minimal.yml @@ -4,9 +4,9 @@ name: Minimal installation on: push: - branches: [ main, support/2.x ] + branches: [ support/v2 ] pull_request: - branches: [ main, support/2.x ] + branches: [ support/v2 ] jobs: minimum_build: diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 2257ba8d5b..5d62185764 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -5,9 +5,9 @@ name: Linux Testing on: push: - branches: [ main, support/2.x ] + branches: [ support/v2] pull_request: - branches: [ main, support/2.x ] + branches: [ support/v2] jobs: build: diff --git a/.github/workflows/windows-testing.yml b/.github/workflows/windows-testing.yml index 626f8cd4f3..5a6f45fdda 100644 --- a/.github/workflows/windows-testing.yml +++ b/.github/workflows/windows-testing.yml @@ -5,9 +5,9 @@ name: Python package on: push: - branches: [ main, support/2.x ] + branches: [ support/v2 ] pull_request: - branches: [ main, support/2.x ] + branches: [ support/v2 ] jobs: windows: From ed94877ff69d859f2e9d412e775e2887bc6c71bf Mon Sep 17 00:00:00 2001 From: David Stansby Date: Tue, 15 Oct 2024 18:22:31 +0100 Subject: [PATCH 03/36] Add Python 3.13, drop Python 3.10 (#2344) * Add Python 3.13, drop Python 3.10 * Add some doctest skips * Clarify release note --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/workflows/python-package.yml | 6 ++-- .github/workflows/windows-testing.yml | 2 +- docs/release.rst | 10 ++++++- docs/tutorial.rst | 6 ++-- pyproject.toml | 41 +++++++++------------------ zarr/storage.py | 3 +- 7 files changed, 34 insertions(+), 36 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 7b0c4dcfc4..a806c74ad9 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -27,7 +27,7 @@ body: attributes: label: Python Version description: Version of Python interpreter - placeholder: 3.10, 3.11, 3.12 etc. + placeholder: 3.11, 3.12, 3.13 etc. validations: required: true - type: input diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 5d62185764..811ecad2d6 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -15,11 +15,13 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.10', '3.11', '3.12'] + python-version: ['3.11', '3.12', '3.13'] numpy_version: ['>=2.1', '==1.24.*'] exclude: - python-version: '3.12' numpy_version: '==1.24.*' + - python-version: '3.13' + numpy_version: '==1.24.*' services: redis: image: redis @@ -50,7 +52,7 @@ jobs: - name: Create Conda environment with the rights deps shell: "bash -l {0}" run: | - conda create -n zarr-env python==${{matrix.python-version}} bsddb3 pip nodejs + conda create -n zarr-env python==${{matrix.python-version}} pip nodejs conda activate zarr-env npm install -g azurite - name: Install dependencies diff --git a/.github/workflows/windows-testing.yml b/.github/workflows/windows-testing.yml index 5a6f45fdda..8bd560fb2f 100644 --- a/.github/workflows/windows-testing.yml +++ b/.github/workflows/windows-testing.yml @@ -16,7 +16,7 @@ jobs: strategy: fail-fast: True matrix: - python-version: ['3.10', '3.11'] + python-version: ['3.11', '3.12'] steps: - uses: actions/checkout@v4 with: diff --git a/docs/release.rst b/docs/release.rst index a62d6a653c..74207d92d1 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -25,9 +25,17 @@ Release notes Enhancements ~~~~~~~~~~~~ +* Added testing on Python 3.13. Maintenance ~~~~~~~~~~~ +* Dropped support for Python 3.10. + By :user:`David Stansby ` (:issue:`2344`). +* Removed testing for compatibility with the ``bsddb3`` package. + ``bsddb3`` was last released four years ago, and should still work with + ``zarr-python`` if you can install it, but to reduce our maintenance + burden we will no longer run our compatibility tests for it. + By :user:`David Stansby ` (:issue:`2344`). Deprecations ~~~~~~~~~~~~ @@ -41,7 +49,7 @@ Enhancements ~~~~~~~~~~~~ * Added support for creating a copy of data when converting a `zarr.Array` to a numpy array. - By :user:`David Stansby ` (:issue:`2106`) and + By :user:`David Stansby ` (:issue:`2106`) and :user:`Joe Hamman ` (:issue:`2123`). Maintenance diff --git a/docs/tutorial.rst b/docs/tutorial.rst index 214dd4f63f..87c4a20103 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -811,6 +811,8 @@ storing an array or group. Here is an example using a Berkeley DB B-tree database for storage (requires `bsddb3 `_ to be installed):: +.. doctest-requires:: bsddb3 + >>> import bsddb3 >>> store = zarr.DBMStore('data/example.bdb', open=bsddb3.btopen) >>> root = zarr.group(store=store, overwrite=True) @@ -1009,12 +1011,12 @@ class from ``fsspec``. The following example demonstrates how to access a ZIP-archived Zarr group on s3 using `s3fs `_ and ``ZipFileSystem``: >>> s3_path = "s3://path/to/my.zarr.zip" - >>> + >>> >>> s3 = s3fs.S3FileSystem() >>> f = s3.open(s3_path) >>> fs = ZipFileSystem(f, mode="r") >>> store = FSMap("", fs, check=False) - >>> + >>> >>> # caching may improve performance when repeatedly reading the same data >>> cache = zarr.storage.LRUStoreCache(store, max_size=2**28) >>> z = zarr.group(store=cache) diff --git a/pyproject.toml b/pyproject.toml index ec06b63a96..c5ff73a102 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,19 +7,15 @@ build-backend = "setuptools.build_meta" name = "zarr" description = "An implementation of chunked, compressed, N-dimensional arrays for Python" readme = { file = "README.md", content-type = "text/markdown" } -maintainers = [ - { name = "Alistair Miles", email = "alimanfoo@googlemail.com" } -] -requires-python = ">=3.10" +maintainers = [{ name = "Alistair Miles", email = "alimanfoo@googlemail.com" }] +requires-python = ">=3.11" dependencies = [ 'asciitree', 'numpy>=1.24', 'fasteners; sys_platform != "emscripten"', 'numcodecs>=0.10.0', ] -dynamic = [ - "version", -] +dynamic = ["version"] classifiers = [ 'Development Status :: 6 - Mature', 'Intended Audience :: Developers', @@ -30,18 +26,14 @@ classifiers = [ 'Topic :: Software Development :: Libraries :: Python Modules', 'Operating System :: Unix', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', + 'Programming Language :: Python :: 3.13', ] license = { text = "MIT" } [project.optional-dependencies] -jupyter = [ - 'notebook', - 'ipytree>=0.2.2', - 'ipywidgets>=8.0.0', -] +jupyter = ['notebook', 'ipytree>=0.2.2', 'ipywidgets>=8.0.0'] docs = [ 'sphinx', 'sphinx-automodapi', @@ -64,14 +56,11 @@ Homepage = "https://github.com/zarr-developers/zarr-python" exclude_lines = [ "pragma: no cover", "pragma: ${PY_MAJOR_VERSION} no cover", - '.*\.\.\.' # Ignore "..." lines + '.*\.\.\.', # Ignore "..." lines ] [tool.coverage.run] -omit = [ - "zarr/meta_v1.py", - "bench/compress_normal.py", -] +omit = ["zarr/meta_v1.py", "bench/compress_normal.py"] [tool.setuptools] packages = ["zarr", "zarr._storage", "zarr.tests"] @@ -100,14 +89,12 @@ exclude = [ "build", "dist", "venv", - "docs" + "docs", ] [tool.ruff.lint] -extend-select = [ - "B" -] -ignore = ["B905"] # zip-without-explicit-strict +extend-select = ["B"] +ignore = ["B905"] # zip-without-explicit-strict [tool.black] line-length = 100 @@ -136,9 +123,7 @@ doctest_optionflags = [ "ELLIPSIS", "IGNORE_EXCEPTION_DETAIL", ] -addopts = [ - "--durations=10", -] +addopts = ["--durations=10"] filterwarnings = [ "error:::zarr.*", "ignore:PY_SSIZE_T_CLEAN will be required.*:DeprecationWarning", @@ -146,9 +131,9 @@ filterwarnings = [ "ignore:The .* is deprecated and will be removed in a Zarr-Python version 3*:FutureWarning", "ignore:The experimental Zarr V3 implementation in this version .*:FutureWarning", ] -doctest_subpackage_requires =[ +doctest_subpackage_requires = [ "zarr/core.py = numpy>=2", - "zarr/creation.py = numpy>=2" + "zarr/creation.py = numpy>=2", ] diff --git a/zarr/storage.py b/zarr/storage.py index f412870f75..7e5e966bc1 100644 --- a/zarr/storage.py +++ b/zarr/storage.py @@ -1686,7 +1686,6 @@ class NestedDirectoryStore(DirectoryStore): def __init__( self, path, normalize_keys=False, dimension_separator: Optional[DIMENSION_SEPARATOR] = "/" ): - warnings.warn( V3_DEPRECATION_MESSAGE.format(store=self.__class__.__name__), FutureWarning, @@ -2070,6 +2069,8 @@ class DBMStore(Store): `_ package is installed, a Berkeley DB database can be used:: + .. doctest-requires:: bsddb3 + >>> import bsddb3 >>> store = zarr.DBMStore('data/array.bdb', open=bsddb3.btopen) >>> z = zarr.zeros((10, 10), chunks=(5, 5), store=store, overwrite=True) From 8cb38370499112e54f562ae6894eef5641d85897 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Wed, 11 Dec 2024 16:23:23 +0000 Subject: [PATCH 04/36] Exclude bad version of numcodecs & fix bsddb3 doctests (#2544) * Exclude bad version of numcodecs Actually exclude bad version of numcodecs Fix changelog entry * Add pytest-doctestplus doc dep Fix doctest requires Try bumping version of pytest-doctestplus Fixup doctest requires * Exclude other bad version of numcodecs * Add pytest doctestplus extension * Fix skipping in docstring * Remove bsddb3 tests * Pin max version of numpy --- docs/conf.py | 1 + docs/release.rst | 3 +++ docs/tutorial.rst | 2 +- pyproject.toml | 7 ++++--- requirements_dev_optional.txt | 2 +- zarr/storage.py | 12 +++++------- zarr/tests/test_core.py | 31 ------------------------------- zarr/tests/test_hierarchy.py | 21 --------------------- zarr/tests/test_storage.py | 9 --------- zarr/tests/test_storage_v3.py | 10 ---------- 10 files changed, 15 insertions(+), 83 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 136fcf32d6..f900a74520 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -44,6 +44,7 @@ "sphinx_issues", "sphinx_copybutton", "sphinx_design", + "pytest_doctestplus.sphinx.doctestplus", ] numpydoc_show_class_members = False diff --git a/docs/release.rst b/docs/release.rst index 74207d92d1..b764f03a3c 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -36,6 +36,9 @@ Maintenance ``zarr-python`` if you can install it, but to reduce our maintenance burden we will no longer run our compatibility tests for it. By :user:`David Stansby ` (:issue:`2344`). +* Excluded versions 0.14.0 and 0.14.1 of numcodecs, due to a bug in the implementation of + the Delta filter (see https://github.com/zarr-developers/numcodecs/issues/653 for more information). + By :user:`David Stansby ` (:issue:`2544`). Deprecations ~~~~~~~~~~~~ diff --git a/docs/tutorial.rst b/docs/tutorial.rst index 87c4a20103..b94cf3fa1c 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -809,7 +809,7 @@ Another storage alternative is the :class:`zarr.storage.DBMStore` class, added in Zarr version 2.2. This class allows any DBM-style database to be used for storing an array or group. Here is an example using a Berkeley DB B-tree database for storage (requires `bsddb3 -`_ to be installed):: +`_ to be installed): .. doctest-requires:: bsddb3 diff --git a/pyproject.toml b/pyproject.toml index c5ff73a102..9776de7bf4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,9 +11,9 @@ maintainers = [{ name = "Alistair Miles", email = "alimanfoo@googlemail.com" }] requires-python = ">=3.11" dependencies = [ 'asciitree', - 'numpy>=1.24', + 'numpy>=1.24,<2.2', 'fasteners; sys_platform != "emscripten"', - 'numcodecs>=0.10.0', + 'numcodecs>=0.10.0,!=0.14.0,!=0.14.1', ] dynamic = ["version"] classifiers = [ @@ -42,7 +42,8 @@ docs = [ 'sphinx-copybutton', 'pydata-sphinx-theme', 'numpydoc', - 'numcodecs[msgpack]', + 'numcodecs[msgpack]!=0.14.0,!=0.14.1', + 'pytest-doctestplus', ] [project.urls] diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index df1d4fd793..a2d23a7841 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -15,7 +15,7 @@ pymongo==4.10.1 # optional test requirements coverage pytest-cov==5.0.0 -pytest-doctestplus==1.2.1 +pytest-doctestplus==1.3.0 pytest-timeout==2.3.1 h5py==3.12.1 fsspec==2023.12.2 diff --git a/zarr/storage.py b/zarr/storage.py index 7e5e966bc1..5d48892611 100644 --- a/zarr/storage.py +++ b/zarr/storage.py @@ -2069,13 +2069,11 @@ class DBMStore(Store): `_ package is installed, a Berkeley DB database can be used:: - .. doctest-requires:: bsddb3 - - >>> import bsddb3 - >>> store = zarr.DBMStore('data/array.bdb', open=bsddb3.btopen) - >>> z = zarr.zeros((10, 10), chunks=(5, 5), store=store, overwrite=True) - >>> z[...] = 42 - >>> store.close() + >>> import bsddb3 # doctest: +SKIP + >>> store = zarr.DBMStore('data/array.bdb', open=bsddb3.btopen) # doctest: +SKIP + >>> z = zarr.zeros((10, 10), chunks=(5, 5), store=store, overwrite=True) # doctest: +SKIP + >>> z[...] = 42 # doctest: +SKIP + >>> store.close() # doctest: +SKIP Notes ----- diff --git a/zarr/tests/test_core.py b/zarr/tests/test_core.py index 4729dc01b6..3eb0fa71c8 100644 --- a/zarr/tests/test_core.py +++ b/zarr/tests/test_core.py @@ -1,5 +1,4 @@ import atexit -import os import sys import pickle import shutil @@ -75,7 +74,6 @@ from zarr.util import buffer_size from zarr.tests.util import ( abs_container, - have_bsddb3, have_fsspec, have_lmdb, have_sqlite3, @@ -2046,20 +2044,6 @@ def test_nbytes_stored(self): pass # not implemented -@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3") -class TestArrayWithDBMStoreBerkeleyDB(TestArray): - def create_store(self): - import bsddb3 - - path = mktemp(suffix=".dbm") - atexit.register(os.remove, path) - store = DBMStore(path, flag="n", open=bsddb3.btopen) - return store - - def test_nbytes_stored(self): - pass # not implemented - - @pytest.mark.skipif(have_lmdb is False, reason="needs lmdb") class TestArrayWithLMDBStore(TestArray): def create_store(self): @@ -2767,21 +2751,6 @@ def test_nbytes_stored(self): pass # not implemented -@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled") -@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3") -class TestArrayWithDBMStoreV3BerkeleyDB(TestArrayV3): - def create_store(self) -> DBMStoreV3: - import bsddb3 - - path = mktemp(suffix=".dbm") - atexit.register(os.remove, path) - store = DBMStoreV3(path, flag="n", open=bsddb3.btopen) - return store - - def test_nbytes_stored(self): - pass # not implemented - - @pytest.mark.skipif(not v3_api_available, reason="V3 is disabled") @pytest.mark.skipif(have_lmdb is False, reason="needs lmdb") class TestArrayWithLMDBStoreV3(TestArrayV3): diff --git a/zarr/tests/test_hierarchy.py b/zarr/tests/test_hierarchy.py index 161e1eb813..8a03616637 100644 --- a/zarr/tests/test_hierarchy.py +++ b/zarr/tests/test_hierarchy.py @@ -1439,27 +1439,6 @@ def create_store(): return store, None -class TestGroupWithDBMStoreBerkeleyDB(TestGroup): - @staticmethod - def create_store(): - bsddb3 = pytest.importorskip("bsddb3") - path = mktemp(suffix=".dbm") - atexit.register(os.remove, path) - store = DBMStore(path, flag="n", open=bsddb3.btopen) - return store, None - - -@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled") -class TestGroupV3WithDBMStoreBerkeleyDB(TestGroupWithDBMStoreBerkeleyDB, TestGroupV3): - @staticmethod - def create_store(): - bsddb3 = pytest.importorskip("bsddb3") - path = mktemp(suffix=".dbm") - atexit.register(os.remove, path) - store = DBMStoreV3(path, flag="n", open=bsddb3.btopen) - return store, None - - class TestGroupWithLMDBStore(TestGroup): @staticmethod def create_store(): diff --git a/zarr/tests/test_storage.py b/zarr/tests/test_storage.py index da690f5959..d72718d77a 100644 --- a/zarr/tests/test_storage.py +++ b/zarr/tests/test_storage.py @@ -1932,15 +1932,6 @@ def create_store(self, **kwargs): return store # pragma: no cover -class TestDBMStoreBerkeleyDB(TestDBMStore): - def create_store(self, **kwargs): - bsddb3 = pytest.importorskip("bsddb3") - path = mktemp(suffix=".dbm") - atexit.register(os.remove, path) - store = DBMStore(path, flag="n", open=bsddb3.btopen, write_lock=False, **kwargs) - return store - - class TestLMDBStore(StoreTests): def create_store(self, **kwargs): pytest.importorskip("lmdb") diff --git a/zarr/tests/test_storage_v3.py b/zarr/tests/test_storage_v3.py index e8675786e0..47e19d911b 100644 --- a/zarr/tests/test_storage_v3.py +++ b/zarr/tests/test_storage_v3.py @@ -53,7 +53,6 @@ from .test_storage import TestABSStore as _TestABSStore from .test_storage import TestConsolidatedMetadataStore as _TestConsolidatedMetadataStore from .test_storage import TestDBMStore as _TestDBMStore -from .test_storage import TestDBMStoreBerkeleyDB as _TestDBMStoreBerkeleyDB from .test_storage import TestDBMStoreDumb as _TestDBMStoreDumb from .test_storage import TestDBMStoreGnu as _TestDBMStoreGnu from .test_storage import TestDBMStoreNDBM as _TestDBMStoreNDBM @@ -465,15 +464,6 @@ def create_store(self, **kwargs): return store # pragma: no cover -class TestDBMStoreV3BerkeleyDB(_TestDBMStoreBerkeleyDB, StoreV3Tests): - def create_store(self, **kwargs): - bsddb3 = pytest.importorskip("bsddb3") - path = mktemp(suffix=".dbm") - atexit.register(os.remove, path) - store = DBMStoreV3(path, flag="n", open=bsddb3.btopen, write_lock=False, **kwargs) - return store - - class TestLMDBStoreV3(_TestLMDBStore, StoreV3Tests): def create_store(self, **kwargs): pytest.importorskip("lmdb") From 10a4629b7c2f01cb229fdc709686f6c53a961719 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Thu, 12 Dec 2024 13:56:49 +0000 Subject: [PATCH 05/36] Fix doc version in stable doc build (#2543) --- .readthedocs.yaml | 3 +++ docs/conf.py | 2 +- pyproject.toml | 5 ++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index d7190b4771..d407808e78 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -4,6 +4,9 @@ build: os: ubuntu-20.04 tools: python: "3.11" + jobs: + post_checkout: + - git fetch --unshallow || true sphinx: configuration: docs/conf.py diff --git a/docs/conf.py b/docs/conf.py index f900a74520..31dc7da204 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -73,8 +73,8 @@ copyright = "2024, Zarr Developers" author = "Zarr Developers" -version = get_version("zarr") release = get_version("zarr") +version = get_version("zarr") # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/pyproject.toml b/pyproject.toml index 9776de7bf4..abc825162c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools>=64.0.0", "setuptools-scm>1.5.4"] +requires = ["setuptools>=64", "setuptools-scm>8"] build-backend = "setuptools.build_meta" @@ -68,9 +68,8 @@ packages = ["zarr", "zarr._storage", "zarr.tests"] license-files = ["LICENSE.txt"] [tool.setuptools_scm] -version_scheme = "guess-next-dev" local_scheme = "dirty-tag" -write_to = "zarr/version.py" +version_file = "zarr/version.py" [tool.ruff] line-length = 100 From b16b74341ec354a3fc4c9f76ce8ab95c1c875dea Mon Sep 17 00:00:00 2001 From: David Stansby Date: Thu, 12 Dec 2024 15:22:15 +0000 Subject: [PATCH 06/36] Un-pin numpy (#2552) * Un-pin numpy * Fix doctests --------- Co-authored-by: Davis Bennett --- pyproject.toml | 2 +- zarr/convenience.py | 34 ++++++++++++++++++---------------- zarr/core.py | 17 +++++++++-------- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index abc825162c..ed643e496f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ maintainers = [{ name = "Alistair Miles", email = "alimanfoo@googlemail.com" }] requires-python = ">=3.11" dependencies = [ 'asciitree', - 'numpy>=1.24,<2.2', + 'numpy>=1.24', 'fasteners; sys_platform != "emscripten"', 'numcodecs>=0.10.0,!=0.14.0,!=0.14.1', ] diff --git a/zarr/convenience.py b/zarr/convenience.py index bd284e0844..a3cd702c9d 100644 --- a/zarr/convenience.py +++ b/zarr/convenience.py @@ -31,6 +31,8 @@ _builtin_open = open # builtin open is later shadowed by a local open function +__doctest_requires__ = {("*"): ["numpy>=2.2"]} + def _check_and_update_path(store: BaseStore, path): if getattr(store, "_store_version", 2) > 2 and not path: @@ -174,13 +176,13 @@ def save_array(store: StoreLike, arr, *, zarr_version=None, path=None, **kwargs) >>> arr = np.arange(10000) >>> zarr.save_array('data/example.zarr', arr) >>> zarr.load('data/example.zarr') - array([ 0, 1, 2, ..., 9997, 9998, 9999]) + array([ 0, 1, 2, ..., 9997, 9998, 9999], shape=(10000,)) Save an array to a single file (uses a :class:`ZipStore`):: >>> zarr.save_array('data/example.zip', arr) >>> zarr.load('data/example.zip') - array([ 0, 1, 2, ..., 9997, 9998, 9999]) + array([ 0, 1, 2, ..., 9997, 9998, 9999], shape=(10000,)) """ may_need_closing = _might_close(store) @@ -234,9 +236,9 @@ def save_group(store: StoreLike, *args, zarr_version=None, path=None, **kwargs): >>> loader >>> loader['arr_0'] - array([ 0, 1, 2, ..., 9997, 9998, 9999]) + array([ 0, 1, 2, ..., 9997, 9998, 9999], shape=(10000,)) >>> loader['arr_1'] - array([10000, 9999, 9998, ..., 3, 2, 1]) + array([10000, 9999, 9998, ..., 3, 2, 1], shape=(10000,)) Save several arrays using named keyword arguments:: @@ -245,9 +247,9 @@ def save_group(store: StoreLike, *args, zarr_version=None, path=None, **kwargs): >>> loader >>> loader['foo'] - array([ 0, 1, 2, ..., 9997, 9998, 9999]) + array([ 0, 1, 2, ..., 9997, 9998, 9999], shape=(10000,)) >>> loader['bar'] - array([10000, 9999, 9998, ..., 3, 2, 1]) + array([10000, 9999, 9998, ..., 3, 2, 1], shape=(10000,)) Store several arrays in a single zip file (uses a :class:`ZipStore`):: @@ -256,9 +258,9 @@ def save_group(store: StoreLike, *args, zarr_version=None, path=None, **kwargs): >>> loader >>> loader['foo'] - array([ 0, 1, 2, ..., 9997, 9998, 9999]) + array([ 0, 1, 2, ..., 9997, 9998, 9999], shape=(10000,)) >>> loader['bar'] - array([10000, 9999, 9998, ..., 3, 2, 1]) + array([10000, 9999, 9998, ..., 3, 2, 1], shape=(10000,)) Notes ----- @@ -316,13 +318,13 @@ def save(store: StoreLike, *args, zarr_version=None, path=None, **kwargs): >>> arr = np.arange(10000) >>> zarr.save('data/example.zarr', arr) >>> zarr.load('data/example.zarr') - array([ 0, 1, 2, ..., 9997, 9998, 9999]) + array([ 0, 1, 2, ..., 9997, 9998, 9999], shape=(10000,)) Save an array to a Zip file (uses a :class:`ZipStore`):: >>> zarr.save('data/example.zip', arr) >>> zarr.load('data/example.zip') - array([ 0, 1, 2, ..., 9997, 9998, 9999]) + array([ 0, 1, 2, ..., 9997, 9998, 9999], shape=(10000,)) Save several arrays to a directory on the file system (uses a :class:`DirectoryStore` and stores arrays in a group):: @@ -336,9 +338,9 @@ def save(store: StoreLike, *args, zarr_version=None, path=None, **kwargs): >>> loader >>> loader['arr_0'] - array([ 0, 1, 2, ..., 9997, 9998, 9999]) + array([ 0, 1, 2, ..., 9997, 9998, 9999], shape=(10000,)) >>> loader['arr_1'] - array([10000, 9999, 9998, ..., 3, 2, 1]) + array([10000, 9999, 9998, ..., 3, 2, 1], shape=(10000,)) Save several arrays using named keyword arguments:: @@ -347,9 +349,9 @@ def save(store: StoreLike, *args, zarr_version=None, path=None, **kwargs): >>> loader >>> loader['foo'] - array([ 0, 1, 2, ..., 9997, 9998, 9999]) + array([ 0, 1, 2, ..., 9997, 9998, 9999], shape=(10000,)) >>> loader['bar'] - array([10000, 9999, 9998, ..., 3, 2, 1]) + array([10000, 9999, 9998, ..., 3, 2, 1], shape=(10000,)) Store several arrays in a single zip file (uses a :class:`ZipStore`):: @@ -358,9 +360,9 @@ def save(store: StoreLike, *args, zarr_version=None, path=None, **kwargs): >>> loader >>> loader['foo'] - array([ 0, 1, 2, ..., 9997, 9998, 9999]) + array([ 0, 1, 2, ..., 9997, 9998, 9999], shape=(10000,)) >>> loader['bar'] - array([10000, 9999, 9998, ..., 3, 2, 1]) + array([10000, 9999, 9998, ..., 3, 2, 1], shape=(10000,)) See Also -------- diff --git a/zarr/core.py b/zarr/core.py index d13da27bc6..817de34528 100644 --- a/zarr/core.py +++ b/zarr/core.py @@ -61,6 +61,7 @@ ) __all__ = ["Array"] +__doctest_requires__ = {("*"): ["numpy>=2.2"]} # noinspection PyUnresolvedReferences @@ -2793,12 +2794,12 @@ def view( >>> a = zarr.array(data, chunks=1000, filters=filters) >>> a[:] array(['female', 'male', 'female', ..., 'male', 'male', 'female'], - dtype='>> v = a.view(dtype='u1', filters=[]) >>> v.is_view True >>> v[:] - array([1, 2, 1, ..., 2, 2, 1], dtype=uint8) + array([1, 2, 1, ..., 2, 2, 1], shape=(10000,), dtype=uint8) Views can be used to modify data: @@ -2806,20 +2807,20 @@ def view( >>> x.sort() >>> v[:] = x >>> v[:] - array([1, 1, 1, ..., 2, 2, 2], dtype=uint8) + array([1, 1, 1, ..., 2, 2, 2], shape=(10000,), dtype=uint8) >>> a[:] array(['female', 'female', 'female', ..., 'male', 'male', 'male'], - dtype='>> data = np.random.randint(0, 2, size=10000, dtype='u1') >>> a = zarr.array(data, chunks=1000) >>> a[:] - array([0, 0, 1, ..., 1, 0, 0], dtype=uint8) + array([0, 0, 1, ..., 1, 0, 0], shape=(10000,), dtype=uint8) >>> v = a.view(dtype=bool) >>> v[:] - array([False, False, True, ..., True, False, False]) + array([False, False, True, ..., True, False, False], shape=(10000,)) >>> np.all(a[:].view(dtype=bool) == v[:]) np.True_ @@ -2841,10 +2842,10 @@ def view( >>> a = zarr.full(10000, chunks=1000, fill_value=-1, dtype='i1') >>> a[:] - array([-1, -1, -1, ..., -1, -1, -1], dtype=int8) + array([-1, -1, -1, ..., -1, -1, -1], shape=(10000,), dtype=int8) >>> v = a.view(fill_value=42) >>> v[:] - array([42, 42, 42, ..., 42, 42, 42], dtype=int8) + array([42, 42, 42, ..., 42, 42, 42], shape=(10000,), dtype=int8) Note that resizing or appending to views is not permitted: From 2ab280aef94a5990418c96516ab7d365be1b7499 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Thu, 12 Dec 2024 15:59:53 +0000 Subject: [PATCH 07/36] Mark 2.18.4 as released (#2553) --- docs/release.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/release.rst b/docs/release.rst index b764f03a3c..3ee304bd7a 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -20,8 +20,8 @@ Release notes .. _release_2.18.4: -2.18.4 (unreleased) -------------------- +2.18.4 +------ Enhancements ~~~~~~~~~~~~ From c969f5c1e38906f9be44bbbabe2fcb8ac4c60678 Mon Sep 17 00:00:00 2001 From: Florian Aymanns Date: Sat, 28 Dec 2024 17:26:49 +0100 Subject: [PATCH 08/36] Warn the user when shape or chunks contains float values (#2579) * Warn user when shape or chunks contains non-integer values like floats * Test for non-integer warnings --- zarr/tests/test_creation.py | 9 ++++++++- zarr/tests/test_util.py | 3 ++- zarr/util.py | 6 ++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/zarr/tests/test_creation.py b/zarr/tests/test_creation.py index 8e586abfff..3778141356 100644 --- a/zarr/tests/test_creation.py +++ b/zarr/tests/test_creation.py @@ -2,6 +2,7 @@ import os.path import shutil import warnings +import numbers import numpy as np import pytest @@ -762,7 +763,13 @@ def test_create_with_storage_transformers(at_root): ) def test_shape_chunk_ints(init_shape, init_chunks, shape, chunks): g = open_group() - array = g.create_dataset("ds", shape=init_shape, chunks=init_chunks, dtype=np.uint8) + if not isinstance(init_shape[0], numbers.Integral) or not isinstance( + init_chunks[0], numbers.Integral + ): + with pytest.warns(UserWarning): + array = g.create_dataset("ds", shape=init_shape, chunks=init_chunks, dtype=np.uint8) + else: + array = g.create_dataset("ds", shape=init_shape, chunks=init_chunks, dtype=np.uint8) assert all( isinstance(s, int) for s in array.shape diff --git a/zarr/tests/test_util.py b/zarr/tests/test_util.py index d908c7b2d7..2b71566300 100644 --- a/zarr/tests/test_util.py +++ b/zarr/tests/test_util.py @@ -44,7 +44,8 @@ def test_normalize_shape(): with pytest.raises(TypeError): normalize_shape(None) with pytest.raises(ValueError): - normalize_shape("foo") + with pytest.warns(UserWarning): + normalize_shape("foo") def test_normalize_chunks(): diff --git a/zarr/util.py b/zarr/util.py index 8a96f92c24..2c9b0f616b 100644 --- a/zarr/util.py +++ b/zarr/util.py @@ -18,6 +18,7 @@ Iterable, cast, ) +import warnings import numpy as np from asciitree import BoxStyle, LeftAligned @@ -88,6 +89,8 @@ def normalize_shape(shape: Union[int, Tuple[int, ...], None]) -> Tuple[int, ...] # normalize shape = cast(Tuple[int, ...], shape) + if not all(isinstance(s, numbers.Integral) for s in shape): + warnings.warn("shape contains non-integer value(s)", UserWarning, stacklevel=2) shape = tuple(int(s) for s in shape) return shape @@ -176,6 +179,9 @@ def normalize_chunks(chunks: Any, shape: Tuple[int, ...], typesize: int) -> Tupl if -1 in chunks or None in chunks: chunks = tuple(s if c == -1 or c is None else int(c) for s, c in zip(shape, chunks)) + if not all(isinstance(c, numbers.Integral) for c in chunks): + warnings.warn("chunks contains non-integer value(s)", UserWarning, stacklevel=2) + chunks = tuple(int(c) for c in chunks) return chunks From b00325e1c5960cc0032d693d8c0a5b4a9447e609 Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: Thu, 16 Jan 2025 14:02:44 -0800 Subject: [PATCH 09/36] array tests: handle different hexdigests from zlib-ng (#1678) (#1972) As explained in the issue, zlib-ng produces different hex digests from original zlib. This adjusts the tests slightly to allow for this. Signed-off-by: Adam Williamson Co-authored-by: David Stansby --- .github/workflows/python-package.yml | 8 +- zarr/tests/test_core.py | 457 ++++++++++++++++----------- 2 files changed, 280 insertions(+), 185 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 811ecad2d6..6db547f9b8 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -17,11 +17,17 @@ jobs: matrix: python-version: ['3.11', '3.12', '3.13'] numpy_version: ['>=2.1', '==1.24.*'] + condadeps: [''] exclude: - python-version: '3.12' numpy_version: '==1.24.*' - python-version: '3.13' numpy_version: '==1.24.*' + include: + - python-version: '3.13' + numpy_version: '>=2.1' + # to test alternate hexdigests with zlib-ng + condadeps: 'zlib-ng' services: redis: image: redis @@ -52,7 +58,7 @@ jobs: - name: Create Conda environment with the rights deps shell: "bash -l {0}" run: | - conda create -n zarr-env python==${{matrix.python-version}} pip nodejs + conda create -n zarr-env python==${{matrix.python-version}} pip nodejs ${{matrix.condadeps}} conda activate zarr-env npm install -g azurite - name: Install dependencies diff --git a/zarr/tests/test_core.py b/zarr/tests/test_core.py index 3eb0fa71c8..812eb61700 100644 --- a/zarr/tests/test_core.py +++ b/zarr/tests/test_core.py @@ -624,13 +624,24 @@ def test_setitem_data_not_shared(self): def expected(self): # tests for array without path will not be run for v3 stores assert self.version == 2 - return [ - "063b02ff8d9d3bab6da932ad5828b506ef0a6578", - "f97b84dc9ffac807415f750100108764e837bb82", - "c7190ad2bea1e9d2e73eaa2d3ca9187be1ead261", - "14470724dca6c1837edddedc490571b6a7f270bc", - "2a1046dd99b914459b3e86be9dde05027a07d209", - ] + return ( + # zlib + [ + "063b02ff8d9d3bab6da932ad5828b506ef0a6578", + "f97b84dc9ffac807415f750100108764e837bb82", + "c7190ad2bea1e9d2e73eaa2d3ca9187be1ead261", + "14470724dca6c1837edddedc490571b6a7f270bc", + "2a1046dd99b914459b3e86be9dde05027a07d209", + ], + # zlib-ng + [ + "063b02ff8d9d3bab6da932ad5828b506ef0a6578", + "f97b84dc9ffac807415f750100108764e837bb82", + "c7190ad2bea1e9d2e73eaa2d3ca9187be1ead261", + "f3f04f0e30844739d34ef8a9eee6c949a47840b8", + "2a1046dd99b914459b3e86be9dde05027a07d209", + ], + ) def test_hexdigest(self): found = [] @@ -669,7 +680,7 @@ def test_hexdigest(self): found.append(z.hexdigest()) z.store.close() - assert self.expected() == found + assert found in self.expected() def test_resize_1d(self): z = self.create_array(shape=105, chunks=10, dtype="i4", fill_value=0) @@ -1618,13 +1629,15 @@ def test_nchunks_initialized(self): pass def expected(self): - return [ - "f710da18d45d38d4aaf2afd7fb822fdd73d02957", - "1437428e69754b1e1a38bd7fc9e43669577620db", - "6c530b6b9d73e108cc5ee7b6be3d552cc994bdbe", - "4c0a76fb1222498e09dcd92f7f9221d6cea8b40e", - "05b0663ffe1785f38d3a459dec17e57a18f254af", - ] + return ( + [ + "f710da18d45d38d4aaf2afd7fb822fdd73d02957", + "1437428e69754b1e1a38bd7fc9e43669577620db", + "6c530b6b9d73e108cc5ee7b6be3d552cc994bdbe", + "4c0a76fb1222498e09dcd92f7f9221d6cea8b40e", + "05b0663ffe1785f38d3a459dec17e57a18f254af", + ], + ) def test_nbytes_stored(self): # MemoryStore as store @@ -1651,13 +1664,15 @@ def create_chunk_store(self): return KVStore(dict()) def expected(self): - return [ - "f710da18d45d38d4aaf2afd7fb822fdd73d02957", - "1437428e69754b1e1a38bd7fc9e43669577620db", - "6c530b6b9d73e108cc5ee7b6be3d552cc994bdbe", - "4c0a76fb1222498e09dcd92f7f9221d6cea8b40e", - "05b0663ffe1785f38d3a459dec17e57a18f254af", - ] + return ( + [ + "f710da18d45d38d4aaf2afd7fb822fdd73d02957", + "1437428e69754b1e1a38bd7fc9e43669577620db", + "6c530b6b9d73e108cc5ee7b6be3d552cc994bdbe", + "4c0a76fb1222498e09dcd92f7f9221d6cea8b40e", + "05b0663ffe1785f38d3a459dec17e57a18f254af", + ], + ) def test_nbytes_stored(self): z = self.create_array(shape=1000, chunks=100) @@ -1727,13 +1742,24 @@ def create_store(self): return store def expected(self): - return [ - "d174aa384e660eb51c6061fc8d20850c1159141f", - "125f00eea40032f16016b292f6767aa3928c00a7", - "1b52ead0ed889a781ebd4db077a29e35d513c1f3", - "719a88b34e362ff65df30e8f8810c1146ab72bc1", - "6e0abf30daf45de51593c227fb907759ca725551", - ] + return ( + # zlib + [ + "d174aa384e660eb51c6061fc8d20850c1159141f", + "125f00eea40032f16016b292f6767aa3928c00a7", + "1b52ead0ed889a781ebd4db077a29e35d513c1f3", + "719a88b34e362ff65df30e8f8810c1146ab72bc1", + "6e0abf30daf45de51593c227fb907759ca725551", + ], + # zlib-ng + [ + "d174aa384e660eb51c6061fc8d20850c1159141f", + "125f00eea40032f16016b292f6767aa3928c00a7", + "1b52ead0ed889a781ebd4db077a29e35d513c1f3", + "42d9c96e60ed22346c4671bc5bec32a2078ce25c", + "6e0abf30daf45de51593c227fb907759ca725551", + ], + ) class TestArrayWithN5Store(TestArrayWithDirectoryStore): @@ -2015,13 +2041,24 @@ def test_compressors(self): assert np.all(a2[:] == 1) def expected(self): - return [ - "8811a77d54caaa1901d5cc4452d946ae433c8d90", - "d880b007d9779db5f2cdbe13274eb1cbac4a425a", - "d80eb66d5521744f051e816ab368d8ccfc2e3edf", - "568f9f837e4b682a3819cb122988e2eebeb6572b", - "4fdf4475d786d6694110db5619acd30c80dfc372", - ] + return ( + # zlib + [ + "8811a77d54caaa1901d5cc4452d946ae433c8d90", + "d880b007d9779db5f2cdbe13274eb1cbac4a425a", + "d80eb66d5521744f051e816ab368d8ccfc2e3edf", + "568f9f837e4b682a3819cb122988e2eebeb6572b", + "4fdf4475d786d6694110db5619acd30c80dfc372", + ], + # zlib-ng + [ + "8811a77d54caaa1901d5cc4452d946ae433c8d90", + "d880b007d9779db5f2cdbe13274eb1cbac4a425a", + "d80eb66d5521744f051e816ab368d8ccfc2e3edf", + "ea7d9e80211679291141840b111775b088e51480", + "4fdf4475d786d6694110db5619acd30c80dfc372", + ], + ) @pytest.mark.skipif(have_fsspec is False, reason="needs fsspec") @@ -2087,39 +2124,45 @@ class TestArrayWithNoCompressor(TestArray): compressor = None def expected(self): - return [ - "d3da3d485de4a5fcc6d91f9dfc6a7cba9720c561", - "443b8dee512e42946cb63ff01d28e9bee8105a5f", - "b75eb90f68aa8ee1e29f2c542e851d3945066c54", - "42b6ae0d50ec361628736ab7e68fe5fefca22136", - "a0535f31c130f5e5ac66ba0713d1c1ceaebd089b", - ] + return ( + [ + "d3da3d485de4a5fcc6d91f9dfc6a7cba9720c561", + "443b8dee512e42946cb63ff01d28e9bee8105a5f", + "b75eb90f68aa8ee1e29f2c542e851d3945066c54", + "42b6ae0d50ec361628736ab7e68fe5fefca22136", + "a0535f31c130f5e5ac66ba0713d1c1ceaebd089b", + ], + ) class TestArrayWithBZ2Compressor(TestArray): compressor = BZ2(level=1) def expected(self): - return [ - "33141032439fb1df5e24ad9891a7d845b6c668c8", - "44d719da065c88a412d609a5500ff41e07b331d6", - "37c7c46e5730bba37da5e518c9d75f0d774c5098", - "1e1bcaac63e4ef3c4a68f11672537131c627f168", - "86d7b9bf22dccbeaa22f340f38be506b55e76ff2", - ] + return ( + [ + "33141032439fb1df5e24ad9891a7d845b6c668c8", + "44d719da065c88a412d609a5500ff41e07b331d6", + "37c7c46e5730bba37da5e518c9d75f0d774c5098", + "1e1bcaac63e4ef3c4a68f11672537131c627f168", + "86d7b9bf22dccbeaa22f340f38be506b55e76ff2", + ], + ) class TestArrayWithBloscCompressor(TestArray): compressor = Blosc(cname="zstd", clevel=1, shuffle=1) def expected(self): - return [ - "7ff2ae8511eac915fad311647c168ccfe943e788", - "962705c861863495e9ccb7be7735907aa15e85b5", - "74ed339cfe84d544ac023d085ea0cd6a63f56c4b", - "90e30bdab745a9641cd0eb605356f531bc8ec1c3", - "95d40c391f167db8b1290e3c39d9bf741edacdf6", - ] + return ( + [ + "7ff2ae8511eac915fad311647c168ccfe943e788", + "962705c861863495e9ccb7be7735907aa15e85b5", + "74ed339cfe84d544ac023d085ea0cd6a63f56c4b", + "90e30bdab745a9641cd0eb605356f531bc8ec1c3", + "95d40c391f167db8b1290e3c39d9bf741edacdf6", + ], + ) try: @@ -2133,13 +2176,15 @@ class TestArrayWithLZMACompressor(TestArray): compressor = LZMA(preset=1) def expected(self): - return [ - "93ecaa530a1162a9d48a3c1dcee4586ccfc59bae", - "04a9755a0cd638683531b7816c7fa4fbb6f577f2", - "9de97b5c49b38e68583ed701d7e8f4c94b6a8406", - "cde499f3dc945b4e97197ff8e3cf8188a1262c35", - "e2cf3afbf66ad0e28a2b6b68b1b07817c69aaee2", - ] + return ( + [ + "93ecaa530a1162a9d48a3c1dcee4586ccfc59bae", + "04a9755a0cd638683531b7816c7fa4fbb6f577f2", + "9de97b5c49b38e68583ed701d7e8f4c94b6a8406", + "cde499f3dc945b4e97197ff8e3cf8188a1262c35", + "e2cf3afbf66ad0e28a2b6b68b1b07817c69aaee2", + ], + ) class TestArrayWithFilters(TestArray): @@ -2152,13 +2197,24 @@ def create_filters(self, dtype: Optional[str]) -> Tuple[Any, ...]: ) def expected(self): - return [ - "b80367c5599d47110d42bd8886240c2f46620dba", - "95a7b2471225e73199c9716d21e8d3dd6e5f6f2a", - "7300f1eb130cff5891630038fd99c28ef23d3a01", - "c649ad229bc5720258b934ea958570c2f354c2eb", - "62fc9236d78af18a5ec26c12eea1d33bce52501e", - ] + return ( + # zlib + [ + "b80367c5599d47110d42bd8886240c2f46620dba", + "95a7b2471225e73199c9716d21e8d3dd6e5f6f2a", + "7300f1eb130cff5891630038fd99c28ef23d3a01", + "c649ad229bc5720258b934ea958570c2f354c2eb", + "62fc9236d78af18a5ec26c12eea1d33bce52501e", + ], + # zlib-ng + [ + "b80367c5599d47110d42bd8886240c2f46620dba", + "95a7b2471225e73199c9716d21e8d3dd6e5f6f2a", + "7300f1eb130cff5891630038fd99c28ef23d3a01", + "1e053b6ad7dc58de7b1f5dad7fb45851f6b7b3ee", + "62fc9236d78af18a5ec26c12eea1d33bce52501e", + ], + ) def test_astype_no_filters(self): shape = (100,) @@ -2283,7 +2339,8 @@ def test_nbytes_stored(self): z = self.create_array(shape=1000, chunks=100) assert 245 == z.nbytes_stored z[:] = 42 - assert 515 == z.nbytes_stored + # 515 is zlib, 485 is zlib-ng + assert z.nbytes_stored in (515, 485) class TestArrayNoCache(TestArray): @@ -2378,13 +2435,15 @@ def create_store(self): return store def expected(self): - return [ - "ab753fc81df0878589535ca9bad2816ba88d91bc", - "c16261446f9436b1e9f962e57ce3e8f6074abe8a", - "c2ef3b2fb2bc9dcace99cd6dad1a7b66cc1ea058", - "6e52f95ac15b164a8e96843a230fcee0e610729b", - "091fa99bc60706095c9ce30b56ce2503e0223f56", - ] + return ( + [ + "ab753fc81df0878589535ca9bad2816ba88d91bc", + "c16261446f9436b1e9f962e57ce3e8f6074abe8a", + "c2ef3b2fb2bc9dcace99cd6dad1a7b66cc1ea058", + "6e52f95ac15b164a8e96843a230fcee0e610729b", + "091fa99bc60706095c9ce30b56ce2503e0223f56", + ], + ) @pytest.mark.skipif(have_fsspec is False, reason="needs fsspec") @@ -2410,13 +2469,15 @@ def create_store(self): return store def expected(self): - return [ - "ab753fc81df0878589535ca9bad2816ba88d91bc", - "c16261446f9436b1e9f962e57ce3e8f6074abe8a", - "c2ef3b2fb2bc9dcace99cd6dad1a7b66cc1ea058", - "6e52f95ac15b164a8e96843a230fcee0e610729b", - "091fa99bc60706095c9ce30b56ce2503e0223f56", - ] + return ( + [ + "ab753fc81df0878589535ca9bad2816ba88d91bc", + "c16261446f9436b1e9f962e57ce3e8f6074abe8a", + "c2ef3b2fb2bc9dcace99cd6dad1a7b66cc1ea058", + "6e52f95ac15b164a8e96843a230fcee0e610729b", + "091fa99bc60706095c9ce30b56ce2503e0223f56", + ], + ) @pytest.mark.skipif(have_fsspec is False, reason="needs fsspec") @@ -2431,13 +2492,15 @@ def create_store(self): return store def expected(self): - return [ - "dd7577d645c38767cf6f6d1ef8fd64002883a014", - "aa0de9892cf1ed3cda529efbf3233720b84489b7", - "e6191c44cf958576c29c41cef0f55b028a4dbdff", - "88adeeabb819feecccadf50152293dbb42f9107e", - "1426e084427f9920e29c9ec81b663d1005849455", - ] + return ( + [ + "dd7577d645c38767cf6f6d1ef8fd64002883a014", + "aa0de9892cf1ed3cda529efbf3233720b84489b7", + "e6191c44cf958576c29c41cef0f55b028a4dbdff", + "88adeeabb819feecccadf50152293dbb42f9107e", + "1426e084427f9920e29c9ec81b663d1005849455", + ], + ) def test_non_cont(self): z = self.create_array(shape=(500, 500, 500), chunks=(50, 50, 50), dtype=" Tuple[Any]: ) def expected(self): - return [ - "3fb9a4f8233b09ad02067b6b7fc9fd5caa405c7d", - "89c8eb364beb84919fc9153d2c1ed2696274ec18", - "73307055c3aec095dd1232c38d793ef82a06bd97", - "6152c09255a5efa43b1a115546e35affa00c138c", - "2f8802fc391f67f713302e84fad4fd8f1366d6c2", - ] + return ( + [ + "3fb9a4f8233b09ad02067b6b7fc9fd5caa405c7d", + "89c8eb364beb84919fc9153d2c1ed2696274ec18", + "73307055c3aec095dd1232c38d793ef82a06bd97", + "6152c09255a5efa43b1a115546e35affa00c138c", + "2f8802fc391f67f713302e84fad4fd8f1366d6c2", + ], + ) @pytest.mark.skipif(not v3_api_available, reason="V3 is disabled") @@ -3077,13 +3164,15 @@ def test_supports_efficient_get_set_partial_values(self): assert not z.chunk_store.supports_efficient_set_partial_values() def expected(self): - return [ - "90109fc2a4e17efbcb447003ea1c08828b91f71e", - "2b73519f7260dba3ddce0d2b70041888856fec6b", - "bca5798be2ed71d444f3045b05432d937682b7dd", - "9ff1084501e28520e577662a6e3073f1116c76a2", - "882a97cad42417f90f111d0cb916a21579650467", - ] + return ( + [ + "90109fc2a4e17efbcb447003ea1c08828b91f71e", + "2b73519f7260dba3ddce0d2b70041888856fec6b", + "bca5798be2ed71d444f3045b05432d937682b7dd", + "9ff1084501e28520e577662a6e3073f1116c76a2", + "882a97cad42417f90f111d0cb916a21579650467", + ], + ) @pytest.mark.skipif(not v3_api_available, reason="V3 is disabled") From b1480d75e2a87c0c6e839d0f1bce7fccb5a6a76e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 18:10:18 -0600 Subject: [PATCH 10/36] Bump the actions group with 4 updates (#2724) Bumps the actions group with 4 updates: [conda-incubator/setup-miniconda](https://github.com/conda-incubator/setup-miniconda), [codecov/codecov-action](https://github.com/codecov/codecov-action), [actions/setup-python](https://github.com/actions/setup-python) and [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish). Updates `conda-incubator/setup-miniconda` from 3.0.4 to 3.1.0 - [Release notes](https://github.com/conda-incubator/setup-miniconda/releases) - [Changelog](https://github.com/conda-incubator/setup-miniconda/blob/main/CHANGELOG.md) - [Commits](https://github.com/conda-incubator/setup-miniconda/compare/v3.0.4...v3.1.0) Updates `codecov/codecov-action` from 4 to 5 - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v4...v5) Updates `actions/setup-python` from 5.2.0 to 5.3.0 - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v5.2.0...v5.3.0) Updates `pypa/gh-action-pypi-publish` from 1.10.3 to 1.12.3 - [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases) - [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.10.3...v1.12.3) --- updated-dependencies: - dependency-name: conda-incubator/setup-miniconda dependency-type: direct:production update-type: version-update:semver-minor dependency-group: actions - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-minor dependency-group: actions - dependency-name: pypa/gh-action-pypi-publish dependency-type: direct:production update-type: version-update:semver-minor dependency-group: actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/minimal.yml | 2 +- .github/workflows/python-package.yml | 4 ++-- .github/workflows/releases.yml | 4 ++-- .github/workflows/windows-testing.yml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/minimal.yml b/.github/workflows/minimal.yml index 76e7951954..496dec6256 100644 --- a/.github/workflows/minimal.yml +++ b/.github/workflows/minimal.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Setup Miniconda - uses: conda-incubator/setup-miniconda@v3.0.4 + uses: conda-incubator/setup-miniconda@v3.1.0 with: channels: conda-forge environment-file: environment.yml diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 6db547f9b8..73f28b976c 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -48,7 +48,7 @@ jobs: with: fetch-depth: 0 - name: Setup Miniconda - uses: conda-incubator/setup-miniconda@v3.0.4 + uses: conda-incubator/setup-miniconda@v3.1.0 with: channels: conda-forge python-version: ${{ matrix.python-version }} @@ -83,7 +83,7 @@ jobs: mkdir ~/blob_emulator azurite -l ~/blob_emulator --debug debug.log 2>&1 > stdouterr.log & pytest --cov=zarr --cov-config=pyproject.toml --doctest-plus --cov-report xml --cov=./ --timeout=300 - - uses: codecov/codecov-action@v4 + - uses: codecov/codecov-action@v5 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} with: diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index 26b669abea..236fd4a234 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -16,7 +16,7 @@ jobs: submodules: true fetch-depth: 0 - - uses: actions/setup-python@v5.2.0 + - uses: actions/setup-python@v5.3.0 name: Install Python with: python-version: '3.11' @@ -64,7 +64,7 @@ jobs: with: name: releases path: dist - - uses: pypa/gh-action-pypi-publish@v1.10.3 + - uses: pypa/gh-action-pypi-publish@v1.12.3 with: user: __token__ password: ${{ secrets.pypi_password }} diff --git a/.github/workflows/windows-testing.yml b/.github/workflows/windows-testing.yml index 8bd560fb2f..c2ef841a6f 100644 --- a/.github/workflows/windows-testing.yml +++ b/.github/workflows/windows-testing.yml @@ -21,7 +21,7 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: conda-incubator/setup-miniconda@v3.0.4 + - uses: conda-incubator/setup-miniconda@v3.1.0 with: auto-update-conda: true python-version: ${{ matrix.python-version }} From 66e2982d4d16ace4e32bf0deba627357c8982844 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 13:06:22 +0000 Subject: [PATCH 11/36] Bump the actions group with 2 updates (#2771) Bumps the actions group with 2 updates: [conda-incubator/setup-miniconda](https://github.com/conda-incubator/setup-miniconda) and [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish). Updates `conda-incubator/setup-miniconda` from 3.1.0 to 3.1.1 - [Release notes](https://github.com/conda-incubator/setup-miniconda/releases) - [Changelog](https://github.com/conda-incubator/setup-miniconda/blob/main/CHANGELOG.md) - [Commits](https://github.com/conda-incubator/setup-miniconda/compare/v3.1.0...v3.1.1) Updates `pypa/gh-action-pypi-publish` from 1.12.3 to 1.12.4 - [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases) - [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.12.3...v1.12.4) --- updated-dependencies: - dependency-name: conda-incubator/setup-miniconda dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions - dependency-name: pypa/gh-action-pypi-publish dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/minimal.yml | 2 +- .github/workflows/python-package.yml | 2 +- .github/workflows/releases.yml | 2 +- .github/workflows/windows-testing.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/minimal.yml b/.github/workflows/minimal.yml index 496dec6256..ab6c0134a8 100644 --- a/.github/workflows/minimal.yml +++ b/.github/workflows/minimal.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Setup Miniconda - uses: conda-incubator/setup-miniconda@v3.1.0 + uses: conda-incubator/setup-miniconda@v3.1.1 with: channels: conda-forge environment-file: environment.yml diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 73f28b976c..ce40de1e99 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -48,7 +48,7 @@ jobs: with: fetch-depth: 0 - name: Setup Miniconda - uses: conda-incubator/setup-miniconda@v3.1.0 + uses: conda-incubator/setup-miniconda@v3.1.1 with: channels: conda-forge python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index 236fd4a234..206a75e042 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -64,7 +64,7 @@ jobs: with: name: releases path: dist - - uses: pypa/gh-action-pypi-publish@v1.12.3 + - uses: pypa/gh-action-pypi-publish@v1.12.4 with: user: __token__ password: ${{ secrets.pypi_password }} diff --git a/.github/workflows/windows-testing.yml b/.github/workflows/windows-testing.yml index c2ef841a6f..fce85c8d8f 100644 --- a/.github/workflows/windows-testing.yml +++ b/.github/workflows/windows-testing.yml @@ -21,7 +21,7 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: conda-incubator/setup-miniconda@v3.1.0 + - uses: conda-incubator/setup-miniconda@v3.1.1 with: auto-update-conda: true python-version: ${{ matrix.python-version }} From 2bf7e457364288f3a7cd13ccc27437067dcf65e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2025 10:12:10 +0000 Subject: [PATCH 12/36] Bump actions/setup-python from 5.3.0 to 5.4.0 in the actions group (#2788) Bumps the actions group with 1 update: [actions/setup-python](https://github.com/actions/setup-python). Updates `actions/setup-python` from 5.3.0 to 5.4.0 - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v5.3.0...v5.4.0) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-minor dependency-group: actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/releases.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index 206a75e042..6352ac8a77 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -16,7 +16,7 @@ jobs: submodules: true fetch-depth: 0 - - uses: actions/setup-python@v5.3.0 + - uses: actions/setup-python@v5.4.0 name: Install Python with: python-version: '3.11' From fb01742b75a1341b0ba4ac398054a507048fb801 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Thu, 27 Feb 2025 12:32:56 +0000 Subject: [PATCH 13/36] Deprecate partial read/writes in v2 (#2844) * Deprecated partial read/writes in v2 * Remove unused imports * Filter warnings on more partial read/write tests --- docs/release.rst | 19 +++++++++++++------ zarr/core.py | 17 +++++++++-------- zarr/creation.py | 6 +----- zarr/tests/test_core.py | 20 +++++++++++++++++++- 4 files changed, 42 insertions(+), 20 deletions(-) diff --git a/docs/release.rst b/docs/release.rst index 3ee304bd7a..a234caabe7 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -14,9 +14,19 @@ Release notes # re-indented so that it does not show up in the notes. .. note:: - Zarr-Python 2.18.* is expected be the final release in the 2.* series. Work on Zarr-Python 3.0 is underway. - See `GH1777 `_ for more details on the upcoming - 3.0 release. + Zarr-Python 2.* is in support mode now, and no new features will be added. + + +Unreleased +---------- + +Deprecations +~~~~~~~~~~~~ + +* Deprecated support for ``partial_decompress`` when creating an array. + This functionality is no longer supported in ``numcodecs``, and will be removed + in ``zarr-python`` 2.19.0. + By :user:`David Stansby ` .. _release_2.18.4: @@ -40,9 +50,6 @@ Maintenance the Delta filter (see https://github.com/zarr-developers/numcodecs/issues/653 for more information). By :user:`David Stansby ` (:issue:`2544`). -Deprecations -~~~~~~~~~~~~ - .. _release_2.18.3: 2.18.3 diff --git a/zarr/core.py b/zarr/core.py index 817de34528..0bbea83816 100644 --- a/zarr/core.py +++ b/zarr/core.py @@ -6,6 +6,7 @@ import re from functools import reduce from typing import Any +import warnings import numpy as np from numcodecs.compat import ensure_bytes @@ -90,13 +91,6 @@ class Array: If True (default), user attributes will be cached for attribute read operations. If False, user attributes are reloaded from the store prior to all attribute read operations. - partial_decompress : bool, optional - If True and while the chunk_store is a FSStore and the compression used - is Blosc, when getting data from the array chunks will be partially - read and decompressed when possible. - - .. versionadded:: 2.7 - write_empty_chunks : bool, optional If True, all chunks will be stored regardless of their contents. If False (default), each chunk is compared to the array's fill value prior @@ -124,7 +118,7 @@ def __init__( synchronizer=None, cache_metadata=True, cache_attrs=True, - partial_decompress=False, + partial_decompress=None, write_empty_chunks=True, zarr_version=None, meta_array=None, @@ -154,6 +148,13 @@ def __init__( self._synchronizer = synchronizer self._cache_metadata = cache_metadata self._is_view = False + if partial_decompress is not None: + warnings.warn( + "Support for partial decompression is no longer supported in numcodecs. " + "Support for partial decompression will be removed in a future version of zarr-python v2.", + DeprecationWarning, + stacklevel=1, + ) self._partial_decompress = partial_decompress self._write_empty_chunks = write_empty_chunks if meta_array is not None: diff --git a/zarr/creation.py b/zarr/creation.py index f7f3d5a094..e54fb408f8 100644 --- a/zarr/creation.py +++ b/zarr/creation.py @@ -466,7 +466,7 @@ def open_array( object_codec=None, chunk_store=None, storage_options=None, - partial_decompress=False, + partial_decompress=None, write_empty_chunks=True, *, zarr_version=None, @@ -522,10 +522,6 @@ def open_array( storage_options : dict If using an fsspec URL to create the store, these will be passed to the backend implementation. Ignored otherwise. - partial_decompress : bool, optional - If True and while the chunk_store is a FSStore and the compression used - is Blosc, when getting data from the array chunks will be partially - read and decompressed when possible. write_empty_chunks : bool, optional If True (default), all chunks will be stored regardless of their contents. If False, each chunk is compared to the array's fill value diff --git a/zarr/tests/test_core.py b/zarr/tests/test_core.py index 812eb61700..a4e5a5e912 100644 --- a/zarr/tests/test_core.py +++ b/zarr/tests/test_core.py @@ -2,6 +2,7 @@ import sys import pickle import shutil + from typing import Any, Literal, Optional, Tuple, Union, Sequence import unittest from itertools import zip_longest @@ -84,6 +85,11 @@ # noinspection PyMethodMayBeStatic +pytestmark = [ + pytest.mark.filterwarnings("ignore:Call to deprecated function .* \_cbuffer\_sizes.*"), + pytest.mark.filterwarnings("ignore:Call to deprecated function .* \_cbuffer\_metainfo.*"), +] + class TestArray: version = 2 @@ -94,7 +100,7 @@ class TestArray: dimension_separator: Optional[DIMENSION_SEPARATOR] = None cache_metadata = True cache_attrs = True - partial_decompress: bool = False + partial_decompress: bool | None = None write_empty_chunks = True read_only = False storage_transformers: Tuple[Any, ...] = () @@ -2481,6 +2487,9 @@ def expected(self): @pytest.mark.skipif(have_fsspec is False, reason="needs fsspec") +@pytest.mark.filterwarnings( + "ignore:.*Support for partial decompression will be removed in a future version.*" +) class TestArrayWithFSStorePartialRead(TestArray): compressor = Blosc(blocksize=256) partial_decompress = True @@ -2547,6 +2556,9 @@ def expected(self): @pytest.mark.skipif(have_fsspec is False, reason="needs fsspec") +@pytest.mark.filterwarnings( + "ignore:.*Support for partial decompression will be removed in a future version.*" +) class TestArrayWithFSStoreNestedPartialRead(TestArrayWithFSStore): compressor = Blosc() dimension_separator = "/" @@ -3020,6 +3032,9 @@ def expected(self): @pytest.mark.skipif(have_fsspec is False, reason="needs fsspec") @pytest.mark.skipif(not v3_api_available, reason="V3 is disabled") +@pytest.mark.filterwarnings( + "ignore:.*Support for partial decompression will be removed in a future version.*" +) class TestArrayWithFSStoreV3PartialRead(TestArrayWithFSStoreV3): partial_decompress = True @@ -3038,6 +3053,9 @@ def expected(self): @pytest.mark.skipif(have_fsspec is False, reason="needs fsspec") @pytest.mark.skipif(not v3_api_available, reason="V3 is disabled") @pytest.mark.skipif(not v3_sharding_available, reason="sharding is disabled") +@pytest.mark.filterwarnings( + "ignore:.*Support for partial decompression will be removed in a future version.*" +) class TestArrayWithFSStoreV3PartialReadUncompressedSharded(TestArrayWithFSStoreV3): partial_decompress = True compressor = None From 153deff2c389ebf9e6f507e778a406c98a73a29b Mon Sep 17 00:00:00 2001 From: David Stansby Date: Mon, 3 Mar 2025 13:23:34 +0000 Subject: [PATCH 14/36] Fix sqlite store in 2.x (#2880) * Fix sqlite store * Ignore unclosed dataset warning * Add release note --- docs/release.rst | 5 +++++ pyproject.toml | 1 + zarr/_storage/v3.py | 2 +- zarr/storage.py | 12 ++++++------ 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/docs/release.rst b/docs/release.rst index a234caabe7..a6be0fc747 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -20,6 +20,11 @@ Release notes Unreleased ---------- +Fixes +~~~~~ +* Fixed ``SQLiteStore`` with the latest version of ``sqlite3``. + By :user:`David Stansby ` + Deprecations ~~~~~~~~~~~~ diff --git a/pyproject.toml b/pyproject.toml index ed643e496f..5b70120b91 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -130,6 +130,7 @@ filterwarnings = [ "ignore:The loop argument is deprecated since Python 3.8.*:DeprecationWarning", "ignore:The .* is deprecated and will be removed in a Zarr-Python version 3*:FutureWarning", "ignore:The experimental Zarr V3 implementation in this version .*:FutureWarning", + "ignore:unclosed database in =2", diff --git a/zarr/_storage/v3.py b/zarr/_storage/v3.py index 4987f820cf..334788585f 100644 --- a/zarr/_storage/v3.py +++ b/zarr/_storage/v3.py @@ -490,7 +490,7 @@ def rmdir(self, path=None): if path: for base in [meta_root, data_root]: with self.lock: - self.cursor.execute('DELETE FROM zarr WHERE k LIKE (? || "/%")', (base + path,)) + self.cursor.execute("DELETE FROM zarr WHERE k LIKE (? || '/%')", (base + path,)) # remove any associated metadata files sfx = _get_metadata_suffix(self) meta_dir = (meta_root + path).rstrip("/") diff --git a/zarr/storage.py b/zarr/storage.py index 5d48892611..f9f6dbe0a6 100644 --- a/zarr/storage.py +++ b/zarr/storage.py @@ -2779,9 +2779,9 @@ def listdir(self, path=None): sep = "_" if path == "" else "/" keys = self.cursor.execute( f""" - SELECT DISTINCT SUBSTR(m, 0, INSTR(m, "/")) AS l FROM ( - SELECT LTRIM(SUBSTR(k, LENGTH(?) + 1), "/") || "/" AS m - FROM zarr WHERE k LIKE (? || "{sep}%") + SELECT DISTINCT SUBSTR(m, 0, INSTR(m, '/')) AS l FROM ( + SELECT LTRIM(SUBSTR(k, LENGTH(?) + 1), '/') || '/' AS m + FROM zarr WHERE k LIKE (? || '{sep}%') ) ORDER BY l ASC """, (path, path), @@ -2794,8 +2794,8 @@ def getsize(self, path=None): size = self.cursor.execute( """ SELECT COALESCE(SUM(LENGTH(v)), 0) FROM zarr - WHERE k LIKE (? || "%") AND - 0 == INSTR(LTRIM(SUBSTR(k, LENGTH(?) + 1), "/"), "/") + WHERE k LIKE (? || '%') AND + 0 == INSTR(LTRIM(SUBSTR(k, LENGTH(?) + 1), '/'), '/') """, (path, path), ) @@ -2806,7 +2806,7 @@ def rmdir(self, path=None): path = normalize_storage_path(path) if path: with self.lock: - self.cursor.execute('DELETE FROM zarr WHERE k LIKE (? || "/%")', (path,)) + self.cursor.execute("DELETE FROM zarr WHERE k LIKE (? || '/%')", (path,)) else: self.clear() From fe91ba716e0b631c801a9cdb47d6aa06623b1388 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 14:41:19 +0000 Subject: [PATCH 15/36] Bump the requirements group across 1 directory with 10 updates (#2888) Bumps the requirements group with 10 updates in the / directory: | Package | From | To | | --- | --- | --- | | [numpy](https://github.com/numpy/numpy) | `2.1.2` | `2.2.3` | | [numcodecs](https://github.com/zarr-developers/numcodecs) | `0.13.1` | `0.15.1` | | [setuptools-scm](https://github.com/pypa/setuptools-scm) | `8.1.0` | `8.2.0` | | [lmdb](https://github.com/jnwatson/py-lmdb) | `1.5.1` | `1.6.2` | | [redis](https://github.com/redis/redis-py) | `5.1.1` | `5.2.1` | | [pymongo](https://github.com/mongodb/mongo-python-driver) | `4.10.1` | `4.11.2` | | [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `5.0.0` | `6.0.0` | | [pytest-doctestplus](https://github.com/scientific-python/pytest-doctestplus) | `1.3.0` | `1.4.0` | | [h5py](https://github.com/h5py/h5py) | `3.12.1` | `3.13.0` | | [pytest](https://github.com/pytest-dev/pytest) | `8.3.3` | `8.3.5` | Updates `numpy` from 2.1.2 to 2.2.3 - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v2.1.2...v2.2.3) Updates `numcodecs` from 0.13.1 to 0.15.1 - [Release notes](https://github.com/zarr-developers/numcodecs/releases) - [Changelog](https://github.com/zarr-developers/numcodecs/blob/main/docs/release.rst) - [Commits](https://github.com/zarr-developers/numcodecs/compare/v0.13.1...v0.15.1) Updates `setuptools-scm` from 8.1.0 to 8.2.0 - [Release notes](https://github.com/pypa/setuptools-scm/releases) - [Changelog](https://github.com/pypa/setuptools-scm/blob/main/CHANGELOG.md) - [Commits](https://github.com/pypa/setuptools-scm/compare/v8.1.0...v8.2.0) Updates `lmdb` from 1.5.1 to 1.6.2 - [Changelog](https://github.com/jnwatson/py-lmdb/blob/master/ChangeLog) - [Commits](https://github.com/jnwatson/py-lmdb/compare/py-lmdb_1.5.1...py-lmdb_1.6.2) Updates `redis` from 5.1.1 to 5.2.1 - [Release notes](https://github.com/redis/redis-py/releases) - [Changelog](https://github.com/redis/redis-py/blob/master/CHANGES) - [Commits](https://github.com/redis/redis-py/compare/v5.1.1...v5.2.1) Updates `pymongo` from 4.10.1 to 4.11.2 - [Release notes](https://github.com/mongodb/mongo-python-driver/releases) - [Changelog](https://github.com/mongodb/mongo-python-driver/blob/master/doc/changelog.rst) - [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.10.1...4.11.2) Updates `pytest-cov` from 5.0.0 to 6.0.0 - [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v6.0.0) Updates `pytest-doctestplus` from 1.3.0 to 1.4.0 - [Release notes](https://github.com/scientific-python/pytest-doctestplus/releases) - [Changelog](https://github.com/scientific-python/pytest-doctestplus/blob/main/CHANGES.rst) - [Commits](https://github.com/scientific-python/pytest-doctestplus/compare/v1.3.0...v1.4.0) Updates `h5py` from 3.12.1 to 3.13.0 - [Release notes](https://github.com/h5py/h5py/releases) - [Changelog](https://github.com/h5py/h5py/blob/master/docs/release_guide.rst) - [Commits](https://github.com/h5py/h5py/compare/3.12.1...3.13.0) Updates `pytest` from 8.3.3 to 8.3.5 - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.3.3...8.3.5) --- updated-dependencies: - dependency-name: numpy dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements - dependency-name: numcodecs dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements - dependency-name: setuptools-scm dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements - dependency-name: lmdb dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements - dependency-name: redis dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements - dependency-name: pymongo dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements - dependency-name: pytest-cov dependency-type: direct:development update-type: version-update:semver-major dependency-group: requirements - dependency-name: pytest-doctestplus dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements - dependency-name: h5py dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-patch dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_minimal.txt | 6 +++--- requirements_dev_numpy.txt | 2 +- requirements_dev_optional.txt | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/requirements_dev_minimal.txt b/requirements_dev_minimal.txt index caa078cc82..c0adc1d569 100644 --- a/requirements_dev_minimal.txt +++ b/requirements_dev_minimal.txt @@ -1,8 +1,8 @@ # library requirements asciitree==0.3.3 fasteners==0.19 -numcodecs==0.13.1 +numcodecs==0.15.1 msgpack-python==0.5.6 -setuptools-scm==8.1.0 +setuptools-scm==8.2.0 # test requirements -pytest==8.3.3 +pytest==8.3.5 diff --git a/requirements_dev_numpy.txt b/requirements_dev_numpy.txt index 4a619aa3ef..346d5971f8 100644 --- a/requirements_dev_numpy.txt +++ b/requirements_dev_numpy.txt @@ -1,4 +1,4 @@ # Break this out into a separate file to allow testing against # different versions of numpy. This file should pin to the latest # numpy version. -numpy==2.1.2 +numpy==2.2.3 diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index a2d23a7841..7b547facf7 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -1,6 +1,6 @@ # optional library requirements # bsddb3==6.2.6; sys_platform != 'win32' -lmdb==1.5.1; sys_platform != 'win32' +lmdb==1.6.2; sys_platform != 'win32' # optional library requirements for Jupyter ipytree==0.2.2 ipywidgets==8.1.5 @@ -8,16 +8,16 @@ ipywidgets==8.1.5 # don't let pyup change pinning for azure-storage-blob, need to pin to older # version to get compatibility with azure storage emulator on appveyor (FIXME) azure-storage-blob==12.21.0 # pyup: ignore -redis==5.1.1 +redis==5.2.1 types-redis types-setuptools -pymongo==4.10.1 +pymongo==4.11.2 # optional test requirements coverage -pytest-cov==5.0.0 -pytest-doctestplus==1.3.0 +pytest-cov==6.0.0 +pytest-doctestplus==1.4.0 pytest-timeout==2.3.1 -h5py==3.12.1 +h5py==3.13.0 fsspec==2023.12.2 s3fs==2023.12.2 moto[server]>=5.0.1 From 8f99177d41ba7cc1c2c1ccd5e92ec0ca9f3c2d9e Mon Sep 17 00:00:00 2001 From: David Stansby Date: Tue, 4 Mar 2025 19:18:54 +0000 Subject: [PATCH 16/36] Try and fix ABSStore on v2 (#2887) --- requirements_dev_optional.txt | 5 +---- zarr/_storage/absstore.py | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index 7b547facf7..5bf9ea894f 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -4,10 +4,7 @@ lmdb==1.6.2; sys_platform != 'win32' # optional library requirements for Jupyter ipytree==0.2.2 ipywidgets==8.1.5 -# optional library requirements for services -# don't let pyup change pinning for azure-storage-blob, need to pin to older -# version to get compatibility with azure storage emulator on appveyor (FIXME) -azure-storage-blob==12.21.0 # pyup: ignore +azure-storage-blob==12.24.1 redis==5.2.1 types-redis types-setuptools diff --git a/zarr/_storage/absstore.py b/zarr/_storage/absstore.py index 1e49754f38..4fbb4078eb 100644 --- a/zarr/_storage/absstore.py +++ b/zarr/_storage/absstore.py @@ -231,7 +231,7 @@ def getsize(self, path=None): elif not fs_path.endswith("/"): fs_path += "/" for blob in self.client.walk_blobs(name_starts_with=fs_path, delimiter="/"): - blob_client = self.client.get_blob_client(blob) + blob_client = self.client.get_blob_client(blob.name) if blob_client.exists(): size += blob_client.get_blob_properties().size return size From bfd490a8db869f92deed72cf8394d790cc51c4d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 21:59:48 +0100 Subject: [PATCH 17/36] Bump numpy from 2.2.3 to 2.2.4 in the requirements group (#2912) Bumps the requirements group with 1 update: [numpy](https://github.com/numpy/numpy). Updates `numpy` from 2.2.3 to 2.2.4 - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v2.2.3...v2.2.4) --- updated-dependencies: - dependency-name: numpy dependency-type: direct:development update-type: version-update:semver-patch dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_numpy.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev_numpy.txt b/requirements_dev_numpy.txt index 346d5971f8..b52cce81d9 100644 --- a/requirements_dev_numpy.txt +++ b/requirements_dev_numpy.txt @@ -1,4 +1,4 @@ # Break this out into a separate file to allow testing against # different versions of numpy. This file should pin to the latest # numpy version. -numpy==2.2.3 +numpy==2.2.4 From d943faaab5001972b76d77535ce2c335553795cf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Mar 2025 18:12:47 +0000 Subject: [PATCH 18/36] Bump pymongo from 4.11.2 to 4.11.3 in the requirements group (#2927) Bumps the requirements group with 1 update: [pymongo](https://github.com/mongodb/mongo-python-driver). Updates `pymongo` from 4.11.2 to 4.11.3 - [Release notes](https://github.com/mongodb/mongo-python-driver/releases) - [Changelog](https://github.com/mongodb/mongo-python-driver/blob/4.11.3/doc/changelog.rst) - [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.11.2...4.11.3) --- updated-dependencies: - dependency-name: pymongo dependency-type: direct:development update-type: version-update:semver-patch dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_optional.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index 5bf9ea894f..971f39239a 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -8,7 +8,7 @@ azure-storage-blob==12.24.1 redis==5.2.1 types-redis types-setuptools -pymongo==4.11.2 +pymongo==4.11.3 # optional test requirements coverage pytest-cov==6.0.0 From a7e587e8e51301e9fab71d7e39d5ce52fed06fb6 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Fri, 28 Mar 2025 13:27:25 +0000 Subject: [PATCH 19/36] Release notes for 2.18.5 (#2936) --- docs/release.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/release.rst b/docs/release.rst index a6be0fc747..515a26c2cd 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -14,11 +14,12 @@ Release notes # re-indented so that it does not show up in the notes. .. note:: - Zarr-Python 2.* is in support mode now, and no new features will be added. + Zarr-Python 2 is in support mode now, and no new features will be added. +.. _release_2.18.5: -Unreleased ----------- +2.18.5 +------ Fixes ~~~~~ From 4c7de601d14be5b995958a8886f469473c4b713e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Apr 2025 16:31:22 +0100 Subject: [PATCH 20/36] Bump actions/setup-python from 5.4.0 to 5.5.0 in the actions group (#2940) Bumps the actions group with 1 update: [actions/setup-python](https://github.com/actions/setup-python). Updates `actions/setup-python` from 5.4.0 to 5.5.0 - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v5.4.0...v5.5.0) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-minor dependency-group: actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/releases.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index 6352ac8a77..5a5acfb02d 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -16,7 +16,7 @@ jobs: submodules: true fetch-depth: 0 - - uses: actions/setup-python@v5.4.0 + - uses: actions/setup-python@v5.5.0 name: Install Python with: python-version: '3.11' From 779406f545e50be5b8192b1f4c8f7e4b79653737 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 15:02:48 +0100 Subject: [PATCH 21/36] Bump pytest-cov from 6.0.0 to 6.1.1 in the requirements group (#2960) Bumps the requirements group with 1 update: [pytest-cov](https://github.com/pytest-dev/pytest-cov). Updates `pytest-cov` from 6.0.0 to 6.1.1 - [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-cov/compare/v6.0.0...v6.1.1) --- updated-dependencies: - dependency-name: pytest-cov dependency-version: 6.1.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_optional.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index 971f39239a..3a97f59ae8 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -11,7 +11,7 @@ types-setuptools pymongo==4.11.3 # optional test requirements coverage -pytest-cov==6.0.0 +pytest-cov==6.1.1 pytest-doctestplus==1.4.0 pytest-timeout==2.3.1 h5py==3.13.0 From 67dd64f2801599b6e8ff8a312d548e1976e2d9d3 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Tue, 8 Apr 2025 11:02:06 +0200 Subject: [PATCH 22/36] Pin numcodecs to < 0.16 (#2965) --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5b70120b91..97d7a39aef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,7 @@ docs = [ 'sphinx-copybutton', 'pydata-sphinx-theme', 'numpydoc', - 'numcodecs[msgpack]!=0.14.0,!=0.14.1', + 'numcodecs[msgpack]!=0.14.0,!=0.14.1,<0.16', 'pytest-doctestplus', ] From b5154fb8a6d0ad0f9ce422126fbade1e8313c59a Mon Sep 17 00:00:00 2001 From: David Stansby Date: Tue, 8 Apr 2025 14:42:30 +0200 Subject: [PATCH 23/36] Add a changelog for 2.18.6 (#2970) --- docs/release.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/release.rst b/docs/release.rst index 515a26c2cd..f31bd5ccc2 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -16,6 +16,17 @@ Release notes .. note:: Zarr-Python 2 is in support mode now, and no new features will be added. +.. _release_2.18.6: + +2.18.6 +------ + +Fixes +~~~~~ +* Pinned ``numcodecs`` to ``<0.16``. In ``numcodecs`` 0.16 deprecated code was removed + that makes it incompatible with zarr-python 2.18. + By :user:`David Stansby ` (:issue:`2965`) + .. _release_2.18.5: 2.18.5 From 3ad97b9c783fecef6e9528c41e44aad417ca2447 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Wed, 9 Apr 2025 09:57:54 +0200 Subject: [PATCH 24/36] Add a test with up to date dependencies & fix zarr-python v2 (#2973) * Test with latest dependencies * Update job name * Add pytest-timeout * Add numcodecs pin * Install msgpack python --- .github/workflows/latest-deps.yml | 30 ++++++++++++++++++++++++++++++ docs/release.rst | 16 ++++++++++++---- pyproject.toml | 2 +- 3 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/latest-deps.yml diff --git a/.github/workflows/latest-deps.yml b/.github/workflows/latest-deps.yml new file mode 100644 index 0000000000..9c0729b00a --- /dev/null +++ b/.github/workflows/latest-deps.yml @@ -0,0 +1,30 @@ +# This workflow simulates a fresh environment where the only install +# command is a user pip installing zarr +name: Latest dependencies + +on: + push: + branches: [ support/v2 ] + pull_request: + branches: [ support/v2 ] + +jobs: + latest-deps: + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup Miniconda + uses: conda-incubator/setup-miniconda@v3.1.1 + with: + auto-update-conda: true + python-version: "3.12" + - name: Tests + shell: bash -el {0} + env: + ZARR_V3_EXPERIMENTAL_API: 1 + ZARR_V3_SHARDING: 1 + run: | + python -m pip install pytest pytest-cov pytest-timeout msgpack-python + python -m pip install . + pytest -svx --timeout=300 diff --git a/docs/release.rst b/docs/release.rst index f31bd5ccc2..56bbd0d2f1 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -16,16 +16,24 @@ Release notes .. note:: Zarr-Python 2 is in support mode now, and no new features will be added. -.. _release_2.18.6: +.. _release_2.18.7: -2.18.6 +2.18.7 ------ Fixes ~~~~~ * Pinned ``numcodecs`` to ``<0.16``. In ``numcodecs`` 0.16 deprecated code was removed - that makes it incompatible with zarr-python 2.18. - By :user:`David Stansby ` (:issue:`2965`) + that makes it incompatible with older versions of zarr-python 2.18. + By :user:`David Stansby ` (:issue:`2973`) + +.. _release_2.18.6: + +2.18.6 +------ +Note: the numcodecs dependency pin was incorrectly applied in this release, meaning it maintains +the same issue with numcodecs compatibility as previous releases. Please upgrade +to 2.18.7 to fix this. .. _release_2.18.5: diff --git a/pyproject.toml b/pyproject.toml index 97d7a39aef..02789ba0b7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ dependencies = [ 'asciitree', 'numpy>=1.24', 'fasteners; sys_platform != "emscripten"', - 'numcodecs>=0.10.0,!=0.14.0,!=0.14.1', + 'numcodecs>=0.10.0,!=0.14.0,!=0.14.1,<0.16', ] dynamic = ["version"] classifiers = [ From 74b422de83b09d38252199d6327c90ba6708b5d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 14:59:13 +0100 Subject: [PATCH 25/36] Bump the requirements group across 1 directory with 2 updates (#2987) Bumps the requirements group with 2 updates in the / directory: [ipywidgets](https://github.com/jupyter-widgets/ipywidgets) and [pymongo](https://github.com/mongodb/mongo-python-driver). Updates `ipywidgets` from 8.1.5 to 8.1.6 - [Release notes](https://github.com/jupyter-widgets/ipywidgets/releases) - [Commits](https://github.com/jupyter-widgets/ipywidgets/compare/8.1.5...8.1.6) Updates `pymongo` from 4.11.3 to 4.12.0 - [Release notes](https://github.com/mongodb/mongo-python-driver/releases) - [Changelog](https://github.com/mongodb/mongo-python-driver/blob/master/doc/changelog.rst) - [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.11.3...4.12.0) --- updated-dependencies: - dependency-name: ipywidgets dependency-version: 8.1.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: requirements - dependency-name: pymongo dependency-version: 4.12.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_optional.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index 3a97f59ae8..986ca50043 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -3,12 +3,12 @@ lmdb==1.6.2; sys_platform != 'win32' # optional library requirements for Jupyter ipytree==0.2.2 -ipywidgets==8.1.5 +ipywidgets==8.1.6 azure-storage-blob==12.24.1 redis==5.2.1 types-redis types-setuptools -pymongo==4.11.3 +pymongo==4.12.0 # optional test requirements coverage pytest-cov==6.1.1 From 453cea276193d7c950a7cd1c038b7e6bb0eff0ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 23:08:31 +0100 Subject: [PATCH 26/36] Bump numpy from 2.2.4 to 2.2.5 in the requirements group (#3002) Bumps the requirements group with 1 update: [numpy](https://github.com/numpy/numpy). Updates `numpy` from 2.2.4 to 2.2.5 - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v2.2.4...v2.2.5) --- updated-dependencies: - dependency-name: numpy dependency-version: 2.2.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_numpy.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev_numpy.txt b/requirements_dev_numpy.txt index b52cce81d9..c7fd70f4bd 100644 --- a/requirements_dev_numpy.txt +++ b/requirements_dev_numpy.txt @@ -1,4 +1,4 @@ # Break this out into a separate file to allow testing against # different versions of numpy. This file should pin to the latest # numpy version. -numpy==2.2.4 +numpy==2.2.5 From 06016eab5ab96ecc158a3232cb74b3aeab24a9e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Apr 2025 10:11:50 +0100 Subject: [PATCH 27/36] Bump setuptools-scm from 8.2.0 to 8.3.1 in the requirements group (#3023) Bumps the requirements group with 1 update: [setuptools-scm](https://github.com/pypa/setuptools-scm). Updates `setuptools-scm` from 8.2.0 to 8.3.1 - [Release notes](https://github.com/pypa/setuptools-scm/releases) - [Changelog](https://github.com/pypa/setuptools-scm/blob/main/CHANGELOG.md) - [Commits](https://github.com/pypa/setuptools-scm/compare/v8.2.0...v8.3.1) --- updated-dependencies: - dependency-name: setuptools-scm dependency-version: 8.3.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_minimal.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev_minimal.txt b/requirements_dev_minimal.txt index c0adc1d569..73115eb85f 100644 --- a/requirements_dev_minimal.txt +++ b/requirements_dev_minimal.txt @@ -3,6 +3,6 @@ asciitree==0.3.3 fasteners==0.19 numcodecs==0.15.1 msgpack-python==0.5.6 -setuptools-scm==8.2.0 +setuptools-scm==8.3.1 # test requirements pytest==8.3.5 From cdb9d26279caeec820de4aa33e3dab9a352f9d4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Apr 2025 10:11:58 +0100 Subject: [PATCH 28/36] Bump actions/setup-python from 5.5.0 to 5.6.0 in the actions group (#3022) Bumps the actions group with 1 update: [actions/setup-python](https://github.com/actions/setup-python). Updates `actions/setup-python` from 5.5.0 to 5.6.0 - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v5.5.0...v5.6.0) --- updated-dependencies: - dependency-name: actions/setup-python dependency-version: 5.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/releases.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index 5a5acfb02d..7b93f572ad 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -16,7 +16,7 @@ jobs: submodules: true fetch-depth: 0 - - uses: actions/setup-python@v5.5.0 + - uses: actions/setup-python@v5.6.0 name: Install Python with: python-version: '3.11' From 9f92a9ac55ad472a5228a7e281df2a98f9316c47 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 May 2025 20:24:45 +0100 Subject: [PATCH 29/36] Bump pymongo from 4.12.0 to 4.12.1 in the requirements group (#3034) Bumps the requirements group with 1 update: [pymongo](https://github.com/mongodb/mongo-python-driver). Updates `pymongo` from 4.12.0 to 4.12.1 - [Release notes](https://github.com/mongodb/mongo-python-driver/releases) - [Changelog](https://github.com/mongodb/mongo-python-driver/blob/master/doc/changelog.rst) - [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.12.0...4.12.1) --- updated-dependencies: - dependency-name: pymongo dependency-version: 4.12.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_optional.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index 986ca50043..1a12852246 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -8,7 +8,7 @@ azure-storage-blob==12.24.1 redis==5.2.1 types-redis types-setuptools -pymongo==4.12.0 +pymongo==4.12.1 # optional test requirements coverage pytest-cov==6.1.1 From f055ac2b935a0f4b536d21f236b5e89557dfd5f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 May 2025 10:01:21 +0100 Subject: [PATCH 30/36] Bump the requirements group with 2 updates (#3053) Bumps the requirements group with 2 updates: [ipywidgets](https://github.com/jupyter-widgets/ipywidgets) and [pytest-timeout](https://github.com/pytest-dev/pytest-timeout). Updates `ipywidgets` from 8.1.6 to 8.1.7 - [Release notes](https://github.com/jupyter-widgets/ipywidgets/releases) - [Commits](https://github.com/jupyter-widgets/ipywidgets/compare/8.1.6...8.1.7) Updates `pytest-timeout` from 2.3.1 to 2.4.0 - [Commits](https://github.com/pytest-dev/pytest-timeout/compare/2.3.1...2.4.0) --- updated-dependencies: - dependency-name: ipywidgets dependency-version: 8.1.7 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: requirements - dependency-name: pytest-timeout dependency-version: 2.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_optional.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index 1a12852246..4dc5ebd54c 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -3,7 +3,7 @@ lmdb==1.6.2; sys_platform != 'win32' # optional library requirements for Jupyter ipytree==0.2.2 -ipywidgets==8.1.6 +ipywidgets==8.1.7 azure-storage-blob==12.24.1 redis==5.2.1 types-redis @@ -13,7 +13,7 @@ pymongo==4.12.1 coverage pytest-cov==6.1.1 pytest-doctestplus==1.4.0 -pytest-timeout==2.3.1 +pytest-timeout==2.4.0 h5py==3.13.0 fsspec==2023.12.2 s3fs==2023.12.2 From b07281bc7279a66fef217853f3cc71aa27078bce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 10:47:57 +0100 Subject: [PATCH 31/36] Bump the requirements group with 2 updates (#3069) Bumps the requirements group with 2 updates: [numpy](https://github.com/numpy/numpy) and [redis](https://github.com/redis/redis-py). Updates `numpy` from 2.2.5 to 2.2.6 - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v2.2.5...v2.2.6) Updates `redis` from 5.2.1 to 6.1.0 - [Release notes](https://github.com/redis/redis-py/releases) - [Changelog](https://github.com/redis/redis-py/blob/master/CHANGES) - [Commits](https://github.com/redis/redis-py/compare/v5.2.1...v6.1.0) --- updated-dependencies: - dependency-name: numpy dependency-version: 2.2.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: requirements - dependency-name: redis dependency-version: 6.1.0 dependency-type: direct:development update-type: version-update:semver-major dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_numpy.txt | 2 +- requirements_dev_optional.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements_dev_numpy.txt b/requirements_dev_numpy.txt index c7fd70f4bd..9aa31b94b3 100644 --- a/requirements_dev_numpy.txt +++ b/requirements_dev_numpy.txt @@ -1,4 +1,4 @@ # Break this out into a separate file to allow testing against # different versions of numpy. This file should pin to the latest # numpy version. -numpy==2.2.5 +numpy==2.2.6 diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index 4dc5ebd54c..f5d051c217 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -5,7 +5,7 @@ lmdb==1.6.2; sys_platform != 'win32' ipytree==0.2.2 ipywidgets==8.1.7 azure-storage-blob==12.24.1 -redis==5.2.1 +redis==6.1.0 types-redis types-setuptools pymongo==4.12.1 From 331c0587e00fd605c4eaa5d3f846df606806335e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 11:38:28 +0200 Subject: [PATCH 32/36] Bump conda-incubator/setup-miniconda in the actions group (#3122) Bumps the actions group with 1 update: [conda-incubator/setup-miniconda](https://github.com/conda-incubator/setup-miniconda). Updates `conda-incubator/setup-miniconda` from 3.1.1 to 3.2.0 - [Release notes](https://github.com/conda-incubator/setup-miniconda/releases) - [Changelog](https://github.com/conda-incubator/setup-miniconda/blob/main/CHANGELOG.md) - [Commits](https://github.com/conda-incubator/setup-miniconda/compare/v3.1.1...v3.2.0) --- updated-dependencies: - dependency-name: conda-incubator/setup-miniconda dependency-version: 3.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/latest-deps.yml | 2 +- .github/workflows/minimal.yml | 2 +- .github/workflows/python-package.yml | 2 +- .github/workflows/windows-testing.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/latest-deps.yml b/.github/workflows/latest-deps.yml index 9c0729b00a..1ae16a53fc 100644 --- a/.github/workflows/latest-deps.yml +++ b/.github/workflows/latest-deps.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Setup Miniconda - uses: conda-incubator/setup-miniconda@v3.1.1 + uses: conda-incubator/setup-miniconda@v3.2.0 with: auto-update-conda: true python-version: "3.12" diff --git a/.github/workflows/minimal.yml b/.github/workflows/minimal.yml index ab6c0134a8..f94d5d373f 100644 --- a/.github/workflows/minimal.yml +++ b/.github/workflows/minimal.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Setup Miniconda - uses: conda-incubator/setup-miniconda@v3.1.1 + uses: conda-incubator/setup-miniconda@v3.2.0 with: channels: conda-forge environment-file: environment.yml diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index ce40de1e99..60367a7b20 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -48,7 +48,7 @@ jobs: with: fetch-depth: 0 - name: Setup Miniconda - uses: conda-incubator/setup-miniconda@v3.1.1 + uses: conda-incubator/setup-miniconda@v3.2.0 with: channels: conda-forge python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/windows-testing.yml b/.github/workflows/windows-testing.yml index fce85c8d8f..7fb1be5383 100644 --- a/.github/workflows/windows-testing.yml +++ b/.github/workflows/windows-testing.yml @@ -21,7 +21,7 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: conda-incubator/setup-miniconda@v3.1.1 + - uses: conda-incubator/setup-miniconda@v3.2.0 with: auto-update-conda: true python-version: ${{ matrix.python-version }} From dbf217e289f248ea4f9849cdaa789ddd4323312b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 11:38:42 +0200 Subject: [PATCH 33/36] Bump the requirements group across 1 directory with 3 updates (#3124) Bumps the requirements group with 3 updates in the / directory: [pytest](https://github.com/pytest-dev/pytest), [redis](https://github.com/redis/redis-py) and [h5py](https://github.com/h5py/h5py). Updates `pytest` from 8.3.5 to 8.4.0 - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.3.5...8.4.0) Updates `redis` from 6.1.0 to 6.2.0 - [Release notes](https://github.com/redis/redis-py/releases) - [Changelog](https://github.com/redis/redis-py/blob/master/CHANGES) - [Commits](https://github.com/redis/redis-py/compare/v6.1.0...v6.2.0) Updates `h5py` from 3.13.0 to 3.14.0 - [Release notes](https://github.com/h5py/h5py/releases) - [Changelog](https://github.com/h5py/h5py/blob/master/docs/release_guide.rst) - [Commits](https://github.com/h5py/h5py/compare/3.13.0...3.14.0) --- updated-dependencies: - dependency-name: pytest dependency-version: 8.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements - dependency-name: redis dependency-version: 6.2.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements - dependency-name: h5py dependency-version: 3.14.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_minimal.txt | 2 +- requirements_dev_optional.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements_dev_minimal.txt b/requirements_dev_minimal.txt index 73115eb85f..f29be099c4 100644 --- a/requirements_dev_minimal.txt +++ b/requirements_dev_minimal.txt @@ -5,4 +5,4 @@ numcodecs==0.15.1 msgpack-python==0.5.6 setuptools-scm==8.3.1 # test requirements -pytest==8.3.5 +pytest==8.4.0 diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index f5d051c217..18086e9408 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -5,7 +5,7 @@ lmdb==1.6.2; sys_platform != 'win32' ipytree==0.2.2 ipywidgets==8.1.7 azure-storage-blob==12.24.1 -redis==6.1.0 +redis==6.2.0 types-redis types-setuptools pymongo==4.12.1 @@ -14,7 +14,7 @@ coverage pytest-cov==6.1.1 pytest-doctestplus==1.4.0 pytest-timeout==2.4.0 -h5py==3.13.0 +h5py==3.14.0 fsspec==2023.12.2 s3fs==2023.12.2 moto[server]>=5.0.1 From 54bbe52b08a8be981c5dd26e419a4a196093de7b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 08:29:25 +0100 Subject: [PATCH 34/36] Bump the requirements group with 3 updates (#3134) Bumps the requirements group with 3 updates: [numpy](https://github.com/numpy/numpy), [pymongo](https://github.com/mongodb/mongo-python-driver) and [pytest-cov](https://github.com/pytest-dev/pytest-cov). Updates `numpy` from 2.2.6 to 2.3.0 - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v2.2.6...v2.3.0) Updates `pymongo` from 4.12.1 to 4.13.1 - [Release notes](https://github.com/mongodb/mongo-python-driver/releases) - [Changelog](https://github.com/mongodb/mongo-python-driver/blob/master/doc/changelog.rst) - [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.12.1...4.13.1) Updates `pytest-cov` from 6.1.1 to 6.2.1 - [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-cov/compare/v6.1.1...v6.2.1) --- updated-dependencies: - dependency-name: numpy dependency-version: 2.3.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements - dependency-name: pymongo dependency-version: 4.13.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements - dependency-name: pytest-cov dependency-version: 6.2.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_numpy.txt | 2 +- requirements_dev_optional.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements_dev_numpy.txt b/requirements_dev_numpy.txt index 9aa31b94b3..3b40b3c8bb 100644 --- a/requirements_dev_numpy.txt +++ b/requirements_dev_numpy.txt @@ -1,4 +1,4 @@ # Break this out into a separate file to allow testing against # different versions of numpy. This file should pin to the latest # numpy version. -numpy==2.2.6 +numpy==2.3.0 diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index 18086e9408..5d27d73d1e 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -8,10 +8,10 @@ azure-storage-blob==12.24.1 redis==6.2.0 types-redis types-setuptools -pymongo==4.12.1 +pymongo==4.13.1 # optional test requirements coverage -pytest-cov==6.1.1 +pytest-cov==6.2.1 pytest-doctestplus==1.4.0 pytest-timeout==2.4.0 h5py==3.14.0 From 9b9a7c08c94d7cf0121aceaaf3bc5eb50906f6cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Jun 2025 21:26:57 +0200 Subject: [PATCH 35/36] Bump the requirements group with 3 updates (#3163) Bumps the requirements group with 3 updates: [numpy](https://github.com/numpy/numpy), [pytest](https://github.com/pytest-dev/pytest) and [pymongo](https://github.com/mongodb/mongo-python-driver). Updates `numpy` from 2.3.0 to 2.3.1 - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v2.3.0...v2.3.1) Updates `pytest` from 8.4.0 to 8.4.1 - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.4.0...8.4.1) Updates `pymongo` from 4.13.1 to 4.13.2 - [Release notes](https://github.com/mongodb/mongo-python-driver/releases) - [Changelog](https://github.com/mongodb/mongo-python-driver/blob/master/doc/changelog.rst) - [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.13.1...4.13.2) --- updated-dependencies: - dependency-name: numpy dependency-version: 2.3.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: requirements - dependency-name: pytest dependency-version: 8.4.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: requirements - dependency-name: pymongo dependency-version: 4.13.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_minimal.txt | 2 +- requirements_dev_numpy.txt | 2 +- requirements_dev_optional.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements_dev_minimal.txt b/requirements_dev_minimal.txt index f29be099c4..e7805123ee 100644 --- a/requirements_dev_minimal.txt +++ b/requirements_dev_minimal.txt @@ -5,4 +5,4 @@ numcodecs==0.15.1 msgpack-python==0.5.6 setuptools-scm==8.3.1 # test requirements -pytest==8.4.0 +pytest==8.4.1 diff --git a/requirements_dev_numpy.txt b/requirements_dev_numpy.txt index 3b40b3c8bb..2c8f1ab65c 100644 --- a/requirements_dev_numpy.txt +++ b/requirements_dev_numpy.txt @@ -1,4 +1,4 @@ # Break this out into a separate file to allow testing against # different versions of numpy. This file should pin to the latest # numpy version. -numpy==2.3.0 +numpy==2.3.1 diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index 5d27d73d1e..ca31d735fc 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -8,7 +8,7 @@ azure-storage-blob==12.24.1 redis==6.2.0 types-redis types-setuptools -pymongo==4.13.1 +pymongo==4.13.2 # optional test requirements coverage pytest-cov==6.2.1 From d35610e8bc25d610b70d8cfc2ddff473b1225b3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 09:56:12 +0100 Subject: [PATCH 36/36] Bump lmdb from 1.6.2 to 1.7.2 in the requirements group (#3236) Bumps the requirements group with 1 update: [lmdb](https://github.com/jnwatson/py-lmdb). Updates `lmdb` from 1.6.2 to 1.7.2 - [Changelog](https://github.com/jnwatson/py-lmdb/blob/master/ChangeLog) - [Commits](https://github.com/jnwatson/py-lmdb/compare/py-lmdb_1.6.2...py-lmdb_1.7.2) --- updated-dependencies: - dependency-name: lmdb dependency-version: 1.7.2 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: requirements ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev_optional.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev_optional.txt b/requirements_dev_optional.txt index ca31d735fc..fc4c5666a3 100644 --- a/requirements_dev_optional.txt +++ b/requirements_dev_optional.txt @@ -1,6 +1,6 @@ # optional library requirements # bsddb3==6.2.6; sys_platform != 'win32' -lmdb==1.6.2; sys_platform != 'win32' +lmdb==1.7.2; sys_platform != 'win32' # optional library requirements for Jupyter ipytree==0.2.2 ipywidgets==8.1.7 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy