html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue
https://github.com/pydata/xarray/issues/6149#issuecomment-1076832515,https://api.github.com/repos/pydata/xarray/issues/6149,1076832515,IC_kwDOAMm_X85ALykD,25624127,2022-03-23T21:21:28Z,2022-03-23T21:21:28Z,CONTRIBUTOR,"I was able to isolate the parts of my code that causes this `numpy` warning to be thrown.
Here's how the warning was thrown:
1. Chunk a Dataset using Dask
2. Calculate length of time by subtracting the upper and lower bounds of each time coordinate (`dtype` is `datetime64[ns]`). This produces a DataArray with a `dtype` of `timedelta64[ns]`.
3. Calculate the weights using xarray's grouped arithmetic.
4. `numpy` warning is thrown after xarray's `groupby.sum()` call
- https://github.com/numpy/numpy/blob/c63f2c2bab48e0446b34f3bba5574729327d68d1/numpy/core/fromnumeric.py#L86
**My workaround is to convert the `dtype` of the underlying `dask.array` from `timedelta[64]` to `float64` before performing the grouped arithmetic.** I'm still unclear as to why this only affects `dask.array` though.
Related code:
```
def _get_weights(self, data_var: xr.DataArray) -> xr.DataArray:
""""""Calculates weights for a data variable using time bounds.""""""
with xr.set_options(keep_attrs=True):
time_lengths: xr.DataArray = self._time_bounds[:, 1] - self._time_bounds[:, 0]
# Must be convert dtype from timedelta64[ns] to float64, specifically
# when chunking DataArrays using Dask. Otherwise, the numpy warning
# below is thrown: `DeprecationWarning: The `dtype` and `signature`
# arguments to ufuncs only select the general DType and not details such
# as the byte order or time unit (with rare exceptions see release
# notes). To avoid this warning please use the scalar types
# `np.float64`, or string notation.`
time_lengths = time_lengths.astype(np.float64)
time_grouped = self._groupby_multiindex(time_lengths)
weights: xr.DataArray = time_grouped / time_grouped.sum() # type: ignore
self._validate_weights(data_var, weights)
return weights
def _groupby_multiindex(self, data_var: xr.DataArray) -> DataArrayGroupBy:
""""""Adds the MultiIndex to the data variable and groups by it.""""""
dv = data_var.copy()
dv.coords[self._multiindex_name] = (""time"", self._multiindex)
dv_gb = dv.groupby(self._multiindex_name)
return dv_gb
```
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1098241812