Raise nicer error if passing a list of dimension names to transpose
See original GitHub issueWhat happened?
Hello,
in xarray 0.20.1, I am getting the following error
ds = xr.Dataset({"foo": (("x", "y", "z"), [[[42]]]), "bar": (("y", "z"), [[24]])})
ds.transpose("y", "z", "x")
868 """Depending on the setting of missing_dims, drop any dimensions from supplied_dims that
869 are not present in dims.
870
(...)
875 missing_dims : {"raise", "warn", "ignore"}
876 """
878 if missing_dims == "raise":
--> 879 supplied_dims_set = {val for val in supplied_dims if val is not ...}
880 invalid = supplied_dims_set - set(dims)
881 if invalid:
TypeError: unhashable type: 'list'
What did you expect to happen?
The expected result is
ds.transpose("y", "z", "x")
<xarray.Dataset>
Dimensions: (x: 1, y: 1, z: 1)
Dimensions without coordinates: x, y, z
Data variables:
foo (y, z, x) int64 42
bar (y, z) int64 24
Minimal Complete Verifiable Example
No response
Relevant log output
No response
Anything else we need to know?
No response
Environment
INSTALLED VERSIONS
commit: None python: 3.9.12 (main, Apr 5 2022, 06:56:58) [GCC 7.5.0] python-bits: 64 OS: Linux OS-release: 3.10.0-1160.42.2.el7.x86_64 machine: x86_64 processor: x86_64 byteorder: little LC_ALL: None LANG: en_US LOCALE: (‘en_US’, ‘ISO8859-1’) libhdf5: 1.12.1 libnetcdf: 4.8.1
xarray: 0.20.1 pandas: 1.4.1 numpy: 1.21.5 scipy: 1.8.0 netCDF4: 1.5.7 pydap: None h5netcdf: 999 h5py: 3.6.0 Nio: None zarr: None cftime: 1.5.1.1 nc_time_axis: 1.4.0 PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: 1.3.4 dask: 2022.02.1 distributed: 2022.2.1 matplotlib: 3.5.1 cartopy: 0.18.0 seaborn: 0.11.2 numbagg: None fsspec: 2022.02.0 cupy: None pint: 0.18 sparse: 0.13.0 setuptools: 61.2.0 pip: 21.2.4 conda: None pytest: None IPython: 8.2.0 sphinx: None
Issue Analytics
- State:
- Created a year ago
- Comments:5 (3 by maintainers)
I think we should raise a nicer error message. Transpose is an outlier in our API. In nearly every other function, you are expected to pass a list of dimension names.
Oh… I am so sorry about this. This works as expected now. It’s weird that using list seemed to have worked at some point. Thanks a lot for your help