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 1609090149,I_kwDOAMm_X85f6MRl,7584,`np.multiply` and `dask.array.multiply` trigger graph computation vs using `+` and `*` operators.,44142765,closed,0,,,3,2023-03-03T18:37:06Z,2023-11-06T08:45:55Z,2023-11-06T08:45:54Z,NONE,,,,"### What is your issue? I was trying to implement a simple weighted average function using a few `xr.DataArray` objects via ```python def weighted_avg(args, weights): return np.multiply(args, weights).sum() / sum(weights) ``` To my surprise a call to to this function causes the graph to be computed as I had to wait for quite a bit given the size of the DataArray's. I realised that the graph was being computed. Even replacing `np.multiply` with `dask.array.multiply` did not make a difference. So I decided to implement the function using built-in operators like ```python def weighted_avg(args, weights): import operator as op return sum(map(op.mul, args, weights)) / sum(weights) ``` and to my surprise this implementation returns immediately suggesting that the graph computation is delayed. Is this expected behaviour? I thought numpy/dask array functions lazily evaluate so this seems odd to me. ","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/7584/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue 1652227927,I_kwDOAMm_X85iev9X,7713,`Variable/IndexVariable` do not accept a tuple for data.,44142765,closed,0,,,4,2023-04-03T14:50:58Z,2023-04-28T14:26:37Z,2023-04-28T14:26:37Z,NONE,,,,"### What happened? It appears that `Variable` and `IndexVariable` do not accept a tuple for the `data` parameter even though the docstring suggests it should be able to accept `array_like` objects (tuple falls under this type of object, right?). ### What did you expect to happen? Successful instantiation of a `Variable/IndexVariable` object, but instead a `ValueError` exception is raised. ### Minimal Complete Verifiable Example ```Python import xarray as xr xr.Variable(data=(2, 3, 45), dims=""day"") ``` ### MVCE confirmation - [X] Minimal example — the example is as focused as reasonably possible to demonstrate the underlying issue in xarray. - [X] Complete example — the example is self-contained, including all data and the text of any traceback. - [X] Verifiable example — the example copy & pastes into an IPython prompt or [Binder notebook](https://mybinder.org/v2/gh/pydata/xarray/main?urlpath=lab/tree/doc/examples/blank_template.ipynb), returning the result. - [x] New issue — a search of GitHub Issues suggests this is not a duplicate. ### Relevant log output ```Python ValueError: dimensions ('day',) must have the same length as the number of data dimensions, ndim=0 ``` ### Anything else we need to know? This error seems to be triggered by the `self._parse_dimensions(dims)` call inside the `Variable` class. This problem does not happen if I use a list. But I find it strange that the `array_like` data specifically needs to be a certain type of object for the call to work. Maybe if it _has_ to be a list then the docstring should reflect that. ### Environment
``` INSTALLED VERSIONS ------------------ commit: None python: 3.8.16 | packaged by conda-forge | (default, Feb 1 2023, 16:01:55) [GCC 11.3.0] python-bits: 64 OS: Linux OS-release: 6.1.21-1-lts machine: x86_64 processor: byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: ('en_US', 'UTF-8') libhdf5: 1.12.2 libnetcdf: 4.8.1 xarray: 2023.1.0 pandas: 1.5.3 numpy: 1.23.5 scipy: 1.10.1 netCDF4: 1.6.2 pydap: None h5netcdf: 1.1.0 h5py: 3.8.0 Nio: None zarr: 2.14.2 cftime: 1.6.2 nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: None dask: 2023.3.2 distributed: 2023.3.2 matplotlib: None cartopy: None seaborn: None numbagg: None fsspec: 2023.3.0 cupy: None pint: None sparse: 0.14.0 flox: None numpy_groupies: None setuptools: 67.6.1 pip: 23.0.1 conda: None pytest: 7.2.2 mypy: 1.1.1 IPython: 8.12.0 sphinx: None ```
","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/7713/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue 1175517164,I_kwDOAMm_X85GEPfs,6395,two Dataset objects reference the same numpy array memory block upon creation.,44142765,closed,0,,,3,2022-03-21T15:03:20Z,2022-03-22T11:52:31Z,2022-03-21T15:55:08Z,NONE,,,,"### What happened? I tried creating two new `Dataset` objects using empty numpy arrays that I would later populate with values using integer indexing. To my surprise, I got output that was identical to for both datasets. After digging around, I discovered that the underlying numpy arrays of the two `Dataset` objects were identical. This confused me because I did not make a copy of one to create the other. ### What did you expect to happen? Getting two separate objects with non-identical memory addresses for the numpy arrays they contain. ### Minimal Complete Verifiable Example ```Python import xarray as xr import pandas as pd import numpy as np def xarray_dataset(): rng = np.random.default_rng(0) data_map = { ""Tmin"": rng.uniform(-1, 1, size=(3, 2, 2)), ""Tmax"": rng.uniform(-1, 1, size=(3, 2, 2)), } lon = [-99.83, -99.32] lat = [42.25, 42.21] time = pd.date_range(""2014-09-06"", ""2016-09-06"", periods=3) var_map = {""time"": time, ""lat"": lat, ""lon"": lon} out_map = {name: (tuple(var_map), data_map[name]) for name in data_map} return xr.Dataset(data_vars=out_map, coords=var_map) base = xarray_dataset() dims = tuple(base.dims) base_shape = (base.time.size, base.lat.size, base.lon.size) var_map = {var: (dims, np.empty(base_shape)) for var in (""var_a"", ""var_b"")} coord_map = { ""time"": ((""time"",), base.time.values), ""lon"": ((""lon"",), base.lon.values), ""lat"": ((""lat"",), base.lat.values), } out1 = xr.Dataset(var_map, coords=coord_map) out2 = xr.Dataset(var_map, coords=coord_map) print(out1 is out2) # False print(out1.var_a.values is out2.var_a.values) # True......but HOW?! ``` ### Relevant log output ```Python print(out1 is out2) # False print(out1.var_a.values is out2.var_a.values) # True......but HOW?! ``` ### Anything else we need to know? It seems as though changing the lines: ```python out1 = xr.Dataset(var_map, coords=coord_map) out2 = xr.Dataset(var_map, coords=coord_map) ``` to ```python out1 = xr.Dataset(var_map, coords=coord_map) out2 = out1.copy(deep=True) ``` fixes the issue. ### Environment ``` INSTALLED VERSIONS ------------------ commit: None python: 3.9.7 (default, Sep 16 2021, 13:09:58) [GCC 7.5.0] python-bits: 64 OS: Linux OS-release: 5.15.25-1-lts machine: x86_64 processor: byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: ('en_US', 'UTF-8') libhdf5: 1.12.0 libnetcdf: 4.7.4 xarray: 0.21.1 pandas: 1.1.5 numpy: 1.22.0 scipy: 1.6.2 netCDF4: 1.5.8 pydap: None h5netcdf: None h5py: 3.6.0 Nio: None zarr: 2.10.3 cftime: 1.5.1.1 nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: None dask: None distributed: None matplotlib: 3.5.1 cartopy: None seaborn: None numbagg: None fsspec: 2022.01.0 cupy: None pint: None sparse: None setuptools: 60.0.4 pip: 21.3.1 conda: 4.11.0 pytest: 6.2.5 IPython: 8.0.1 sphinx: 4.4.0 ```","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/6395/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue