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.
- Added testing on Python 3.13.
- Dropped support for Python 3.10. By :user:`David Stansby <dstansby>` (:issue:`2344`).
- Removed testing for compatibility with the
bsddb3
package.bsddb3
was last released four years ago, and should still work withzarr-python
if you can install it, but to reduce our maintenance burden we will no longer run our compatibility tests for it. By :user:`David Stansby <dstansby>` (:issue:`2344`). - Excluded versions 0.14.0 and 0.14.1 of numcodecs, due to a bug in the implementation of the Delta filter (see zarr-developers/numcodecs#653 for more information). By :user:`David Stansby <dstansby>` (:issue:`2544`).
- Added support for creating a copy of data when converting a zarr.Array to a numpy array. By :user:`David Stansby <dstansby>` (:issue:`2106`) and :user:`Joe Hamman <jhamman>` (:issue:`2123`).
- Removed support for Python 3.9. By :user:`David Stansby <dstansby>` (:issue:`2074`).
- Fix a regression when using orthogonal indexing with a scalar. By :user:`Deepak Cherian <dcherian>` :issue:`1931`
- Added compatibility with NumPy 2.1. By :user:`David Stansby <dstansby>`
- Bump minimum NumPy version to 1.24. :user:`Joe Hamman <jhamman>` (:issue:`2127`).
- 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 <jhamman>` :issue:`2085`.
- Add Zstd codec to old V3 code path. By :user:`Ryan Abernathey <rabernat>`
- Fix a regression when getting or setting a single value from arrays with size-1 chunks. By :user:`Deepak Cherian <dcherian>` :issue:`1874`
- Performance improvement for reading and writing chunks if any of the dimensions is size 1. By :user:`Deepak Cherian <dcherian>` :issue:`1730`.
- Enable ruff/bugbear rules (B) and fix issues. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :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 <jhamman>` :issue:`1842`.
- Deprecate experimental v3 support by issuing a FutureWarning. Also updated docs to warn about using the experimental v3 version. By :user:`Joe Hamman <jhamman>` :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 <jhamman>` :issue:`1801`.
- [v3] Dramatically reduce number of
__contains__
requests in favor of optimistically calling __getitem__ and handling any error that may arise. By :user:`Deepak Cherian <dcherian>` :issue:`1741`. - [v3] Reuse the downloaded array metadata when creating an
Array
. By :user:`Deepak Cherian <dcherian>` :issue:`1734`. - Optimize
Array.info
so that it calls getsize only once. By :user:`Deepak Cherian <dcherian>` :issue:`1733`. - Override IPython
_repr_*_
methods to avoid expensive lookups against object stores. By :user:`Deepak Cherian <dcherian>` :issue:`1716`. - FSStore now raises rather than return bad data. By :user:`Martin Durant <martindurant>` and :user:`Ian Carroll <itcarroll>` :issue:`1604`.
- Avoid redundant
__contains__
. By :user:`Deepak Cherian <dcherian>` :issue:`1739`.
- Fix link to GCSMap in
tutorial.rst
. By :user:`Daniel Jahn <dahnj>` :issue:`1689`. - Endorse SPEC0000 and state version support policy in
installation.rst
. By :user:`Sanket Verma <msankeys963>` :issue:`1665`. - Migrate v1 and v2 specification to Zarr-Specs. By :user:`Sanket Verma <msankeys963>` :issue:`1582`.
- Add CI test environment for Python 3.12 By :user:`Joe Hamman <jhamman>` :issue:`1719`.
- Bump minimum supported NumPy version to 1.23 (per spec 0000) By :user:`Joe Hamman <jhamman>` :issue:`1719`.
- Minor fixes: Using
is
instead oftype
and removing unnecessaryNone
. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1737`. - Fix tests failure related to Pytest 8. By :user:`David Stansby <dstansby>` :issue:`1714`.
- Change occurrences of % and format() to f-strings. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1423`.
- Proper argument for numpy.reshape. By :user:`Dimitri Papadopoulos Orfanos <DmitriPapadopoulos>` :issue:`1425`.
- Add typing to dimension separator arguments. By :user:`David Stansby <dstansby>` :issue:`1620`.
- ZIP related tweaks. By :user:`Davis Bennett <d-v-b>` :issue:`1641`.
- Update config.yml with Zulip. By :user:`Josh Moore <joshmoore>`.
- Replace Gitter with the new Zulip Chat link. By :user:`Sanket Verma <msankeys963>` :issue:`1685`.
- Fix RTD build. By :user:`Sanket Verma <msankeys963>` :issue:`1694`.
- Added type hints to
zarr.creation.create()
. By :user:`David Stansby <dstansby>` :issue:`1536`. - Pyodide support: Don't require fasteners on Emscripten. By :user:`Hood Chatham <hoodmane>` :issue:`1663`.
- Minor correction and changes in documentation. By :user:`Sanket Verma <MSanKeys963>` :issue:`1509`.
- Fix typo in documentation. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1554`
- The documentation build now fails if there are any warnings. By :user:`David Stansby <dstansby>` :issue:`1548`.
- Add links to
numcodecs
docs in the tutorial. By :user:`David Stansby <dstansby>` :issue:`1535`. - Enable offline formats for documentation builds. By :user:`Sanket Verma <MSanKeys963>` :issue:`1551`.
- Minor tweak to advanced indexing tutorial examples. By :user:`Ross Barnowski <rossbar>` :issue:`1550`.
- Automatically document array members using sphinx-automodapi. By :user:`David Stansby <dstansby>` :issue:`1547`.
- Add a markdown file documenting the current and former core-developer team. By :user:`Joe Hamman <jhamman>` :issue:`1628`.
- Add Norman Rzepka to core-dev team. By :user:`Joe Hamman <jhamman>` :issue:`1630`.
- Added section about accessing ZIP archives on s3. By :user:`Jeff Peck <jeffpeck10x>` :issue:`1613`, :issue:`1615`, and :user:`Davis Bennett <d-v-b>` :issue:`1641`.
- Add V3 roadmap and design document. By :user:`Joe Hamman <jhamman>` :issue:`1583`.
- Drop Python 3.8 and NumPy 1.20 By :user:`Josh Moore <joshmoore>`; :issue:`1557`.
- Cache result of
FSStore._fsspec_installed()
. By :user:`Janick Martinez Esturo <ph03>` :issue:`1581`. - Extend copyright notice to 2023. By :user:`Jack Kelly <JackKelly>` :issue:`1528`.
- Change occurrence of
io.open()
intoopen()
. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1421`. - Preserve
dimension_separator
when resizing arrays. By :user:`Ziwen Liu <ziw-liu>` :issue:`1533`. - Initialise some sets in tests with set literals instead of list literals. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1534`.
- Allow
black
code formatter to be run with any Python version. By :user:`David Stansby <dstansby>` :issue:`1549`. - Remove
sphinx-rtd-theme
dependency frompyproject.toml
. By :user:`Sanket Verma <MSanKeys963>` :issue:`1563`. - Remove
CODE_OF_CONDUCT.md
file from the Zarr-Python repository. By :user:`Sanket Verma <MSanKeys963>` :issue:`1572`. - Bump version of black in pre-commit. By :user:`David Stansby <dtstansby>` :issue:`1559`.
- Use list comprehension where applicable. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1555`.
- Use format specification mini-language to format string. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1558`.
- Single startswith() call instead of multiple ones. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1556`.
- Move codespell options around. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1196`.
- Remove unused mypy ignore comments. By :user:`David Stansby <dtstansby>` :issue:`1602`.
- Require
setuptools_scm
version1.5.4
+ By :user:`John A. Kirkham <jakirkham>` :issue:`1477`. - Add
docs
requirements topyproject.toml
By :user:`John A. Kirkham <jakirkham>` :issue:`1494`. - Fixed caching issue in
LRUStoreCache
. By :user:`Mads R. B. Kristensen <madsbk>` :issue:`1499`.
- Allow for partial codec specification in V3 array metadata. By :user:`Joe Hamman <jhamman>` :issue:`1443`.
- Add
__contains__
method toKVStore
. By :user:`Christoph Gohlke <cgohlke>` :issue:`1454`. - Block Indexing: Implemented blockwise (chunk blocks) indexing to
zarr.Array
. By :user:`Altay Sansal <tasansal>` :issue:`1428`
- Refactor the core array tests to reduce code duplication. By :user:`Davis Bennett <d-v-b>` :issue:`1462`.
- Style the codebase with
ruff
andblack
. By :user:`Davis Bennett <d-v-b>` :issue:`1459` - Ensure that chunks is tuple of ints upon array creation. By :user:`Philipp Hanslovsky <hanslovsky>` :issue:`1461`
- Implement more extensive fallback of getitem/setitem for orthogonal indexing. By :user:`Andreas Albert <AndreasAlbertQC>` :issue:`1029`.
- Getitems supports
meta_array
. By :user:`Mads R. B. Kristensen <madsbk>` :issue:`1131`. open_array()
now takes themeta_array
argument. By :user:`Mads R. B. Kristensen <madsbk>` :issue:`1396`.
- Remove
codecov
from GitHub actions. By :user:`John A. Kirkham <jakirkham>` :issue:`1391`. - Replace
np.product
withnp.prod
due to deprecation. By :user:`James Bourbeau <jrbourbeau>` :issue:`1405`. - Activate Py 3.11 builds. By :user:`Joe Hamman <jhamman>` :issue:`1415`.
- Add API reference for V3 Implementation in the docs. By :user:`Sanket Verma <MSanKeys963>` :issue:`1345`.
- Fix the conda-forge error. Read :issue:`1347` for detailed info. By :user:`Josh Moore <joshmoore>` :issue:`1364` and :issue:`1367`.
- Fix
ReadOnlyError
when opening V3 store via fsspec reference file system. By :user:`Joe Hamman <jhamman>` :issue:`1383`. - Fix
normalize_fill_value
for structured arrays. By :user:`Alan Du <alanhdu>` :issue:`1397`.
- Ensure
zarr.group
uses writeable mode to fix issue with :issue:`1304`. By :user:`Brandur Thorgrimsson <swordcat>` :issue:`1354`.
- Fix API links. By :user:`Josh Moore <joshmoore>` :issue:`1346`.
- Fix unit tests which prevented the conda-forge release. By :user:`Josh Moore <joshmoore>` :issue:`1348`.
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 <jstriebel>`; :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 <d-v-b>`; :issue:`1331`.
- Allow reading utf-8 encoded json files By :user:`Nathan Zimmerberg <nhz2>` :issue:`1308`.
- Ensure contiguous data is give to
FSStore
. Only copying if needed. By :user:`Mads R. B. Kristensen <madsbk>` :issue:`1285`. - NestedDirectoryStore.listdir now returns chunk keys with the correct '/' dimension_separator. By :user:`Brett Graham <braingram>` :issue:`1334`.
- N5Store/N5FSStore dtype returns zarr Stores readable dtype. By :user:`Marwan Zouinkhi <mzouink>` :issue:`1339`.
- Bump gh-action-pypi-publish to 1.6.4. By :user:`Josh Moore <joshmoore>` :issue:`1320`.
- Ensure
zarr.create
uses writeable mode to fix issue with :issue:`1304`. By :user:`James Bourbeau <jrbourbeau>` :issue:`1309`.
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/
- Handle fsspec.FSMap using FSStore store. By :user:`Rafal Wojdyla <ravwojdyla>` :issue:`1304`.
- Fix bug that caused double counting of groups in
groups()
andgroup_keys()
methods with V3 stores. By :user:`Ryan Abernathey <rabernat>` :issue:`1228`. - Remove unnecessary calling of contains_array for key that ended in .array.json. By :user:`Joe Hamman <jhamman>` :issue:`1149`.
- Fix bug that caused double counting of groups in
groups()
andgroup_keys()
methods with V3 stores. By :user:`Ryan Abernathey <rabernat>` :issue:`1228`.
- Fix minor indexing errors in tutorial and specification examples of documentation. By :user:`Kola Babalola <sprynt001>` :issue:`1277`.
- Add requirements_rtfd.txt in contributing.rst. By :user:`AWA BRANDON AWA <DON-BRAN>` :issue:`1243`.
- Add documentation for find/findall using visit. By :user:`Weddy Gikunda <caviere>` :issue:`1241`.
- Refresh of the main landing page. By :user:`Josh Moore <joshmoore>` :issue:`1173`.
- Migrate to
pyproject.toml
and remove redundant infrastructure. By :user:`Saransh Chopra <Saransh-cpp>` :issue:`1158`. - Require
setuptools
64.0.0+ By :user:`Saransh Chopra <Saransh-cpp>` :issue:`1193`. - Pin action versions (pypi-publish, setup-miniconda) for dependabot By :user:`Saransh Chopra <Saransh-cpp>` :issue:`1205`.
- Remove
tox
support By :user:`Saransh Chopra <Saransh-cpp>` :issue:`1219`. - Add workflow to label PRs with "needs release notes". By :user:`Saransh Chopra <Saransh-cpp>` :issue:`1239`.
- Simplify if/else statement. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1227`.
- Get coverage up to 100%. By :user:`John Kirkham <jakirkham>` :issue:`1264`.
- Migrate coverage to
pyproject.toml
. By :user:`John Kirkham <jakirkham>` :issue:`1250`. - Use
conda-incubator/[email protected]
. By :user:`John Kirkham <jakirkham>` :issue:`1263`. - Delete unused files. By :user:`John Kirkham <jakirkham>` :issue:`1251`.
- Skip labeller for bot PRs. By :user:`Saransh Chopra <Saransh-cpp>` :issue:`1271`.
- Restore Flake8 configuration. By :user:`John Kirkham <jakirkham>` :issue:`1249`.
- Add missing newline at EOF. By :user:`Dimitri Papadopoulos` :issue:`1253`.
- Add license_files to pyproject.toml. By :user:`John Kirkham <jakirkham>` :issue:`1247`.
- Adding pyupgrade suggestions. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1225`.
- Fixed some linting errors. By :user:`Weddy Gikunda <caviere>` :issue:`1226`.
- Added the link to main website in readthedocs sidebar. By :user:`Stephanie_nkwatoh <steph237>` :issue:`1216`.
- Remove redundant wheel dependency in pyproject.toml. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1233`.
- Turned on isloated_build in tox.ini file. By :user:`AWA BRANDON AWA <DON-BRAN>` :issue:`1210`.
- Fixed flake8 alert and avoid duplication of Zarr Developers. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1203`.
- Bump to NumPy 1.20+ in environment.yml. By :user:`John Kirkham <jakirkham>` :issue:`1201`.
- Bump to NumPy 1.20 in pyproject.toml. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1192`.
- Remove LGTM (.lgtm.yml) configuration file. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1191`.
- Codespell will skip fixture in pre-commit. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1197`.
- Add msgpack in requirements_rtfd.txt. By :user:`Emmanuel Bolarinwa <GbotemiB>` :issue:`1188`.
- Added license to docs fixed a typo from _spec_v2 to _spec_v3. By :user:`AWA BRANDON AWA <DON-BRAN>` :issue:`1182`.
- Fixed installation link in README.md. By :user:`AWA BRANDON AWA <DON-BRAN>` :issue:`1177`.
- Fixed typos in installation.rst and release.rst. By :user:`Chizoba Nweke <zobbs-git>` :issue:`1178`.
- Set docs/conf.py language to en. By :user:`AWA BRANDON AWA <DON-BRAN>` :issue:`1174`.
- Added installation.rst to the docs. By :user:`AWA BRANDON AWA <DON-BRAN>` :issue:`1170`.
- Adjustment of year to 2015-2018 to 2015-2022 in the docs. By :user:`Emmanuel Bolarinwa <GbotemiB>` :issue:`1165`.
- Updated Forking the repository section in contributing.rst. By :user:`AWA BRANDON AWA <DON-BRAN>` :issue:`1171`.
- Updated GitHub actions. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1134`.
- Update web links: http:// → https://. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1313`.
- Improve performance of slice selections with steps by omitting chunks with no relevant data. By :user:`Richard Shaw <jrs65>` :issue:`843`.
- Fix test failure on conda-forge builds (again). By :user:`Josh Moore <joshmoore>`; see zarr-feedstock#65.
- Fix test failure on conda-forge builds. By :user:`Josh Moore <joshmoore>`; see zarr-feedstock#65.
- 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 <madsbk>` :issue:`934`.
- Remove support for Python 3.7 in concert with NumPy dependency. By :user:`Davis Bennett <d-v-b>` :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 <grlee77>` :issue:`1085`, :issue:`1142`.
- Remove/relax erroneous "meta" path check (regression). By :user:`Gregory R. Lee <grlee77>` :issue:`1123`.
- Cast all attribute keys to strings (and issue deprecation warning). By :user:`Mattia Almansi <malmans2>` :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 <d-v-b>` :issue:`1092`.
- Fix bug in LRUEStoreCache in which the current size wasn't reset on invalidation. By :user:`BGCMHou <BGCMHou>` and :user:`Josh Moore <joshmoore>` :issue:`1076`, :issue:`1077`.
- Remove erroneous check that disallowed array keys starting with "meta". By :user:`Gregory R. Lee <grlee77>` :issue:`1105`.
- Typo fixes to close quotes. By :user:`Pavithra Eswaramoorthy <pavithraes>`
- Added copy button to documentation. By :user:`Altay Sansal <tasansal>` :issue:`1124`.
- Simplify release docs. By :user:`Josh Moore <joshmoore>` :issue:`1119`.
- Pin werkzeug to prevent test hangs. By :user:`Davis Bennett <d-v-b>` :issue:`1098`.
- Fix a few DeepSource.io alerts By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1080`.
- Fix URLs. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>`, :issue:`1074`.
- Fix spelling. By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>`, :issue:`1073`.
- Update GitHub issue templates with YAML format. By :user:`Saransh Chopra <Saransh-cpp>` :issue:`1079`.
- Remove option to return None from _ensure_store. By :user:`Gregory Lee <grlee77>` :issue:`1068`.
- Fix a typo of "integers". By :user:`Richard Scott <RichardScottOZ>` :issue:`1056`.
- Add support for reading and writing Zarr V3. The new zarr._store.v3 package has the necessary classes and functions for evaluating Zarr V3. Since the format is not yet finalized, the classes and functions are not automatically imported into the regular zarr name space. Setting the ZARR_V3_EXPERIMENTAL_API environment variable will activate them. By :user:`Gregory Lee <grlee77>`; :issue:`898`, :issue:`1006`, and :issue:`1007` as well as by :user:`Josh Moore <joshmoore>` :issue:`1032`.
- Create FSStore from an existing fsspec filesystem. If you have created
an fsspec filesystem outside of Zarr, you can now pass it as a keyword
argument to
FSStore
. By :user:`Ryan Abernathey <rabernat>`; :issue:`911`. - Add numpy encoder class for json.dumps By :user:`Eric Prestat <ericpre>`; :issue:`933`.
- Appending performance improvement to Zarr arrays, e.g., when writing to S3. By :user:`hailiangzhang <hailiangzhang>`; :issue:`1014`.
- Add number encoder for
json.dumps
to support numpy integers inchunks
arguments. By :user:`Eric Prestat <ericpre>` :issue:`697`.
- Fix bug that made it impossible to create an
FSStore
on unlistable filesystems (e.g. some HTTP servers). By :user:`Ryan Abernathey <rabernat>`; :issue:`993`.
- Update resize doc to clarify surprising behavior. By :user:`hailiangzhang <hailiangzhang>`; :issue:`1022`.
- Added Pre-commit configuration, incl. Yaml Check. By :user:`Shivank Chaudhary <Alt-Shivam>`; :issue:`1015`, :issue:`1016`.
- Fix URL to renamed file in Blosc repo. By :user:`Andrew Thomas <amcnicho>` :issue:`1028`.
- Activate Py 3.10 builds. By :user:`Josh Moore <joshmoore>` :issue:`1027`.
- Make all unignored zarr warnings errors. By :user:`Josh Moore <joshmoore>` :issue:`1021`.
- Fix missing case to fully revert change to default write_empty_chunks. By :user:`Tom White <tomwhite>`; :issue:`1005`.
- Changes the default value of
write_empty_chunks
toTrue
to prevent unanticipated data losses when the data types do not have a proper default value when empty chunks are read back in. By :user:`Vyas Ramasubramani <vyasr>`; :issue:`965`, :issue:`1001`.
- Fix bug where indexing with a scalar numpy value returned a single-value array. By :user:`Ben Jeffery <benjeffery>` :issue:`967`.
- Removed clobber argument from normalize_store_arg. This enables to change data within an opened consolidated group using mode "r+" (i.e region write). By :user:`Tobias Kölling <d70-t>` :issue:`975`.
- 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 fromBaseStore
by passing them as the argument to the newzarr.storage.KVStore
class. For backwards compatibility, various higher-level array creation and convenience functions still accept plain Python dicts or other mutable mappings for thestore
argument, but will internally convert these to aKVStore
. 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`.
- 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`.
- 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.core.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`.
- 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 fromclass
-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`)
- N5 keywords now emit UserWarning instead of raising a ValueError. By :user:`Boaz Mohar <boazmohar>`; :issue:`860`.
- blocks_to_decompress not used in read_part function. By :user:`Boaz Mohar <boazmohar>`; :issue:`861`.
- defines blocksize for array, updates hexdigest values. By :user:`Andrew Fulton <andrewfulton9>`; :issue:`867`.
- Fix test failure on Debian and conda-forge builds. By :user:`Josh Moore <joshmoore>`; :issue:`871`.
- Fix NestedDirectoryStore datasets without dimension_separator metadata. By :user:`Josh Moore <joshmoore>`; :issue:`850`.
- Fix regression by setting normalize_keys=False in fsstore constructor. By :user:`Davis Bennett <d-v-b>`; :issue:`842`.
- Add N5FSStore. By :user:`Davis Bennett <d-v-b>`; :issue:`793`.
- Ignore None dim_separators in save_array. By :user:`Josh Moore <joshmoore>`; :issue:`831`.
- Fix FSStore.listdir behavior for nested directories. By :user:`Gregory Lee <grlee77>`; :issue:`802`.
- Fix structured arrays that contain objects By :user: Attila Bergou <abergou>; :issue: 806
- Mark the fact that some tests that require
fsspec
, without compromising the code coverage score. By :user:`Ben Williams <benjaminhwilliams>`; :issue:`823`. - Only inspect alternate node type if desired isn't present. By :user:`Trevor Manz <manzt>`; :issue:`696`.
- Correct conda-forge deployment of Zarr by fixing some Zarr tests. By :user:`Ben Williams <benjaminhwilliams>`; :issue:`821`.
- Correct conda-forge deployment of Zarr. By :user:`Josh Moore <joshmoore>`; :issue:`819`.
This release of Zarr Python is the first release of Zarr to not support Python 3.6.
- Update ABSStore for compatibility with newer azure.storage.blob. By :user:`Tom Augspurger <TomAugspurger>`; :issue:`759`.
- Pathlib support. By :user:`Chris Barnes <clbarnes>`; :issue:`768`.
- Clarify that arbitrary key/value pairs are OK for attributes. By :user:`Stephan Hoyer <shoyer>`; :issue:`751`.
- Clarify how to manually convert a DirectoryStore to a ZipStore. By :user:`pmav99 <pmav99>`; :issue:`763`.
- Fix dimension_separator support. By :user:`Josh Moore <joshmoore>`; :issue:`775`.
- Extract ABSStore to zarr._storage.absstore. By :user:`Josh Moore <joshmoore>`; :issue:`781`.
- avoid NumPy 1.21.0 due to numpy/numpy#19325 By :user:`Gregory Lee <grlee77>`; :issue:`791`.
- Drop 3.6 builds. By :user:`Josh Moore <joshmoore>`; :issue:`774`, :issue:`778`.
- Fix build with Sphinx 4. By :user:`Elliott Sales de Andrade <QuLogic>`; :issue:`799`.
- TST: add missing assert in test_hexdigest. By :user:`Gregory Lee <grlee77>`; :issue:`801`.
- FSStore: default to normalize_keys=False By :user:`Josh Moore <joshmoore>`; :issue:`755`.
- ABSStore: compatibility with
azure.storage.python>=12
By :user:`Tom Augspurger <tomaugspurger>`; :issue:`618`
- Add section on rechunking to tutorial By :user:`David Baddeley <David-Baddeley>`; :issue:`730`.
- Expand FSStore tests and fix implementation issues By :user:`Davis Bennett <d-v-b>`; :issue:`709`.
- Updated ipytree warning for jlab3 By :user:`Ian Hunt-Isaak <ianhi>`; :issue:`721`.
- b170a48a - (issue-728, copy-nested) Updated ipytree warning for jlab3 (#721) (3 weeks ago) <Ian Hunt-Isaak>
- Activate dependabot By :user:`Josh Moore <joshmoore>`; :issue:`734`.
- Update Python classifiers (Zarr is stable!) By :user:`Josh Moore <joshmoore>`; :issue:`731`.
- raise an error if create_dataset's dimension_separator is inconsistent By :user:`Gregory R. Lee <grlee77>`; :issue:`724`.
- Introduce optional dimension_separator .zarray key for nested chunks. By :user:`Josh Moore <joshmoore>`; :issue:`715`, :issue:`716`.
- Update Array to respect FSStore's key_separator (#718) By :user:`Gregory R. Lee <grlee77>`; :issue:`718`.
- Start stop for iterator (islice()) By :user:`Sebastian Grill <yetyetanotherusername>`; :issue:`621`.
- Add capability to partially read and decompress chunks By :user:`Andrew Fulton <andrewfulton9>`; :issue:`667`.
- Make DirectoryStore __setitem__ resilient against antivirus file locking By :user:`Eric Younkin <ericgyounkin>`; :issue:`698`.
- Compare test data's content generally By :user:`John Kirkham <jakirkham>`; :issue:`436`.
- Fix dtype usage in zarr/meta.py By :user:`Josh Moore <joshmoore>`; :issue:`700`.
- Fix FSStore key_seperator usage By :user:`Josh Moore <joshmoore>`; :issue:`669`.
- Simplify text handling in DB Store By :user:`John Kirkham <jakirkham>`; :issue:`670`.
- GitHub Actions migration By :user:`Matthias Bussonnier <Carreau>`; :issue:`641`, :issue:`671`, :issue:`674`, :issue:`676`, :issue:`677`, :issue:`678`, :issue:`679`, :issue:`680`, :issue:`682`, :issue:`684`, :issue:`685`, :issue:`686`, :issue:`687`, :issue:`695`, :issue:`706`.
- Minor build fix By :user:`Matthias Bussonnier <Carreau>`; :issue:`666`.
This release of Zarr Python is the first release of Zarr to not support Python 3.5.
- End Python 3.5 support. By :user:`Chris Barnes <clbarnes>`; :issue:`602`.
- Fix
open_group/open_array
to allow opening of read-only store withmode='r'
:issue:`269` - Add Array tests for FSStore. By :user:`Andrew Fulton <andrewfulton9>`; :issue: 644.
- fix a bug in which
attrs
would not be copied on the root when usingcopy_all
; :issue:`613` - Fix
FileNotFoundError
with dask/s3fs :issue:`649` - Fix flaky fixture in test_storage.py :issue:`652`
- Fix FSStore getitems fails with arrays that have a 0 length shape dimension :issue:`644`
- Use async to fetch/write result concurrently when possible. :issue:`536`, See this comment for some performance analysis showing order of magnitude faster response in some benchmark.
See this link for the full list of closed and merged PR tagged with the 2.6 milestone.
Add ability to partially read and decompress arrays, see :issue:`667`. It is only available to chunks stored using fsspec and using Blosc as a compressor.
For certain analysis case when only a small portion of chunks is needed it can be advantageous to only access and decompress part of the chunks. Doing partial read and decompression add high latency to many of the operation so should be used only when the subset of the data is small compared to the full chunks and is stored contiguously (that is to say either last dimensions for C layout, firsts for F). Pass
partial_decompress=True
as argument when creating anArray
, or when usingopen_array
. No option exists yet to apply partial read and decompress on a per-operation basis.
This release will be the last to support Python 3.5, next version of Zarr will be Python 3.6+.
- DirectoryStore now uses os.scandir, which should make listing large store faster, :issue:`563`
- Remove a few remaining Python 2-isms. By :user:`Poruri Sai Rahul <rahulporuri>`; :issue:`393`.
- Fix minor bug in N5Store. By :user:`gsakkis`, :issue:`550`.
- Improve error message in Jupyter when trying to use the
ipytree
widget withoutipytree
installed. By :user:`Zain Patel <mzjp2>`; :issue:`537` - Add typing information to many of the core functions :issue:`589`
- Explicitly close stores during testing. By :user:`Elliott Sales de Andrade <QuLogic>`; :issue:`442`
- Many of the convenience functions to emit errors (
err_*
fromzarr.errors
have been replaced byValueError
subclasses. The correspondingerr_*
function have been removed. :issue:`590`, :issue:`614`) - Improve consistency of terminology regarding arrays and datasets in the documentation. By :user:`Josh Moore <joshmoore>`; :issue:`571`.
- Added support for generic URL opening by
fsspec
, where the URLs have the form "protocol://[server]/path" or can be chained URls with "::" separators. The additional argumentstorage_options
is passed to the backend, see thefsspec
docs. By :user:`Martin Durant <martindurant>`; :issue:`546` - Added support for fetching multiple items via
getitems
method of a store, if it exists. This allows for concurrent fetching of data blocks from stores that implement this; presently HTTP, S3, GCS. Currently only applies to reading. By :user:`Martin Durant <martindurant>`; :issue:`606` - Efficient iteration expanded with option to pass start and stop index via
array.islice
. By :user:`Sebastian Grill <yetyetanotherusername>`, :issue:`615`.
- Add key normalization option for
DirectoryStore
,NestedDirectoryStore
,TempStore
, andN5Store
. By :user:`James Bourbeau <jrbourbeau>`; :issue:`459`. - Add
recurse
keyword toGroup.array_keys
andGroup.arrays
methods. By :user:`James Bourbeau <jrbourbeau>`; :issue:`458`. - Use uniform chunking for all dimensions when specifying
chunks
as an integer. Also adds support for specifying-1
to chunk across an entire dimension. By :user:`James Bourbeau <jrbourbeau>`; :issue:`456`. - Rename
DictStore
toMemoryStore
. By :user:`James Bourbeau <jrbourbeau>`; :issue:`455`. - Rewrite
.tree()
pretty representation to useipytree
. Allows it to work in both the Jupyter Notebook and JupyterLab. By :user:`John Kirkham <jakirkham>`; :issue:`450`. - Do not rename Blosc parameters in n5 backend and add blocksize parameter, compatible with n5-blosc. By :user:`axtimwalde`, :issue:`485`.
- Update
DirectoryStore
to create files with more permissive permissions. By :user:`Eduardo Gonzalez <eddienko>` and :user:`James Bourbeau <jrbourbeau>`; :issue:`493` - Use
math.ceil
for scalars. By :user:`John Kirkham <jakirkham>`; :issue:`500`. - Ensure contiguous data using
astype
. By :user:`John Kirkham <jakirkham>`; :issue:`513`. - Refactor out
_tofile
/_fromfile
fromDirectoryStore
. By :user:`John Kirkham <jakirkham>`; :issue:`503`. - Add
__enter__
/__exit__
methods toGroup
forh5py.File
compatibility. By :user:`Chris Barnes <clbarnes>`; :issue:`509`.
- Fix Sqlite Store Wrong Modification. By :user:`Tommy Tran <potter420>`; :issue:`440`.
- Add intermediate step (using
zipfile.ZipInfo
object) to write insideZipStore
to solve too restrictive permission issue. By :user:`Raphael Dussin <raphaeldussin>`; :issue:`505`. - Fix '/' prepend bug in
ABSStore
. By :user:`Shikhar Goenka <shikharsg>`; :issue:`525`.
- Fix hyperlink in
README.md
. By :user:`Anderson Banihirwe <andersy005>`; :issue:`531`. - Replace "nuimber" with "number". By :user:`John Kirkham <jakirkham>`; :issue:`512`.
- Fix azure link rendering in tutorial. By :user:`James Bourbeau <jrbourbeau>`; :issue:`507`.
- Update
README
file to be more detailed. By :user:`Zain Patel <mzjp2>`; :issue:`495`. - Import blosc from numcodecs in tutorial. By :user:`James Bourbeau <jrbourbeau>`; :issue:`491`.
- Adds logo to docs. By :user:`James Bourbeau <jrbourbeau>`; :issue:`462`.
- Fix N5 link in tutorial. By :user:`James Bourbeau <jrbourbeau>`; :issue:`480`.
- Fix typo in code snippet. By :user:`Joe Jevnik <llllllllll>`; :issue:`461`.
- Fix URLs to point to zarr-python By :user:`John Kirkham <jakirkham>`; :issue:`453`.
- Add documentation build to CI. By :user:`James Bourbeau <jrbourbeau>`; :issue:`516`.
- Use
ensure_ndarray
in a few more places. By :user:`John Kirkham <jakirkham>`; :issue:`506`. - Support Python 3.8. By :user:`John Kirkham <jakirkham>`; :issue:`499`.
- Require Numcodecs 0.6.4+ to use text handling functionality from it. By :user:`John Kirkham <jakirkham>`; :issue:`497`.
- Updates tests to use
pytest.importorskip
. By :user:`James Bourbeau <jrbourbeau>`; :issue:`492` - Removed support for Python 2. By :user:`jhamman`; :issue:`393`, :issue:`470`.
- Upgrade dependencies in the test matrices and resolve a compatibility issue with testing against the Azure Storage Emulator. By :user:`alimanfoo`; :issue:`468`, :issue:`467`.
- Use
unittest.mock
on Python 3. By :user:`Elliott Sales de Andrade <QuLogic>`; :issue:`426`. - Drop
decode
fromConsolidatedMetadataStore
. By :user:`John Kirkham <jakirkham>`; :issue:`452`.
- Use
scandir
inDirectoryStore
'sgetsize
method. By :user:`John Kirkham <jakirkham>`; :issue:`431`.
- Add and use utility functions to simplify reading and writing JSON. By :user:`John Kirkham <jakirkham>`; :issue:`429`, :issue:`430`.
- Fix
collections
'sDeprecationWarning
s. By :user:`John Kirkham <jakirkham>`; :issue:`432`. - Fix tests on big endian machines. By :user:`Elliott Sales de Andrade <QuLogic>`; :issue:`427`.
- Makes
azure-storage-blob
optional for testing. By :user:`John Kirkham <jakirkham>`; :issue:`419`, :issue:`420`.
- New storage backend, backed by Azure Blob Storage, class :class:`zarr.storage.ABSStore`. All data is stored as block blobs. By :user:`Shikhar Goenka <shikarsg>`, :user:`Tim Crone <tjcrone>` and :user:`Zain Patel <mzjp2>`; :issue:`345`.
- Add "consolidated" metadata as an experimental feature: use :func:`zarr.convenience.consolidate_metadata` to copy all metadata from the various metadata keys within a dataset hierarchy under a single key, and :func:`zarr.convenience.open_consolidated` to use this single key. This can greatly cut down the number of calls to the storage backend, and so remove a lot of overhead for reading remote data. By :user:`Martin Durant <martindurant>`, :user:`Alistair Miles <alimanfoo>`, :user:`Ryan Abernathey <rabernat>`, :issue:`268`, :issue:`332`, :issue:`338`.
- Support has been added for structured arrays with sub-array shape and/or nested fields. By :user:`Tarik Onalan <onalant>`, :issue:`111`, :issue:`296`.
- Adds the SQLite-backed :class:`zarr.storage.SQLiteStore` class enabling an SQLite database to be used as the backing store for an array or group. By :user:`John Kirkham <jakirkham>`, :issue:`368`, :issue:`365`.
- Efficient iteration over arrays by decompressing chunkwise. By :user:`Jerome Kelleher <jeromekelleher>`, :issue:`398`, :issue:`399`.
- Adds the Redis-backed :class:`zarr.storage.RedisStore` class enabling a Redis database to be used as the backing store for an array or group. By :user:`Joe Hamman <jhamman>`, :issue:`299`, :issue:`372`.
- Adds the MongoDB-backed :class:`zarr.storage.MongoDBStore` class enabling a MongoDB database to be used as the backing store for an array or group. By :user:`Noah D Brenowitz <nbren12>`, :user:`Joe Hamman <jhamman>`, :issue:`299`, :issue:`372`, :issue:`401`.
- New storage class for N5 containers. The :class:`zarr.n5.N5Store` has been added, which uses :class:`zarr.storage.NestedDirectoryStore` to support reading and writing from and to N5 containers. By :user:`Jan Funke <funkey>` and :user:`John Kirkham <jakirkham>`.
- The implementation of the :class:`zarr.storage.DirectoryStore` class has been modified to ensure that writes are atomic and there are no race conditions where a chunk might appear transiently missing during a write operation. By :user:`sbalmer <sbalmer>`, :issue:`327`, :issue:`263`.
- Avoid raising in :class:`zarr.storage.DirectoryStore`'s
__setitem__
when file already exists. By :user:`Justin Swaney <jmswaney>`, :issue:`272`, :issue:`318`. - The required version of the Numcodecs package has been upgraded to 0.6.2, which has enabled some code simplification and fixes a failing test involving msgpack encoding. By :user:`John Kirkham <jakirkham>`, :issue:`361`, :issue:`360`, :issue:`352`, :issue:`355`, :issue:`324`.
- Failing tests related to pickling/unpickling have been fixed. By :user:`Ryan Williams <ryan-williams>`, :issue:`273`, :issue:`308`.
- Corrects handling of
NaT
indatetime64
andtimedelta64
in various compressors (by :user:`John Kirkham <jakirkham>`; :issue:`344`). - Ensure
DictStore
contains onlybytes
to facilitate comparisons and protect against writes. By :user:`John Kirkham <jakirkham>`, :issue:`350`. - Test and fix an issue (w.r.t. fill values) when storing complex data to
Array
. By :user:`John Kirkham <jakirkham>`, :issue:`363`. - Always use a
tuple
when indexing a NumPyndarray
. By :user:`John Kirkham <jakirkham>`, :issue:`376`. - Ensure when
Array
uses adict
-based chunk store that it only containsbytes
to facilitate comparisons and protect against writes. Drop the copy for the no filter/compressor case as this handles that case. By :user:`John Kirkham <jakirkham>`, :issue:`359`.
- Simplify directory creation and removal in
DirectoryStore.rename
. By :user:`John Kirkham <jakirkham>`, :issue:`249`. - CI and test environments have been upgraded to include Python 3.7, drop Python 3.4, and upgrade all pinned package requirements. :user:`Alistair Miles <alimanfoo>`, :issue:`308`.
- Start using pyup.io to maintain dependencies. :user:`Alistair Miles <alimanfoo>`, :issue:`326`.
- Configure flake8 line limit generally. :user:`John Kirkham <jakirkham>`, :issue:`335`.
- Add missing coverage pragmas. :user:`John Kirkham <jakirkham>`, :issue:`343`, :issue:`355`.
- Fix missing backslash in docs. :user:`John Kirkham <jakirkham>`, :issue:`254`, :issue:`353`.
- Include tests for stores'
popitem
andpop
methods. By :user:`John Kirkham <jakirkham>`, :issue:`378`, :issue:`380`. - Include tests for different compressors, endianness, and attributes. By :user:`John Kirkham <jakirkham>`, :issue:`378`, :issue:`380`.
- Test validity of stores' contents. By :user:`John Kirkham <jakirkham>`, :issue:`359`, :issue:`408`.
- Advanced indexing. The
Array
class has several new methods and properties that enable a selection of items in an array to be retrieved or updated. See the :ref:`tutorial_indexing` tutorial section for more information. There is also a notebook with extended examples and performance benchmarks. :issue:`78`, :issue:`89`, :issue:`112`, :issue:`172`. - New package for compressor and filter codecs. The classes previously defined in the :mod:`zarr.codecs` module have been factored out into a separate package called Numcodecs. The Numcodecs package also includes several new codec classes not previously available in Zarr, including compressor codecs for Zstd and LZ4. This change is backwards-compatible with existing code, as all codec classes defined by Numcodecs are imported into the :mod:`zarr.codecs` namespace. However, it is recommended to import codecs from the new package, see the tutorial sections on :ref:`tutorial_compress` and :ref:`tutorial_filters` for examples. With contributions by :user:`John Kirkham <jakirkham>`; :issue:`74`, :issue:`102`, :issue:`120`, :issue:`123`, :issue:`139`.
- New storage class for DBM-style databases. The :class:`zarr.storage.DBMStore` class enables any DBM-style database such as gdbm, ndbm or Berkeley DB, to be used as the backing store for an array or group. See the tutorial section on :ref:`tutorial_storage` for some examples. :issue:`133`, :issue:`186`.
- New storage class for LMDB databases. The :class:`zarr.storage.LMDBStore` class enables an LMDB "Lightning" database to be used as the backing store for an array or group. :issue:`192`.
- New storage class using a nested directory structure for chunk files. The :class:`zarr.storage.NestedDirectoryStore` has been added, which is similar to the existing :class:`zarr.storage.DirectoryStore` class but nests chunk files for multidimensional arrays into sub-directories. :issue:`155`, :issue:`177`.
- New tree() method for printing hierarchies. The
Group
class has a new :func:`zarr.hierarchy.Group.tree` method which enables a tree representation of a group hierarchy to be printed. Also provides an interactive tree representation when used within a Jupyter notebook. See the :ref:`tutorial_diagnostics` tutorial section for examples. By :user:`John Kirkham <jakirkham>`; :issue:`82`, :issue:`140`, :issue:`184`. - Visitor API. The
Group
class now implements the h5py visitor API, see docs for the :func:`zarr.hierarchy.Group.visit`, :func:`zarr.hierarchy.Group.visititems` and :func:`zarr.hierarchy.Group.visitvalues` methods. By :user:`John Kirkham <jakirkham>`, :issue:`92`, :issue:`122`. - Viewing an array as a different dtype. The
Array
class has a new :func:`zarr.core.Array.astype` method, which is a convenience that enables an array to be viewed as a different dtype. By :user:`John Kirkham <jakirkham>`, :issue:`94`, :issue:`96`. - New open(), save(), load() convenience functions. The function
:func:`zarr.convenience.open` provides a convenient way to open a persistent
array or group, using either a
DirectoryStore
orZipStore
as the backing store. The functions :func:`zarr.convenience.save` and :func:`zarr.convenience.load` are also available and provide a convenient way to save an entire NumPy array to disk and load back into memory later. See the tutorial section :ref:`tutorial_persist` for examples. :issue:`104`, :issue:`105`, :issue:`141`, :issue:`181`. - IPython completions. The
Group
class now implements__dir__()
and_ipython_key_completions_()
which enables tab-completion for group members to be used in any IPython interactive environment. :issue:`170`. - New info property; changes to __repr__. The
Group
andArray
classes have a newinfo
property which can be used to print diagnostic information, including compression ratio where available. See the tutorial section on :ref:`tutorial_diagnostics` for examples. The string representation (__repr__
) of these classes has been simplified to ensure it is cheap and quick to compute in all circumstances. :issue:`83`, :issue:`115`, :issue:`132`, :issue:`148`. - Chunk options. When creating an array,
chunks=False
can be specified, which will result in an array with a single chunk only. Alternatively,chunks=True
will trigger an automatic chunk shape guess. See :ref:`tutorial_chunks` for more on thechunks
parameter. :issue:`106`, :issue:`107`, :issue:`183`. - Zero-dimensional arrays and are now supported; by :user:`Prakhar Goel <newt0311>`, :issue:`154`, :issue:`161`.
- Arrays with one or more zero-length dimensions are now fully supported; by :user:`Prakhar Goel <newt0311>`, :issue:`150`, :issue:`154`, :issue:`160`.
- The .zattrs key is now optional and will now only be created when the first custom attribute is set; :issue:`121`, :issue:`200`.
- New Group.move() method supports moving a sub-group or array to a different location within the same hierarchy. By :user:`John Kirkham <jakirkham>`, :issue:`191`, :issue:`193`, :issue:`196`.
- ZipStore is now thread-safe; :issue:`194`, :issue:`192`.
- New Array.hexdigest() method computes an
Array
's hash withhashlib
. By :user:`John Kirkham <jakirkham>`, :issue:`98`, :issue:`203`. - Improved support for object arrays. In previous versions of Zarr,
creating an array with
dtype=object
was possible but could under certain circumstances lead to unexpected errors and/or segmentation faults. To make it easier to properly configure an object array, a newobject_codec
parameter has been added to array creation functions. See the tutorial section on :ref:`tutorial_objects` for more information and examples. Also, runtime checks have been added in both Zarr and Numcodecs so that segmentation faults are no longer possible, even with a badly configured array. This API change is backwards compatible and previous code that created an object array and provided an object codec via thefilters
parameter will continue to work, however a warning will be raised to encourage use of theobject_codec
parameter. :issue:`208`, :issue:`212`. - Added support for datetime64 and timedelta64 data types; :issue:`85`, :issue:`215`.
- Array and group attributes are now cached by default to improve performance with slow stores, e.g., stores accessing data via the network; :issue:`220`, :issue:`218`, :issue:`204`.
- New LRUStoreCache class. The class :class:`zarr.storage.LRUStoreCache` has been added and provides a means to locally cache data in memory from a store that may be slow, e.g., a store that retrieves data from a remote server via the network; :issue:`223`.
- New copy functions. The new functions :func:`zarr.convenience.copy` and :func:`zarr.convenience.copy_all` provide a way to copy groups and/or arrays between HDF5 and Zarr, or between two Zarr groups. The :func:`zarr.convenience.copy_store` provides a more efficient way to copy data directly between two Zarr stores. :issue:`87`, :issue:`113`, :issue:`137`, :issue:`217`.
- Fixed bug where
read_only
keyword argument was ignored when creating an array; :issue:`151`, :issue:`179`. - Fixed bugs when using a
ZipStore
opened in 'w' mode; :issue:`158`, :issue:`182`. - Fill values can now be provided for fixed-length string arrays; :issue:`165`, :issue:`176`.
- Fixed a bug where the number of chunks initialized could be counted incorrectly; :issue:`97`, :issue:`174`.
- Fixed a bug related to the use of an ellipsis (...) in indexing statements; :issue:`93`, :issue:`168`, :issue:`172`.
- Fixed a bug preventing use of other integer types for indexing; :issue:`143`, :issue:`147`.
- Some changes have been made to the Zarr Specification v2 document to clarify ambiguities and add some missing information. These changes do not break compatibility with any of the material as previously implemented, and so the changes have been made in-place in the document without incrementing the document version number. See the section on changes in the specification document for more information.
- A new :ref:`tutorial_indexing` section has been added to the tutorial.
- A new :ref:`tutorial_strings` section has been added to the tutorial (:issue:`135`, :issue:`175`).
- The :ref:`tutorial_chunks` tutorial section has been reorganised and updated.
- The :ref:`tutorial_persist` and :ref:`tutorial_storage` tutorial sections have been updated with new examples (:issue:`100`, :issue:`101`, :issue:`103`).
- A new tutorial section on :ref:`tutorial_pickle` has been added (:issue:`91`).
- A new tutorial section on :ref:`tutorial_datetime` has been added.
- A new tutorial section on :ref:`tutorial_diagnostics` has been added.
- The tutorial sections on :ref:`tutorial_sync` and :ref:`tutorial_tips_blosc` have been updated to provide information about how to avoid program hangs when using the Blosc compressor with multiple processes (:issue:`199`, :issue:`201`).
- A data fixture has been included in the test suite to ensure data format compatibility is maintained; :issue:`83`, :issue:`146`.
- The test suite has been migrated from nosetests to pytest; :issue:`189`, :issue:`225`.
- Various continuous integration updates and improvements; :issue:`118`, :issue:`124`, :issue:`125`, :issue:`126`, :issue:`109`, :issue:`114`, :issue:`171`.
- Bump numcodecs dependency to 0.5.3, completely remove nose dependency, :issue:`237`.
- Fix compatibility issues with NumPy 1.14 regarding fill values for structured arrays, :issue:`222`, :issue:`238`, :issue:`239`.
Code was contributed to this release by :user:`Alistair Miles <alimanfoo>`, :user:`John Kirkham <jakirkham>` and :user:`Prakhar Goel <newt0311>`.
Documentation was contributed to this release by :user:`Mamy Ratsimbazafy <mratsim>` and :user:`Charles Noyes <CSNoyes>`.
Thank you to :user:`John Kirkham <jakirkham>`, :user:`Stephan Hoyer <shoyer>`, :user:`Francesc Alted <FrancescAlted>`, and :user:`Matthew Rocklin <mrocklin>` for code reviews and/or comments on pull requests.
- Resolved an issue where calling
hasattr
on aGroup
object erroneously returned aKeyError
. By :user:`Vincent Schut <vincentschut>`; :issue:`88`, :issue:`95`.
- Resolved an issue with :func:`zarr.creation.array` where dtype was given as None (:issue:`80`).
- Resolved an issue when no compression is used and chunks are stored in memory (:issue:`79`).
Various minor improvements, including: Group
objects support member access
via dot notation (__getattr__
); fixed metadata caching for Array.shape
property and derivatives; added Array.ndim
property; fixed
Array.__array__
method arguments; fixed bug in pickling Array
state;
fixed bug in pickling ThreadSynchronizer
.
- Group objects now support member deletion via
del
statement (:issue:`65`). - Added :class:`zarr.storage.TempStore` class for convenience to provide storage via a temporary directory (:issue:`59`).
- Fixed performance issues with :class:`zarr.storage.ZipStore` class (:issue:`66`).
- The Blosc extension has been modified to return bytes instead of array objects from compress and decompress function calls. This should improve compatibility and also provides a small performance increase for compressing high compression ratio data (:issue:`55`).
- Added
overwrite
keyword argument to array and group creation methods on the :class:`zarr.hierarchy.Group` class (:issue:`71`). - Added
cache_metadata
keyword argument to array creation methods. - The functions :func:`zarr.creation.open_array` and :func:`zarr.hierarchy.open_group` now accept any store as first argument (:issue:`56`).
The bundled Blosc library has been upgraded to version 1.11.1.
Support has been added for organizing arrays into hierarchies via groups. See the tutorial section on :ref:`tutorial_groups` and the :mod:`zarr.hierarchy` API docs for more information.
Support has been added for configuring filters to preprocess chunk data prior to compression. See the tutorial section on :ref:`tutorial_filters` and the :mod:`zarr.codecs` API docs for more information.
To accommodate support for hierarchies and filters, the Zarr metadata format has been modified. See the :ref:`spec_v2` for more information. To migrate an array stored using Zarr version 1.x, use the :func:`zarr.storage.migrate_1to2` function.
The bundled Blosc library has been upgraded to version 1.11.0.
Thanks to :user:`Matthew Rocklin <mrocklin>`, :user:`Stephan Hoyer <shoyer>` and :user:`Francesc Alted <FrancescAlted>` for contributions and comments.
- The bundled Blosc library has been upgraded to version 1.10.0. The 'zstd' internal compression library is now available within Blosc. See the tutorial section on :ref:`tutorial_compress` for an example.
- When using the Blosc compressor, the default internal compression library is now 'lz4'.
- The default number of internal threads for the Blosc compressor has been increased to a maximum of 8 (previously 4).
- Added convenience functions :func:`zarr.blosc.list_compressors` and :func:`zarr.blosc.get_nthreads`.
This release includes a complete re-organization of the code base. The major version number has been bumped to indicate that there have been backwards-incompatible changes to the API and the on-disk storage format. However, Zarr is still in an early stage of development, so please do not take the version number as an indicator of maturity.
The main motivation for re-organizing the code was to create an
abstraction layer between the core array logic and data storage (:issue:`21`).
In this release, any
object that implements the MutableMapping
interface can be used as
an array store. See the tutorial sections on :ref:`tutorial_persist`
and :ref:`tutorial_storage`, the :ref:`spec_v1`, and the
:mod:`zarr.storage` module documentation for more information.
Please note also that the file organization and file name conventions used when storing a Zarr array in a directory on the file system have changed. Persistent Zarr arrays created using previous versions of the software will not be compatible with this version. See the :mod:`zarr.storage` API docs and the :ref:`spec_v1` for more information.
An abstraction layer has also been created between the core array logic and the code for compressing and decompressing array chunks. This release still bundles the c-blosc library and uses Blosc as the default compressor, however other compressors including zlib, BZ2 and LZMA are also now supported via the Python standard library. New compressors can also be dynamically registered for use with Zarr. See the tutorial sections on :ref:`tutorial_compress` and :ref:`tutorial_tips_blosc`, the :ref:`spec_v1`, and the :mod:`zarr.compressors` module documentation for more information.
The synchronization code has also been refactored to create a layer of abstraction, enabling Zarr arrays to be used in parallel computations with a number of alternative synchronization methods. For more information see the tutorial section on :ref:`tutorial_sync` and the :mod:`zarr.sync` module documentation.
NumPy is no longer a build dependency for the :mod:`zarr.blosc` Cython extension, so setup.py will run even if NumPy is not already installed, and should automatically install NumPy as a runtime dependency. Manual installation of NumPy prior to installing Zarr is still recommended, however, as the automatic installation of NumPy may fail or be sub-optimal on some platforms.
Some optimizations have been made within the :mod:`zarr.blosc` extension to avoid unnecessary memory copies, giving a ~10-20% performance improvement for multi-threaded compression operations.
The :mod:`zarr.blosc` extension now automatically detects whether it is running within a single-threaded or multi-threaded program and adapts its internal behaviour accordingly (:issue:`27`). There is no need for the user to make any API calls to switch Blosc between contextual and non-contextual (global lock) mode. See also the tutorial section on :ref:`tutorial_tips_blosc`.
The internal code for managing chunks has been rewritten to be more efficient. Now no state is maintained for chunks outside of the array store, meaning that chunks do not carry any extra memory overhead not accounted for by the store. This negates the need for the "lazy" option present in the previous release, and this has been removed.
The memory layout within chunks can now be set as either "C" (row-major) or "F" (column-major), which can help to provide better compression for some data (:issue:`7`). See the tutorial section on :ref:`tutorial_chunks_order` for more information.
A bug has been fixed within the __getitem__
and __setitem__
machinery for slicing arrays, to properly handle getting and setting
partial slices.
Thanks to :user:`Matthew Rocklin <mrocklin>`, :user:`Stephan Hoyer <shoyer>`, :user:`Francesc Alted <FrancescAlted>`, :user:`Anthony Scopatz <scopatz>` and :user:`Martin Durant <martindurant>` for contributions and comments.
See v0.4.0 release notes on GitHub.