html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue
https://github.com/pydata/xarray/pull/4187#issuecomment-696766963,https://api.github.com/repos/pydata/xarray/issues/4187,696766963,MDEyOklzc3VlQ29tbWVudDY5Njc2Njk2Mw==,6042212,2020-09-22T14:41:41Z,2020-09-22T14:41:41Z,CONTRIBUTOR,Note that zarr.open* now works with fsspec URLs (in master) ,"{""total_count"": 2, ""+1"": 2, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,647804004
https://github.com/pydata/xarray/pull/4187#issuecomment-652702644,https://api.github.com/repos/pydata/xarray/issues/4187,652702644,MDEyOklzc3VlQ29tbWVudDY1MjcwMjY0NA==,23487320,2020-07-01T23:59:32Z,2020-07-03T04:23:34Z,CONTRIBUTOR,"> I agree. I think we should keep `open_zarr` around.
Just wanted to mention that two of the reviewers in the last PR (see https://github.com/pydata/xarray/pull/4003#issuecomment-619644606 and https://github.com/pydata/xarray/pull/4003#issuecomment-620169860) seemed **in favour** of deprecating `open_zarr`. If I'm counting the votes correctly (did I miss anyone?), that's 2 for, and 2 against. We'll need a tiebreaker :laughing:
> As reminder (because it took me a while to remember!), one goal with this refactor is to have `open_mfdataset` work with all backends (including zarr and rasterio) by specifying the `engine` kwarg.
Yes exactly, time does fly (half a year has gone by already!).
Currently I'm trying to piggyback Zarr into `test_openmfdataset_manyfiles` from #1983, ~~and am currently having trouble finding out why opening Zarr stores via `open_mfdataset` doesn't return a `dask` backed array like the other engines (Edit: it only happens when `chunks is None`, see https://github.com/pydata/xarray/pull/4187#discussion_r448734418). Might need to spend another day digging through the code to see if this is expected behaviour.~~ Edit: got a workaround solution in b3d6a6a46f8ead25b6f7f593f7b46f43a4de650c by using `chunks=""auto""` as was the default in `open_zarr`.
> As a note I'm working on implementing [zarr spec v3 in zarr-python](https://github.com/zarr-developers/zarr-python/pull/568), still deciding how we want to handle the new spec/API.
>
> If there are any changes that you would like or dislike in an API, feedback is welcome.
Thanks for chipping in @Carreau! I'm sure the community will have some useful suggestions. Just cross-referencing https://zarr-developers.github.io/zarr/specs/2019/06/19/zarr-v3-update.html so others can get a better feel for where things are at.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,647804004
https://github.com/pydata/xarray/pull/4187#issuecomment-652260859,https://api.github.com/repos/pydata/xarray/issues/4187,652260859,MDEyOklzc3VlQ29tbWVudDY1MjI2MDg1OQ==,23487320,2020-07-01T08:02:14Z,2020-07-01T22:23:27Z,CONTRIBUTOR,"> I wonder if it's really worth deprecating `open_zarr()`. `open_dataset(..., engine='zarr')` is a bit more verbose, especially with `backend_kwargs` to pass optional arguments. It seems pretty harmless to keep `open_zarr()` around, especially if it's just an alias for `open_datraset(engine='zarr')`.
Depends on which line in the [Zen of Python](https://www.python.org/dev/peps/pep-0020/) you want to follow - ""Simple is better than complex"", or ""There should be one-- and preferably only one --obvious way to do it"". From a maintenance perspective, it's balancing the cost of a deprecation cycle vs writing code that tests both instances I guess.
> We could also automatically detect zarr stores in `open_dataset` without requiring `engine='zarr'` if:
>
> 1. the argument inherits from `collections.abc.Mapping`, and
> 2. it contains a key `'.zgroup'`, corresponding to zarr metadata.
>
> As for the annoyance of needing to write `backend_kwargs={""consolidated"": True}`, I wonder if we could detect this automatically by checking for the existence of a `.zmetadata` key? This would add a small amount of overhead (one file access) but this probably would not be prohibitively expensive.
These are some pretty good ideas. I also wonder if there's a way to mimic the [dataset identifiers like in rasterio](https://rasterio.readthedocs.io/en/latest/topics/datasets.html#dataset-identifiers), something like `xr.open_dataset(""zarr:some_zarrfile.zarr"")`. Feels a lot more like [fsspec's url chaining](https://filesystem-spec.readthedocs.io/en/latest/features.html#url-chaining) too.
Counter-argument would be that the [cyclomatic complexity](https://en.wikipedia.org/wiki/Cyclomatic_complexity) of `open_dataset` is already too high, and it really should be refactored before adding more 'magic'. Especially if new backend engines come online (e.g. #4142).","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,647804004
https://github.com/pydata/xarray/pull/4187#issuecomment-652625539,https://api.github.com/repos/pydata/xarray/issues/4187,652625539,MDEyOklzc3VlQ29tbWVudDY1MjYyNTUzOQ==,335567,2020-07-01T20:17:36Z,2020-07-01T20:17:36Z,CONTRIBUTOR,"As a note I'm working on implementing [zarr spec v3 in zarr-python](https://github.com/zarr-developers/zarr-python/pull/568), still deciding how we want to handle the new spec/API.
If there are any changes that you would like or dislike in an API, feedback is welcome. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,647804004
https://github.com/pydata/xarray/pull/4187#issuecomment-652104356,https://api.github.com/repos/pydata/xarray/issues/4187,652104356,MDEyOklzc3VlQ29tbWVudDY1MjEwNDM1Ng==,23487320,2020-06-30T23:42:58Z,2020-07-01T03:04:11Z,CONTRIBUTOR,"Four more failures, something to do with dask? Seems related to #3919 and #3921.
- [ ] `TestZarrDictStore.test_vectorized_indexing` - IndexError: only slices with step >= 1 are supported
- [x] `TestZarrDictStore.test_manual_chunk` - ZeroDivisionError: integer division or modulo by zero
- [ ] `TestZarrDirectoryStore.test_vectorized_indexing` - IndexError: only slices with step >= 1 are supported
- [x] `TestZarrDirectoryStore.test_manual_chunk` - ZeroDivisionError: integer division or modulo by zero
Edit: Fixed the `ZeroDivisionErrror` in 6fbeadf41a1a547383da0c8f4499c99099dbdf97. The `IndexError` was fixed in a hacky way though, see https://github.com/pydata/xarray/pull/4187#discussion_r448077275.
```python-traceback
=================================== FAILURES ===================================
__________________ TestZarrDictStore.test_vectorized_indexing __________________
self =
@pytest.mark.xfail(
not has_dask,
reason=""the code for indexing without dask handles negative steps in slices incorrectly"",
)
def test_vectorized_indexing(self):
in_memory = create_test_data()
with self.roundtrip(in_memory) as on_disk:
indexers = {
""dim1"": DataArray([0, 2, 0], dims=""a""),
""dim2"": DataArray([0, 2, 3], dims=""a""),
}
expected = in_memory.isel(**indexers)
actual = on_disk.isel(**indexers)
# make sure the array is not yet loaded into memory
assert not actual[""var1""].variable._in_memory
assert_identical(expected, actual.load())
# do it twice, to make sure we're switched from
# vectorized -> numpy when we cached the values
actual = on_disk.isel(**indexers)
assert_identical(expected, actual)
def multiple_indexing(indexers):
# make sure a sequence of lazy indexings certainly works.
with self.roundtrip(in_memory) as on_disk:
actual = on_disk[""var3""]
expected = in_memory[""var3""]
for ind in indexers:
actual = actual.isel(**ind)
expected = expected.isel(**ind)
# make sure the array is not yet loaded into memory
assert not actual.variable._in_memory
assert_identical(expected, actual.load())
# two-staged vectorized-indexing
indexers = [
{
""dim1"": DataArray([[0, 7], [2, 6], [3, 5]], dims=[""a"", ""b""]),
""dim3"": DataArray([[0, 4], [1, 3], [2, 2]], dims=[""a"", ""b""]),
},
{""a"": DataArray([0, 1], dims=[""c""]), ""b"": DataArray([0, 1], dims=[""c""])},
]
multiple_indexing(indexers)
# vectorized-slice mixed
indexers = [
{
""dim1"": DataArray([[0, 7], [2, 6], [3, 5]], dims=[""a"", ""b""]),
""dim3"": slice(None, 10),
}
]
multiple_indexing(indexers)
# vectorized-integer mixed
indexers = [
{""dim3"": 0},
{""dim1"": DataArray([[0, 7], [2, 6], [3, 5]], dims=[""a"", ""b""])},
{""a"": slice(None, None, 2)},
]
multiple_indexing(indexers)
# vectorized-integer mixed
indexers = [
{""dim3"": 0},
{""dim1"": DataArray([[0, 7], [2, 6], [3, 5]], dims=[""a"", ""b""])},
{""a"": 1, ""b"": 0},
]
multiple_indexing(indexers)
# with negative step slice.
indexers = [
{
""dim1"": DataArray([[0, 7], [2, 6], [3, 5]], dims=[""a"", ""b""]),
""dim3"": slice(-1, 1, -1),
}
]
> multiple_indexing(indexers)
xarray/tests/test_backends.py:686:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
xarray/tests/test_backends.py:642: in multiple_indexing
assert_identical(expected, actual.load())
xarray/core/dataarray.py:814: in load
ds = self._to_temp_dataset().load(**kwargs)
xarray/core/dataset.py:666: in load
v.load()
xarray/core/variable.py:381: in load
self._data = np.asarray(self._data)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/numpy/core/numeric.py:501: in asarray
return array(a, dtype, copy=False, order=order)
xarray/core/indexing.py:677: in __array__
self._ensure_cached()
xarray/core/indexing.py:674: in _ensure_cached
self.array = NumpyIndexingAdapter(np.asarray(self.array))
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/numpy/core/numeric.py:501: in asarray
return array(a, dtype, copy=False, order=order)
xarray/core/indexing.py:653: in __array__
return np.asarray(self.array, dtype=dtype)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/numpy/core/numeric.py:501: in asarray
return array(a, dtype, copy=False, order=order)
xarray/core/indexing.py:557: in __array__
return np.asarray(array[self.key], dtype=None)
xarray/backends/zarr.py:57: in __getitem__
return array[key.tuple]
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/zarr/core.py:572: in __getitem__
return self.get_basic_selection(selection, fields=fields)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/zarr/core.py:698: in get_basic_selection
fields=fields)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/zarr/core.py:738: in _get_basic_selection_nd
indexer = BasicIndexer(selection, self)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/zarr/indexing.py:279: in __init__
dim_indexer = SliceDimIndexer(dim_sel, dim_len, dim_chunk_len)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/zarr/indexing.py:107: in __init__
err_negative_step()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
def err_negative_step():
> raise IndexError('only slices with step >= 1 are supported')
E IndexError: only slices with step >= 1 are supported
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/zarr/errors.py:55: IndexError
_____________________ TestZarrDictStore.test_manual_chunk ______________________
self =
@requires_dask
@pytest.mark.filterwarnings(""ignore:Specified Dask chunks"")
def test_manual_chunk(self):
original = create_test_data().chunk({""dim1"": 3, ""dim2"": 4, ""dim3"": 3})
# All of these should return non-chunked arrays
NO_CHUNKS = (None, 0, {})
for no_chunk in NO_CHUNKS:
open_kwargs = {""chunks"": no_chunk}
> with self.roundtrip(original, open_kwargs=open_kwargs) as actual:
xarray/tests/test_backends.py:1594:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/contextlib.py:81: in __enter__
return next(self.gen)
xarray/tests/test_backends.py:1553: in roundtrip
with self.open(store_target, **open_kwargs) as ds:
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/contextlib.py:81: in __enter__
return next(self.gen)
xarray/tests/test_backends.py:1540: in open
with xr.open_dataset(store_target, engine=""zarr"", **kwargs) as ds:
xarray/backends/api.py:587: in open_dataset
ds = maybe_decode_store(store, chunks)
xarray/backends/api.py:511: in maybe_decode_store
for k, v in ds.variables.items()
xarray/backends/api.py:511: in
for k, v in ds.variables.items()
xarray/backends/zarr.py:398: in maybe_chunk
var = var.chunk(chunk_spec, name=name2, lock=None)
xarray/core/variable.py:1007: in chunk
data = da.from_array(data, chunks, name=name, lock=lock, **kwargs)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/dask/array/core.py:2712: in from_array
chunks, x.shape, dtype=x.dtype, previous_chunks=previous_chunks
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/dask/array/core.py:2447: in normalize_chunks
(),
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/dask/array/core.py:2445: in
for s, c in zip(shape, chunks)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/dask/array/core.py:954: in blockdims_from_blockshape
for d, bd in zip(shape, chunks)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.0 =
((bd,) * (d // bd) + ((d % bd,) if d % bd else ()) if d else (0,))
> for d, bd in zip(shape, chunks)
)
E ZeroDivisionError: integer division or modulo by zero
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/dask/array/core.py:954: ZeroDivisionError
_______________ TestZarrDirectoryStore.test_vectorized_indexing ________________
self =
@pytest.mark.xfail(
not has_dask,
reason=""the code for indexing without dask handles negative steps in slices incorrectly"",
)
def test_vectorized_indexing(self):
in_memory = create_test_data()
with self.roundtrip(in_memory) as on_disk:
indexers = {
""dim1"": DataArray([0, 2, 0], dims=""a""),
""dim2"": DataArray([0, 2, 3], dims=""a""),
}
expected = in_memory.isel(**indexers)
actual = on_disk.isel(**indexers)
# make sure the array is not yet loaded into memory
assert not actual[""var1""].variable._in_memory
assert_identical(expected, actual.load())
# do it twice, to make sure we're switched from
# vectorized -> numpy when we cached the values
actual = on_disk.isel(**indexers)
assert_identical(expected, actual)
def multiple_indexing(indexers):
# make sure a sequence of lazy indexings certainly works.
with self.roundtrip(in_memory) as on_disk:
actual = on_disk[""var3""]
expected = in_memory[""var3""]
for ind in indexers:
actual = actual.isel(**ind)
expected = expected.isel(**ind)
# make sure the array is not yet loaded into memory
assert not actual.variable._in_memory
assert_identical(expected, actual.load())
# two-staged vectorized-indexing
indexers = [
{
""dim1"": DataArray([[0, 7], [2, 6], [3, 5]], dims=[""a"", ""b""]),
""dim3"": DataArray([[0, 4], [1, 3], [2, 2]], dims=[""a"", ""b""]),
},
{""a"": DataArray([0, 1], dims=[""c""]), ""b"": DataArray([0, 1], dims=[""c""])},
]
multiple_indexing(indexers)
# vectorized-slice mixed
indexers = [
{
""dim1"": DataArray([[0, 7], [2, 6], [3, 5]], dims=[""a"", ""b""]),
""dim3"": slice(None, 10),
}
]
multiple_indexing(indexers)
# vectorized-integer mixed
indexers = [
{""dim3"": 0},
{""dim1"": DataArray([[0, 7], [2, 6], [3, 5]], dims=[""a"", ""b""])},
{""a"": slice(None, None, 2)},
]
multiple_indexing(indexers)
# vectorized-integer mixed
indexers = [
{""dim3"": 0},
{""dim1"": DataArray([[0, 7], [2, 6], [3, 5]], dims=[""a"", ""b""])},
{""a"": 1, ""b"": 0},
]
multiple_indexing(indexers)
# with negative step slice.
indexers = [
{
""dim1"": DataArray([[0, 7], [2, 6], [3, 5]], dims=[""a"", ""b""]),
""dim3"": slice(-1, 1, -1),
}
]
> multiple_indexing(indexers)
xarray/tests/test_backends.py:686:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
xarray/tests/test_backends.py:642: in multiple_indexing
assert_identical(expected, actual.load())
xarray/core/dataarray.py:814: in load
ds = self._to_temp_dataset().load(**kwargs)
xarray/core/dataset.py:666: in load
v.load()
xarray/core/variable.py:381: in load
self._data = np.asarray(self._data)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/numpy/core/numeric.py:501: in asarray
return array(a, dtype, copy=False, order=order)
xarray/core/indexing.py:677: in __array__
self._ensure_cached()
xarray/core/indexing.py:674: in _ensure_cached
self.array = NumpyIndexingAdapter(np.asarray(self.array))
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/numpy/core/numeric.py:501: in asarray
return array(a, dtype, copy=False, order=order)
xarray/core/indexing.py:653: in __array__
return np.asarray(self.array, dtype=dtype)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/numpy/core/numeric.py:501: in asarray
return array(a, dtype, copy=False, order=order)
xarray/core/indexing.py:557: in __array__
return np.asarray(array[self.key], dtype=None)
xarray/backends/zarr.py:57: in __getitem__
return array[key.tuple]
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/zarr/core.py:572: in __getitem__
return self.get_basic_selection(selection, fields=fields)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/zarr/core.py:698: in get_basic_selection
fields=fields)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/zarr/core.py:738: in _get_basic_selection_nd
indexer = BasicIndexer(selection, self)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/zarr/indexing.py:279: in __init__
dim_indexer = SliceDimIndexer(dim_sel, dim_len, dim_chunk_len)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/zarr/indexing.py:107: in __init__
err_negative_step()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
def err_negative_step():
> raise IndexError('only slices with step >= 1 are supported')
E IndexError: only slices with step >= 1 are supported
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/zarr/errors.py:55: IndexError
___________________ TestZarrDirectoryStore.test_manual_chunk ___________________
self =
@requires_dask
@pytest.mark.filterwarnings(""ignore:Specified Dask chunks"")
def test_manual_chunk(self):
original = create_test_data().chunk({""dim1"": 3, ""dim2"": 4, ""dim3"": 3})
# All of these should return non-chunked arrays
NO_CHUNKS = (None, 0, {})
for no_chunk in NO_CHUNKS:
open_kwargs = {""chunks"": no_chunk}
> with self.roundtrip(original, open_kwargs=open_kwargs) as actual:
xarray/tests/test_backends.py:1594:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/contextlib.py:81: in __enter__
return next(self.gen)
xarray/tests/test_backends.py:1553: in roundtrip
with self.open(store_target, **open_kwargs) as ds:
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/contextlib.py:81: in __enter__
return next(self.gen)
xarray/tests/test_backends.py:1540: in open
with xr.open_dataset(store_target, engine=""zarr"", **kwargs) as ds:
xarray/backends/api.py:587: in open_dataset
ds = maybe_decode_store(store, chunks)
xarray/backends/api.py:511: in maybe_decode_store
for k, v in ds.variables.items()
xarray/backends/api.py:511: in
for k, v in ds.variables.items()
xarray/backends/zarr.py:398: in maybe_chunk
var = var.chunk(chunk_spec, name=name2, lock=None)
xarray/core/variable.py:1007: in chunk
data = da.from_array(data, chunks, name=name, lock=lock, **kwargs)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/dask/array/core.py:2712: in from_array
chunks, x.shape, dtype=x.dtype, previous_chunks=previous_chunks
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/dask/array/core.py:2447: in normalize_chunks
(),
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/dask/array/core.py:2445: in
for s, c in zip(shape, chunks)
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/dask/array/core.py:954: in blockdims_from_blockshape
for d, bd in zip(shape, chunks)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.0 =
((bd,) * (d // bd) + ((d % bd,) if d % bd else ()) if d else (0,))
> for d, bd in zip(shape, chunks)
)
E ZeroDivisionError: integer division or modulo by zero
/usr/share/miniconda/envs/xarray-tests/lib/python3.6/site-packages/dask/array/core.py:954: ZeroDivisionError
```
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,647804004
https://github.com/pydata/xarray/pull/4187#issuecomment-651772649,https://api.github.com/repos/pydata/xarray/issues/4187,651772649,MDEyOklzc3VlQ29tbWVudDY1MTc3MjY0OQ==,23487320,2020-06-30T12:56:00Z,2020-06-30T12:56:00Z,CONTRIBUTOR,"Is it ok to drop the deprecated `auto_chunk` tests here in this PR (or leave it to another PR)? The deprecation warning was first added in https://github.com/pydata/xarray/pull/2530/commits/ae4cf0ab19b3e563bde90a48b3e6ee615930d4a1, and I see that `auto_chunk` was used back in v0.12.1 at http://xarray.pydata.org/en/v0.12.1/generated/xarray.open_zarr.html. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,647804004
https://github.com/pydata/xarray/pull/4187#issuecomment-651662701,https://api.github.com/repos/pydata/xarray/issues/4187,651662701,MDEyOklzc3VlQ29tbWVudDY1MTY2MjcwMQ==,23487320,2020-06-30T09:03:53Z,2020-06-30T09:24:12Z,CONTRIBUTOR,"Nevermind, I found it. There was an `if` that should have been an `elif`. Onward to the next error - UnboundLocalError. Edit: Also fixed!
```python-traceback
=================================== FAILURES ===================================
__________________________ TestDataset.test_lazy_load __________________________
self =
def test_lazy_load(self):
store = InaccessibleVariableDataStore()
create_test_data().dump_to_store(store)
for decode_cf in [True, False]:
> ds = open_dataset(store, decode_cf=decode_cf)
xarray/tests/test_dataset.py:4188:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
xarray/backends/api.py:587: in open_dataset
ds = maybe_decode_store(store)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
store =
lock = False
def maybe_decode_store(store, lock=False):
ds = conventions.decode_cf(
store,
mask_and_scale=mask_and_scale,
decode_times=decode_times,
concat_characters=concat_characters,
decode_coords=decode_coords,
drop_variables=drop_variables,
use_cftime=use_cftime,
decode_timedelta=decode_timedelta,
)
_protect_dataset_variables_inplace(ds, cache)
> if chunks is not None:
E UnboundLocalError: local variable 'chunks' referenced before assignment
xarray/backends/api.py:466: UnboundLocalError
```
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,647804004
https://github.com/pydata/xarray/pull/4187#issuecomment-651624166,https://api.github.com/repos/pydata/xarray/issues/4187,651624166,MDEyOklzc3VlQ29tbWVudDY1MTYyNDE2Ng==,23487320,2020-06-30T08:02:03Z,2020-06-30T09:23:32Z,CONTRIBUTOR,"This is the one test failure (AttributeError) on Linux py36-bare-minimum:
```python-traceback
=================================== FAILURES ===================================
__________________________ TestDataset.test_lazy_load __________________________
self =
def test_lazy_load(self):
store = InaccessibleVariableDataStore()
create_test_data().dump_to_store(store)
for decode_cf in [True, False]:
> ds = open_dataset(store, decode_cf=decode_cf)
xarray/tests/test_dataset.py:4188:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
xarray/backends/api.py:578: in open_dataset
engine = _get_engine_from_magic_number(filename_or_obj)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
filename_or_obj =
def _get_engine_from_magic_number(filename_or_obj):
# check byte header to determine file type
if isinstance(filename_or_obj, bytes):
magic_number = filename_or_obj[:8]
else:
> if filename_or_obj.tell() != 0:
E AttributeError: 'InaccessibleVariableDataStore' object has no attribute 'tell'
xarray/backends/api.py:116: AttributeError
```
Been scratching my head debugging this one. There doesn't seem to be an obvious reason why this test is failing, since 1) this test isn't for Zarr and 2) this test shouldn't be affected by the new `if` blocks checking if `engine==""zarr""`. Will need to double check the logic here.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,647804004