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')