From 9b2bad5d2bb7656eea283790a186dbbb94834ea4 Mon Sep 17 00:00:00 2001
From: Philipp Rudiger
Date: Mon, 15 May 2017 20:13:25 +0100
Subject: [PATCH 1/2] Attach linked streams in batched mode
---
holoviews/plotting/bokeh/element.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/holoviews/plotting/bokeh/element.py b/holoviews/plotting/bokeh/element.py
index d186c035a8..80ee5ad00a 100644
--- a/holoviews/plotting/bokeh/element.py
+++ b/holoviews/plotting/bokeh/element.py
@@ -750,9 +750,8 @@ def initialize_plot(self, ranges=None, plot=None, plots=None, source=None):
self._update_plot(key, plot, style_element)
self._update_ranges(style_element, ranges)
- if not self.batched:
- for cb in self.callbacks:
- cb.initialize()
+ for cb in self.callbacks:
+ cb.initialize()
if not self.overlaid:
self._process_legend()
From 0daeb705b9d5c45235b384ca620a3dc9eceec4b9 Mon Sep 17 00:00:00 2001
From: Philipp Rudiger
Date: Mon, 15 May 2017 20:53:23 +0100
Subject: [PATCH 2/2] Added unit test to check streams on batched plots are
linked
---
tests/testplotinstantiation.py | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/tests/testplotinstantiation.py b/tests/testplotinstantiation.py
index eeec664f3f..9b8755ce53 100644
--- a/tests/testplotinstantiation.py
+++ b/tests/testplotinstantiation.py
@@ -44,7 +44,7 @@
try:
from holoviews.plotting.bokeh.util import bokeh_version
bokeh_renderer = Store.renderers['bokeh']
- from holoviews.plotting.bokeh.callbacks import Callback
+ from holoviews.plotting.bokeh.callbacks import Callback, PointerXCallback
from bokeh.models import (
Div, ColumnDataSource, FactorRange, Range1d, Row, Column,
ToolbarBox, FixedTicker, FuncTickFormatter
@@ -97,7 +97,7 @@ def setUp(self):
self.default_comm = mpl_renderer.comms['default']
mpl_renderer.comms['default'] = (comms.Comm, '')
- def teardown(self):
+ def tearDown(self):
mpl_renderer.comms['default'] = self.default_comm
Store.current_backend = self.previous_backend
@@ -324,10 +324,11 @@ def setUp(self):
self.default_comm = bokeh_renderer.comms['default']
bokeh_renderer.comms['default'] = (comms.Comm, '')
- def teardown(self):
+ def tearDown(self):
Store.current_backend = self.previous_backend
Callback._comm_type = comms.JupyterCommJS
mpl_renderer.comms['default'] = self.default_comm
+ Callback._callbacks = {}
def test_overlay_legend(self):
overlay = Curve(range(10), label='A') * Curve(range(10), label='B')
@@ -404,6 +405,20 @@ def test_batched_curve_subscribers_correctly_attached(self):
self.assertIn(plot.refresh, posx.subscribers)
self.assertNotIn(list(plot.subplots.values())[0].refresh, posx.subscribers)
+ def test_batched_curve_subscribers_correctly_linked(self):
+ # Checks if a stream callback is created to link batched plot
+ # to the stream
+ posx = PointerX()
+ opts = {'NdOverlay': dict(plot=dict(legend_limit=0)),
+ 'Curve': dict(style=dict(line_color=Cycle(values=['red', 'blue'])))}
+ overlay = DynamicMap(lambda x: NdOverlay({i: Curve([(i, j) for j in range(2)])
+ for i in range(2)})(opts), kdims=[],
+ streams=[posx])
+ plot = bokeh_renderer.get_plot(overlay)
+ self.assertEqual(len(Callback._callbacks), 1)
+ key = list(Callback._callbacks.keys())[0]
+ self.assertEqual(key, (id(plot.handles['plot']), id(PointerXCallback)))
+
def test_batched_points_size_and_color(self):
opts = {'NdOverlay': dict(plot=dict(legend_limit=0)),
'Points': dict(style=dict(size=Cycle(values=[1, 2])))}
@@ -1425,7 +1440,7 @@ def setUp(self):
plotly_renderer.comms['default'] = (comms.Comm, '')
- def teardown(self):
+ def tearDown(self):
Store.current_backend = self.previous_backend
plotly_renderer.comms['default'] = self.default_comm