zarr-developers / zarr-python

An implementation of chunked, compressed, N-dimensional arrays for Python.
http://zarr.readthedocs.io/
MIT License
1.41k stars 267 forks source link

[v3] Support zero-dimensional arrays #1976

Closed tomwhite closed 3 weeks ago

tomwhite commented 4 weeks ago

Zarr version

3.0.0a1

Numcodecs version

0.12.1

Python Version

3.11.9

Operating System

Mac

Installation

pip

Description

Zero-dimensional arrays are supported in v2, so they should be in v3 too.

Steps to reproduce

>>> import zarr.v2 as zarr
>>> z = zarr.open(store='example-v2.zarr', mode='w', shape=())
>>> z[...] = 2
>>> z[...]
array(2.)
>>> import zarr
>>> z = zarr.open(store='example-v3.zarr', mode='w', shape=())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/tom/workspace/zarr-python/src/zarr/api/synchronous.py", line 45, in open
    obj = sync(
          ^^^^^
  File "/Users/tom/workspace/zarr-python/src/zarr/sync.py", line 92, in sync
    raise return_result
  File "/Users/tom/workspace/zarr-python/src/zarr/sync.py", line 51, in _runner
    return await coro
           ^^^^^^^^^^
  File "/Users/tom/workspace/zarr-python/src/zarr/api/asynchronous.py", line 198, in open
    return await open_array(store=store_path, zarr_format=zarr_format, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tom/workspace/zarr-python/src/zarr/api/asynchronous.py", line 868, in open_array
    return await create(store=store, path=path, zarr_format=zarr_format, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tom/workspace/zarr-python/src/zarr/api/asynchronous.py", line 686, in create
    return await AsyncArray.create(
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tom/workspace/zarr-python/src/zarr/array.py", line 153, in create
    return await cls._create_v3(
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tom/workspace/zarr-python/src/zarr/array.py", line 237, in _create_v3
    chunk_grid=RegularChunkGrid(chunk_shape=chunk_shape),
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tom/workspace/zarr-python/src/zarr/chunk_grids.py", line 51, in __init__
    chunk_shape_parsed = parse_shapelike(chunk_shape)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tom/workspace/zarr-python/src/zarr/common.py", line 145, in parse_shapelike
    raise ValueError("Expected at least one element. Got 0.")
ValueError: Expected at least one element. Got 0.

Additional output

No response

d-v-b commented 4 weeks ago

thanks for the bug report! On the array creation side I think this will be an easy fix, and hopefully our port of the v2 indexing routines preserves the expected behavior there.

tomwhite commented 3 weeks ago

This now works with #1979 and #1980 - thanks @d-v-b!