From 093caa2bce2af14c9ffed347183aabc3815c2c9c Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Mon, 23 Oct 2017 00:49:27 +0100 Subject: [PATCH] Ensure all clone methods correctly retain id (#2013) --- holoviews/core/ndmapping.py | 2 +- holoviews/element/annotation.py | 2 ++ holoviews/element/path.py | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/holoviews/core/ndmapping.py b/holoviews/core/ndmapping.py index 1d0e579d06..0acf2430af 100644 --- a/holoviews/core/ndmapping.py +++ b/holoviews/core/ndmapping.py @@ -763,7 +763,7 @@ def clone(self, data=None, shared_data=True, new_type=None, *args, **overrides): settings = {k: v for k, v in settings.items() if k in new_params} settings = dict(settings, **overrides) - if 'id' not in settings: + if 'id' not in settings and new_type in [type(self), None]: settings['id'] = self.id if data is None and shared_data: diff --git a/holoviews/element/annotation.py b/holoviews/element/annotation.py index 549c653497..3afd67b839 100644 --- a/holoviews/element/annotation.py +++ b/holoviews/element/annotation.py @@ -66,6 +66,8 @@ def clone(self, *args, **overrides): pos_args = getattr(self, '_' + type(self).__name__ + '__pos_params', []) settings = {k: v for k, v in dict(self.get_param_values(), **overrides).items() if k not in pos_args[:len(args)]} + if 'id' not in settings: + settings['id'] = self.id return self.__class__(*args, **settings) diff --git a/holoviews/element/path.py b/holoviews/element/path.py index 243b897b88..a03e32b096 100644 --- a/holoviews/element/path.py +++ b/holoviews/element/path.py @@ -200,6 +200,8 @@ def clone(self, *args, **overrides): containing the specified args and kwargs. """ settings = dict(self.get_param_values(), **overrides) + if 'id' not in settings: + settings['id'] = self.id if not args: settings['plot_id'] = self._plot_id