From a01b5a55706de1cdd2d75423d886524a65074455 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Thu, 29 Aug 2024 07:44:38 -0400 Subject: [PATCH 1/4] only call subset_selected_changed_callback for matching subset updates --- jdaviz/core/template_mixin.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/jdaviz/core/template_mixin.py b/jdaviz/core/template_mixin.py index 7f417e78d7..6aecd348f7 100644 --- a/jdaviz/core/template_mixin.py +++ b/jdaviz/core/template_mixin.py @@ -1936,9 +1936,9 @@ def _update_subset(self, subset, attribute=None): or (subset.label == self.selected))): # updated the currently selected subset, clear all cache self._clear_cache() - update_has_subregions = True + selected_has_changed = True else: - update_has_subregions = False + selected_has_changed = False if subset.label not in self.labels: # NOTE: this logic will need to be revisited if generic renaming of subsets is added @@ -1958,11 +1958,11 @@ def _update_subset(self, subset, attribute=None): else self._subset_to_dict(subset) for s in self.items] - if update_has_subregions: + if selected_has_changed: self._update_has_subregions() - if self._subset_selected_changed_callback is not None: - self._subset_selected_changed_callback() + if self._subset_selected_changed_callback is not None: + self._subset_selected_changed_callback() def _update_has_subregions(self): if "selected_has_subregions" in self._plugin_traitlets.keys(): From 0e9c1ca830cd1bb03c58aecb5c0f9df4dbd5427d Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Thu, 29 Aug 2024 09:49:36 -0400 Subject: [PATCH 2/4] optimize handling subset_state changes --- .../cubeviz/plugins/spectral_extraction/spectral_extraction.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jdaviz/configs/cubeviz/plugins/spectral_extraction/spectral_extraction.py b/jdaviz/configs/cubeviz/plugins/spectral_extraction/spectral_extraction.py index b4c6eef5b7..b82acec4f7 100644 --- a/jdaviz/configs/cubeviz/plugins/spectral_extraction/spectral_extraction.py +++ b/jdaviz/configs/cubeviz/plugins/spectral_extraction/spectral_extraction.py @@ -252,8 +252,9 @@ def _aperture_items_changed(self, msg): return if not hasattr(self, 'aperture'): return + orig_labels = [item['label'] for item in msg['old']] for item in msg['new']: - if item not in msg['old']: + if item['label'] not in orig_labels: if item.get('type') != 'spatial': continue subset_lbl = item.get('label') From 45a312942f0326edd8d5b2e7723815ba279800bc Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Thu, 29 Aug 2024 11:52:45 -0400 Subject: [PATCH 3/4] prevent unnecessary state-update --- jdaviz/app.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/jdaviz/app.py b/jdaviz/app.py index 3a3c7ad0e7..8af140ee51 100644 --- a/jdaviz/app.py +++ b/jdaviz/app.py @@ -614,12 +614,14 @@ def _on_layers_changed(self, msg): if children_layers is not None: parent_icon = self.state.layer_icons[layer_name] for i, child_layer in enumerate(children_layers, start=1): - child_layer_icons[child_layer] = f'{parent_icon}{i}' + if child_layer not in self.state.layer_icons: + child_layer_icons[child_layer] = f'{parent_icon}{i}' - self.state.layer_icons = { - **self.state.layer_icons, - **child_layer_icons - } + if child_layer_icons: + self.state.layer_icons = { + **self.state.layer_icons, + **child_layer_icons + } def _change_reference_data(self, new_refdata_label, viewer_id=None): """ From 7b6b95d6292057bf64fc84f745eddde201ecaa9f Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Thu, 29 Aug 2024 11:53:31 -0400 Subject: [PATCH 4/4] avoid startswith since can be expensive on some machines --- jdaviz/app.py | 2 +- jdaviz/core/template_mixin.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jdaviz/app.py b/jdaviz/app.py index 8af140ee51..9cba4fedc7 100644 --- a/jdaviz/app.py +++ b/jdaviz/app.py @@ -603,7 +603,7 @@ def _on_layers_changed(self, msg): self.state.layer_icons = { **self.state.layer_icons, layer_name: alpha_index(len([ln for ln, ic in self.state.layer_icons.items() - if not ic.startswith('mdi-') and + if not ic[:4] == 'mdi-' and self._get_assoc_data_parent(ln) is None])) } diff --git a/jdaviz/core/template_mixin.py b/jdaviz/core/template_mixin.py index 6aecd348f7..b7d0c1dec5 100644 --- a/jdaviz/core/template_mixin.py +++ b/jdaviz/core/template_mixin.py @@ -1943,7 +1943,7 @@ def _update_subset(self, subset, attribute=None): if subset.label not in self.labels: # NOTE: this logic will need to be revisited if generic renaming of subsets is added # see https://github.com/spacetelescope/jdaviz/pull/1175#discussion_r829372470 - if subset.label.startswith('Subset') and self._is_valid_item(subset): + if subset.label[:6] == 'Subset' and self._is_valid_item(subset): # NOTE: += will not trigger traitlet update self.items = self.items + [self._subset_to_dict(subset)] # noqa else: