id,node_id,number,title,user,state,locked,assignee,milestone,comments,created_at,updated_at,closed_at,author_association,active_lock_reason,draft,pull_request,body,reactions,performed_via_github_app,state_reason,repo,type 692106936,MDU6SXNzdWU2OTIxMDY5MzY=,4404,Documentation on tuple-type data in DataArrays,11411331,open,0,,,2,2020-09-03T16:18:04Z,2020-12-07T19:07:01Z,,CONTRIBUTOR,,,,"### The Problem: When you try to construct an `xarray.DataArray` with `tuple`-type data, it will fail with the following error: ```python >>> xr.DataArray((7,9,3), coords=[[1,2,3]], dims=['i']) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) in ----> 1 xr.DataArray((7,9,3), coords=[[1,2,3]], dims=['i']) ~/Software/miniconda3/envs/pangeo/lib/python3.8/site-packages/xarray/core/dataarray.py in __init__(self, data, coords, dims, name, attrs, indexes, fastpath) 341 data = _check_data_shape(data, coords, dims) 342 data = as_compatible_data(data) --> 343 coords, dims = _infer_coords_and_dims(data.shape, coords, dims) 344 variable = Variable(dims, data, attrs, fastpath=True) 345 indexes = dict( ~/Software/miniconda3/envs/pangeo/lib/python3.8/site-packages/xarray/core/dataarray.py in _infer_coords_and_dims(shape, coords, dims) 92 and len(coords) != len(shape) 93 ): ---> 94 raise ValueError( 95 ""coords is not dict-like, but it has %s items, "" 96 ""which does not match the %s dimensions of the "" ValueError: coords is not dict-like, but it has 1 items, which does not match the 0 dimensions of the data ``` This error message is not helpful, nor does it direct the user to the solution to their problem (which is to just convert the `tuple` to a `list`). This is the first part of the problem. If the user were to learn that the reason this happened was because `tuple`-type data is handled specially in `xarray.core.variable.as_compatible_data` and returned as a 0D NumPy array, they would still be confused because the documentation states: > The DataArray constructor takes: > > - `data`: a multi-dimensional array of values (e.g., a numpy ndarray, Series, DataFrame or pandas.Panel) suggesting that a `list` might not even be a valid type for `data`. So, upon further investigation, one finds that the `xarray.DataArray.__init__` docstring says: ```text Parameters ---------- data : array_like Values for this array. Must be an ``numpy.ndarray``, ndarray like, or castable to an ``ndarray``. If a self-described xarray or pandas object, attempts are made to use this array's metadata to fill in other unspecified arguments. A view of the array's data is used instead of a copy if possible. ``` which states that `data` must be *castable* to an `ndarray`. There are many ways of doing this, but a quick check shows that `numpy.asarray((1,2,3))` and `numpy.array((1,2,3))` both behave as you would expect. Thus, this confusion is the second part of the problem. ### Acceptable Solutions: 1. I am not sure why `tuple`-type data are treated differently with `xarray`. I'd like to know why because I think the *easiest* solution to this problem would be to remove that special treatment from `xarray.core.variable.as_compatible_data`. But I am sure this special treatment was written for a good reason, so I won't suggest that solution unless other developers genuinely believe that this feature can be removed. 2. Assuming special treatment of `tuple`-type data is desirable, then I would propose that the documentation be improved to indicate to users what to expect. I think the documentation lacks an explanation of the `tuple`-type special treatment (and, perhaps, other special treatments?) and the docstrings need to be made consistent with the documentation.","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/4404/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,issue