Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

doc(v3): add v3 roadmap and design document #1583

Merged
merged 7 commits into from
Jan 16, 2024

Conversation

jhamman
Copy link
Member

@jhamman jhamman commented Nov 29, 2023

This PR adds the V3 roadmap / design document that we have been discussing in #1569 and as part of the refactor working group (#1480). Comments on this document are still welcome.

@github-actions github-actions bot added the needs release notes Automatically applied to PRs which haven't added release notes label Nov 29, 2023
@jhamman jhamman mentioned this pull request Nov 29, 2023
6 tasks
v3-roadmap-and-design.md Outdated Show resolved Hide resolved
Copy link
Member

@jeromekelleher jeromekelleher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a very helpful document. I think the proposed design, particularly in terms of making the SyncX classes use the Async ones is great.

My main input is around documenting the extent of expected code breakage, and giving downstream devs advice on how to keep their code running when v3 drops.

One thing I'm also confused about is whether on-file changes for z3 format are orthogonal to the code/API changes for zp3.0? Will zv2 on-file arrays be supported indefinitely?

I think these issues are important to be clear about up front, because they do inform later design choices.

- `Store`, `ReadStore`, `ReadWriteStore`, `ReadListStore`, and `ReadWriteListStore`
- `BaseArray`, `SynchronousArray`, and `AsynchronousArray`
- `BaseGroup`, `SynchronousGroup`, and `AsynchronousGroup`
- `Codec`, `ArrayArrayCodec`, `ArrayBytesCodec`, `BytesBytesCodec`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mentioning codecs here makes me wonder what the relationship with numcodecs is going forward. If isolating codecs is part of the zp 3.0, perhaps this should be discussed explicitly?

The point below about entry_points and [zarr.codecs] hits the same point.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@normanrz mentioned the idea about writing a set of codec that would wrap numcodecs existing compressors/filters/etc. That would likely be the cleanest way to continue using numcodecs going forward. With the entrypoint api for codecs, the wrapper class could actually live in numcodecs and simply be registered as an entrypoint that follows the protocol. See #1588 for a start on this api.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This also came up in today's refactor WG call. @normanrz has given this more thought than I have. Perhaps he can share a bit more on what you think is needed here?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Zarr 3 spec is pretty explicit about what codecs are in spec to ensure compatibility among implementations. That set of codecs is now implemented directly in zarr-python (with use of numcodecs).

However, it is desirable to experiment with other codecs in zarr-python and make use of numcodecs. I think there are 2 ways of doing this:

  1. We could make generic adapters for numcodecs to fit the zarr codecs API (ie. ArrayArrayCodec, ArrayBytesCodec, BytesBytesCodec). That would also be useful to code v2 compatibility.
  2. We could also introduce a new API in numcodecs that presents all codecs using the Zarr codec API. Not sure what the appetite for such a change on the numcodecs side is.

I am a bit concerned about the codec metadata that gets written to the jsons because most codecs in numcodecs are not in the Zarr v3 spec (or with different metadata). Maybe we should actually mark them as numcodecs codecs:

"codecs": [{"name": "numcodecs", "configuration": {"id":"blosc", "cname": "zstd", ...}}]

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for raising this, @jeromekelleher, and the explanation here, @jhamman and @normanrz.

I was wondering what would be the ideal way to add a new codec (if and when we plan to add any) in Zarr-Python V3.0?
And what would be the best way forward out of the two options if we consider the possibility of extending the existing codecs in the V3 specification?

Also, it'd be great if we could get @jakirkham views on this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To add new codecs to zarr-python, developers can subclass the base classes (e.g. ArrayBytesCodec, ArrayArrayCodec, BytesBytesCodec) and register the codec using the [zarr.codecs] entry point in their pyproject.toml or programmatically call zarr.v3.codecs.registry.register_codec.


What other dependencies should be considered?

1. Attrs - Zarrita makes extensive use of the Attrs library
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd register a -1 on adding a dependency on attrs at this point - the builtin dataclasses module does most of the useful things. (My personal theory is that installation problems grow like O(n^2) where n is the number of dependencies - so only each additional dependency gets harder to justify adding!)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm sympathetic to this perspective @jeromekelleher. I could imagine switching from attrs to dataclasses (or even just vanilla python classes :) ) once the API changes have cooled down.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree that we should remove attrs. However, for development right now we can probably move faster when keeping it in right now and later do one concerted effort to replace it.


1. H5py compat moved to a stand alone module?
2. `Group.__getitem__` support moved to `Group.members.__getitem__`?
3. Others?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this is really the extend of v2 breakage (super minor!), I'd suggest toning down the language at the top about zp3.0 introducing breaking changes from zp2.x. Something like "Zarr-python 3.0 introduces some minor breaking changes, mostly around compatibility with h5py"

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also below "Zarr-Python 3.0 will introduce a number of new APIs and breaking changes to existing APIs." makes me nervous as someone with a lot of code depending on zp 2.0 APIs - addressing the extent of expected breakage, and what people can do to prepare for it at the top of the document would be great.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is really important point @jeromekelleher! The doc says there will be breaking changes to APIs, but doesn't specify what those changes will be. In order for the community to get on board, we should be super clear about this. My hope is that breaking changes are very minimal, and whatever breaking changes there are should be justified with a clearly argued rationale.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be honest, we're still sorting out the feasibility of maintaining API compatibility at the Array level. @d-v-b has been leading this so I'll let him share his thoughts.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a couple fundamental challenges for preserving the zarr-python v2 api after we fully integrate v3: The Array class in zarr-python exposes all the attributes defined for zarr version 2 arrays. But zarr version 3 arrays have different attributes, so in zarr-python version 3 we have a few options for dealing with this:

  1. Uses the current zarr-python Array class to wrap v3 arrays and make them look like v2 arrays. this maximizes backwards compatibility, but would be a usability nightmare and confusing for people who want to work primarily with v3 arrays.
  2. Create a new Array class in zarr-python that exposes zarr version 3 array attributes, much like zarr-python v2 did for zarr version 2 arrays, and then use this class to wrap zarr version 2 arrays. This would also be unpleasant, because zarr version 3 arrays don't have a dtype property (instead, that attribute is called data_type), and so hewing too close the zarr version 3 array spec for zarr-python would result in an impedance mismatch with the wider pydata ecosystem.
  3. elevate the Array class to a level of abstraction above zarr version 2 and version 3 array specifications, and make that Array class capable of using zarr version 2 or 3 arrays as load-bearing members. This lets us optimize the Array class in zarr-python for a specific goal: a performant, familiar API for people coming from other pydata tools, while smoothing over the differences between v2 and v3 arrays. I think this is the best option, but it does involve substantial breaking changes to the zarr-python array API.

The only option here that doesn't break the zarr-python array API is 1, but it's a terrible option for people who want to get the most out of zarr version 3. The fact is, zarr v3 is a breaking change w.r.t. zarr v2, and I would suggest that people who do not want their code to break should continue using zarr v2 and pin zarr-python to version 2.

And this doesn't touch performance at all. I think we will need to change a lot of APIs to get good performance in zarr-python version 3.

@jakirkham jakirkham mentioned this pull request Dec 11, 2023
6 tasks
v3-roadmap-and-design.md Show resolved Hide resolved

## Examples of what 3.0 will enable?
1. Reading and writing V3 spec-compliant groups and arrays
2. V3 extensions including sharding and variable chunking.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to sort out the ZEPs, agree to adopt them?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a good question but might be outside the scope of this document (since it's unsettled anyway).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We've been proceeding assuming that some of the extensions that motivated V3 (sharding, variable chunk grids) would eventually find support here. But we aren't requiring full support for these extensions for the initial release.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fwiw, the sharding codec is already in the v3 branch. So, it could ship in the initial release.

v3-roadmap-and-design.md Outdated Show resolved Hide resolved
v3-roadmap-and-design.md Outdated Show resolved Hide resolved

1. The `Store` interface will be entirely async.
2. On top of the async `Store` interface, we will provide an `AsyncArray` and `AsyncGroup` interface.
3. Finally, the primary user facing API will be synchronous `Array` and `Group` classes that wrap the async equivalents.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like this still misses the point made above about concurrency of metadata operations and cross-variable operations. A sync Array object still needs to get its metadata and can only provide internal async IO.

We probably also need some concept of "batch" and/or "queue" to allow files to accumulate or stream to the async IO.

May be interesting to look into dask's batching mechanism for sending messages to the scheduler, which I don't personally have any knowledge of.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We probably also need some concept of "batch" and/or "queue" to allow files to accumulate or stream to the async IO.

I think tensorstore achieves something like this via transactions, it might be worth copying that API

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have been discussing something similar that could exist at (or near) the store layer.

store = MyStore()

with store.transaction() as ts:
    array_foo.create(..., store=ts)
    array_bar.create(..., store=ts)

This is going to necessitate some thought around the state of the store before the transaction but would enable matching multiple writes in the form of a write-cache.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wouldn't it be possible for users to use the AsyncArray and AsyncGroup directly, if concurrency is important to them?


- `.metadata` (see Metadata Interface below)
- `.attrs` - (pull from metadata object)
- `.info` - (pull from existing property)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You mean bundle the properties like shape?
The V2 version lists all the files to see if they exist or not, which we may well choose not to want.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed that listing the store is not a great default behavior. I'll add a note here.


**Indexing**

Zarr-Python currently supports `__getitem__` style indexing and the special `oindex` and `vindex` indexers. These are not part of the current Array API standard (see [data-apis/array-api\#669](https://github.com/data-apis/array-api/issues/669)) but they have been [proposed as a NEP](https://numpy.org/neps/nep-0021-advanced-indexing.html). Zarr-Python will maintain these in 3.0.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mention cross-variable indexing? Like, the [0,0] value for each variable in a group?


# or equivalently

zarr.save_many([arr1 ,arr2])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a big point! So here is the batching that I mentioned before. It should be clarified, what the state of store is before save/save_many is called: is it usable, does it have some ephemeral storage (including data?) ?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good questions @martindurant - I've left a note that indicates this part of the doc is in need of some additional design effort.

What other dependencies should be considered?

1. Attrs - Zarrita makes extensive use of the Attrs library
2. Fsspec - Zarrita has a hard dependency on Fsspec. This could be easily relaxed though.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(noting that fsspec has no dependencies of its own, but many of its implementations do)

1. Attrs - Zarrita makes extensive use of the Attrs library
2. Fsspec - Zarrita has a hard dependency on Fsspec. This could be easily relaxed though.

## Breaking changes relative to Zarr-Python 2.*
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Part of the problem is not having a clear definition of which part of v2 is considered to outward-facing API. I would suggest it's Group and Array only (plus a few convenience functions like open_*).

Copy link
Member

@joshmoore joshmoore left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rabernat 2 weeks ago
I don't think this needs to be in the docs itself. Better as it is, as a standalone doc for devs.

Several initial thoughts at a high-structural level on the design document:

  • Agreed that it needs not be in the docs.
  • Though I think we can make even the docs use .md
  • I'd feel slightly better if this were down one directory level but that can only be the docs/ folder at the moment, so maybe we just punt on that.
  • I could imagine getting this merged pretty proactively and then perhaps keep a modification list as suggestions are made. That might be easier on the v3 branch.
  • What is the process you were envisioning, @jhamman? (As I ask that, I can't help but think of the ZEP process...)

v3-roadmap-and-design.md Show resolved Hide resolved

## Examples of what 3.0 will enable?
1. Reading and writing V3 spec-compliant groups and arrays
2. V3 extensions including sharding and variable chunking.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a good question but might be outside the scope of this document (since it's unsettled anyway).

Comment on lines 27 to 33
- Provide a complete implementation of Zarr V3 through the Zarr-Python API
- Align the Zarr-Python array API with the [array API Standard](https://data-apis.org/array-api/latest/)
- Clear the way for exciting extensions / ZEPs (i.e. [sharding](https://zarr-specs.readthedocs.io/en/latest/v3/codecs/sharding-indexed/v1.0.html), [variable chunking](https://zarr.dev/zeps/draft/ZEP0003.html), etc.)
- Provide a developer API that can be used to implement and register V3 extensions
- Improve the performance of Zarr-Python by streamlining the interface between the Store layer and higher level APIs (e.g. Groups and Arrays)
- Clean up the internal and user facing APIs
- Improve code quality and robustness (e.g. achieve 100% type hint coverage)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had intentionally not ordered but here is my own view on priorities here.

Suggested change
- Provide a complete implementation of Zarr V3 through the Zarr-Python API
- Align the Zarr-Python array API with the [array API Standard](https://data-apis.org/array-api/latest/)
- Clear the way for exciting extensions / ZEPs (i.e. [sharding](https://zarr-specs.readthedocs.io/en/latest/v3/codecs/sharding-indexed/v1.0.html), [variable chunking](https://zarr.dev/zeps/draft/ZEP0003.html), etc.)
- Provide a developer API that can be used to implement and register V3 extensions
- Improve the performance of Zarr-Python by streamlining the interface between the Store layer and higher level APIs (e.g. Groups and Arrays)
- Clean up the internal and user facing APIs
- Improve code quality and robustness (e.g. achieve 100% type hint coverage)
- Provide a complete implementation of Zarr V3 through the Zarr-Python API
- Clear the way for exciting extensions / ZEPs (i.e. [sharding](https://zarr-specs.readthedocs.io/en/latest/v3/codecs/sharding-indexed/v1.0.html), [variable chunking](https://zarr.dev/zeps/draft/ZEP0003.html), etc.)
- Provide a developer API that can be used to implement and register V3 extensions
- Improve the performance of Zarr-Python by streamlining the interface between the Store layer and higher level APIs (e.g. Groups and Arrays)
- Clean up the internal and user facing APIs
- Improve code quality and robustness (e.g. achieve 100% type hint coverage)
- Align the Zarr-Python array API with the [array API Standard](https://data-apis.org/array-api/latest/)

v3-roadmap-and-design.md Outdated Show resolved Hide resolved
@github-actions github-actions bot removed the needs release notes Automatically applied to PRs which haven't added release notes label Dec 20, 2023
@joshmoore
Copy link
Member

Since the v3 branch doesn't have a "landing page", I'm going to misuse this PR for a moment: @jhamman, @normanrz, @d-v-b-- thoughts on opening a PR from v3 to main so everyone is aware of the full diff and has a place to comment?

v3-roadmap-and-design.md Outdated Show resolved Hide resolved
Co-authored-by: Norman Rzepka <code@normanrz.com>
@jhamman
Copy link
Member Author

jhamman commented Jan 3, 2024

Per the discussion in the refactor meeting today, we're hoping to merge this and start in its current state and do additional design iteration in smaller PRs.

Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>
@jhamman
Copy link
Member Author

jhamman commented Jan 16, 2024

@zarr-developers/python-core-devs - we need an approval to merge this.

@jhamman jhamman merged commit 8ac8553 into zarr-developers:main Jan 16, 2024
18 checks passed
@jhamman jhamman deleted the doc/v3-technical-design branch January 16, 2024 17:14
@jhamman jhamman restored the doc/v3-technical-design branch January 16, 2024 17:14
@joshmoore
Copy link
Member

joshmoore commented last month
Since the v3 branch doesn't have a "landing page", I'm going to misuse this PR for a moment: @jhamman, @normanrz, @d-v-b-- thoughts on opening a PR from v3 to main so everyone is aware of the full diff and has a place to comment?

Big 👍 for the merging of the doc. Any thoughts on the timeline for opening the PR for review?

@jhamman
Copy link
Member Author

jhamman commented Jan 19, 2024

Big 👍 for the merging of the doc. Any thoughts on the timeline for opening the PR for review?

I think we're waiting on a few of the major reorg prs to land: #1589, #1590, #1634, and #1634. Once those are in, a review branch will probably make more sense.

@joshmoore
Copy link
Member

Awesome. Thanks, @jhamman!

jhamman added a commit to jhamman/zarr-python that referenced this pull request Jan 24, 2024
* doc(v3): add v3 roadmap and design document

* Update v3-roadmap-and-design.md

* updates after latest round of reviews

* Update v3-roadmap-and-design.md

Co-authored-by: Norman Rzepka <code@normanrz.com>

* Update v3-roadmap-and-design.md

Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>

---------

Co-authored-by: Norman Rzepka <code@normanrz.com>
Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>
@jhamman jhamman added this to the 3.0.0.alpha milestone Apr 22, 2024
@jhamman jhamman mentioned this pull request Aug 27, 2024
6 tasks
jhamman added a commit that referenced this pull request Oct 11, 2024
* Bump pypa/gh-action-pypi-publish from 1.8.10 to 1.8.11 (#1586)

Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.8.10 to 1.8.11.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.8.10...v1.8.11)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump conda-incubator/setup-miniconda from 2.3.0 to 3.0.1 (#1587)

Bumps [conda-incubator/setup-miniconda](https://github.com/conda-incubator/setup-miniconda) from 2.3.0 to 3.0.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/v2.3.0...v3.0.1)

---
updated-dependencies:
- dependency-name: conda-incubator/setup-miniconda
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* * Cache result of FSStore._fsspec_installed (#1581)

Prevent runtime-overhead in doing this check multiple times

* Bump version of black in pre-commit (#1559)

* Use list comprehension where applicable (#1555)

Even if this is only a test, list comprehensions are faster than
repeatedly call append().

Also use tuple instead of list when possible.

Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>

* Bump numcodecs from 0.11.0 to 0.12.1 (#1580)

Bumps [numcodecs](https://github.com/zarr-developers/numcodecs) from 0.11.0 to 0.12.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.11.0...v0.12.1)

---
updated-dependencies:
- dependency-name: numcodecs
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joe Hamman <joe@earthmover.io>

* Use format specification mini-language to format string (#1558)

Co-authored-by: Joe Hamman <joe@earthmover.io>

* Single startswith() call instead of multiple ones (#1556)

It's faster and probably more readable.

Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>
Co-authored-by: Joe Hamman <joe@earthmover.io>

* Bump pymongo from 4.5.0 to 4.6.1 (#1585)

Bumps [pymongo](https://github.com/mongodb/mongo-python-driver) from 4.5.0 to 4.6.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.5.0...4.6.1)

---
updated-dependencies:
- dependency-name: pymongo
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joe Hamman <joe@earthmover.io>

* Move codespell options around (#1196)

Starting with codespell 2.2.2, options can be specified in
`pyrpoject.toml` in addition to `setup.cfg`:
https://github.com/codespell-project/codespell#using-a-config-file

Specifying options in a config file instead of command line options in
`.pre-commit-config.yaml` ensures codespell uses the same options when
run as pre-commit hook or from the command line in the repository root
directory.

* Bump fsspec from 2023.10.0 to 2023.12.1 (#1600)

* Bump fsspec from 2023.10.0 to 2023.12.1

Bumps [fsspec](https://github.com/fsspec/filesystem_spec) from 2023.10.0 to 2023.12.1.
- [Commits](https://github.com/fsspec/filesystem_spec/compare/2023.10.0...2023.12.1)

---
updated-dependencies:
- dependency-name: fsspec
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update s3fs as well

* Fix s3fs

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Josh Moore <josh@openmicroscopy.org>

* Add type hints to zarr.create (#1536)

* Add type hints to zarr.create

* Use protocol for MetaArray

* Use protocol for Synchronizer

* Fix Path typing

* Add release note

* Fix dim separator typing

* Ignore ... in coverage reporting

* Fix chunk typing

---------

Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>

* Remove unused mypy ignore comments (#1602)

Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>

* Bump actions/setup-python from 4.7.1 to 5.0.0 (#1605)

Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.7.1 to 5.0.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v4.7.1...v5.0.0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joe Hamman <joe@earthmover.io>

* Bump github/codeql-action from 2 to 3 (#1609)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: update pre-commit hooks (#1448)

* chore: update pre-commit hooks

updates:
- https://github.com/charliermarsh/ruff-pre-commit → https://github.com/astral-sh/ruff-pre-commit
- [github.com/astral-sh/ruff-pre-commit: v0.0.224 → v0.1.8](https://github.com/astral-sh/ruff-pre-commit/compare/v0.0.224...v0.1.8)
- [github.com/psf/black: 23.10.1 → 23.12.0](https://github.com/psf/black/compare/23.10.1...23.12.0)
- [github.com/codespell-project/codespell: v2.2.5 → v2.2.6](https://github.com/codespell-project/codespell/compare/v2.2.5...v2.2.6)
- [github.com/pre-commit/pre-commit-hooks: v4.4.0 → v4.5.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.4.0...v4.5.0)
- [github.com/pre-commit/mirrors-mypy: v1.3.0 → v1.7.1](https://github.com/pre-commit/mirrors-mypy/compare/v1.3.0...v1.7.1)

* Attempt to fix ruff

* Use isinstance

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Josh Moore <josh@openmicroscopy.org>

* chore: update pre-commit hooks (#1618)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.1.8 → v0.1.9](https://github.com/astral-sh/ruff-pre-commit/compare/v0.1.8...v0.1.9)
- [github.com/psf/black: 23.12.0 → 23.12.1](https://github.com/psf/black/compare/23.12.0...23.12.1)
- [github.com/pre-commit/mirrors-mypy: v1.7.1 → v1.8.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.7.1...v1.8.0)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Bump fsspec from 2023.12.1 to 2023.12.2 (#1606)

* Bump fsspec from 2023.12.1 to 2023.12.2

Bumps [fsspec](https://github.com/fsspec/filesystem_spec) from 2023.12.1 to 2023.12.2.
- [Commits](https://github.com/fsspec/filesystem_spec/compare/2023.12.1...2023.12.2)

---
updated-dependencies:
- dependency-name: fsspec
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update requirements_dev_optional.txt

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joe Hamman <joe@earthmover.io>

* Bump pytest-doctestplus from 1.0.0 to 1.1.0 (#1619)

Bumps [pytest-doctestplus](https://github.com/scientific-python/pytest-doctestplus) from 1.0.0 to 1.1.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.0.0...v1.1.0)

---
updated-dependencies:
- dependency-name: pytest-doctestplus
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump pytest from 7.4.3 to 7.4.4 (#1622)

* chore: update pre-commit hooks (#1626)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.1.9 → v0.1.11](https://github.com/astral-sh/ruff-pre-commit/compare/v0.1.9...v0.1.11)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Create TEAM.md (#1628)

* Drop python 3.8 and numpy 1.20 (#1557)

* Drop 3.8 and add 3.12

* Try removing line_profiler

* Also bump the minimal numpy to 1.21

* Drop 3.12 again

* Revert "Try removing line_profiler"

This reverts commit 837854bec99a9d25aece2ead9666f01690d228cc.

* Update release.rst

---------

Co-authored-by: Joe Hamman <joe@earthmover.io>
Co-authored-by: jakirkham <jakirkham@gmail.com>

* Add Norman Rzepka to core-dev team (#1630)

* chore: update pre-commit hooks (#1633)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.1.11 → v0.1.13](https://github.com/astral-sh/ruff-pre-commit/compare/v0.1.11...v0.1.13)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Bump actions/download-artifact from 3 to 4 (#1611)

* Bump actions/download-artifact from 3 to 4

Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Also bump upload-artifact

see https://github.com/actions/download-artifact?tab=readme-ov-file#breaking-changes

> Downloading artifacts that were created from action/upload-artifact@v3 and below are not supported.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joe Hamman <joe@earthmover.io>
Co-authored-by: Josh Moore <josh@openmicroscopy.org>

* Update tutorial.rst to include section about accessing Zip Files on S3 (#1615)

* Update tutorial.rst to include section about accessing Zip Files on S3

Per discussion here, add information about about accessing zip files on s3:
https://github.com/zarr-developers/zarr-python/discussions/1613

* Update release.rst

* Implement d-v-b's suggestions

---------

Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>
Co-authored-by: Josh Moore <josh@openmicroscopy.org>

* doc(v3): add v3 roadmap and design document (#1583)

* doc(v3): add v3 roadmap and design document

* Update v3-roadmap-and-design.md

* updates after latest round of reviews

* Update v3-roadmap-and-design.md

Co-authored-by: Norman Rzepka <code@normanrz.com>

* Update v3-roadmap-and-design.md

Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>

---------

Co-authored-by: Norman Rzepka <code@normanrz.com>
Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>

* chore: update pre-commit hooks (#1636)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.1.13 → v0.1.14](https://github.com/astral-sh/ruff-pre-commit/compare/v0.1.13...v0.1.14)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Fix zarr sync (#1663)

This patch removes fasteners and disables zarr.sync which uses process and thread

Co-authored-by: Wei Ouyang <oeway007@gmail.com>

* Update release.rst (#1621)

* Update release.rst

* Update release.rst

* Change 2.16.2 → 2.17.0

* Update moto for test_s3

* Skip bsddb3 tests to prevent warning failure

* Fix more user warning tests

* Fix even more user warning tests

* Skip coverage for importorskips

* Move to have_X skip method for deps

* Update release.rst (PR#1663)

* Fix test_core.py 'compile' issues

* Add black formatting

* Drop Windows/3.9 build due to unrelated failures

* fix typo

---------

Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>
Co-authored-by: Josh Moore <josh@openmicroscopy.org>

* Bump numpy from 1.24.3 to 1.26.1 (#1543)

Bumps [numpy](https://github.com/numpy/numpy) from 1.24.3 to 1.26.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/v1.24.3...v1.26.1)

---
updated-dependencies:
- dependency-name: numpy
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>
Co-authored-by: Josh Moore <josh@openmicroscopy.org>
Co-authored-by: Joe Hamman <joe@earthmover.io>

* chore: update pre-commit hooks (#1642)

* chore: update pre-commit hooks

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.1.14 → v0.2.1](https://github.com/astral-sh/ruff-pre-commit/compare/v0.1.14...v0.2.1)
- [github.com/psf/black: 23.12.1 → 24.2.0](https://github.com/psf/black/compare/23.12.1...24.2.0)

* run black incl. comments for '...'

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Josh Moore <josh@openmicroscopy.org>

* Bump ipywidgets from 8.1.0 to 8.1.1 (#1538)

Bumps [ipywidgets](https://github.com/jupyter-widgets/ipywidgets) from 8.1.0 to 8.1.1.
- [Release notes](https://github.com/jupyter-widgets/ipywidgets/releases)
- [Commits](https://github.com/jupyter-widgets/ipywidgets/compare/8.1.0...8.1.1)

---
updated-dependencies:
- dependency-name: ipywidgets
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>
Co-authored-by: Josh Moore <josh@openmicroscopy.org>

* Proper argument for numpy.reshape (#1425)

`numpy.reshape` not only accepts a tuple of ints, but also a simple int.

Besides `(10)` is not a tuple and is identical to `10`, unlike `(10,)`.

* Bump ipywidgets from 8.1.1 to 8.1.2 (#1666)

Bumps [ipywidgets](https://github.com/jupyter-widgets/ipywidgets) from 8.1.1 to 8.1.2.
- [Release notes](https://github.com/jupyter-widgets/ipywidgets/releases)
- [Commits](https://github.com/jupyter-widgets/ipywidgets/compare/8.1.1...8.1.2)

---
updated-dependencies:
- dependency-name: ipywidgets
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* docs: ZIP-related tweaks (#1641)

* docs: use 'ZIP archive' instead of 'zip file'; clarify utility of caching in s3 + ZIP example; style

* docs: update release notes, correct spelling of greg lee's name in past release notes, and fix markup in past release notes

* docs: use 'ZIP archive' instead of 'zip file'; clarify utility of caching in s3 + ZIP example; style

* docs: update release notes, correct spelling of greg lee's name in past release notes, and fix markup in past release notes

* Bump numpy from 1.26.1 to 1.26.4 (#1669)

Bumps [numpy](https://github.com/numpy/numpy) from 1.26.1 to 1.26.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/v1.26.1...v1.26.4)

---
updated-dependencies:
- dependency-name: numpy
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Change occurrences of % and format() to f-strings (#1423)

Co-authored-by: Joe Hamman <joe@earthmover.io>
Co-authored-by: Josh Moore <josh@openmicroscopy.org>

* chore: update pre-commit hooks (#1672)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.2.1 → v0.2.2](https://github.com/astral-sh/ruff-pre-commit/compare/v0.2.1...v0.2.2)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Bump pymongo from 4.6.1 to 4.6.2 (#1674)

Bumps [pymongo](https://github.com/mongodb/mongo-python-driver) from 4.6.1 to 4.6.2.
- [Release notes](https://github.com/mongodb/mongo-python-driver/releases)
- [Changelog](https://github.com/mongodb/mongo-python-driver/blob/4.6.2/doc/changelog.rst)
- [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.6.1...4.6.2)

---
updated-dependencies:
- dependency-name: pymongo
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump conda-incubator/setup-miniconda from 3.0.1 to 3.0.2 (#1677)

Bumps [conda-incubator/setup-miniconda](https://github.com/conda-incubator/setup-miniconda) from 3.0.1 to 3.0.2.
- [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.1...v3.0.2)

---
updated-dependencies:
- dependency-name: conda-incubator/setup-miniconda
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update config.yml with Zulip

* Type dimension separator (#1620)

Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>

* Replace Gitter with new Zulip Chat link (#1685)

* Replace Gitter with Zulip

* Replace Gitter with Zulip in remaining places

* Bump redis from 5.0.1 to 5.0.2 (#1688)

Bumps [redis](https://github.com/redis/redis-py) from 5.0.1 to 5.0.2.
- [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.0.1...v5.0.2)

---
updated-dependencies:
- dependency-name: redis
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump pypa/gh-action-pypi-publish from 1.8.11 to 1.8.12 (#1691)

Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.8.11 to 1.8.12.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.8.11...v1.8.12)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump pytest-doctestplus from 1.1.0 to 1.2.0 (#1693)

Bumps [pytest-doctestplus](https://github.com/scientific-python/pytest-doctestplus) from 1.1.0 to 1.2.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.1.0...v1.2.0)

---
updated-dependencies:
- dependency-name: pytest-doctestplus
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix RTD build (#1694)

* Update release.rst for v2.17.1 (#1673)

* Update release.rst for v2.17.1

* Change the copyright year from 2023 → 2024.

* Update release.rst for v2.17.1

* Bump pytest-timeout from 2.2.0 to 2.3.1 (#1697)

Bumps [pytest-timeout](https://github.com/pytest-dev/pytest-timeout) from 2.2.0 to 2.3.1.
- [Commits](https://github.com/pytest-dev/pytest-timeout/compare/2.2.0...2.3.1)

---
updated-dependencies:
- dependency-name: pytest-timeout
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump conda-incubator/setup-miniconda from 3.0.2 to 3.0.3 (#1690)

Bumps [conda-incubator/setup-miniconda](https://github.com/conda-incubator/setup-miniconda) from 3.0.2 to 3.0.3.
- [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.2...v3.0.3)

---
updated-dependencies:
- dependency-name: conda-incubator/setup-miniconda
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>

* docs(tutorial.rst): fix link to GCSMap (#1689)

* Update installation.rst stating version support policy (#1665)

* Update installation.rst stating version support policy

* Update docs/installation.rst

Co-authored-by: Joe Hamman <jhamman1@gmail.com>

* Update docs/installation.rst

---------

Co-authored-by: Joe Hamman <jhamman1@gmail.com>

* Bump pypa/gh-action-pypi-publish from 1.8.12 to 1.8.14 (#1700)

Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.8.12 to 1.8.14.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.8.12...v1.8.14)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump pytest-doctestplus from 1.2.0 to 1.2.1 (#1699)

Bumps [pytest-doctestplus](https://github.com/scientific-python/pytest-doctestplus) from 1.2.0 to 1.2.1.
- [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.2.0...v1.2.1)

---
updated-dependencies:
- dependency-name: pytest-doctestplus
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>

* Bump redis from 5.0.2 to 5.0.3 (#1698)

Bumps [redis](https://github.com/redis/redis-py) from 5.0.2 to 5.0.3.
- [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.0.2...v5.0.3)

---
updated-dependencies:
- dependency-name: redis
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>

* Add Python 3.12 to CI (#1719)

* Update python-package.yml

* bump numpy versions

* bump min python version

* Update release.rst

* Bump pytest-cov from 4.1.0 to 5.0.0 (#1722)

Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 4.1.0 to 5.0.0.
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v4.1.0...v5.0.0)

---
updated-dependencies:
- dependency-name: pytest-cov
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: update pre-commit hooks (#1708)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.2.2 → v0.3.3](https://github.com/astral-sh/ruff-pre-commit/compare/v0.2.2...v0.3.3)
- [github.com/psf/black: 24.2.0 → 24.3.0](https://github.com/psf/black/compare/24.2.0...24.3.0)
- [github.com/pre-commit/mirrors-mypy: v1.8.0 → v1.9.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.8.0...v1.9.0)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>

* chore: update pre-commit hooks (#1723)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.3.3 → v0.3.4](https://github.com/astral-sh/ruff-pre-commit/compare/v0.3.3...v0.3.4)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Fix release notes (following #1719) (#1725)

* Override ipython repr methods. (#1724)

Closes #1716

This avoids expensive lookups against object stores.

* Bump pymongo from 4.6.2 to 4.6.3 (#1729)

* Remove v1 and v2 specification (#1582)

* Remove v1 and v2 specification

* fix warning

---------

Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>

* chore: update pre-commit hooks (#1738)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.3.4 → v0.3.5](https://github.com/astral-sh/ruff-pre-commit/compare/v0.3.4...v0.3.5)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Optimize Array.info and Group.info (#1733)

* Optimize Array.info.

Avoid repeated computes of the same value (getsize)

* Don't have InfoReporter query items twice.

Apparently IPython will run both __repr__ and _repr_html_
so we were calling `getsize` twice.

* Group too

* Apply suggestions from code review

Co-authored-by: Joe Hamman <jhamman1@gmail.com>

---------

Co-authored-by: Joe Hamman <jhamman1@gmail.com>

* Bump actions/setup-python from 5.0.0 to 5.1.0 (#1736)

Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5.0.0...v5.1.0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Couple fixes (#1737)

* Use `is` when comparing `type` of two objects

* Unnecessary `None` provided as default

* Fix tests with Pytest 8 (#1714)

* Bump pytest version

* Use editable install when testing

---------

Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>

* Avoid redundant __contains__ (#1739)

Let's try grabbing the array.json and group.json files,
and check for `*NotFoundError`, instead of using contains first.

Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>

* Array & Group: Use already loaded attributes to populate cache. (#1734)

* Array: Use already loaded attributes to populate cache.

* Group: Use already loaded attributes to populate cache.

* Fix

* Add release note

* Optimize attribute setting (#1741)

* Optimize attribute setting

* Add release note

---------

Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>

* Make sure fs exceptions are raised if not MissingFs exceptions (clone) (#1604)

* Make sure fs exceptions are raised if not Missing

* lint

* add missing argument in tests, lint

* clear memory filesystem during test

* improve commenting

* add memory_store fixture, getitems performance

* Update release.rst

* improve FSStore.test_exception coverage

---------

Co-authored-by: Martin Durant <martin.durant@alumni.utoronto.ca>
Co-authored-by: Joe Hamman <joe@earthmover.io>
Co-authored-by: Josh Moore <josh@openmicroscopy.org>
Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>

* chore(release): update changelog for 2.17.2 (#1775)

* chore(docs): reset release notes as unreleased (#1776)

* Bump codecov/codecov-action from 3 to 4 (#1647)

* Bump codecov/codecov-action from 3 to 4

Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 3 to 4.
- [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/v3...v4)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Set codecov env

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Josh Moore <josh@openmicroscopy.org>

* Update release.rst for v2.17.2 (#1778)

* Update release.rst for v2.17.2

* Minor edits

---------

Co-authored-by: Joe Hamman <joe@earthmover.io>

* Deprecate the experimental v3 implementation (#1802)

* deprecate(exp-v3): Add a future warning about the pending removal of the experimental v3 implementation

* ignore warning

* add test

* chore: update pre-commit hooks (#1779)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.3.5 → v0.3.7](https://github.com/astral-sh/ruff-pre-commit/compare/v0.3.5...v0.3.7)
- [github.com/psf/black: 24.3.0 → 24.4.0](https://github.com/psf/black/compare/24.3.0...24.4.0)
- [github.com/pre-commit/pre-commit-hooks: v4.5.0 → v4.6.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.5.0...v4.6.0)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Fix `is_total_slice` for size-1 dimensions (#1800)

Closes #1730

Co-authored-by: Ryan Abernathey <ryan.abernathey@gmail.com>
Co-authored-by: Joe Hamman <joe@earthmover.io>

* add note to the top of the release page noting the plan for 2.18.* and 3.0 (#1816)

* Bump conda-incubator/setup-miniconda from 3.0.3 to 3.0.4 (#1824)

Bumps [conda-incubator/setup-miniconda](https://github.com/conda-incubator/setup-miniconda) from 3.0.3 to 3.0.4.
- [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.3...v3.0.4)

---
updated-dependencies:
- dependency-name: conda-incubator/setup-miniconda
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* dep(docs): deprecate experimental v3 support in docs (#1807)

* dep(docs): deprecate experimental v3 support in docs

* Apply suggestions from code review

Co-authored-by: Josh Moore <josh@openmicroscopy.org>
Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>

---------

Co-authored-by: Josh Moore <josh@openmicroscopy.org>
Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>

* Bump h5py from 3.10.0 to 3.11.0 (#1786)

Bumps [h5py](https://github.com/h5py/h5py) from 3.10.0 to 3.11.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.10.0...3.11.0)

---
updated-dependencies:
- dependency-name: h5py
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joe Hamman <joe@earthmover.io>

* Bump redis from 5.0.3 to 5.0.4 (#1810)

Bumps [redis](https://github.com/redis/redis-py) from 5.0.3 to 5.0.4.
- [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.0.3...v5.0.4)

---
updated-dependencies:
- dependency-name: redis
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* deprecate(stores): add deprecation warnings to stores that we plan to remove in v3 (#1801)

* deprecate(stores): add deprecation warnings to DBMStore, LMDBStore, SQLiteStore, MongoDBStore, RedisStore, and ABSStore

* filter warnings in pytest config

* more deprecation warnings in docstrings

* add release note

* use np.inf instead of PINF/NINF (#1842)

* use np.inf instead of PINF/NINF

* update release notes

* chore: update pre-commit hooks (#1825)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.4.1 → v0.4.3](https://github.com/astral-sh/ruff-pre-commit/compare/v0.4.1...v0.4.3)
- [github.com/psf/black: 24.4.0 → 24.4.2](https://github.com/psf/black/compare/24.4.0...24.4.2)
- [github.com/pre-commit/mirrors-mypy: v1.9.0 → v1.10.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.9.0...v1.10.0)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Enable ruff/bugbear rules (B) and fix issues (#1702)

* Enable ruff/bugbear rules (B)

As suggested by Repo-Review.

* Fix ruff/bugbear issue (B007)

B007 Loop control variable `key` not used within loop body

https://docs.astral.sh/ruff/rules/unused-loop-control-variable/

* Fix ruff/bugbear issue (B015)

B015 Pointless comparison. Did you mean to assign a value?
     Otherwise, prepend `assert` or remove it.

https://docs.astral.sh/ruff/rules/useless-comparison/

* Fix ruff/bugbear issues (B028)

B028 No explicit `stacklevel` keyword argument found

https://docs.astral.sh/ruff/rules/no-explicit-stacklevel/

* Fix ruff/bugbear issues (B904)

B904 Within an `except` clause, raise exceptions with `raise ... from err` or
     `raise ... from None` to distinguish them from errors in exception handling

https://docs.astral.sh/ruff/rules/raise-without-from-inside-except/

* Document changes in docs/release.rst

* Disable ruff/bugbear rule (B017)

B017 `pytest.raises(Exception)` should be considered evil

https://docs.astral.sh/ruff/rules/assert-raises-exception/

---------

Co-authored-by: Joe Hamman <joe@earthmover.io>

* Release notes for 2.18.0 (#1843)

* doc: cleanup release notes for 2.18.0

* Update release.rst (#1850)

* Group dependabot updates (#1854)

* chore: update pre-commit hooks (#1876)

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.4.3 → v0.4.4](https://github.com/astral-sh/ruff-pre-commit/compare/v0.4.3...v0.4.4)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Fix a regression with scalar indexing due to #1800 (#1875)

* release notes for 2.18.1 (#1885)

* reset release notes (#1886)

* Add zstd to old V3 supported codecs (#1914)

* add zstd to old V3 supported codecs

* get to full test coverage and add release note

* fix pre-commit

* doc: update release notes for 2.18.2 (#1915)

* Drop support for Python 3.9

* Revert "Drop support for Python 3.9"

This reverts commit a054afbbdaf7c8560d0ce5df77af969bc863e335.

* Update TEAM.md (#2071)

* [v2] Fix doctests with numpy 2.0 (#2073)

* Fix version number in built docs (#2044)

* Fix orthogonal indexing with scalar. (#1947)

Co-authored-by: David Stansby <dstansby@gmail.com>

* Bump the requirements group across 1 directory with 7 updates (#2092)

Bumps the requirements group with 7 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [numpy](https://github.com/numpy/numpy) | `1.26.4` | `2.0.1` |
| [ipywidgets](https://github.com/jupyter-widgets/ipywidgets) | `8.1.2` | `8.1.3` |
| [setuptools-scm](https://github.com/pypa/setuptools_scm) | `8.0.4` | `8.1.0` |
| [pytest](https://github.com/pytest-dev/pytest) | `8.1.1` | `8.3.2` |
| [lmdb](https://github.com/jnwatson/py-lmdb) | `1.4.1` | `1.5.1` |
| [redis](https://github.com/redis/redis-py) | `5.0.4` | `5.0.8` |
| [pymongo](https://github.com/mongodb/mongo-python-driver) | `4.6.3` | `4.8.0` |



Updates `numpy` from 1.26.4 to 2.0.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/v1.26.4...v2.0.1)

Updates `ipywidgets` from 8.1.2 to 8.1.3
- [Release notes](https://github.com/jupyter-widgets/ipywidgets/releases)
- [Commits](https://github.com/jupyter-widgets/ipywidgets/compare/8.1.2...8.1.3)

Updates `setuptools-scm` from 8.0.4 to 8.1.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.0.4...v8.1.0)

Updates `pytest` from 8.1.1 to 8.3.2
- [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.1.1...8.3.2)

Updates `lmdb` from 1.4.1 to 1.5.1
- [Changelog](https://github.com/jnwatson/py-lmdb/blob/master/ChangeLog)
- [Commits](https://github.com/jnwatson/py-lmdb/compare/py-lmdb_1.4.1...py-lmdb_1.5.1)

Updates `redis` from 5.0.4 to 5.0.8
- [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.0.4...v5.0.8)

Updates `pymongo` from 4.6.3 to 4.8.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.6.3...4.8.0)

---
updated-dependencies:
- dependency-name: numpy
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: requirements
- dependency-name: ipywidgets
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: requirements
- dependency-name: setuptools-scm
  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-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-patch
  dependency-group: requirements
- dependency-name: pymongo
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump the actions group with 2 updates (#2087)

Bumps the actions group with 2 updates: [actions/setup-python](https://github.com/actions/setup-python) and [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish).


Updates `actions/setup-python` from 5.1.0 to 5.1.1
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5.1.0...v5.1.1)

Updates `pypa/gh-action-pypi-publish` from 1.8.14 to 1.9.0
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.8.14...v1.9.0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  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-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* [v2] Drop support for Python 3.9 (#2074)

* Drop support for Python 3.9

* Ignore B905 ruff rule

* Fix release notes

* Fix Array.__array__ for numpy 2.1 (#2106)

* Fix Array.__array__ for numpy 2.1

* Add changelog

* Depend on np.array for array coercions

* Bump test version of numcodecs (#2114)

* Bump test version of numcodecs

* Fix test for numcodecs 0.13

* fix: numpy 1.24 compat for Array.__array__ (#2123)

* Deprecate N5Store (#2103)

* deprecate(n5): add deprecation warning to N5Store

* also deprecate N5FSStore

* docs

* fix doc

* Run tests on numpy 1.23 (#2124)

* Bump the requirements group across 1 directory with 3 updates (#2129)

Bumps the requirements group with 3 updates in the / directory: [numpy](https://github.com/numpy/numpy), [ipywidgets](https://github.com/jupyter-widgets/ipywidgets) and [azure-storage-blob](https://github.com/Azure/azure-sdk-for-python).


Updates `numpy` from 2.0.1 to 2.1.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.0.1...v2.1.0)

Updates `ipywidgets` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/jupyter-widgets/ipywidgets/releases)
- [Commits](https://github.com/jupyter-widgets/ipywidgets/compare/8.1.3...8.1.5)

Updates `azure-storage-blob` from 12.16.0 to 12.21.0
- [Release notes](https://github.com/Azure/azure-sdk-for-python/releases)
- [Changelog](https://github.com/Azure/azure-sdk-for-python/blob/main/doc/esrp_release.md)
- [Commits](https://github.com/Azure/azure-sdk-for-python/compare/azure-storage-blob_12.16.0...azure-storage-blob_12.21.0)

---
updated-dependencies:
- dependency-name: numpy
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: requirements
- dependency-name: ipywidgets
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: requirements
- dependency-name: azure-storage-blob
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump minimum numpy version to 1.24 (#2127)

* chore: bump minimum version to 1.24

* Update .github/workflows/python-package.yml

* Remove un-needed package installs in CI (#2095)

* Bump the actions group with 2 updates (#2146)

Bumps the actions group with 2 updates: [actions/setup-python](https://github.com/actions/setup-python) and [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish).


Updates `actions/setup-python` from 5.1.1 to 5.2.0
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5.1.1...v5.2.0)

Updates `pypa/gh-action-pypi-publish` from 1.9.0 to 1.10.0
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.9.0...v1.10.0)

---
updated-dependencies:
- 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] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump numpy from 2.1.0 to 2.1.1 in the requirements group (#2151)

Bumps the requirements group with 1 update: [numpy](https://github.com/numpy/numpy).


Updates `numpy` from 2.1.0 to 2.1.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.1.0...v2.1.1)

---
updated-dependencies:
- dependency-name: numpy
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(docs): update release notes ahead of 2.18.4 (#2152)

* Bump pypa/gh-action-pypi-publish from 1.10.0 to 1.10.1 in the actions group (#2161)

Bumps the actions group with 1 update: [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish).


Updates `pypa/gh-action-pypi-publish` from 1.10.0 to 1.10.1
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.10.0...v1.10.1)

---
updated-dependencies:
- 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] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* [docs] remove primary sidebar from tutorial (#2142)

* remove primary sidebar from tutorial

* lint

* Bump pytest from 8.3.2 to 8.3.3 in the requirements group (#2172)

Bumps the requirements group with 1 update: [pytest](https://github.com/pytest-dev/pytest).


Updates `pytest` from 8.3.2 to 8.3.3
- [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.2...8.3.3)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump pypa/gh-action-pypi-publish in the actions group (#2220)

Bumps the actions group with 1 update: [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish).


Updates `pypa/gh-action-pypi-publish` from 1.10.1 to 1.10.2
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.10.1...v1.10.2)

---
updated-dependencies:
- 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] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update TEAM.md (#2227)

* Bump the requirements group across 1 directory with 3 updates (#2284)

Bumps the requirements group with 3 updates in the / directory: [redis](https://github.com/redis/redis-py), [pymongo](https://github.com/mongodb/mongo-python-driver) and [h5py](https://github.com/h5py/h5py).


Updates `redis` from 5.0.8 to 5.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.0.8...v5.1.0)

Updates `pymongo` from 4.8.0 to 4.10.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.8.0...4.10.0)

Updates `h5py` from 3.11.0 to 3.12.1
- [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.11.0...3.12.1)

---
updated-dependencies:
- 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: h5py
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump pymongo from 4.10.0 to 4.10.1 in the requirements group (#2288)

Bumps the requirements group with 1 update: [pymongo](https://github.com/mongodb/mongo-python-driver).


Updates `pymongo` from 4.10.0 to 4.10.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.10.0...4.10.1)

---
updated-dependencies:
- dependency-name: pymongo
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix low contrast box titles (#2287) (#2292)

* Bump pypa/gh-action-pypi-publish in the actions group (#2304)

Bumps the actions group with 1 update: [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish).


Updates `pypa/gh-action-pypi-publish` from 1.10.2 to 1.10.3
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.10.2...v1.10.3)

---
updated-dependencies:
- 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] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump the requirements group with 2 updates (#2303)

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.1.1 to 2.1.2
- [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.1...v2.1.2)

Updates `redis` from 5.1.0 to 5.1.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.0...v5.1.1)

---
updated-dependencies:
- dependency-name: numpy
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: requirements
- dependency-name: redis
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump numcodecs from 0.13.0 to 0.13.1 in the requirements group (#2326)

Bumps the requirements group with 1 update: [numcodecs](https://github.com/zarr-developers/numcodecs).


Updates `numcodecs` from 0.13.0 to 0.13.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.0...v0.13.1)

---
updated-dependencies:
- dependency-name: numcodecs
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: requirements
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* remove zarr.types from v2

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Janick Martinez Esturo <janick@jme.pub>
Co-authored-by: David Stansby <dstansby@gmail.com>
Co-authored-by: Dimitri Papadopoulos Orfanos <3234522+DimitriPapadopoulos@users.noreply.github.com>
Co-authored-by: Davis Bennett <davis.v.bennett@gmail.com>
Co-authored-by: Josh Moore <josh@openmicroscopy.org>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: jakirkham <jakirkham@gmail.com>
Co-authored-by: Jeff Peck <jeffrey.peck@10xgenomics.com>
Co-authored-by: Norman Rzepka <code@normanrz.com>
Co-authored-by: Sanket Verma <svsanketverma5@gmail.com>
Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
Co-authored-by: Wei Ouyang <oeway007@gmail.com>
Co-authored-by: Daniel Jahn (dahn) <dahnjahn@gmail.com>
Co-authored-by: Deepak Cherian <dcherian@users.noreply.github.com>
Co-authored-by: Ian Carroll <carroll.ian@gmail.com>
Co-authored-by: Martin Durant <martin.durant@alumni.utoronto.ca>
Co-authored-by: Ryan Abernathey <ryan.abernathey@gmail.com>
Co-authored-by: Jonny Saunders <sneakers-the-rat@protonmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

9 participants