Skip to content

Commit de78cf3

Browse files
committed
Bumped version to 1.8.4
1 parent a66181c commit de78cf3

26 files changed

Lines changed: 280 additions & 85 deletions

CHANGELOG.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,29 @@
1+
Version 1.8.4
2+
=============
3+
4+
This bugfix release includes a number of critical fixes for compatiblity
5+
with bokeh 0.12.9 along with various other bug fixes. Many thanks to our
6+
users for various detailed bug reports, feedback and contributions.
7+
8+
Fixes:
9+
10+
- Fixes to register BoundsXY stream.
11+
([\#1826](https://github.com/ioam/holoviews/pull/1826))
12+
- Fix for Bounds streams on bokeh server.
13+
([\#1883](https://github.com/ioam/holoviews/pull/1883))
14+
- Compatibility with matplotlib 2.1
15+
([\#1842](https://github.com/ioam/holoviews/pull/1842))
16+
- Fixed bug in scrubber widget and support for scrubbing discrete
17+
DynamicMaps ([\#1832](https://github.com/ioam/holoviews/pull/1832))
18+
- Various fixes for compatibility with bokeh 0.12.9
19+
([\#1849](https://github.com/ioam/holoviews/pull/1849),
20+
[\#1866](https://github.com/ioam/holoviews/pull/1886))
21+
- Fixes for setting QuadMesh ranges.
22+
([\#1876](https://github.com/ioam/holoviews/pull/1876))
23+
- Fixes for inverting Image/RGB/Raster axes in bokeh.
24+
([\#1872](https://github.com/ioam/holoviews/pull/1872))
25+
26+
127
Version 1.8.3
228
=============
329

doc/about.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
About Us
22
========
33

4-
HoloViews is supported and maintained by `Continuum Analytics <https://continuum.io>`_.
4+
HoloViews is supported and maintained by `Anaconda <https://www.anaconda.com>`_.
55

66
The primary developers are Jean-Luc Stevens, Philipp Rudiger, and
77
James A. Bednar, with bug reports and patches from numerous members of

examples/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ This directory contains all the notebooks built as part of the
1010
* ``getting_started``: Notebooks used in the [getting started](http://holoviews.org/getting_started/index.html) guide.
1111
* `reference`: Notebooks shown in the website [reference gallery](http://holoviews.org/reference/index.html)
1212
* ``topics``: Notebooks shown in the [showcase](http://holoviews.org/reference/showcase/index.html)
13+
* ``user_guide``: Notebooks used in the [user guide](http://holoviews.org/user_guide/index.html).
1314

1415
## Contributing to examples
1516

@@ -22,4 +23,4 @@ consider submitting a PR.
2223

2324
Lastly, if you find a particular notebook that does not seem to be
2425
working, please file an
25-
[issue](https://github.com/ioam/holoviews/issues).
26+
[issue](https://github.com/ioam/holoviews/issues).

examples/user_guide/Deploying_Bokeh_Apps.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@
283283
"import holoviews as hv\n",
284284
"import holoviews.plotting.bokeh\n",
285285
"\n",
286-
"renderer = hv.renderers('bokeh')\n",
286+
"renderer = hv.renderer('bokeh')\n",
287287
"\n",
288288
"points = hv.Points(np.random.randn(1000,2 )).opts(plot=dict(tools=['box_select', 'lasso_select']))\n",
289289
"selection = hv.streams.Selection1D(source=points)\n",

holoviews/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import param
1111

12-
__version__ = param.Version(release=(1,8,3), fpath=__file__,
12+
__version__ = param.Version(release=(1,8,4), fpath=__file__,
1313
commit="$Format:%h$", reponame='holoviews')
1414

1515
from .core import archive, config # noqa (API import)

holoviews/core/dimension.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ class LabelledData(param.Parameterized):
485485
label = param.String(default='', constant=True, doc="""
486486
Optional label describing the data, typically reflecting where
487487
or how it was measured. The label should allow a specific
488-
measurement or dataset to be referenced for a given group..""")
488+
measurement or dataset to be referenced for a given group.""")
489489

490490
_deep_indexable = False
491491

holoviews/core/spaces.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,10 @@ def __call__(self, *args, **kwargs):
518518

519519
try:
520520
ret = self.callable(*args, **kwargs)
521+
except KeyError:
522+
# KeyError is caught separately because it is used to signal
523+
# invalid keys on DynamicMap and should not warn
524+
raise
521525
except:
522526
posstr = ', '.join(['%r' % el for el in self.args]) if self.args else ''
523527
kwstr = ', '.join('%s=%r' % (k,v) for k,v in self.kwargs.items())
@@ -1055,7 +1059,7 @@ def _cache(self, key, val):
10551059
if len(self) >= cache_size:
10561060
first_key = next(k for k in self.data)
10571061
self.data.pop(first_key)
1058-
self.data[key] = val
1062+
self[key] = val
10591063

10601064

10611065
def map(self, map_fn, specs=None, clone=True):

holoviews/core/traversal.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from operator import itemgetter
99

1010
from .dimension import Dimension
11-
from .util import merge_dimensions
11+
from .util import merge_dimensions, cartesian_product
1212

1313
try:
1414
import itertools.izip as zip
@@ -89,6 +89,11 @@ def unique_dimkeys(obj, default_dim='Frame'):
8989
if not matches:
9090
unique_keys.append(padded_key)
9191

92+
# Add cartesian product of DynamicMap values to keys
93+
values = [d.values for d in all_dims]
94+
if obj.traverse(lambda x: x, ['DynamicMap']) and values and all(values):
95+
unique_keys += list(zip(*cartesian_product(values)))
96+
9297
with item_check(False):
9398
sorted_keys = NdMapping({key: None for key in unique_keys},
9499
kdims=all_dims).data.keys()

holoviews/operation/datashader.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,8 @@ def get_agg_data(cls, obj, category=None):
215215

216216
for d in (x, y):
217217
if df[d].dtype.kind == 'M':
218-
param.warning('Casting %s dimension data to integer '
219-
'datashader cannot process datetime data ')
218+
param.main.warning('Casting %s dimension data to integer; '
219+
'datashader cannot process datetime data', d)
220220
df[d] = df[d].astype('int64') / 1000000.
221221

222222
return x, y, Dataset(df, kdims=kdims, vdims=vdims), glyph
@@ -356,7 +356,13 @@ class shade(Operation):
356356
"""
357357

358358
cmap = param.ClassSelector(default=fire, class_=(Iterable, Callable, dict), doc="""
359-
Iterable or callable which returns colors as hex colors.
359+
Iterable or callable which returns colors as hex colors, to
360+
be used for the colormap of single-layer datashader output.
361+
Callable type must allow mapping colors between 0 and 1.""")
362+
363+
color_key = param.ClassSelector(class_=(Iterable, Callable, dict), doc="""
364+
Iterable or callable which returns colors as hex colors, to
365+
be used for the color key of categorical datashader output.
360366
Callable type must allow mapping colors between 0 and 1.""")
361367

362368
normalization = param.ClassSelector(default='eq_hist',
@@ -430,15 +436,15 @@ def _process(self, element, key=None):
430436
if element.ndims > 2:
431437
kdims = element.kdims[1:]
432438
categories = array.shape[-1]
433-
if not self.p.cmap:
439+
if not self.p.color_key:
434440
pass
435-
elif isinstance(self.p.cmap, dict):
436-
shade_opts['color_key'] = self.p.cmap
437-
elif isinstance(self.p.cmap, Iterable):
441+
elif isinstance(self.p.color_key, dict):
442+
shade_opts['color_key'] = self.p.color_key
443+
elif isinstance(self.p.color_key, Iterable):
438444
shade_opts['color_key'] = [c for i, c in
439-
zip(range(categories), self.p.cmap)]
445+
zip(range(categories), self.p.color_key)]
440446
else:
441-
colors = [self.p.cmap(s) for s in np.linspace(0, 1, categories)]
447+
colors = [self.p.color_key(s) for s in np.linspace(0, 1, categories)]
442448
shade_opts['color_key'] = map(self.rgb2hex, colors)
443449
elif not self.p.cmap:
444450
pass

holoviews/plotting/bokeh/annotation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def _init_glyph(self, plot, mapping, properties, key):
172172
"""
173173
Returns a Bokeh glyph object.
174174
"""
175-
properties.pop('legend')
175+
properties.pop('legend', None)
176176
if key == 'arrow':
177177
properties.pop('source')
178178
arrow_end = mapping.pop('arrow_end')

0 commit comments

Comments
 (0)