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/pull/2778#issuecomment-470249595,https://api.github.com/repos/pydata/xarray/issues/2778,470249595,MDEyOklzc3VlQ29tbWVudDQ3MDI0OTU5NQ==,6815844,2019-03-06T19:47:39Z,2019-03-06T19:47:39Z,MEMBER,Thanks for the follow up pr. Merging.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,412078232 https://github.com/pydata/xarray/pull/2778#issuecomment-470248465,https://api.github.com/repos/pydata/xarray/issues/2778,470248465,MDEyOklzc3VlQ29tbWVudDQ3MDI0ODQ2NQ==,14314623,2019-03-06T19:44:24Z,2019-03-06T19:44:43Z,CONTRIBUTOR,"Oh yeah, that seems totally fair to me. Thanks for clarifying. Cant wait to have this functionality! Thanks @spencerkclark ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,412078232 https://github.com/pydata/xarray/pull/2778#issuecomment-470240931,https://api.github.com/repos/pydata/xarray/issues/2778,470240931,MDEyOklzc3VlQ29tbWVudDQ3MDI0MDkzMQ==,6628425,2019-03-06T19:22:54Z,2019-03-06T19:23:27Z,MEMBER,"Oh, I should have been a little clearer! > For now I've held off on making these changes dask-compatible (I could do it, but I'm not sure it is worth the extra complexity) This comment only applies to the changes regarding `duck_array_ops.mean`, which is used by default on the coordinates involved in `coarsen`. Since indexes are always loaded into memory, i.e. backed by NumPy arrays, we don't really need to worry about dask-compatibility there. In other words with this PR a DataArray can hold dask array data indexed by a cftime time coordinate, and `coarsen` will work just fine: ``` In [1]: import xarray as xr In [2]: import numpy as np In [3]: data = np.random.random((10, 5)) In [4]: times = xr.cftime_range('2000', periods=10) In [5]: da = xr.DataArray(data, coords={'time': times}, dims=['time', 'x']) In [6]: da = da.chunk({'time': 1, 'x': 1}) In [7]: da Out[7]: dask.array Coordinates: * time (time) object 2000-01-01 00:00:00 ... 2000-01-10 00:00:00 Dimensions without coordinates: x In [8]: da.coarsen(time=2).mean() Out[8]: dask.array Coordinates: * time (time) object 2000-01-01 12:00:00 ... 2000-01-09 12:00:00 Dimensions without coordinates: x ``` This would only come up as a possible issue if you tried to lazily take the mean of a DataArray of cftime objects, e.g.: ``` In [9]: da = xr.DataArray(times, dims=['t']).chunk() In [10]: da Out[10]: dask.array Coordinates: * t (t) object 2000-01-01 00:00:00 ... 2000-01-10 00:00:00 In [11]: da.mean() --------------------------------------------------------------------------- NotImplementedError Traceback (most recent call last) in ----> 1 da.mean() ~/xarray-dev/xarray/xarray/core/common.py in wrapped_func(self, dim, axis, skipna, **kwargs) 23 **kwargs): 24 return self.reduce(func, dim, axis, ---> 25 skipna=skipna, allow_lazy=True, **kwargs) 26 else: 27 def wrapped_func(self, dim=None, axis=None, # type: ignore ~/xarray-dev/xarray/xarray/core/dataarray.py in reduce(self, func, dim, axis, keep_attrs, **kwargs) 1603 """""" 1604 -> 1605 var = self.variable.reduce(func, dim, axis, keep_attrs, **kwargs) 1606 return self._replace_maybe_drop_dims(var) 1607 ~/xarray-dev/xarray/xarray/core/variable.py in reduce(self, func, dim, axis, keep_attrs, allow_lazy, **kwargs) 1366 data = func(input_data, axis=axis, **kwargs) 1367 else: -> 1368 data = func(input_data, **kwargs) 1369 1370 if getattr(data, 'shape', ()) == self.shape: ~/xarray-dev/xarray/xarray/core/duck_array_ops.py in mean(array, axis, skipna, **kwargs) 348 if isinstance(array, dask_array_type): 349 raise NotImplementedError( --> 350 'Computing the mean of an array containing ' 351 'cftime.datetime objects is not yet implemented on ' 352 'dask arrays.') NotImplementedError: Computing the mean of an array containing cftime.datetime objects is not yet implemented on dask arrays. ``` but I think that's a pretty rare use case, hence why I've held off on adding that support for now.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,412078232 https://github.com/pydata/xarray/pull/2778#issuecomment-470226713,https://api.github.com/repos/pydata/xarray/issues/2778,470226713,MDEyOklzc3VlQ29tbWVudDQ3MDIyNjcxMw==,14314623,2019-03-06T18:45:16Z,2019-03-06T18:45:16Z,CONTRIBUTOR,"Oh sweet, I just encountered this problem. Would this work on a large dask array with a non-dask time dimension?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,412078232