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/1763#issuecomment-350292555,https://api.github.com/repos/pydata/xarray/issues/1763,350292555,MDEyOklzc3VlQ29tbWVudDM1MDI5MjU1NQ==,1554921,2017-12-08T15:34:01Z,2017-12-08T15:34:01Z,CONTRIBUTOR,"I think I've duplicated the logic from `_construct_dataarray` into `_encode_coordinates`. Test cases are passing, and my actual files are writing out properly. Hopefully nothing else got broken along the way.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,279832457
https://github.com/pydata/xarray/issues/1763#issuecomment-350015214,https://api.github.com/repos/pydata/xarray/issues/1763,350015214,MDEyOklzc3VlQ29tbWVudDM1MDAxNTIxNA==,1554921,2017-12-07T16:11:55Z,2017-12-07T16:11:55Z,CONTRIBUTOR,"I can try putting together a pull request, hopefully without breaking any existing use cases. I just tested switching the _any_ condition to _all_ in the above code, and it does fix my one test case...
..._However_, it breaks other cases, such as if there's another axis in the data (such as a time axis). I think the _all_ condition would require ""time"" to be one of the dimensions of the coordinates.
Here's an updated test case:
```python
import xarray as xr
import numpy as np
zeros1 = np.zeros((1,5,3))
zeros2 = np.zeros((1,6,3))
zeros3 = np.zeros((1,5,4))
d = xr.Dataset({
'lon1': (['x1','y1'], zeros1.squeeze(0), {}),
'lon2': (['x2','y1'], zeros2.squeeze(0), {}),
'lon3': (['x1','y2'], zeros3.squeeze(0), {}),
'lat1': (['x1','y1'], zeros1.squeeze(0), {}),
'lat2': (['x2','y1'], zeros2.squeeze(0), {}),
'lat3': (['x1','y2'], zeros3.squeeze(0), {}),
'foo1': (['time','x1','y1'], zeros1, {'coordinates': 'lon1 lat1'}),
'foo2': (['time','x2','y1'], zeros2, {'coordinates': 'lon2 lat2'}),
'foo3': (['time','x1','y2'], zeros3, {'coordinates': 'lon3 lat3'}),
'time': ('time', [0.], {'units': 'hours since 2017-01-01'}),
})
d = xr.conventions.decode_cf(d)
```
The resulting Dataset:
```
Dimensions: (time: 1, x1: 5, x2: 6, y1: 3, y2: 4)
Coordinates:
lat1 (x1, y1) float64 ...
* time (time) datetime64[ns] 2017-01-01
lat3 (x1, y2) float64 ...
lat2 (x2, y1) float64 ...
lon1 (x1, y1) float64 ...
lon3 (x1, y2) float64 ...
lon2 (x2, y1) float64 ...
Dimensions without coordinates: x1, x2, y1, y2
Data variables:
foo1 (time, x1, y1) float64 ...
foo2 (time, x2, y1) float64 ...
foo3 (time, x1, y2) float64 ...
```
saved to netCDF using
```python
d.to_netcdf(""test.nc"")
```
With the _any_ condition, I have too many coordinates:
```
~$ ncdump -h test.nc
netcdf test {
dimensions:
x1 = 5 ;
y1 = 3 ;
time = 1 ;
y2 = 4 ;
x2 = 6 ;
variables:
...
double foo1(time, x1, y1) ;
foo1:_FillValue = NaN ;
foo1:coordinates = ""lat1 lat3 lat2 lon1 lon3 lon2"" ;
double foo2(time, x2, y1) ;
foo2:_FillValue = NaN ;
foo2:coordinates = ""lon1 lon2 lat1 lat2"" ;
double foo3(time, x1, y2) ;
foo3:_FillValue = NaN ;
foo3:coordinates = ""lon1 lon3 lat1 lat3"" ;
...
}
```
With the _all_ condition, I don't get any variable coordinates (they're dumped into the global attributes):
```
~$ ncdump -h test.nc
netcdf test {
dimensions:
x1 = 5 ;
y1 = 3 ;
time = 1 ;
y2 = 4 ;
x2 = 6 ;
variables:
...
double foo1(time, x1, y1) ;
foo1:_FillValue = NaN ;
double foo2(time, x2, y1) ;
foo2:_FillValue = NaN ;
double foo3(time, x1, y2) ;
foo3:_FillValue = NaN ;
// global attributes:
:_NCProperties = ""version=1|netcdflibversion=4.4.1.1|hdf5libversion=1.8.18"" ;
:coordinates = ""lat1 lat3 lat2 lon1 lon3 lon2"" ;
}
```
So the update may be a bit more tricky to get right. I know the DataArray objects (foo1,foo2,foo3) already have the right coordinates associated with them before writing to netCDF, so maybe the logic in `_encode_coordinates` could be changed to utilize `v.coords` somehow? I'll see if I can get something working for my test cases...","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,279832457