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/4120#issuecomment-689770846,https://api.github.com/repos/pydata/xarray/issues/4120,689770846,MDEyOklzc3VlQ29tbWVudDY4OTc3MDg0Ng==,5635139,2020-09-09T19:30:42Z,2020-09-09T19:30:42Z,MEMBER,"> Also, I think `_replace` is a bit confusing: the name seems to imply a inplace operation, but it returns a new object without changing the original object.
I think this mea culpa IIRC... I would be very open to consolidating this and `.copy` into something that returns a (generally shallow) copy of the object with some optional replacements. (The general approach is better than calling a constructor with every attribute, even if the names are not great)
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936
https://github.com/pydata/xarray/issues/4120#issuecomment-678425306,https://api.github.com/repos/pydata/xarray/issues/4120,678425306,MDEyOklzc3VlQ29tbWVudDY3ODQyNTMwNg==,14808389,2020-08-21T18:20:28Z,2020-08-21T18:20:28Z,MEMBER,"I just checked, and I think the issue can indeed be solved by replacing `variable = self` with `variable = self.copy()` (`deep=False` is the default, so no need to explicitly set it).
Also, I think `_replace` is a bit confusing: the name seems to imply a inplace operation, but it returns a new object without changing the original object.","{""total_count"": 2, ""+1"": 2, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936
https://github.com/pydata/xarray/issues/4120#issuecomment-678072493,https://api.github.com/repos/pydata/xarray/issues/4120,678072493,MDEyOklzc3VlQ29tbWVudDY3ODA3MjQ5Mw==,6815844,2020-08-21T06:42:45Z,2020-08-21T06:42:45Z,MEMBER,"My last post was wrong.
I think this part overwrites the attrs,
https://github.com/pydata/xarray/blob/43a2a4bdf3a492d89aae9f2c5b0867932ff51cef/xarray/core/variable.py#L2028
https://github.com/pydata/xarray/blob/43a2a4bdf3a492d89aae9f2c5b0867932ff51cef/xarray/core/variable.py#L2073-L2076
The first line should be replaced by `variable = self.copy(deep=False)`
","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936
https://github.com/pydata/xarray/issues/4120#issuecomment-677945186,https://api.github.com/repos/pydata/xarray/issues/4120,677945186,MDEyOklzc3VlQ29tbWVudDY3Nzk0NTE4Ng==,6815844,2020-08-20T22:51:21Z,2020-08-21T06:37:33Z,MEMBER,"~~These lines are suspicious.
Maybe we should copy `attrs` here not geting its reference.~~
https://github.com/pydata/xarray/blob/43a2a4bdf3a492d89aae9f2c5b0867932ff51cef/xarray/core/rolling.py#L498
https://github.com/pydata/xarray/blob/43a2a4bdf3a492d89aae9f2c5b0867932ff51cef/xarray/core/rolling.py#L498","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936
https://github.com/pydata/xarray/issues/4120#issuecomment-677939698,https://api.github.com/repos/pydata/xarray/issues/4120,677939698,MDEyOklzc3VlQ29tbWVudDY3NzkzOTY5OA==,46687291,2020-08-20T22:32:01Z,2020-08-20T22:53:14Z,CONTRIBUTOR,"My doubts on this are because self._replace are used elsewhere in the code.
Changing from `_replace` to `copy` causes the tests on coarsen to fail, I am looking more into this now.
------------------
It seems that a condition of copy is that the data shapes match (variable.py line 947).
If I run
```
ds = xr.tutorial.load_dataset(""air_temperature"")
ds.air.coarsen(lat=5)
```
there is no problem, but once I add a `.mean()` to the end
```
ds = xr.tutorial.load_dataset(""air_temperature"")
ds.air.coarsen(lat=5).mean()
```
The error is
```
ValueError: Data shape (2920, 5, 53) must match shape of object (2920, 25, 53)
```","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936
https://github.com/pydata/xarray/issues/4120#issuecomment-677931591,https://api.github.com/repos/pydata/xarray/issues/4120,677931591,MDEyOklzc3VlQ29tbWVudDY3NzkzMTU5MQ==,2448579,2020-08-20T22:08:01Z,2020-08-20T22:08:48Z,MEMBER,"~I think you are right. `_replace` calls the constructor with `self.variable, ..., fastpath=True` which does a direct assignment to `DataArray._variable`; so you have a new DataArray but with the same underlying data.~
EDIT: Ignore I was looking at dataarray.py; not variable.py","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936
https://github.com/pydata/xarray/issues/4120#issuecomment-677929143,https://api.github.com/repos/pydata/xarray/issues/4120,677929143,MDEyOklzc3VlQ29tbWVudDY3NzkyOTE0Mw==,14808389,2020-08-20T22:01:37Z,2020-08-20T22:01:37Z,MEMBER,"That could be the issue. If it is, you should be able to fix that using
```python
return self.copy(data=func(reshaped, axis=axes, **kwargs))
```","{""total_count"": 2, ""+1"": 2, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936
https://github.com/pydata/xarray/issues/4120#issuecomment-677926857,https://api.github.com/repos/pydata/xarray/issues/4120,677926857,MDEyOklzc3VlQ29tbWVudDY3NzkyNjg1Nw==,46687291,2020-08-20T21:56:07Z,2020-08-20T21:59:48Z,CONTRIBUTOR,"@dcherian Could this be because the return of `variable.py/coarsen` or is it likely happening earlier in the fx?
```
return self._replace(data=func(reshaped, axis=axes, **kwargs))
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936
https://github.com/pydata/xarray/issues/4120#issuecomment-673869137,https://api.github.com/repos/pydata/xarray/issues/4120,673869137,MDEyOklzc3VlQ29tbWVudDY3Mzg2OTEzNw==,11411331,2020-08-14T03:55:32Z,2020-08-14T03:55:32Z,CONTRIBUTOR,Yeah. That's true. I did overlook that. Thanks!,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936
https://github.com/pydata/xarray/issues/4120#issuecomment-673761464,https://api.github.com/repos/pydata/xarray/issues/4120,673761464,MDEyOklzc3VlQ29tbWVudDY3Mzc2MTQ2NA==,2448579,2020-08-13T23:38:18Z,2020-08-13T23:38:18Z,MEMBER,"Thanks @kmpaul
These are two issues. But the third one is that the _original_ dataset `ds` is being modified inplace by `ds.coarsen`. This should never happen.","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936
https://github.com/pydata/xarray/issues/4120#issuecomment-673748046,https://api.github.com/repos/pydata/xarray/issues/4120,673748046,MDEyOklzc3VlQ29tbWVudDY3Mzc0ODA0Ng==,11411331,2020-08-13T22:50:48Z,2020-08-13T22:50:48Z,CONTRIBUTOR,"Also, while I was walking through the logic in this problem, I found that in the `_reduce_method` functions of the `DataArrayCoarsen` and `DatasetCoarsen` classes, the `kwargs` variable is being shadowed:
https://github.com/pydata/xarray/blob/df7b2eae3a26c1e86bd5f1dd7dab9cc8c4e53914/xarray/core/rolling.py#L692-L701
So, you can see that the `skipna` option is just being ignored. That's another pretty easy fix, but it will change existing behavior. It might be prudent to look to see if there are any known bug reports referencing the `skipna` parameter being ignored.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936
https://github.com/pydata/xarray/issues/4120#issuecomment-673746511,https://api.github.com/repos/pydata/xarray/issues/4120,673746511,MDEyOklzc3VlQ29tbWVudDY3Mzc0NjUxMQ==,11411331,2020-08-13T22:45:40Z,2020-08-13T22:45:40Z,CONTRIBUTOR,"@dcherian @jukent: After a little walk through the code, I think the problem is in `xarray/core/variable.py`. If you look at the first part of the `coarsen` function in this file:
https://github.com/pydata/xarray/blob/df7b2eae3a26c1e86bd5f1dd7dab9cc8c4e53914/xarray/core/variable.py#L1945-L1953
you will see that `**kwargs` is *not* being pass into the `_coarsen_reshape` function:
https://github.com/pydata/xarray/blob/df7b2eae3a26c1e86bd5f1dd7dab9cc8c4e53914/xarray/core/variable.py#L1961
And down at the bottom of that function:
https://github.com/pydata/xarray/blob/df7b2eae3a26c1e86bd5f1dd7dab9cc8c4e53914/xarray/core/variable.py#L2024-L2025
it retrieves the `keep_attrs` parameter from *global options*, and doesn't check for a passed-in argument.
@jukent, why don't you draft a PR to fix this problem?","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936
https://github.com/pydata/xarray/issues/4120#issuecomment-673729936,https://api.github.com/repos/pydata/xarray/issues/4120,673729936,MDEyOklzc3VlQ29tbWVudDY3MzcyOTkzNg==,11411331,2020-08-13T21:56:14Z,2020-08-13T21:56:46Z,CONTRIBUTOR,"After some testing, I discovered that:
```python
# Your code here
import xarray as xr
xr.set_options(keep_attrs=True) # NOTE GLOBAL OPTION!!!!
ds = xr.tutorial.load_dataset(""air_temperature"")
ds2 = xr.tutorial.load_dataset(""air_temperature"")
xr.testing.assert_identical(ds, ds2) # passes
ds.coarsen(lat=5).mean()
xr.testing.assert_identical(ds, ds2) # passes
```
makes your example pass. So, it seems that somewhere along the chain of functions the `keep_attrs` parameter is being lost or modified.","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,630062936