-
Notifications
You must be signed in to change notification settings - Fork 300
Closed
Labels
Description
🐛 Bug Report
Collapsing a cube over a lazy auxiliary coordinate results in the following error when the cube is save as nc file:
ValueError: slicing expression exceeds the number of dimensions of the variable
I tested this on two independent machines. Some additional hints:
- The error only appears in
iris=3.2.0.post0, not foriris=3.1.0. - Adding a
print(cube)between the collapsing the thesavesomehow fixes this issue. - Using a non-lazy auxiliary coordinate also fixes this issue.
- Using a lazy dimensional coordinate also does not trigger the error (if used without a lazy auxiliary coordinate).
How To Reproduce
import dask.array as da
import numpy as np
import os
import iris
from iris.coords import AuxCoord, DimCoord
from iris.cube import Cube
print("iris version:", iris.__version__)
# Create cube with lazy aux coord and aggregate over this dimension
dim_coord = DimCoord(np.arange(10), var_name='time')
aux_coord = AuxCoord(da.arange(10), var_name='year') # the "da" is important here!
cube = Cube(np.arange(10),
var_name='x',
dim_coords_and_dims=[(dim_coord, 0)],
aux_coords_and_dims=[(aux_coord, 0)],
)
cube = cube.collapsed('time', iris.analysis.MEAN)
# Adding a print() somehow fixes this issue
# print(cube)
# Saving this cube gives the error
filename = os.path.expanduser('~/test_iris_32.nc')
iris.save(cube, filename)Expected behaviour
No error, similar to iris=3.1.0.
Environment
- OS & Version: openSUSE Tumbleweed 20220221; Red Hat Enterprise Linux Server release 6.10
- Iris Version:
3.2.0.post0
Additional context
Full traceback
Traceback (most recent call last):
File "/home/manuel/Tresorit/DLR/scripts/iris/iris32bug.py", line 31, in <module>
iris.save(cube, filename)
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/iris/io/__init__.py", line 436, in save
saver(source, target, **kwargs)
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/iris/fileformats/netcdf.py", line 3167, in save
sman.write(
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/iris/fileformats/netcdf.py", line 1242, in write
self._add_aux_coords(cube, cf_var_cube, cube_dimensions)
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/iris/fileformats/netcdf.py", line 1569, in _add_aux_coords
return self._add_inner_related_vars(
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/iris/fileformats/netcdf.py", line 1534, in _add_inner_related_vars
cf_name = self._create_generic_cf_array_var(
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/iris/fileformats/netcdf.py", line 2407, in _create_generic_cf_array_var
self._create_cf_bounds(element, cf_var, cf_name)
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/iris/fileformats/netcdf.py", line 2069, in _create_cf_bounds
self._lazy_stream_data(
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/iris/fileformats/netcdf.py", line 2899, in _lazy_stream_data
is_masked, contains_fill_value = store(
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/iris/fileformats/netcdf.py", line 2874, in store
da.store([data], [target])
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/dask/array/core.py", line 1163, in store
compute_as_if_collection(Array, store_dsk, map_keys, **kwargs)
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/dask/base.py", line 317, in compute_as_if_collection
return schedule(dsk2, keys, **kwargs)
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/dask/threaded.py", line 81, in get
results = get_async(
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/dask/local.py", line 506, in get_async
raise_exception(exc, tb)
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/dask/local.py", line 314, in reraise
raise exc
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/dask/local.py", line 219, in execute_task
result = _execute_task(task, data)
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/dask/core.py", line 119, in _execute_task
return func(*(_execute_task(a, cache) for a in args))
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/dask/array/core.py", line 4164, in store_chunk
return load_store_chunk(x, out, index, lock, return_stored, False)
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/dask/array/core.py", line 4151, in load_store_chunk
out[index] = x
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/iris/fileformats/netcdf.py", line 972, in __setitem__
self.target[keys] = arr
File "src/netCDF4/_netCDF4.pyx", line 4903, in netCDF4._netCDF4.Variable.__setitem__
File "/home/manuel/mambaforge/envs/xxx/lib/python3.10/site-packages/netCDF4/utils.py", line 335, in _StartCountStride
raise ValueError("slicing expression exceeds the number of dimensions of the variable")
ValueError: slicing expression exceeds the number of dimensions of the variable