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