Skip to content

Commit

Permalink
Added static_datasource optimization for bokeh paths
Browse files Browse the repository at this point in the history
  • Loading branch information
philippjfr committed Oct 20, 2017
1 parent 0a73811 commit bf217c5
Showing 1 changed file with 19 additions and 15 deletions.
34 changes: 19 additions & 15 deletions holoviews/plotting/bokeh/path.py
Expand Up @@ -61,16 +61,17 @@ def get_data(self, element, ranges, style):
xs, ys = ([path[:, idx] for path in paths] for idx in inds)
data = dict(xs=xs, ys=ys)
return data, mapping, style

paths, cvals = [], []
for path in element.split(datatype='array'):
splits = [0]+list(np.where(np.diff(path[:, cidx])!=0)[0]+1)
for (s1, s2) in zip(splits[:-1], splits[1:]):
cvals.append(path[s1, cidx])
paths.append(path[s1:s2+1, :2])
xs, ys = ([path[:, idx] for path in paths] for idx in inds)

if not self.static_source:
paths, cvals = [], []
for path in element.split(datatype='array'):
splits = [0]+list(np.where(np.diff(path[:, cidx])!=0)[0]+1)
for (s1, s2) in zip(splits[:-1], splits[1:]):
cvals.append(path[s1, cidx])
paths.append(path[s1:s2+1, :2])
xs, ys = ([path[:, idx] for path in paths] for idx in inds)
data = dict(xs=xs, ys=ys, **{dim_name: np.array(cvals)})
dim_name = util.dimension_sanitizer(cdim.name)
data = dict(xs=xs, ys=ys, **{dim_name: np.array(cvals)})
cmapper = self._get_colormapper(cdim, element, ranges, style)
mapping['line_color'] = {'field': dim_name, 'transform': cmapper}
self._get_hover_data(data, element)
Expand Down Expand Up @@ -141,21 +142,24 @@ def _get_hover_data(self, data, element):
data[dim] = [v for _ in range(len(list(data.values())[0]))]

def get_data(self, element, ranges, style):
inds = (1, 0) if self.invert_axes else (0, 1)
paths = element.split(datatype='array', dimensions=element.kdims)
xs, ys = ([path[:, idx] for path in paths] for idx in inds)
data = dict(xs=xs, ys=ys)
if self.static_source:
data = dict()
else:
inds = (1, 0) if self.invert_axes else (0, 1)
xs, ys = ([path[:, idx] for path in paths] for idx in inds)
data = dict(xs=xs, ys=ys)
mapping = dict(self._mapping)
if None not in [element.level, self.color_index]:

if None not in [element.level, self.color_index] and element.vdims:
cdim = element.vdims[0]
else:
cidx = self.color_index+2 if isinstance(self.color_index, int) else self.color_index
cdim = element.get_dimension(cidx)
if cdim is None:
return data, mapping, style

ncontours = len(list(data.values())[0])
ncontours = len(paths)
dim_name = util.dimension_sanitizer(cdim.name)
if element.level is not None:
values = np.full(ncontours, float(element.level))
Expand Down

0 comments on commit bf217c5

Please sign in to comment.