From bb5e3d4a40b30f39eace8c4aba6581913ea235d1 Mon Sep 17 00:00:00 2001
From: Philipp Rudiger
Date: Thu, 19 Apr 2018 11:57:04 +0100
Subject: [PATCH] Restored old xarray coord order inference behavior
---
holoviews/core/data/xarray.py | 3 ++-
tests/core/data/testdataset.py | 9 +++++++++
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/holoviews/core/data/xarray.py b/holoviews/core/data/xarray.py
index df4f5bdf69..fc5245ce37 100644
--- a/holoviews/core/data/xarray.py
+++ b/holoviews/core/data/xarray.py
@@ -127,9 +127,10 @@ def retrieve_unit_and_label(dim):
vdims = [retrieve_unit_and_label(vd) for vd in vdims]
if kdims is None:
xrdims = list(data.dims)
+ xrcoords = list(data.coords)
kdims = [name for name in data.indexes.keys()
if isinstance(data[name].data, np.ndarray)]
- kdims = sorted(kdims, key=lambda x: (xrdims.index(x) if x in xrdims else float('inf'), x))
+ kdims = sorted(kdims, key=lambda x: (xrcoords.index(x) if x in xrcoords else float('inf'), x))
if set(xrdims) != set(kdims):
virtual_dims = [xd for xd in xrdims if xd not in kdims]
for c in data.coords:
diff --git a/tests/core/data/testdataset.py b/tests/core/data/testdataset.py
index a8cec474d2..2319f65875 100644
--- a/tests/core/data/testdataset.py
+++ b/tests/core/data/testdataset.py
@@ -1850,6 +1850,15 @@ def test_xarray_override_dims(self):
data_dim = Dimension("data_name")
self.assertEqual(ds_from_ds.vdims[0], data_dim)
+ def test_xarray_coord_ordering(self):
+ import xarray as xr
+ data = np.zeros((3,4,5))
+ coords = OrderedDict([('b', range(3)), ('c', range(4)), ('a', range(5))])
+ darray = xr.DataArray(data, coords=coords, dims=['b', 'c', 'a'])
+ dataset = xr.Dataset({'value': darray}, coords=coords)
+ ds = Dataset(dataset)
+ self.assertEqual(ds.kdims, ['b', 'c', 'a'])
+
def test_dataset_array_init_hm(self):
"Tests support for arrays (homogeneous)"
raise SkipTest("Not supported")