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-350079436,https://api.github.com/repos/pydata/xarray/issues/1763,350079436,MDEyOklzc3VlQ29tbWVudDM1MDA3OTQzNg==,1217238,2017-12-07T20:05:57Z,2017-12-07T20:05:57Z,MEMBER,"> 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?

DataArray objects get appropriate coordinates when indexed from a Dataset by using the following logic:
https://github.com/pydata/xarray/blob/3a28b611e40f2a09c05f982242f638cc3f7d94bf/xarray/core/dataset.py#L785-L789

We could should duplicate the same logic for encoding coordinates on particular variables.","{""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:
```
<xarray.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
https://github.com/pydata/xarray/issues/1763#issuecomment-349821087,https://api.github.com/repos/pydata/xarray/issues/1763,349821087,MDEyOklzc3VlQ29tbWVudDM0OTgyMTA4Nw==,1217238,2017-12-07T00:30:39Z,2017-12-07T00:31:21Z,MEMBER,"It looks like currently write coordinates in data variable attributes if the share *any* dimensions in common. This should probably be updated to require that *all* dimensions match:
https://github.com/pydata/xarray/blob/c2b205f29467a4431baa80b5c07fe31bda67fbef/xarray/conventions.py#L1217-L1220

Any interest in putting together a pull request to fix this? :)","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,279832457