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/605#issuecomment-146885941,https://api.github.com/repos/pydata/xarray/issues/605,146885941,MDEyOklzc3VlQ29tbWVudDE0Njg4NTk0MQ==,2443309,2015-10-09T14:24:12Z,2015-10-09T14:24:12Z,MEMBER,"closed via #608 and #610. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,109589162 https://github.com/pydata/xarray/issues/605#issuecomment-145903643,https://api.github.com/repos/pydata/xarray/issues/605,145903643,MDEyOklzc3VlQ29tbWVudDE0NTkwMzY0Mw==,2443309,2015-10-06T15:37:21Z,2015-10-06T15:37:21Z,MEMBER,"> In the case of calendars, the information ends up on the encoding attribute. You are right, I had forgotten about this. My original statement has been amended accordingly. I think we're square on my points 2 and 3. Does my first point make sense? I'll open an issue regarding the coordinates encoding attribute. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,109589162 https://github.com/pydata/xarray/issues/605#issuecomment-145321209,https://api.github.com/repos/pydata/xarray/issues/605,145321209,MDEyOklzc3VlQ29tbWVudDE0NTMyMTIwOQ==,2443309,2015-10-04T06:16:40Z,2015-10-06T15:33:24Z,MEMBER,"@shoyer - For the most part, I'm in agreement here with you. A few comments (reference `ncdump` of a irregular grid netCDF below). 1. Yes, simpler data model makes sense. However, I think we are missing a few pieces of the cf coordinates data model in `xray`. `ni` and `nj` are dimensions, not coordinates but `xray` turns them into coordinates. I know why we do this in practice but, for example, `frac(nj, ni)` only uses `nj` and `ni`, `yc` and `xc` are it's coordinates. So, you see, there is a bit of a disconnect there. Another way to think about `xray` indexing is that `isel` should work relative to the dimension index, and `sel` should work on the coordinates. I know I'm out on a limb here... 2. After reading the conventions more carefully, I totally agree with your assessment and concern about the `coordinates` attribute. Not restricting the order of the coordinates is a big deficiency here. 3. The main thing I don't like about how we handle the `coordinate` attribute right now is that we use it to determine the coordinate names, and throw the attribute out. ~~I seem to remember bringing this up in the past with our discussions of the calendar attribute and still don't like that we remove attributes that we decode.~~ Especially this once since we don't do much with it. I have two related PRs from today just to show which way we could go with all this: #606, #608. **ncdump of domain file** ``` Bash (xray_dev)Joes-iMac$ ncdump -h domain.lnd.wr50a_ar9v4.100920.nc netcdf domain.lnd.wr50a_ar9v4.100920 { dimensions: n = 56375 ; ni = 275 ; nj = 205 ; nv = 4 ; variables: double xc(nj, ni) ; xc:long_name = ""longitude of grid cell center"" ; xc:units = ""degrees_east"" ; xc:bounds = ""xv"" ; double yc(nj, ni) ; yc:long_name = ""latitude of grid cell center"" ; yc:units = ""degrees_north"" ; yc:bounds = ""yv"" ; double xv(nj, ni, nv) ; xv:long_name = ""longitude of grid cell verticies"" ; xv:units = ""degrees_east"" ; double yv(nj, ni, nv) ; yv:long_name = ""latitude of grid cell verticies"" ; yv:units = ""degrees_north"" ; int mask(nj, ni) ; mask:long_name = ""domain mask"" ; mask:note = ""unitless"" ; mask:coordinates = ""xc yc"" ; mask:comment = ""0 value indicates cell is not active"" ; double area(nj, ni) ; area:long_name = ""area of grid cell in radians squared"" ; area:coordinates = ""xc yc"" ; area:units = ""radian2"" ; double frac(nj, ni) ; frac:long_name = ""fraction of grid cell that is active"" ; frac:coordinates = ""xc yc"" ; frac:note = ""unitless"" ; frac:filter1 = ""error if frac> 1.0+eps or frac < 0.0-eps; eps = 0.1000000E-10"" ; frac:filter2 = ""limit frac to [fminval,fmaxval]; fminval= 0.1000000E-02 fmaxval= 1.000000"" ; // global attributes: :title = ""CCSM domain data:"" ; :Conventions = ""CF-1.0"" ; ``` **xray representation of domain file** ``` Python In [1]: import xray In [2]: xray.open_dataset('domain.lnd.wr50a_ar9v4.100920.nc') Out[2]: Dimensions: (ni: 275, nj: 205, nv: 4) Coordinates: xc (nj, ni) float64 189.2 189.4 189.6 189.7 189.9 190.1 190.2 ... yc (nj, ni) float64 16.53 16.78 17.02 17.27 17.51 17.76 18.0 18.25 ... * ni (ni) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... * nj (nj) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... * nv (nv) int64 0 1 2 3 Data variables: xv (nj, ni, nv) float64 189.3 189.4 189.2 189.0 189.4 189.6 189.3 ... yv (nj, ni, nv) float64 16.33 16.58 16.74 16.49 16.58 16.82 16.98 ... mask (nj, ni) int32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... area (nj, ni) float64 2.579e-05 2.594e-05 2.611e-05 2.627e-05 ... frac (nj, ni) float64 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... Attributes: title: CCSM domain data: Conventions: CF-1.0 ``` ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,109589162 https://github.com/pydata/xarray/issues/605#issuecomment-145211537,https://api.github.com/repos/pydata/xarray/issues/605,145211537,MDEyOklzc3VlQ29tbWVudDE0NTIxMTUzNw==,2443309,2015-10-03T07:24:04Z,2015-10-03T07:24:04Z,MEMBER,"@shoyer - the idea of the coordinates convention is that we all ready know the x/y coordinate names. So we shouldn't need to supply them like this: `ds.T.plot.contourf('lat', 'lon')`. I'm thinking it would be better to store the coord names coming from https://github.com/xray/xray/blob/master/xray/conventions.py#L882 in each DataArray. Maybe a `DataArray.coord_keys = ('xc', 'yc')` attribute is in order? Currently, we aren't really using the coordinates attribute in its intended way. In the plotting logic, we should just search to see if `coord_keys is not None` before passing the coordinates to the plotting method. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,109589162 https://github.com/pydata/xarray/issues/605#issuecomment-145186432,https://api.github.com/repos/pydata/xarray/issues/605,145186432,MDEyOklzc3VlQ29tbWVudDE0NTE4NjQzMg==,2443309,2015-10-03T00:11:32Z,2015-10-03T00:11:32Z,MEMBER,"Okay, somehow I missed that we're already doing this to some extent. I just ran across the code in `conventions.py` and, yes, we don't do anything with them. @clarkfitzg - do you have any thoughts on how this could work? ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,109589162