Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Correctly initialize comms and connect streams #842

Merged
merged 4 commits into from
Aug 31, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion holoviews/plotting/mpl/raster.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,9 +277,13 @@ class RasterGridPlot(GridPlot, OverlayPlot):

def __init__(self, layout, keys=None, dimensions=None, create_axes=False, ranges=None,
layout_num=1, **params):
if not keys or not dimensions:
top_level = keys is None
if top_level:
dimensions, keys = traversal.unique_dimkeys(layout)
MPLPlot.__init__(self, dimensions=dimensions, keys=keys, **params)
if top_level:
self.comm = self.init_comm(layout)

self.layout = layout
self.cyclic_index = 0
self.zorder = 0
Expand Down
33 changes: 23 additions & 10 deletions holoviews/plotting/plot.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
from ..core.overlay import NdOverlay
from ..core.spaces import HoloMap, DynamicMap
from ..element import Table
from .util import get_dynamic_mode, initialize_sampled, dim_axis_label
from .util import (get_dynamic_mode, initialize_sampled, dim_axis_label,
attach_streams)


class Plot(param.Parameterized):
Expand Down Expand Up @@ -196,11 +197,8 @@ def __init__(self, keys=None, dimensions=None, layout_dimensions=None,
self.current_key = None
self.ranges = {}
self.renderer = renderer if renderer else Store.renderers[self.backend].instance()
self.comm = None

comm = None
if self.dynamic or self.renderer.widget_mode == 'live':
comm = self.renderer.comms[self.renderer.mode][0](self)
self.comm = comm
params = {k: v for k, v in params.items()
if k in self.params()}
super(DimensionedPlot, self).__init__(**params)
Expand Down Expand Up @@ -478,7 +476,7 @@ def update(self, key):
return self.__getitem__(key)


def refresh(self):
def refresh(self, **kwargs):
"""
Refreshes the plot by rerendering it and then pushing
the updated data if the plot has an associated Comm.
Expand All @@ -501,6 +499,17 @@ def push(self):
self.comm.send(diff)


def init_comm(self, obj):
"""
Initializes comm and attaches streams.
"""
comm = None
if self.dynamic or self.renderer.widget_mode == 'live':
comm = self.renderer.comms[self.renderer.mode][0](self)
attach_streams(self, obj)
return comm


def __len__(self):
"""
Returns the total number of available frames.
Expand Down Expand Up @@ -547,8 +556,8 @@ def __init__(self, element, keys=None, ranges=None, dimensions=None,
if self.batched:
plot_element = plot_element.last

subplot = not keys
if subplot:
top_level = keys is None
if top_level:
dimensions = self.hmap.kdims
keys = list(self.hmap.data.keys())

Expand All @@ -559,6 +568,8 @@ def __init__(self, element, keys=None, ranges=None, dimensions=None,
super(GenericElementPlot, self).__init__(keys=keys, dimensions=dimensions,
dynamic=dynamic,
**dict(params, **plot_opts))
if top_level:
self.comm = self.init_comm(element)

# Update plot and style options for batched plots
if self.batched:
Expand Down Expand Up @@ -894,8 +905,8 @@ def __init__(self, layout, keys=None, dimensions=None, **params):
if 'uniform' not in params:
params['uniform'] = traversal.uniform(layout)

subplot = not keys
if subplot:
top_level = keys is None
if top_level:
dimensions, keys = traversal.unique_dimkeys(layout)

self.layout = layout
Expand All @@ -904,6 +915,8 @@ def __init__(self, layout, keys=None, dimensions=None, **params):
dynamic=dynamic,
dimensions=dimensions,
**params)
if top_level:
self.comm = self.init_comm(layout)


def _get_frame(self, key):
Expand Down
10 changes: 10 additions & 0 deletions holoviews/plotting/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,3 +275,13 @@ def dim_axis_label(dimensions, separator=', '):
if not isinstance(dimensions, list): dimensions = [dimensions]
return separator.join([safe_unicode(d.pprint_label)
for d in dimensions])


def attach_streams(plot, obj):
"""
Attaches plot refresh to all streams on the object.
"""
def append_refresh(dmap):
for stream in dmap.streams:
stream._hidden_subscribers.append(plot.refresh)
return obj.traverse(append_refresh, [DynamicMap])