------
Enhancements
~~~~~~~~~~~~
* **Sparse changes with performance impact!** One of the advantages of the Zarr
format is that it is sparse, which means that chunks with no data (more
precisely, with data equal to the fill value, which is usually 0) don't need
to be written to disk at all. They will simply be assumed to be empty at read
time. However, until this release, the Zarr library would write these empty
chunks to disk anyway. This changes in this version: a small performance
penalty at write time leads to significant speedups at read time and in
filesystem operations in the case of sparse arrays. To revert to the old
behavior, pass the argument ``write_empty_chunks=True`` to the array creation
function. By :user:`Juan Nunez-Iglesias <jni>`; :issue:`853` and
:user:`Davis Bennett <d-v-b>`; :issue:`738`.
* **Fancy indexing**. Zarr arrays now support NumPy-style fancy indexing with
arrays of integer coordinates. This is equivalent to using zarr.Array.vindex.
Mixing slices and integer arrays is not supported.
By :user:`Juan Nunez-Iglesias <jni>`; :issue:`725`.
* **New base class**. This release of Zarr Python introduces a new
``BaseStore`` class that all provided store classes implemented in Zarr
Python now inherit from. This is done as part of refactoring to enable future
support of the Zarr version 3 spec. Existing third-party stores that are a
MutableMapping (e.g. dict) can be converted to a new-style key/value store
inheriting from ``BaseStore`` by passing them as the argument to the new
``zarr.storage.KVStore`` class. For backwards compatibility, various
higher-level array creation and convenience functions still accept plain
Python dicts or other mutable mappings for the ``store`` argument, but will
internally convert these to a ``KVStore``.
By :user:`Gregory Lee <grlee77>`; :issue:`839`, :issue:`789`, and :issue:`950`.
* Allow to assign array ``fill_values`` and update metadata accordingly.
By :user:`Ryan Abernathey <rabernat>`, :issue:`662`.
* Allow to update array fill_values
By :user:`Matthias Bussonnier <Carreau>` :issue:`665`.
Bug fixes
~~~~~~~~~
* Fix bug where the checksum of zipfiles is wrong
By :user:`Oren Watson <orenwatson>` :issue:`930`.
* Fix consolidate_metadata with FSStore.
By :user:`Joe Hamman <jhamman>` :issue:`916`.
* Unguarded next inside generator.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`889`.
Documentation
~~~~~~~~~~~~~
* Update docs creation of dev env.
By :user:`Ray Bell <raybellwaves>` :issue:`921`.
* Update docs to use ``python -m pytest``.
By :user:`Ray Bell <raybellwaves>` :issue:`923`.
* Fix versionadded tag in zarr.Array docstring.
By :user:`Juan Nunez-Iglesias <jni>` :issue:`852`.
* Doctest seem to be stricter now, updating tostring() to tobytes().
By :user:`John Kirkham <jakirkham>` :issue:`907`.
* Minor doc fix.
By :user:`Mads R. B. Kristensen <madsbk>` :issue:`937`.
Maintenance
~~~~~~~~~~~
* Upgrade MongoDB in test env.
By :user:`Joe Hamman <jhamman>` :issue:`939`.
* Pass dimension_separator on fixture generation.
By :user:`Josh Moore <joshmoore>` :issue:`858`.
* Activate Python 3.9 in GitHub Actions.
By :user:`Josh Moore <joshmoore>` :issue:`859`.
* Drop shortcut ``fsspec[s3]`` for dependency.
By :user:`Josh Moore <joshmoore>` :issue:`920`.
* and a swath of code-linting improvements by :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>`:
- Unnecessary comprehension (:issue:`899`)
- Unnecessary ``None`` provided as default (:issue:`900`)
- use an if ``expression`` instead of `and`/`or` (:issue:`888`)
- Remove unnecessary literal (:issue:`891`)
- Decorate a few method with `staticmethod` (:issue:`885`)
- Drop unneeded ``return`` (:issue:`884`)
- Drop explicit ``object`` inheritance from ``class``-es (:issue:`886`)
- Unnecessary comprehension (:issue:`883`)
- Codespell configuration (:issue:`882`)
- Fix typos found by codespell (:issue:`880`)
- Proper C-style formatting for integer (:issue:`913`)
- Add LGTM.com / DeepSource.io configuration files (:issue:`909`)
.. _release_2.10.3: