Skip to content

Allow an ellipsis in stack? #3814

Closed
Closed
@max-sixty

Description

@max-sixty

Could we add the ability to use an ellipsis to represent all dims in more places? For example, stack:

MCVE Code Sample

In [14]: data = np.arange(15, 301, 15).reshape(2, 10)  
    ...: da = xr.DataArray(data, dims=('y', 'x'), attrs={'test': 'test'})  
    ...:                                                                                                                                                            

In [15]: da.stack(z=['x','y'])                                                                                                                                      
Out[15]: 
<xarray.DataArray (z: 20)>
array([ 15, 165,  30, 180,  45, 195,  60, 210,  75, 225,  90, 240, 105,
       255, 120, 270, 135, 285, 150, 300])
Coordinates:
  * z        (z) MultiIndex
  - x        (z) int64 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
  - y        (z) int64 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Attributes:
    test:     test

In [16]: da.stack(z=[...])                                                                                                                                          
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-16-a92d0ffe931a> in <module>
----> 1 da.stack(z=[...])

~/workspace/./.venv/lib64/python3.6/site-packages/xarray/core/dataarray.py in stack(self, dimensions, **dimensions_kwargs)
   1739         DataArray.unstack
   1740         """
-> 1741         ds = self._to_temp_dataset().stack(dimensions, **dimensions_kwargs)
   1742         return self._from_temp_dataset(ds)
   1743 

~/workspace/./.venv/lib64/python3.6/site-packages/xarray/core/dataset.py in stack(self, dimensions, **dimensions_kwargs)
   3291         result = self
   3292         for new_dim, dims in dimensions.items():
-> 3293             result = result._stack_once(dims, new_dim)
   3294         return result
   3295 

~/workspace/./.venv/lib64/python3.6/site-packages/xarray/core/dataset.py in _stack_once(self, dims, new_dim)
   3246 
   3247         # consider dropping levels that are unused?
-> 3248         levels = [self.get_index(dim) for dim in dims]
   3249         idx = utils.multiindex_from_product_levels(levels, names=dims)
   3250         variables[new_dim] = IndexVariable(new_dim, idx)

~/workspace/./.venv/lib64/python3.6/site-packages/xarray/core/dataset.py in <listcomp>(.0)
   3246 
   3247         # consider dropping levels that are unused?
-> 3248         levels = [self.get_index(dim) for dim in dims]
   3249         idx = utils.multiindex_from_product_levels(levels, names=dims)
   3250         variables[new_dim] = IndexVariable(new_dim, idx)

~/workspace/./.venv/lib64/python3.6/site-packages/xarray/core/common.py in get_index(self, key)
    378         """
    379         if key not in self.dims:
--> 380             raise KeyError(key)
    381 
    382         try:

KeyError: Ellipsis

Expected Output

Identical between ... and listing all dimensions

Output of xr.show_versions()

INSTALLED VERSIONS ------------------ commit: None python: 3.6.8 (default, Aug 7 2019, 17:28:10) python-bits: 64 OS: Linux machine: x86_64 processor: x86_64 byteorder: little LC_ALL: None LANG: en_US.utf8 LOCALE: en_US.UTF-8 libhdf5: 1.10.4 libnetcdf: None

xarray: 0.15.0
pandas: 0.25.3
numpy: 1.18.1
scipy: 1.4.1
netCDF4: None
pydap: None
h5netcdf: None
h5py: 2.10.0
Nio: None
zarr: None
cftime: None
nc_time_axis: None
PseudoNetCDF: None
rasterio: None
cfgrib: None
iris: None
bottleneck: 1.3.2
dask: 2.11.0
distributed: None
matplotlib: 3.1.2
cartopy: None
seaborn: 0.10.0
numbagg: None
setuptools: 45.0.0
pip: 20.0.2
conda: None
pytest: 5.3.2
IPython: 7.12.0
sphinx: 2.3.1

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions