From 5da84f9878d3ebeef8d093ab5ad403505a2aec37 Mon Sep 17 00:00:00 2001
From: Philipp Rudiger
Date: Wed, 24 Aug 2016 13:14:02 +0100
Subject: [PATCH] Allow None in keys for partial dimension overlap
---
holoviews/core/ndmapping.py | 2 +-
holoviews/core/util.py | 1 +
tests/testplotinstantiation.py | 10 ++++++++++
3 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/holoviews/core/ndmapping.py b/holoviews/core/ndmapping.py
index de573b6557..ba9ad5221a 100644
--- a/holoviews/core/ndmapping.py
+++ b/holoviews/core/ndmapping.py
@@ -171,7 +171,7 @@ def _add_item(self, dim_vals, data, sort=True, update=True):
if not self._instantiated and self.get_dimension(dim).values == 'initial':
if val not in vals:
self._cached_index_values[dim.name].append(val)
- elif vals and val not in vals:
+ elif vals and val is not None and val not in vals:
raise KeyError('%s dimension value %s not in'
' specified dimension values.' % (dim, repr(val)))
diff --git a/holoviews/core/util.py b/holoviews/core/util.py
index 13c0d44324..5c7cda7900 100644
--- a/holoviews/core/util.py
+++ b/holoviews/core/util.py
@@ -548,6 +548,7 @@ def dimension_sort(odict, kdims, vdims, categorical, key_index, cached_values):
indexes = [(dimensions[i], int(i not in range(ndims)),
i if i in range(ndims) else i-ndims)
for i in key_index]
+ cached_values = {d: [None]+vals for d, vals in cached_values.items()}
if len(set(key_index)) != len(key_index):
raise ValueError("Cannot sort on duplicated dimensions")
diff --git a/tests/testplotinstantiation.py b/tests/testplotinstantiation.py
index 96c043d092..1b1fbc7f18 100644
--- a/tests/testplotinstantiation.py
+++ b/tests/testplotinstantiation.py
@@ -39,3 +39,13 @@ def test_dynamic_nonoverlap(self):
dmap2 = DynamicMap(lambda x: Curve(np.random.rand(10,2))*VLine(x),
kdims=kdims[:1])
renderer.get_widget(dmap1 + dmap2, 'selection')
+
+
+ def test_dynamic_values_partial_overlap(self):
+ kdims = [Dimension('File', range=(0.01, 1)),
+ Dimension('SliceDimension', values=['x', 'y', 'z']),
+ Dimension('Coordinates', range=(0.01, 1))]
+ dmap1 = DynamicMap(lambda x, y, z: Image(np.random.rand(10,10)), kdims=kdims)
+ dmap2 = DynamicMap(lambda x: Curve(np.random.rand(10,2))*VLine(x),
+ kdims=kdims[:1])
+ renderer.get_widget(dmap1 + dmap2, 'selection')