diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 29281f5be9..9503f3df8a 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,4 +1,4 @@
Contributing
============
-Please see the [project documentation](https://zarr.readthedocs.io/en/stable/contributing.html) for information about contributing to Zarr.
+Please see the [project documentation](https://zarr.readthedocs.io/en/stable/developers/contributing.html) for information about contributing to Zarr.
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 705cd31cb5..84bb89d82a 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -57,7 +57,22 @@ body:
id: reproduce
attributes:
label: Steps to reproduce
- description: Minimal, reproducible code sample, a copy-pastable example if possible.
+ description: Minimal, reproducible code sample. Must list dependencies in [inline script metadata](https://packaging.python.org/en/latest/specifications/inline-script-metadata/#example). When put in a file named `issue.py` calling `uv run issue.py` should show the issue.
+ value: |
+ ```python
+ # /// script
+ # requires-python = ">=3.11"
+ # dependencies = [
+ # "zarr@git+https://github.com/zarr-developers/zarr-python.git@main",
+ # ]
+ # ///
+ #
+ # This script automatically imports the development branch of zarr to check for issues
+
+ import zarr
+ # your reproducer code
+ # zarr.print_debug_info()
+ ```
validations:
required: true
- type: textarea
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index edbd88eaf2..27239f5861 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -5,7 +5,7 @@ contact_links:
about: A new major feature should be discussed in the Zarr specifications repository.
- name: Discuss something on ZulipChat
url: https://ossci.zulipchat.com/
- about: For questions like "How do I do X with Zarr?", you can move to our ZulipChat.
+ about: For questions like "How do I do X with Zarr?", consider posting your question to our developer chat.
- name: Discuss something on GitHub Discussions
url: https://github.com/zarr-developers/zarr-python/discussions
about: For questions like "How do I do X with Zarr?", you can move to GitHub Discussions.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index a0d41f9841..9b64c97d0a 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -3,7 +3,7 @@
TODO:
* [ ] Add unit tests and/or doctests in docstrings
* [ ] Add docstrings and API docs for any new/modified user-facing classes and functions
-* [ ] New/modified features documented in docs/tutorial.rst
-* [ ] Changes documented in docs/release.rst
+* [ ] New/modified features documented in `docs/user-guide/*.rst`
+* [ ] Changes documented as a new file in `changes/`
* [ ] GitHub Actions have all passed
* [ ] Test coverage is 100% (Codecov passes)
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index a437a5c269..469b6a4d19 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,15 +1,7 @@
---
version: 2
updates:
- # Updates for v3 branch (the default branch)
- - package-ecosystem: "pip"
- directory: "/"
- schedule:
- interval: "daily"
- groups:
- actions:
- patterns:
- - "*"
+ # Updates for main
- package-ecosystem: "github-actions"
directory: "/"
schedule:
@@ -19,19 +11,19 @@ updates:
patterns:
- "*"
- # Same updates, but for main branch
+ # Updates for support/v2 branch
- package-ecosystem: "pip"
directory: "/"
- target-branch: "main"
+ target-branch: "support/v2"
schedule:
- interval: "daily"
+ interval: "weekly"
groups:
requirements:
patterns:
- "*"
- package-ecosystem: "github-actions"
directory: "/"
- target-branch: "main"
+ target-branch: "support/v2"
schedule:
interval: "weekly"
groups:
diff --git a/.github/labeler.yml b/.github/labeler.yml
index dbc3b95333..ede89c9d35 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -1,2 +1,4 @@
needs release notes:
-- all: ['!docs/release.rst']
+ - all:
+ - changed-files:
+ - all-globs-to-all-files: '!changes/*.rst'
diff --git a/.github/workflows/gpu_test.yml b/.github/workflows/gpu_test.yml
index b13da7d36f..752440719b 100644
--- a/.github/workflows/gpu_test.yml
+++ b/.github/workflows/gpu_test.yml
@@ -25,7 +25,7 @@ jobs:
strategy:
matrix:
python-version: ['3.11']
- numpy-version: ['2.1']
+ numpy-version: ['2.2']
dependency-set: ["minimal"]
steps:
@@ -64,3 +64,9 @@ jobs:
- name: Run Tests
run: |
hatch env run --env gputest.py${{ matrix.python-version }}-${{ matrix.numpy-version }}-${{ matrix.dependency-set }} run-coverage
+
+ - name: Upload coverage
+ uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ verbose: true # optional (default = false)
diff --git a/.github/workflows/hypothesis.yaml b/.github/workflows/hypothesis.yaml
index 1029063ef4..776f859d6e 100644
--- a/.github/workflows/hypothesis.yaml
+++ b/.github/workflows/hypothesis.yaml
@@ -25,12 +25,19 @@ jobs:
strategy:
matrix:
- python-version: ['3.11']
- numpy-version: ['2.1']
+ python-version: ['3.12']
+ numpy-version: ['2.2']
dependency-set: ["optional"]
steps:
- uses: actions/checkout@v4
+ - name: Set HYPOTHESIS_PROFILE based on trigger
+ run: |
+ if [[ "${{ github.event_name }}" == "schedule" || "${{ github.event_name }}" == "workflow_dispatch" ]]; then
+ echo "HYPOTHESIS_PROFILE=nightly" >> $GITHUB_ENV
+ else
+ echo "HYPOTHESIS_PROFILE=ci" >> $GITHUB_ENV
+ fi
- name: Set up Python
uses: actions/setup-python@v5
with:
@@ -58,6 +65,7 @@ jobs:
if: success()
id: status
run: |
+ echo "Using Hypothesis profile: $HYPOTHESIS_PROFILE"
hatch env run --env test.py${{ matrix.python-version }}-${{ matrix.numpy-version }}-${{ matrix.dependency-set }} run-hypothesis
# explicitly save the cache so it gets updated, also do this even if it fails.
@@ -69,6 +77,12 @@ jobs:
path: .hypothesis/
key: cache-hypothesis-${{ runner.os }}-${{ github.run_id }}
+ - name: Upload coverage
+ uses: codecov/codecov-action@v5
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ verbose: true # optional (default = false)
+
- name: Generate and publish the report
if: |
failure()
diff --git a/.github/workflows/needs_release_notes.yml b/.github/workflows/needs_release_notes.yml
index d81ee0bdc4..7a6c5462b4 100644
--- a/.github/workflows/needs_release_notes.yml
+++ b/.github/workflows/needs_release_notes.yml
@@ -4,11 +4,14 @@ on:
- pull_request_target
jobs:
- triage:
+ labeler:
if: ${{ github.event.pull_request.user.login != 'dependabot[bot]' }} && ${{ github.event.pull_request.user.login != 'pre-commit-ci[bot]' }}
+ permissions:
+ contents: read
+ pull-requests: write
runs-on: ubuntu-latest
steps:
- - uses: actions/labeler@main
+ - uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
sync-labels: true
diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml
index 1b23260c2e..c8903aa779 100644
--- a/.github/workflows/releases.yml
+++ b/.github/workflows/releases.yml
@@ -55,7 +55,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/test.yml b/.github/workflows/test.yml
index 5309ea4565..7cfce41312 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -21,7 +21,7 @@ jobs:
strategy:
matrix:
python-version: ['3.11', '3.12', '3.13']
- numpy-version: ['1.25', '2.1']
+ numpy-version: ['1.25', '2.2']
dependency-set: ["minimal", "optional"]
os: ["ubuntu-latest"]
include:
@@ -30,7 +30,7 @@ jobs:
dependency-set: 'optional'
os: 'macos-latest'
- python-version: '3.13'
- numpy-version: '2.1'
+ numpy-version: '2.2'
dependency-set: 'optional'
os: 'macos-latest'
- python-version: '3.11'
@@ -38,13 +38,15 @@ jobs:
dependency-set: 'optional'
os: 'windows-latest'
- python-version: '3.13'
- numpy-version: '2.1'
+ numpy-version: '2.2'
dependency-set: 'optional'
os: 'windows-latest'
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
+ with:
+ fetch-depth: 0 # grab all branches and tags
- name: Set up Python
uses: actions/setup-python@v5
with:
@@ -59,8 +61,16 @@ jobs:
hatch env create test.py${{ matrix.python-version }}-${{ matrix.numpy-version }}-${{ matrix.dependency-set }}
hatch env run -e test.py${{ matrix.python-version }}-${{ matrix.numpy-version }}-${{ matrix.dependency-set }} list-env
- name: Run Tests
+ env:
+ HYPOTHESIS_PROFILE: ci
run: |
- hatch env run --env test.py${{ matrix.python-version }}-${{ matrix.numpy-version }}-${{ matrix.dependency-set }} run
+ hatch env run --env test.py${{ matrix.python-version }}-${{ matrix.numpy-version }}-${{ matrix.dependency-set }} run-coverage
+ - name: Upload coverage
+ if: ${{ matrix.dependency-set == 'optional' && matrix.os == 'ubuntu-latest' }}
+ uses: codecov/codecov-action@v5
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ verbose: true # optional (default = false)
test-upstream-and-min-deps:
name: py=${{ matrix.python-version }}-${{ matrix.dependency-set }}
@@ -77,6 +87,8 @@ jobs:
dependency-set: upstream
steps:
- uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
@@ -92,7 +104,12 @@ jobs:
hatch env run -e ${{ matrix.dependency-set }} list-env
- name: Run Tests
run: |
- hatch env run --env ${{ matrix.dependency-set }} run
+ hatch env run --env ${{ matrix.dependency-set }} run-coverage
+ - name: Upload coverage
+ uses: codecov/codecov-action@v5
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ verbose: true # optional (default = false)
doctests:
name: doctests
diff --git a/.gitignore b/.gitignore
index 5663f62d04..1b2b63e651 100644
--- a/.gitignore
+++ b/.gitignore
@@ -83,6 +83,7 @@ src/zarr/_version.py
data/*
src/fixture/
fixture/
+junit.xml
.DS_Store
tests/.hypothesis
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index ea1cd4dbab..fd50366a1c 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -6,23 +6,23 @@ ci:
default_stages: [pre-commit, pre-push]
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.8.2
+ rev: v0.11.9
hooks:
- - id: ruff
- args: ["--fix", "--show-fixes"]
- - id: ruff-format
+ - id: ruff
+ args: ["--fix", "--show-fixes"]
+ - id: ruff-format
- repo: https://github.com/codespell-project/codespell
- rev: v2.3.0
+ rev: v2.4.1
hooks:
- id: codespell
args: ["-L", "fo,ihs,kake,te", "-S", "fixture"]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- - id: check-yaml
- - id: trailing-whitespace
+ - id: check-yaml
+ - id: trailing-whitespace
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: v1.13.0
+ rev: v1.15.0
hooks:
- id: mypy
files: src|tests
@@ -31,13 +31,16 @@ repos:
- packaging
- donfig
- numcodecs[crc32c]
- - numpy==2.1 # until https://github.com/numpy/numpy/issues/28034 is resolved
+ - numpy==2.1 # until https://github.com/numpy/numpy/issues/28034 is resolved
- typing_extensions
- universal-pathlib
+ - obstore>=0.5.1
# Tests
- pytest
+ - hypothesis
+ - s3fs
- repo: https://github.com/scientific-python/cookie
- rev: 2024.08.19
+ rev: 2025.05.02
hooks:
- id: sp-repo-review
- repo: https://github.com/pre-commit/pygrep-hooks
@@ -49,3 +52,7 @@ repos:
rev: v1.8.0
hooks:
- id: numpydoc-validation
+ - repo: https://github.com/twisted/towncrier
+ rev: 24.8.0
+ hooks:
+ - id: towncrier-check
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
index 32a3f0e4e1..6253a7196f 100644
--- a/.readthedocs.yaml
+++ b/.readthedocs.yaml
@@ -4,6 +4,13 @@ build:
os: ubuntu-22.04
tools:
python: "3.12"
+ jobs:
+ pre_build:
+ - |
+ if [ "$READTHEDOCS_VERSION_TYPE" != "tag" ];
+ then
+ towncrier build --version Unreleased --yes;
+ fi
sphinx:
configuration: docs/conf.py
diff --git a/README.md b/README.md
index 5ee6748ada..97f5617934 100644
--- a/README.md
+++ b/README.md
@@ -70,7 +70,7 @@
- Zulip |
+ Developer Chat |
@@ -101,13 +101,13 @@ Zarr is a Python package providing an implementation of compressed, chunked, N-d
## Main Features
-- [**Create**](https://zarr.readthedocs.io/en/stable/tutorial.html#creating-an-array) N-dimensional arrays with any NumPy `dtype`.
-- [**Chunk arrays**](https://zarr.readthedocs.io/en/stable/tutorial.html#chunk-optimizations) along any dimension.
-- [**Compress**](https://zarr.readthedocs.io/en/stable/tutorial.html#compressors) and/or filter chunks using any NumCodecs codec.
-- [**Store arrays**](https://zarr.readthedocs.io/en/stable/tutorial.html#tutorial-storage) in memory, on disk, inside a zip file, on S3, etc...
-- [**Read**](https://zarr.readthedocs.io/en/stable/tutorial.html#reading-and-writing-data) an array [**concurrently**](https://zarr.readthedocs.io/en/stable/tutorial.html#parallel-computing-and-synchronization) from multiple threads or processes.
-- Write to an array concurrently from multiple threads or processes.
-- Organize arrays into hierarchies via [**groups**](https://zarr.readthedocs.io/en/stable/tutorial.html#groups).
+- [**Create**](https://zarr.readthedocs.io/en/stable/user-guide/arrays.html#creating-an-array) N-dimensional arrays with any NumPy `dtype`.
+- [**Chunk arrays**](https://zarr.readthedocs.io/en/stable/user-guide/performance.html#chunk-optimizations) along any dimension.
+- [**Compress**](https://zarr.readthedocs.io/en/stable/user-guide/arrays.html#compressors) and/or filter chunks using any NumCodecs codec.
+- [**Store arrays**](https://zarr.readthedocs.io/en/stable/user-guide/storage.html) in memory, on disk, inside a zip file, on S3, etc...
+- [**Read**](https://zarr.readthedocs.io/en/stable/user-guide/arrays.html#reading-and-writing-data) an array [**concurrently**](https://zarr.readthedocs.io/en/stable/user-guide/performance.html#parallel-computing-and-synchronization) from multiple threads or processes.
+- [**Write**](https://zarr.readthedocs.io/en/stable/user-guide/arrays.html#reading-and-writing-data) to an array concurrently from multiple threads or processes.
+- Organize arrays into hierarchies via [**groups**](https://zarr.readthedocs.io/en/stable/quickstart.html#hierarchical-groups).
## Where to get it
diff --git a/changes/.gitignore b/changes/.gitignore
new file mode 100644
index 0000000000..f935021a8f
--- /dev/null
+++ b/changes/.gitignore
@@ -0,0 +1 @@
+!.gitignore
diff --git a/changes/2774.feature.rst b/changes/2774.feature.rst
new file mode 100644
index 0000000000..4df83f54ec
--- /dev/null
+++ b/changes/2774.feature.rst
@@ -0,0 +1 @@
+Add `zarr.storage.FsspecStore.from_mapper()` so that `zarr.open()` supports stores of type `fsspec.mapping.FSMap`.
\ No newline at end of file
diff --git a/changes/2871.feature.rst b/changes/2871.feature.rst
new file mode 100644
index 0000000000..a39f30c558
--- /dev/null
+++ b/changes/2871.feature.rst
@@ -0,0 +1,8 @@
+Added public API for Buffer ABCs and implementations.
+
+Use :mod:`zarr.buffer` to access buffer implementations, and
+:mod:`zarr.abc.buffer` for the interface to implement new buffer types.
+
+Users previously importing buffer from ``zarr.core.buffer`` should update their
+imports to use :mod:`zarr.buffer`. As a reminder, all of ``zarr.core`` is
+considered a private API that's not covered by zarr-python's versioning policy.
\ No newline at end of file
diff --git a/changes/2874.feature.rst b/changes/2874.feature.rst
new file mode 100644
index 0000000000..4c50532ae0
--- /dev/null
+++ b/changes/2874.feature.rst
@@ -0,0 +1,9 @@
+Adds zarr-specific data type classes. This replaces the internal use of numpy data types for zarr
+v2 and a fixed set of string enums for zarr v3. This change is largely internal, but it does
+change the type of the ``dtype`` and ``data_type`` fields on the ``ArrayV2Metadata`` and
+``ArrayV3Metadata`` classes. It also changes the JSON metadata representation of the
+variable-length string data type, but the old metadata representation can still be
+used when reading arrays. The logic for automatically choosing the chunk encoding for a given data
+type has also changed, and this necessitated changes to the ``config`` API.
+
+For more on this new feature, see the `documentation `_
\ No newline at end of file
diff --git a/changes/2921.bugfix.rst b/changes/2921.bugfix.rst
new file mode 100644
index 0000000000..65db48654f
--- /dev/null
+++ b/changes/2921.bugfix.rst
@@ -0,0 +1 @@
+Ignore stale child metadata when reconsolidating metadata.
diff --git a/changes/3021.feature.rst b/changes/3021.feature.rst
new file mode 100644
index 0000000000..8805797ce3
--- /dev/null
+++ b/changes/3021.feature.rst
@@ -0,0 +1 @@
+Implemented ``move`` for ``LocalStore`` and ``ZipStore``. This allows users to move the store to a different root path.
\ No newline at end of file
diff --git a/changes/3066.feature.rst b/changes/3066.feature.rst
new file mode 100644
index 0000000000..89d5ddb1c6
--- /dev/null
+++ b/changes/3066.feature.rst
@@ -0,0 +1 @@
+Added `~zarr.errors.GroupNotFoundError`, which is raised when attempting to open a group that does not exist.
diff --git a/changes/3068.bugfix.rst b/changes/3068.bugfix.rst
new file mode 100644
index 0000000000..9ada322c13
--- /dev/null
+++ b/changes/3068.bugfix.rst
@@ -0,0 +1 @@
+Trying to open an array with ``mode='r'`` when the store is not read-only now raises an error.
diff --git a/changes/3081.feature.rst b/changes/3081.feature.rst
new file mode 100644
index 0000000000..8cf83ea7c2
--- /dev/null
+++ b/changes/3081.feature.rst
@@ -0,0 +1 @@
+Adds ``fill_value`` to the list of attributes displayed in the output of the ``AsyncArray.info()`` method.
\ No newline at end of file
diff --git a/changes/3082.feature.rst b/changes/3082.feature.rst
new file mode 100644
index 0000000000..e990d1f3a0
--- /dev/null
+++ b/changes/3082.feature.rst
@@ -0,0 +1 @@
+Use :py:func:`numpy.zeros` instead of :py:func:`np.full` for a performance speedup when creating a `zarr.core.buffer.NDBuffer` with `fill_value=0`.
\ No newline at end of file
diff --git a/changes/3100.bugfix.rst b/changes/3100.bugfix.rst
new file mode 100644
index 0000000000..11f06628c0
--- /dev/null
+++ b/changes/3100.bugfix.rst
@@ -0,0 +1,3 @@
+For Zarr format 2, allow fixed-length string arrays to be created without automatically inserting a
+``Vlen-UT8`` codec in the array of filters. Fixed-length string arrays do not need this codec. This
+change fixes a regression where fixed-length string arrays created with Zarr Python 3 could not be read with Zarr Python 2.18.
\ No newline at end of file
diff --git a/changes/3103.bugfix.rst b/changes/3103.bugfix.rst
new file mode 100644
index 0000000000..93aecce908
--- /dev/null
+++ b/changes/3103.bugfix.rst
@@ -0,0 +1,7 @@
+When creating arrays without explicitly specifying a chunk size using `zarr.create` and other
+array creation routines, the chunk size will now set automatically instead of defaulting to the data shape.
+For large arrays this will result in smaller default chunk sizes.
+To retain previous behaviour, explicitly set the chunk shape to the data shape.
+
+This fix matches the existing chunking behaviour of
+`zarr.save_array` and `zarr.api.asynchronous.AsyncArray.create`.
diff --git a/changes/3127.bugfix.rst b/changes/3127.bugfix.rst
new file mode 100644
index 0000000000..35d7f5d329
--- /dev/null
+++ b/changes/3127.bugfix.rst
@@ -0,0 +1,2 @@
+When `zarr.save` has an argument `path=some/path/` and multiple arrays in `args`, the path resulted in `some/path/some/path` due to using the `path`
+argument twice while building the array path. This is now fixed.
\ No newline at end of file
diff --git a/changes/3128.bugfix.rst b/changes/3128.bugfix.rst
new file mode 100644
index 0000000000..b93416070e
--- /dev/null
+++ b/changes/3128.bugfix.rst
@@ -0,0 +1 @@
+Fix `zarr.open` default for argument `mode` when `store` is `read_only`
\ No newline at end of file
diff --git a/changes/3130.feature.rst b/changes/3130.feature.rst
new file mode 100644
index 0000000000..7a64582f06
--- /dev/null
+++ b/changes/3130.feature.rst
@@ -0,0 +1 @@
+Port more stateful testing actions from `Icechunk `_.
diff --git a/changes/3138.feature.rst b/changes/3138.feature.rst
new file mode 100644
index 0000000000..ecd339bf9c
--- /dev/null
+++ b/changes/3138.feature.rst
@@ -0,0 +1 @@
+Adds a `with_read_only` convenience method to the `Store` abstract base class (raises `NotImplementedError`) and implementations to the `MemoryStore`, `ObjectStore`, `LocalStore`, and `FsspecStore` classes.
\ No newline at end of file
diff --git a/changes/README.md b/changes/README.md
new file mode 100644
index 0000000000..74ed9f94a9
--- /dev/null
+++ b/changes/README.md
@@ -0,0 +1,14 @@
+Writing a changelog entry
+-------------------------
+
+Please put a new file in this directory named `xxxx..rst`, where
+
+- `xxxx` is the pull request number associated with this entry
+- `` is one of:
+ - feature
+ - bugfix
+ - doc
+ - removal
+ - misc
+
+Inside the file, please write a short description of what you have changed, and how it impacts users of `zarr-python`.
diff --git a/codecov.yml b/codecov.yml
new file mode 100644
index 0000000000..83274aedec
--- /dev/null
+++ b/codecov.yml
@@ -0,0 +1,10 @@
+coverage:
+ status:
+ patch:
+ default:
+ target: auto
+ project:
+ default:
+ target: auto
+ threshold: 0.1
+comment: false
diff --git a/docs/conf.py b/docs/conf.py
index 2a93e61d3e..68bf003ad5 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -15,15 +15,12 @@
import os
import sys
+from importlib.metadata import version as get_version
from typing import Any
import sphinx
import sphinx.application
-from importlib.metadata import version as get_version
-
-import sphinx
-
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
@@ -71,7 +68,7 @@ def skip_submodules(
) -> bool:
# Skip documenting zarr.codecs submodules
# codecs are documented in the main zarr.codecs namespace
- if what == "module" and name.startswith("zarr.codecs."):
+ if what == "module" and name.startswith("zarr.codecs.") or name.startswith("zarr.core"):
skip = True
return skip
@@ -91,7 +88,7 @@ def skip_submodules(
# General information about the project.
project = "zarr"
-copyright = "2024, Zarr Developers"
+copyright = "2025, Zarr Developers"
author = "Zarr Developers"
version = get_version("zarr")
@@ -105,10 +102,10 @@ def skip_submodules(
"license": "https://github.com/zarr-developers/zarr-python/blob/main/LICENSE.txt",
"tutorial": "user-guide",
"getting-started": "quickstart",
- "release": "developers/release.html",
"roadmap": "developers/roadmap.html",
"installation": "user-guide/installation.html",
- "api": "api/zarr/index"
+ "api": "api/zarr/index",
+ "release": "release-notes.html",
}
# The language for content autogenerated by Sphinx. Refer to documentation
@@ -181,6 +178,7 @@ def skip_submodules(
],
"collapse_navigation": True,
"navigation_with_keys": False,
+ "announcement": "Zarr-Python 3 is here! Check out the release announcement here.",
}
# Add any paths that contain custom themes here, relative to this directory.
@@ -371,6 +369,7 @@ def setup(app: sphinx.application.Sphinx) -> None:
"python": ("https://docs.python.org/3/", None),
"numpy": ("https://numpy.org/doc/stable/", None),
"numcodecs": ("https://numcodecs.readthedocs.io/en/stable/", None),
+ "obstore": ("https://developmentseed.org/obstore/latest/", None),
}
diff --git a/docs/developers/contributing.rst b/docs/developers/contributing.rst
index 4358230eff..03388e1544 100644
--- a/docs/developers/contributing.rst
+++ b/docs/developers/contributing.rst
@@ -98,7 +98,7 @@ you can do something like the following::
To verify that your development environment is working, you can run the unit tests
for one of the test environments, e.g.::
- $ hatch env run --env test.py3.12-2.1-optional run
+ $ hatch env run --env test.py3.12-2.1-optional run-pytest
Creating a branch
~~~~~~~~~~~~~~~~~
@@ -140,7 +140,7 @@ Zarr includes a suite of unit tests. The simplest way to run the unit tests
is to activate your development environment
(see `creating a development environment`_ above) and invoke::
- $ hatch env run --env test.py3.12-2.1-optional run
+ $ hatch env run --env test.py3.12-2.1-optional run-pytest
All tests are automatically run via GitHub Actions for every pull
request and must pass before code can be accepted. Test coverage is
@@ -190,9 +190,13 @@ Both unit tests and docstring doctests are included when computing coverage. Run
$ hatch env run --env test.py3.12-2.1-optional run-coverage
-will automatically run the test suite with coverage and produce a coverage report.
+will automatically run the test suite with coverage and produce a XML coverage report.
This should be 100% before code can be accepted into the main code base.
+You can also generate an HTML coverage report by running::
+
+ $ hatch env run --env test.py3.12-2.1-optional run-coverage-html
+
When submitting a pull request, coverage will also be collected across all supported
Python versions via the Codecov service, and will be reported back within the pull
request. Codecov coverage must also be 100% before code can be accepted.
@@ -212,8 +216,8 @@ The documentation consists both of prose and API documentation. All user-facing
and functions are included in the API documentation, under the ``docs/api`` folder
using the `autodoc `_
extension to sphinx. Any new features or important usage information should be included in the
-user-guide (``docs/user-guide``). Any changes should also be included in the release
-notes (``docs/developers/release.rst``).
+user-guide (``docs/user-guide``). Any changes should also be included as a new file in the
+:file:`changes` directory.
The documentation can be built locally by running::
@@ -226,128 +230,135 @@ during development at `http://0.0.0.0:8000/ `_. This can b
$ hatch --env docs run serve
-Development best practices, policies and procedures
----------------------------------------------------
+.. _changelog:
+
+Changelog
+~~~~~~~~~
+
+zarr-python uses `towncrier`_ to manage release notes. Most pull requests should
+include at least one news fragment describing the changes. To add a release
+note, you'll need the GitHub issue or pull request number and the type of your
+change (``feature``, ``bugfix``, ``doc``, ``removal``, ``misc``). With that, run
+```towncrier create``` with your development environment, which will prompt you
+for the issue number, change type, and the news text::
+
+ towncrier create
+
+Alternatively, you can manually create the files in the ``changes`` directory
+using the naming convention ``{issue-number}.{change-type}.rst``.
+
+See the `towncrier`_ docs for more.
+
+.. _towncrier: https://towncrier.readthedocs.io/en/stable/tutorial.html
The following information is mainly for core developers, but may also be of interest to
contributors.
Merging pull requests
-~~~~~~~~~~~~~~~~~~~~~
+---------------------
Pull requests submitted by an external contributor should be reviewed and approved by at least
-one core developers before being merged. Ideally, pull requests submitted by a core developer
-should be reviewed and approved by at least one other core developers before being merged.
+one core developer before being merged. Ideally, pull requests submitted by a core developer
+should be reviewed and approved by at least one other core developer before being merged.
Pull requests should not be merged until all CI checks have passed (GitHub Actions
Codecov) against code that has had the latest main merged in.
Compatibility and versioning policies
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Because Zarr is a data storage library, there are two types of compatibility to
-consider: API compatibility and data format compatibility.
-
-API compatibility
-"""""""""""""""""
-
-All functions, classes and methods that are included in the API
-documentation (files under ``docs/api/*.rst``) are considered as part of the Zarr **public API**,
-except if they have been documented as an experimental feature, in which case they are part of
-the **experimental API**.
-
-Any change to the public API that does **not** break existing third party
-code importing Zarr, or cause third party code to behave in a different way, is a
-**backwards-compatible API change**. For example, adding a new function, class or method is usually
-a backwards-compatible change. However, removing a function, class or method; removing an argument
-to a function or method; adding a required argument to a function or method; or changing the
-behaviour of a function or method, are examples of **backwards-incompatible API changes**.
-
-If a release contains no changes to the public API (e.g., contains only bug fixes or
-other maintenance work), then the micro version number should be incremented (e.g.,
-2.2.0 -> 2.2.1). If a release contains public API changes, but all changes are
-backwards-compatible, then the minor version number should be incremented
-(e.g., 2.2.1 -> 2.3.0). If a release contains any backwards-incompatible public API changes,
-the major version number should be incremented (e.g., 2.3.0 -> 3.0.0).
-
-Backwards-incompatible changes to the experimental API can be included in a minor release,
-although this should be minimised if possible. I.e., it would be preferable to save up
-backwards-incompatible changes to the experimental API to be included in a major release, and to
-stabilise those features at the same time (i.e., move from experimental to public API), rather than
-frequently tinkering with the experimental API in minor releases.
+-------------------------------------
-Data format compatibility
-"""""""""""""""""""""""""
+Versioning
+~~~~~~~~~~
+Versions of this library are identified by a triplet of integers with the form
+``..``, for example ``3.0.4``. A release of ``zarr-python`` is associated with a new
+version identifier. That new identifier is generated by incrementing exactly one of the components of
+the previous version identifier by 1. When incrementing the ``major`` component of the version identifier,
+the ``minor`` and ``patch`` components is reset to 0. When incrementing the minor component,
+the patch component is reset to 0.
-The data format used by Zarr is defined by a specification document, which should be
-platform-independent and contain sufficient detail to construct an interoperable
-software library to read and/or write Zarr data using any programming language. The
-latest version of the specification document is available on the
-`Zarr specifications website `_.
-
-Here, **data format compatibility** means that all software libraries that implement a
-particular version of the Zarr storage specification are interoperable, in the sense
-that data written by any one library can be read by all others. It is obviously
-desirable to maintain data format compatibility wherever possible. However, if a change
-is needed to the storage specification, and that change would break data format
-compatibility in any way, then the storage specification version number should be
-incremented (e.g., 2 -> 3).
-
-The versioning of the Zarr software library is related to the versioning of the storage
-specification as follows. A particular version of the Zarr library will
-implement a particular version of the storage specification. For example, Zarr version
-2.2.0 implements the Zarr storage specification version 2. If a release of the Zarr
-library implements a different version of the storage specification, then the major
-version number of the Zarr library should be incremented. E.g., if Zarr version 2.2.0
-implements the storage spec version 2, and the next release of the Zarr library
-implements storage spec version 3, then the next library release should have version
-number 3.0.0. Note however that the major version number of the Zarr library may not
-always correspond to the spec version number. For example, Zarr versions 2.x, 3.x, and
-4.x might all implement the same version of the storage spec and thus maintain data
-format compatibility, although they will not maintain API compatibility.
-
-When to make a release
-~~~~~~~~~~~~~~~~~~~~~~
+Releases are classified by the library changes contained in that release. This classification
+determines which component of the version identifier is incremented on release.
-Ideally, any bug fixes that don't change the public API should be released as soon as
-possible. It is fine for a micro release to contain only a single bug fix.
+* ``major`` releases (for example, ``2.18.0`` -> ``3.0.0``) are for changes that will
+ require extensive adaptation efforts from many users and downstream projects.
+ For example, breaking changes to widely-used user-facing APIs should only be applied in a major release.
-When to make a minor release is at the discretion of the core developers. There are no
-hard-and-fast rules, e.g., it is fine to make a minor release to make a single new
-feature available; equally, it is fine to make a minor release that includes a number of
-changes.
-Major releases obviously need to be given careful consideration, and should be done as
-infrequently as possible, as they will break existing code and/or affect data
-compatibility in some way.
+ Users and downstream projects should carefully consider the impact of a major release before
+ adopting it.
+ In advance of a major release, developers should communicate the scope of the upcoming changes,
+ and help users prepare for them.
-Release procedure
-~~~~~~~~~~~~~~~~~
+* ``minor`` releases (or example, ``3.0.0`` -> ``3.1.0``) are for changes that do not require
+ significant effort from most users or downstream downstream projects to respond to. API changes
+ are possible in minor releases if the burden on users imposed by those changes is sufficiently small.
-.. note::
+ For example, a recently released API may need fixes or refinements that are breaking, but low impact
+ due to the recency of the feature. Such API changes are permitted in a minor release.
- Most of the release process is now handled by GitHub workflow which should
- automatically push a release to PyPI if a tag is pushed.
-Before releasing, make sure that all pull requests which will be
-included in the release have been properly documented in
-`docs/release.rst`.
+ Minor releases are safe for most users and downstream projects to adopt.
-To make a new release, go to
-https://github.com/zarr-developers/zarr-python/releases and
-click "Draft a new release". Choose a version number prefixed
-with a `v` (e.g. `v0.0.0`). For pre-releases, include the
-appropriate suffix (e.g. `v0.0.0a1` or `v0.0.0rc2`).
+* ``patch`` releases (for example, ``3.1.0`` -> ``3.1.1``) are for changes that contain no breaking
+ or behaviour changes for downstream projects or users. Examples of changes suitable for a patch release are
+ bugfixes and documentation improvements.
-Set the description of the release to::
- See release notes https://zarr.readthedocs.io/en/stable/release.html#release-0-0-0
+ Users should always feel safe upgrading to a the latest patch release.
-replacing the correct version numbers. For pre-release versions,
-the URL should omit the pre-release suffix, e.g. "a1" or "rc1".
+Note that this versioning scheme is not consistent with `Semantic Versioning `_.
+Contrary to SemVer, the Zarr library may release breaking changes in ``minor`` releases, or even
+``patch`` releases under exceptional circumstances. But we should strive to avoid doing so.
-Click on "Generate release notes" to auto-file the description.
+A better model for our versioning scheme is `Intended Effort Versioning `_,
+or "EffVer". The guiding principle off EffVer is to categorize releases based on the *expected effort
+required to upgrade to that release*.
+
+Zarr developers should make changes as smooth as possible for users. This means making
+backwards-compatible changes wherever possible. When a backwards-incompatible change is necessary,
+users should be notified well in advance, e.g. via informative deprecation warnings.
+
+Data format compatibility
+"""""""""""""""""""""""""
+
+The Zarr library is an implementation of a file format standard defined externally --
+see the `Zarr specifications website `_ for the list of
+Zarr file format specifications.
+
+
+If an existing Zarr format version changes, or a new version of the Zarr format is released, then
+the Zarr library will generally require changes. It is very likely that a new Zarr format will
+require extensive breaking changes to the Zarr library, and so support for a new Zarr format in the
+Zarr library will almost certainly come in new ``major`` release.
+When the Zarr library adds support for a new Zarr format, there may be a period of accelerated
+changes as developers refine newly added APIs and deprecate old APIs. In such a transitional phase
+breaking changes may be more frequent than usual.
+
+
+Release procedure
+-----------------
+
+Pre-release
+~~~~~~~~~~~
+1. Make sure that all pull requests which will be included in the release
+ have been properly documented as changelog files in the :file:`changes/` directory.
+2. Run ``towncrier build --version x.y.z`` to create the changelog, and commit the result
+ to the main branch.
+
+Releasing
+~~~~~~~~~
+1. Go to https://github.com/zarr-developers/zarr-python/releases
+2. Click "Draft a new release".
+3. Choose a version number prefixed with a `v` (e.g. `v0.0.0`).
+ For pre-releases, include the appropriate suffix (e.g. `v0.0.0a1` or `v0.0.0rc2`).
+4. Set the description of the release to::
+
+ See release notes https://zarr.readthedocs.io/en/stable/release-notes.html#release-0-0-0
+
+ replacing the correct version numbers. For pre-release versions,
+ the URL should omit the pre-release suffix, e.g. "a1" or "rc1".
+5. Click on "Generate release notes" to auto-fill the description.
After creating the release, the documentation will be built on
https://readthedocs.io. Full releases will be available under
@@ -355,5 +366,9 @@ https://readthedocs.io. Full releases will be available under
pre-releases will be available under
`/latest `_.
-Also review and merge the https://github.com/conda-forge/zarr-feedstock
-pull request that will be automatically generated.
+Post-release
+~~~~~~~~~~~~
+
+- Review and merge the pull request on the
+ `conda-forge feedstock `_ that will be
+ automatically generated.
diff --git a/docs/developers/index.rst b/docs/developers/index.rst
index 3feb0aff71..4bccb3a469 100644
--- a/docs/developers/index.rst
+++ b/docs/developers/index.rst
@@ -6,5 +6,4 @@ Developer's Guide
:maxdepth: 1
contributing
- release
roadmap
diff --git a/docs/developers/release.rst b/docs/developers/release.rst
deleted file mode 100644
index ce15c68f4a..0000000000
--- a/docs/developers/release.rst
+++ /dev/null
@@ -1,2334 +0,0 @@
-Release notes
-=============
-
-..
- # Copy the warning statement _under_ the latest release version
- # and unindent for pre-releases.
-
- .. warning::
- Pre-release! Use :command:`pip install --pre zarr` to evaluate this release.
-
-..
- # Unindent the section between releases in order
- # to document your changes. On releases it will be
- # 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.
-
-.. release_3.0.0-beta:
-
-3.0.0-beta series
------------------
-
-.. warning::
- Zarr-Python 3.0.0-beta is a pre-release of the upcoming 3.0 release. This release is not feature complete or
- expected to be ready for production applications.
-
-.. note::
- The complete release notes for 3.0 have not been added to this document yet. See the
- `3.0.0-beta `_ release on GitHub
- for a record of changes included in this release.
-
-Dependency Changes
-~~~~~~~~~~~~~~~~~~
-
-* fsspec was moved from a required dependency to an optional one. Users should install
- fsspec and any relevant implementations (e.g. s3fs) before using the ``RemoteStore``.
- By :user:`Joe Hamman ` :issue:`2391`.
-
-* ``RemoteStore`` was renamed to ``FsspecStore``.
- By :user:`Joe Hamman ` :issue:`2557`.
-
-.. release_3.0.0-alpha:
-
-3.0.0-alpha series
-------------------
-
-.. warning::
- Zarr-Python 3.0.0-alpha is a pre-release of the upcoming 3.0 release. This release is not feature complete or
- expected to be ready for production applications.
-
-.. note::
- The complete release notes for 3.0 have not been added to this document yet. See the
- `3.0.0-alpha `_ release on GitHub
- for a record of changes included in this release.
-
-Enhancements
-~~~~~~~~~~~~
-
-* Implement listing of the sub-arrays and sub-groups for a V3 ``Group``.
- By :user:`Davis Bennett ` :issue:`1726`.
-
-* Bootstrap v3 branch with zarrita.
- By :user:`Joe Hamman ` :issue:`1584`.
-
-* Extensible codecs for V3.
- By :user:`Norman Rzepka ` :issue:`1588`.
-
-* Don't import from tests.
- By :user:`Davis Bennett ` :issue:`1601`.
-
-* Listable V3 Stores.
- By :user:`Joe Hamman ` :issue:`1634`.
-
-* Codecs without array metadata.
- By :user:`Norman Rzepka ` :issue:`1632`.
-
-* fix sync group class methods.
- By :user:`Joe Hamman ` :issue:`1652`.
-
-* implement eq for LocalStore.
- By :user:`Charoula Kyriakides ` :issue:`1792`.
-
-* V3 reorg.
- By :user:`Joe Hamman ` :issue:`1809`.
-
-* [v3] Sync with futures.
- By :user:`Davis Bennett ` :issue:`1804`.
-
-* implement group.members.
- By :user:`Davis Bennett ` :issue:`1726`.
-
-* Remove implicit groups.
- By :user:`Joe Hamman ` :issue:`1827`.
-
-* feature(store): ``list_*`` -> AsyncGenerators.
- By :user:`Joe Hamman ` :issue:`1844`.
-
-* Test codec entrypoints.
- By :user:`Norman Rzepka ` :issue:`1835`.
-
-* Remove extra v3 sync module.
- By :user:`Max Jones ` :issue:`1856`.
-
-* Use donfig for V3 configuration.
- By :user:`Max Jones ` :issue:`1655`.
-
-* groundwork for V3 group tests.
- By :user:`Davis Bennett ` :issue:`1743`.
-
-* [v3] First step to generalizes ndarray and bytes.
- By :user:`Mads R. B. Kristensen ` :issue:`1826`.
-
-* Reworked codec pipelines.
- By :user:`Norman Rzepka ` :issue:`1670`.
-
-* Followup on codecs.
- By :user:`Norman Rzepka ` :issue:`1889`.
-
-* Protocols for Buffer and NDBuffer.
- By :user:`Mads R. B. Kristensen ` :issue:`1899`.
-
-* [V3] Expand store tests.
- By :user:`Davis Bennett ` :issue:`1900`.
-
-* [v3] Feature: Store open mode.
- By :user:`Joe Hamman ` :issue:`1911`.
-
-* fix(types): Group.info -> NotImplementedError.
- By :user:`Joe Hamman ` :issue:`1936`.
-
-* feature(typing): add py.typed file to package root.
- By :user:`Joe Hamman ` :issue:`1935`.
-
-* Support all indexing variants.
- By :user:`Norman Rzepka ` :issue:`1917`.
-
-* Feature: group and array name properties.
- By :user:`Joe Hamman ` :issue:`1940`.
-
-* implement .chunks on v3 arrays.
- By :user:`Ryan Abernathey ` :issue:`1929`.
-
-* Fixes bug in transpose.
- By :user:`Norman Rzepka ` :issue:`1949`.
-
-* Buffer Prototype Argument.
- By :user:`Mads R. B. Kristensen ` :issue:`1910`.
-
-* Feature: Top level V3 API.
- By :user:`Joe Hamman ` :issue:`1884`.
-
-* Basic working FsspecStore.
- By :user:`Martin Durant `; :issue:`1785`.
-
-Typing
-~~~~~~
-
-* Resolve Mypy errors in v3 branch.
- By :user:`Daniel Jahn ` :issue:`1692`.
-
-* Allow dmypy to be run on v3 branch.
- By :user:`David Stansby ` :issue:`1780`.
-
-* Remove unused typing ignore comments.
- By :user:`David Stansby ` :issue:`1781`.
-
-* Check untyped defs on v3.
- By :user:`David Stansby ` :issue:`1784`.
-
-* [v3] Enable some more strict mypy options.
- By :user:`David Stansby ` :issue:`1793`.
-
-* [v3] Disallow generic Any typing.
- By :user:`David Stansby ` :issue:`1794`.
-
-* Disallow incomplete type definitions.
- By :user:`David Stansby ` :issue:`1814`.
-
-* Disallow untyped calls.
- By :user:`David Stansby ` :issue:`1811`.
-
-* Fix some untyped calls.
- By :user:`David Stansby ` :issue:`1865`.
-
-* Disallow untyped defs.
- By :user:`David Stansby ` :issue:`1834`.
-
-* Add more typing to zarr.group.
- By :user:`David Stansby ` :issue:`1870`.
-
-* Fix any generics in zarr.array.
- By :user:`David Stansby ` :issue:`1861`.
-
-* Remove some unused mypy overrides.
- By :user:`David Stansby ` :issue:`1894`.
-
-* Finish typing zarr.metadata.
- By :user:`David Stansby ` :issue:`1880`.
-
-* Disallow implicit re-exports.
- By :user:`David Stansby ` :issue:`1908`.
-
-* Make typing strict.
- By :user:`David Stansby ` :issue:`1879`.
-
-* Enable extra mypy error codes.
- By :user:`David Stansby ` :issue:`1909`.
-
-* Enable warn_unreachable for mypy.
- By :user:`David Stansby ` :issue:`1937`.
-
-* Fix final typing errors.
- By :user:`David Stansby ` :issue:`1939`.
-
-Maintenance
-~~~~~~~~~~~
-
-* Remedy a situation where ``zarr-python`` was importing ``DummyStorageTransformer`` from the test suite.
- The dependency relationship is now reversed: the test suite imports this class from ``zarr-python``.
- By :user:`Davis Bennett ` :issue:`1601`.
-
-* [V3] Update minimum supported Python and Numpy versions.
- By :user:`Joe Hamman ` :issue:`1638`
-
-* use src layout and use hatch for packaging.
- By :user:`Davis Bennett ` :issue:`1592`.
-
-* temporarily disable mypy in v3 directory.
- By :user:`Joe Hamman ` :issue:`1649`.
-
-* create hatch test env.
- By :user:`Ryan Abernathey ` :issue:`1650`.
-
-* removed unused environments and workflows.
- By :user:`Ryan Abernathey ` :issue:`1651`.
-
-* Add env variables to sprint setup instructions.
- By :user:`Max Jones ` :issue:`1654`.
-
-* Add test matrix for V3.
- By :user:`Max Jones ` :issue:`1656`.
-
-* Remove attrs.
- By :user:`Davis Bennett ` :issue:`1660`.
-
-* Specify hatch envs using GitHub actions matrix for v3 tests.
- By :user:`Max Jones ` :issue:`1728`.
-
-* black -> ruff format + cleanup.
- By :user:`Saransh Chopra ` :issue:`1639`.
-
-* Remove old v3.
- By :user:`Davis Bennett ` :issue:`1742`.
-
-* V3 update pre commit.
- By :user:`Joe Hamman ` :issue:`1808`.
-
-* remove windows testing on v3 branch.
- By :user:`Joe Hamman ` :issue:`1817`.
-
-* fix: add mypy to test dependencies.
- By :user:`Davis Bennett ` :issue:`1789`.
-
-* chore(ci): add numpy 2 release candidate to test matrix.
- By :user:`Joe Hamman ` :issue:`1828`.
-
-* fix dependencies.
- By :user:`Norman Rzepka ` :issue:`1840`.
-
-* Add pytest to mypy dependencies.
- By :user:`David Stansby ` :issue:`1846`.
-
-* chore(pre-commit): update pre-commit versions and remove attrs dep mypy section.
- By :user:`Joe Hamman ` :issue:`1848`.
-
-* Enable some ruff rules (RUF) and fix issues.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1869`.
-
-* Configure Ruff to apply flake8-bugbear/isort/pyupgrade.
- By :user:`Norman Rzepka ` :issue:`1890`.
-
-* chore(ci): remove mypy from test action in favor of pre-commit action.
- By :user:`Joe Hamman ` :issue:`1887`.
-
-* Enable ruff/flake8-raise rules (RSE) and fix issues.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1872`.
-
-* Apply assorted ruff/refurb rules (FURB).
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1873`.
-
-* Enable ruff/flake8-implicit-str-concat rules (ISC) and fix issues.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1868`.
-
-* Add numpy to mypy pre-commit check env.
- By :user:`David Stansby ` :issue:`1893`.
-
-* remove fixture files from src.
- By :user:`Davis Bennett ` :issue:`1897`.
-
-* Fix list of packages in mypy pre-commit environment.
- By :user:`David Stansby ` :issue:`1907`.
-
-* Run sphinx directly on readthedocs.
- By :user:`David Stansby ` :issue:`1919`.
-
-* Apply preview ruff rules.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1942`.
-
-* Enable and apply ruff rule RUF009.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1941`.
-
-Documentation
-~~~~~~~~~~~~~
-
-* Specify docs hatch env for v3 branch.
- By :user:`Max Jones ` :issue:`1655`.
-
-* Development installation/contributing docs updates.
- By :user:`Alden Keefe Sampson ` :issue:`1643`.
-
-* chore: update project settings per scientific python repo-review.
- By :user:`Joe Hamman ` :issue:`1863`.
-
-* doc: update release notes for 3.0.0.alpha.
- By :user:`Joe Hamman ` :issue:`1959`.
-
-.. _release_2.18.3:
-
-2.18.3
-------
-
-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
- :user:`Joe Hamman ` (:issue:`2123`).
-
-Maintenance
-~~~~~~~~~~~
-* Removed support for Python 3.9.
- By :user:`David Stansby ` (:issue:`2074`).
-
-* Fix a regression when using orthogonal indexing with a scalar.
- By :user:`Deepak Cherian ` :issue:`1931`
-
-* Added compatibility with NumPy 2.1.
- By :user:`David Stansby `
-
-* Bump minimum NumPy version to 1.24.
- :user:`Joe Hamman ` (:issue:`2127`).
-
-Deprecations
-~~~~~~~~~~~~
-
-* Deprecate :class:`zarr.n5.N5Store` and :class:`zarr.n5.N5FSStore`. These
- stores are slated to be removed in Zarr Python 3.0.
- By :user:`Joe Hamman ` :issue:`2085`.
-
-.. _release_2.18.2:
-
-2.18.2
-------
-
-Enhancements
-~~~~~~~~~~~~
-
-* Add Zstd codec to old V3 code path.
- By :user:`Ryan Abernathey `
-
-.. _release_2.18.1:
-
-2.18.1
-------
-
-Maintenance
-~~~~~~~~~~~
-* Fix a regression when getting or setting a single value from arrays with size-1 chunks.
- By :user:`Deepak Cherian ` :issue:`1874`
-
-.. _release_2.18.0:
-
-2.18.0
-------
-
-Enhancements
-~~~~~~~~~~~~
-* Performance improvement for reading and writing chunks if any of the dimensions is size 1.
- By :user:`Deepak Cherian ` :issue:`1730`.
-
-Maintenance
-~~~~~~~~~~~
-* Enable ruff/bugbear rules (B) and fix issues.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1702`.
-
-* Minor updates to use `np.inf` instead of `np.PINF` / `np.NINF` in preparation for NumPy 2.0.0 release.
- By :user:`Joe Hamman ` :issue:`1842`.
-
-Deprecations
-~~~~~~~~~~~~
-
-* Deprecate experimental v3 support by issuing a `FutureWarning`.
- Also updated docs to warn about using the experimental v3 version.
- By :user:`Joe Hamman ` :issue:`1802` and :issue:`1807`.
-
-* Deprecate the following stores: :class:`zarr.storage.DBMStore`, :class:`zarr.storage.LMDBStore`,
- :class:`zarr.storage.SQLiteStore`, :class:`zarr.storage.MongoDBStore`, :class:`zarr.storage.RedisStore`,
- and :class:`zarr.storage.ABSStore`. These stores are slated to be removed from Zarr-Python in version 3.0.
- By :user:`Joe Hamman ` :issue:`1801`.
-
-.. _release_2.17.2:
-
-2.17.2
-------
-
-Enhancements
-~~~~~~~~~~~~
-
-* [v3] Dramatically reduce number of ``__contains__`` requests in favor of optimistically calling `__getitem__`
- and handling any error that may arise.
- By :user:`Deepak Cherian ` :issue:`1741`.
-
-* [v3] Reuse the downloaded array metadata when creating an ``Array``.
- By :user:`Deepak Cherian ` :issue:`1734`.
-
-* Optimize ``Array.info`` so that it calls `getsize` only once.
- By :user:`Deepak Cherian ` :issue:`1733`.
-
-* Override IPython ``_repr_*_`` methods to avoid expensive lookups against object stores.
- By :user:`Deepak Cherian ` :issue:`1716`.
-
-* FSStore now raises rather than return bad data.
- By :user:`Martin Durant ` and :user:`Ian Carroll ` :issue:`1604`.
-
-* Avoid redundant ``__contains__``.
- By :user:`Deepak Cherian ` :issue:`1739`.
-
-Docs
-~~~~
-
-* Fix link to GCSMap in ``tutorial.rst``.
- By :user:`Daniel Jahn ` :issue:`1689`.
-
-* Endorse `SPEC0000 `_ and state version support policy in ``installation.rst``.
- By :user:`Sanket Verma ` :issue:`1665`.
-
-* Migrate v1 and v2 specification to `Zarr-Specs `_.
- By :user:`Sanket Verma ` :issue:`1582`.
-
-Maintenance
-~~~~~~~~~~~
-
-* Add CI test environment for Python 3.12
- By :user:`Joe Hamman ` :issue:`1719`.
-
-* Bump minimum supported NumPy version to 1.23 (per spec 0000)
- By :user:`Joe Hamman ` :issue:`1719`.
-
-* Minor fixes: Using ``is`` instead of ``type`` and removing unnecessary ``None``.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1737`.
-
-* Fix tests failure related to Pytest 8.
- By :user:`David Stansby ` :issue:`1714`.
-
-.. _release_2.17.1:
-
-2.17.1
-------
-
-Enhancements
-~~~~~~~~~~~~
-
-* Change occurrences of % and format() to f-strings.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1423`.
-
-* Proper argument for numpy.reshape.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1425`.
-
-* Add typing to dimension separator arguments.
- By :user:`David Stansby ` :issue:`1620`.
-
-Docs
-~~~~
-
-* ZIP related tweaks.
- By :user:`Davis Bennett ` :issue:`1641`.
-
-Maintenance
-~~~~~~~~~~~
-
-* Update config.yml with Zulip.
- By :user:`Josh Moore `.
-
-* Replace Gitter with the new Zulip Chat link.
- By :user:`Sanket Verma ` :issue:`1685`.
-
-* Fix RTD build.
- By :user:`Sanket Verma ` :issue:`1694`.
-
-.. _release_2.17.0:
-
-2.17.0
-------
-
-Enhancements
-~~~~~~~~~~~~
-
-* Added type hints to ``zarr.creation.create()``.
- By :user:`David Stansby ` :issue:`1536`.
-
-* Pyodide support: Don't require fasteners on Emscripten.
- By :user:`Hood Chatham ` :issue:`1663`.
-
-Docs
-~~~~
-
-* Minor correction and changes in documentation.
- By :user:`Sanket Verma ` :issue:`1509`.
-
-* Fix typo in documentation.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1554`
-
-* The documentation build now fails if there are any warnings.
- By :user:`David Stansby ` :issue:`1548`.
-
-* Add links to ``numcodecs`` docs in the tutorial.
- By :user:`David Stansby ` :issue:`1535`.
-
-* Enable offline formats for documentation builds.
- By :user:`Sanket Verma ` :issue:`1551`.
-
-* Minor tweak to advanced indexing tutorial examples.
- By :user:`Ross Barnowski ` :issue:`1550`.
-
-* Automatically document array members using sphinx-automodapi.
- By :user:`David Stansby ` :issue:`1547`.
-
-* Add a markdown file documenting the current and former core-developer team.
- By :user:`Joe Hamman ` :issue:`1628`.
-
-* Add Norman Rzepka to core-dev team.
- By :user:`Joe Hamman ` :issue:`1630`.
-
-* Added section about accessing ZIP archives on s3.
- By :user:`Jeff Peck ` :issue:`1613`, :issue:`1615`, and :user:`Davis Bennett ` :issue:`1641`.
-
-* Add V3 roadmap and design document.
- By :user:`Joe Hamman ` :issue:`1583`.
-
-Maintenance
-~~~~~~~~~~~
-
-* Drop Python 3.8 and NumPy 1.20
- By :user:`Josh Moore `; :issue:`1557`.
-
-* Cache result of ``FSStore._fsspec_installed()``.
- By :user:`Janick Martinez Esturo ` :issue:`1581`.
-
-* Extend copyright notice to 2023.
- By :user:`Jack Kelly ` :issue:`1528`.
-
-* Change occurrence of ``io.open()`` into ``open()``.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1421`.
-
-* Preserve ``dimension_separator`` when resizing arrays.
- By :user:`Ziwen Liu ` :issue:`1533`.
-
-* Initialise some sets in tests with set literals instead of list literals.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1534`.
-
-* Allow ``black`` code formatter to be run with any Python version.
- By :user:`David Stansby ` :issue:`1549`.
-
-* Remove ``sphinx-rtd-theme`` dependency from ``pyproject.toml``.
- By :user:`Sanket Verma ` :issue:`1563`.
-
-* Remove ``CODE_OF_CONDUCT.md`` file from the Zarr-Python repository.
- By :user:`Sanket Verma ` :issue:`1572`.
-
-* Bump version of black in pre-commit.
- By :user:`David Stansby ` :issue:`1559`.
-
-* Use list comprehension where applicable.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1555`.
-
-* Use format specification mini-language to format string.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1558`.
-
-* Single startswith() call instead of multiple ones.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1556`.
-
-* Move codespell options around.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1196`.
-
-* Remove unused mypy ignore comments.
- By :user:`David Stansby ` :issue:`1602`.
-
-.. _release_2.16.1:
-
-2.16.1
-------
-
-Maintenance
-~~~~~~~~~~~
-
-* Require ``setuptools_scm`` version ``1.5.4``\+
- By :user:`John A. Kirkham ` :issue:`1477`.
-
-* Add ``docs`` requirements to ``pyproject.toml``
- By :user:`John A. Kirkham ` :issue:`1494`.
-
-* Fixed caching issue in ``LRUStoreCache``.
- By :user:`Mads R. B. Kristensen ` :issue:`1499`.
-
-.. _release_2.16.0:
-
-2.16.0
-------
-
-Enhancements
-~~~~~~~~~~~~
-
-* Allow for partial codec specification in V3 array metadata.
- By :user:`Joe Hamman ` :issue:`1443`.
-
-* Add ``__contains__`` method to ``KVStore``.
- By :user:`Christoph Gohlke ` :issue:`1454`.
-
-* **Block Indexing**: Implemented blockwise (chunk blocks) indexing to ``zarr.Array``.
- By :user:`Altay Sansal ` :issue:`1428`
-
-Maintenance
-~~~~~~~~~~~
-
-* Refactor the core array tests to reduce code duplication.
- By :user:`Davis Bennett ` :issue:`1462`.
-
-* Style the codebase with ``ruff`` and ``black``.
- By :user:`Davis Bennett ` :issue:`1459`
-
-* Ensure that chunks is tuple of ints upon array creation.
- By :user:`Philipp Hanslovsky ` :issue:`1461`
-
-.. _release_2.15.0:
-
-2.15.0
-------
-
-Enhancements
-~~~~~~~~~~~~
-
-* Implement more extensive fallback of getitem/setitem for orthogonal indexing.
- By :user:`Andreas Albert ` :issue:`1029`.
-
-* Getitems supports ``meta_array``.
- By :user:`Mads R. B. Kristensen ` :issue:`1131`.
-
-* ``open_array()`` now takes the ``meta_array`` argument.
- By :user:`Mads R. B. Kristensen ` :issue:`1396`.
-
-Maintenance
-~~~~~~~~~~~
-
-* Remove ``codecov`` from GitHub actions.
- By :user:`John A. Kirkham ` :issue:`1391`.
-
-* Replace ``np.product`` with ``np.prod`` due to deprecation.
- By :user:`James Bourbeau ` :issue:`1405`.
-
-* Activate Py 3.11 builds.
- By :user:`Joe Hamman ` :issue:`1415`.
-
-Documentation
-~~~~~~~~~~~~~
-
-* Add API reference for V3 Implementation in the docs.
- By :user:`Sanket Verma ` :issue:`1345`.
-
-Bug fixes
-~~~~~~~~~
-
-* Fix the conda-forge error. Read :issue:`1347` for detailed info.
- By :user:`Josh Moore ` :issue:`1364` and :issue:`1367`.
-
-* Fix ``ReadOnlyError`` when opening V3 store via fsspec reference file system.
- By :user:`Joe Hamman ` :issue:`1383`.
-
-* Fix ``normalize_fill_value`` for structured arrays.
- By :user:`Alan Du ` :issue:`1397`.
-
-.. _release_2.14.2:
-
-2.14.2
-------
-
-Bug fixes
-~~~~~~~~~
-
-* Ensure ``zarr.group`` uses writeable mode to fix issue with :issue:`1304`.
- By :user:`Brandur Thorgrimsson ` :issue:`1354`.
-
-.. _release_2.14.1:
-
-2.14.1
-------
-
-Documentation
-~~~~~~~~~~~~~
-
-* Fix API links.
- By :user:`Josh Moore ` :issue:`1346`.
-
-* Fix unit tests which prevented the conda-forge release.
- By :user:`Josh Moore ` :issue:`1348`.
-
-.. _release_2.14.0:
-
-2.14.0
-------
-
-Major changes
-~~~~~~~~~~~~~
-
-* Improve Zarr V3 support, adding partial store read/write and storage transformers.
- Add new features from the `v3 spec `_:
-
- * storage transformers
- * `get_partial_values` and `set_partial_values`
- * efficient `get_partial_values` implementation for `FSStoreV3`
- * sharding storage transformer
-
- By :user:`Jonathan Striebel `; :issue:`1096`, :issue:`1111`.
-
-* N5 nows supports Blosc.
- Remove warnings emitted when using N5Store or N5FSStore with a blosc-compressed array.
- By :user:`Davis Bennett `; :issue:`1331`.
-
-Bug fixes
-~~~~~~~~~
-
-* Allow reading utf-8 encoded json files
- By :user:`Nathan Zimmerberg ` :issue:`1308`.
-
-* Ensure contiguous data is give to ``FSStore``. Only copying if needed.
- By :user:`Mads R. B. Kristensen ` :issue:`1285`.
-
-* NestedDirectoryStore.listdir now returns chunk keys with the correct '/' dimension_separator.
- By :user:`Brett Graham ` :issue:`1334`.
-
-* N5Store/N5FSStore dtype returns zarr Stores readable dtype.
- By :user:`Marwan Zouinkhi ` :issue:`1339`.
-
-.. _release_2.13.6:
-
-2.13.6
-------
-
-Maintenance
-~~~~~~~~~~~
-
-* Bump gh-action-pypi-publish to 1.6.4.
- By :user:`Josh Moore ` :issue:`1320`.
-
-.. _release_2.13.5:
-
-2.13.5
-------
-
-Bug fixes
-~~~~~~~~~
-
-* Ensure ``zarr.create`` uses writeable mode to fix issue with :issue:`1304`.
- By :user:`James Bourbeau ` :issue:`1309`.
-
-.. _release_2.13.4:
-
-2.13.4
-------
-
-Appreciation
-~~~~~~~~~~~~~
-
-Special thanks to Outreachy participants for contributing to most of the
-maintenance PRs. Please read the blog post summarising the contribution phase
-and welcoming new Outreachy interns:
-https://zarr.dev/blog/welcoming-outreachy-2022-interns/
-
-
-Enhancements
-~~~~~~~~~~~~
-
-* Handle fsspec.FSMap using FSStore store.
- By :user:`Rafal Wojdyla ` :issue:`1304`.
-
-Bug fixes
-~~~~~~~~~
-
-* Fix bug that caused double counting of groups in ``groups()`` and ``group_keys()`` methods with V3 stores.
- By :user:`Ryan Abernathey ` :issue:`1228`.
-
-* Remove unnecessary calling of `contains_array` for key that ended in `.array.json`.
- By :user:`Joe Hamman ` :issue:`1149`.
-
-* Fix bug that caused double counting of groups in ``groups()`` and ``group_keys()``
- methods with V3 stores.
- By :user:`Ryan Abernathey ` :issue:`1228`.
-
-Documentation
-~~~~~~~~~~~~~
-
-* Fix minor indexing errors in tutorial and specification examples of documentation.
- By :user:`Kola Babalola ` :issue:`1277`.
-
-* Add `requirements_rtfd.txt` in `contributing.rst`.
- By :user:`AWA BRANDON AWA ` :issue:`1243`.
-
-* Add documentation for find/findall using visit.
- By :user:`Weddy Gikunda ` :issue:`1241`.
-
-* Refresh of the main landing page.
- By :user:`Josh Moore ` :issue:`1173`.
-
-Maintenance
-~~~~~~~~~~~
-
-* Migrate to ``pyproject.toml`` and remove redundant infrastructure.
- By :user:`Saransh Chopra ` :issue:`1158`.
-
-* Require ``setuptools`` 64.0.0+
- By :user:`Saransh Chopra ` :issue:`1193`.
-
-* Pin action versions (pypi-publish, setup-miniconda) for dependabot
- By :user:`Saransh Chopra ` :issue:`1205`.
-
-* Remove ``tox`` support
- By :user:`Saransh Chopra ` :issue:`1219`.
-
-* Add workflow to label PRs with "needs release notes".
- By :user:`Saransh Chopra ` :issue:`1239`.
-
-* Simplify if/else statement.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1227`.
-
-* Get coverage up to 100%.
- By :user:`John Kirkham ` :issue:`1264`.
-
-* Migrate coverage to ``pyproject.toml``.
- By :user:`John Kirkham ` :issue:`1250`.
-
-* Use ``conda-incubator/setup-miniconda@v2.2.0``.
- By :user:`John Kirkham ` :issue:`1263`.
-
-* Delete unused files.
- By :user:`John Kirkham ` :issue:`1251`.
-
-* Skip labeller for bot PRs.
- By :user:`Saransh Chopra ` :issue:`1271`.
-
-* Restore Flake8 configuration.
- By :user:`John Kirkham ` :issue:`1249`.
-
-* Add missing newline at EOF.
- By :user:`Dimitri Papadopoulos` :issue:`1253`.
-
-* Add `license_files` to `pyproject.toml`.
- By :user:`John Kirkham ` :issue:`1247`.
-
-* Adding `pyupgrade` suggestions.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1225`.
-
-* Fixed some linting errors.
- By :user:`Weddy Gikunda ` :issue:`1226`.
-
-* Added the link to main website in readthedocs sidebar.
- By :user:`Stephanie_nkwatoh ` :issue:`1216`.
-
-* Remove redundant wheel dependency in `pyproject.toml`.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1233`.
-
-* Turned on `isloated_build` in `tox.ini` file.
- By :user:`AWA BRANDON AWA ` :issue:`1210`.
-
-* Fixed `flake8` alert and avoid duplication of `Zarr Developers`.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1203`.
-
-* Bump to NumPy 1.20+ in `environment.yml`.
- By :user:`John Kirkham ` :issue:`1201`.
-
-* Bump to NumPy 1.20 in `pyproject.toml`.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1192`.
-
-* Remove LGTM (`.lgtm.yml`) configuration file.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1191`.
-
-* Codespell will skip `fixture` in pre-commit.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1197`.
-
-* Add msgpack in `requirements_rtfd.txt`.
- By :user:`Emmanuel Bolarinwa ` :issue:`1188`.
-
-* Added license to docs fixed a typo from `_spec_v2` to `_spec_v3`.
- By :user:`AWA BRANDON AWA ` :issue:`1182`.
-
-* Fixed installation link in `README.md`.
- By :user:`AWA BRANDON AWA ` :issue:`1177`.
-
-* Fixed typos in `installation.rst` and `release.rst`.
- By :user:`Chizoba Nweke ` :issue:`1178`.
-
-* Set `docs/conf.py` language to `en`.
- By :user:`AWA BRANDON AWA ` :issue:`1174`.
-
-* Added `installation.rst` to the docs.
- By :user:`AWA BRANDON AWA ` :issue:`1170`.
-
-* Adjustment of year to `2015-2018` to `2015-2022` in the docs.
- By :user:`Emmanuel Bolarinwa ` :issue:`1165`.
-
-* Updated `Forking the repository` section in `contributing.rst`.
- By :user:`AWA BRANDON AWA ` :issue:`1171`.
-
-* Updated GitHub actions.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1134`.
-
-* Update web links: `http:// → https://`.
- By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1313`.
-
-.. _release_2.13.3:
-
-2.13.3
-------
-
-* Improve performance of slice selections with steps by omitting chunks with no relevant
- data.
- By :user:`Richard Shaw ` :issue:`843`.
-
-.. _release_2.13.2:
-
-2.13.2
-------
-
-* Fix test failure on conda-forge builds (again).
- By :user:`Josh Moore `; see
- `zarr-feedstock#65 `_.
-
-.. _release_2.13.1:
-
-2.13.1
-------
-
-* Fix test failure on conda-forge builds.
- By :user:`Josh Moore `; see
- `zarr-feedstock#65 `_.
-
-.. _release_2.13.0:
-
-2.13.0
-------
-
-Major changes
-~~~~~~~~~~~~~
-
-* **Support of alternative array classes** by introducing a new argument,
- meta_array, that specifies the type/class of the underlying array. The
- meta_array argument can be any class instance that can be used as the like
- argument in NumPy (see `NEP 35
- `_).
- enabling support for CuPy through, for example, the creation of a CuPy CPU
- compressor.
- By :user:`Mads R. B. Kristensen ` :issue:`934`.
-
-* **Remove support for Python 3.7** in concert with NumPy dependency.
- By :user:`Davis Bennett ` :issue:`1067`.
-
-* **Zarr v3: add support for the default root path** rather than requiring
- that all API users pass an explicit path.
- By :user:`Gregory R. Lee ` :issue:`1085`, :issue:`1142`.
-
-
-Bug fixes
-~~~~~~~~~
-
-* Remove/relax erroneous "meta" path check (**regression**).
- By :user:`Gregory R. Lee ` :issue:`1123`.
-
-* Cast all attribute keys to strings (and issue deprecation warning).
- By :user:`Mattia Almansi ` :issue:`1066`.
-
-* Fix bug in N5 storage that prevented arrays located in the root of the hierarchy from
- bearing the `n5` keyword. Along with fixing this bug, new tests were added for N5 routines
- that had previously been excluded from testing, and type annotations were added to the N5 codebase.
- By :user:`Davis Bennett |