From 96c999459adecac987871af2ebd593152917e899 Mon Sep 17 00:00:00 2001 From: Nicholas Earl Date: Mon, 27 Jul 2020 14:31:57 -0400 Subject: [PATCH 1/7] Include data collection deletion handling --- jdaviz/app.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/jdaviz/app.py b/jdaviz/app.py index 6ce9b7c152..4daa0ee06c 100644 --- a/jdaviz/app.py +++ b/jdaviz/app.py @@ -20,7 +20,8 @@ from glue.core import BaseData, HubListener, Data, DataCollection from glue.core.autolinking import find_possible_links from glue.core.link_helpers import LinkSame -from glue.core.message import DataCollectionAddMessage +from glue.core.message import (DataCollectionAddMessage, + DataCollectionDeleteMessage) from glue.core.state_objects import State from glue.core.subset import Subset from glue_jupyter.app import JupyterApplication @@ -157,6 +158,11 @@ def __init__(self, configuration=None, *args, **kwargs): self.hub.subscribe(self, DataCollectionAddMessage, handler=self._on_data_added) + # Subscribe to the event fired when data is added to the application- + # level data collection object + self.hub.subscribe(self, DataCollectionDeleteMessage, + handler=self._on_data_deleted) + # Subscribe to snackbar messages and tie them to the display of the # message box self.hub.subscribe(self, SnackbarMessage, @@ -552,6 +558,7 @@ def add_data_to_viewer(self, viewer_reference, data_label, if data_id is not None: data_ids.append(data_id) + print("Updating selected data from adding") self._update_selected_data_items(viewer_item['id'], data_ids) else: raise ValueError( @@ -608,6 +615,7 @@ def remove_data_from_viewer(self, viewer_reference, data_label): if data_id in selected_items: selected_items.remove(data_id) + print("Updating selected data from removal.") self._update_selected_data_items( viewer_item['id'], selected_items) @@ -833,11 +841,12 @@ def _update_selected_data_items(self, viewer_id, selected_items): for data in viewer_data: if data.label not in active_data_labels: viewer.remove_data(data) - + print("Removing ", data.label) remove_data_message = RemoveDataMessage(data, viewer, viewer_id=viewer_id, sender=self) self.hub.broadcast(remove_data_message) + print("DONE") # Sets the plot axes labels to be the units of the most recently # active data. @@ -864,6 +873,21 @@ def _on_data_added(self, msg): data_item = self._create_data_item(msg.data.label) self.state.data_items.append(data_item) + def _on_data_deleted(self, msg): + """ + Callback for when data is removed from the internal ``DataCollection``. + Removes the data item dictionary in the ``data_items`` state list. + + Parameters + ---------- + msg : `~glue.core.DataCollectionAddMessage` + The Glue data collection add message containing information about + the new data. + """ + for data_item in self.state.data_items: + if data_item['name'] == msg.data.label: + self.state.data_items.remove(data_item) + @staticmethod def _create_data_item(label): return { From 5b4a3c7d7ead7eb4b14b71a84705058c5496b6e2 Mon Sep 17 00:00:00 2001 From: Nicholas Earl Date: Mon, 27 Jul 2020 14:32:02 -0400 Subject: [PATCH 2/7] Fix line list handling when user deselects all data --- jdaviz/configs/default/plugins/line_lists/line_lists.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/jdaviz/configs/default/plugins/line_lists/line_lists.py b/jdaviz/configs/default/plugins/line_lists/line_lists.py index e4b56876f8..2767f29ff6 100644 --- a/jdaviz/configs/default/plugins/line_lists/line_lists.py +++ b/jdaviz/configs/default/plugins/line_lists/line_lists.py @@ -95,7 +95,13 @@ def _on_viewer_data_changed(self, msg=None): if msg is not None and msg.viewer_id != self._viewer_id: return - self._viewer_spectrum = self.app.get_viewer('spectrum-viewer').data()[0] + viewer_data = self.app.get_viewer('spectrum-viewer').data() + + # If no data is currently plotted, don't attempt to update + if len(viewer_data) == 0: + return + + self._viewer_spectrum = viewer_data[0] self._units["x"] = str(self._viewer_spectrum.spectral_axis.unit) self._units["y"] = str(self._viewer_spectrum.flux.unit) From afa5da8b0ac55bdc5d4400c02e045c0cf7c5be92 Mon Sep 17 00:00:00 2001 From: Nicholas Earl Date: Mon, 27 Jul 2020 14:32:15 -0400 Subject: [PATCH 3/7] Remove hacky code in unit conversion --- .../specviz/plugins/unit_conversion/unit_conversion.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/jdaviz/configs/specviz/plugins/unit_conversion/unit_conversion.py b/jdaviz/configs/specviz/plugins/unit_conversion/unit_conversion.py index 81ebbc1d8a..46acc2ac8e 100644 --- a/jdaviz/configs/specviz/plugins/unit_conversion/unit_conversion.py +++ b/jdaviz/configs/specviz/plugins/unit_conversion/unit_conversion.py @@ -153,12 +153,7 @@ def vue_unit_conversion(self, *args, **kwargs): # a new version with the most recent conversion. if selected_data_label in self.data_collection: self.app.remove_data_from_viewer('spectrum-viewer', selected_data_label) - # Some hacky code to remove the label from the data dropdown - temp_items = [] - for data_item in self.app.state.data_items: - if data_item['name'] != selected_data_label: - temp_items.append(data_item) - self.app.state.data_items = temp_items + # Remove the actual Glue data object from the data_collection self.data_collection.remove(self.data_collection[selected_data_label]) self.data_collection[selected_data_label] = converted_spec From 9bfffed5ea8ae8af122b9756ab7454851e2009fb Mon Sep 17 00:00:00 2001 From: Nicholas Earl Date: Mon, 27 Jul 2020 14:37:55 -0400 Subject: [PATCH 4/7] Remove print statements --- jdaviz/app.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/jdaviz/app.py b/jdaviz/app.py index 4daa0ee06c..607b4c0a2a 100644 --- a/jdaviz/app.py +++ b/jdaviz/app.py @@ -558,7 +558,6 @@ def add_data_to_viewer(self, viewer_reference, data_label, if data_id is not None: data_ids.append(data_id) - print("Updating selected data from adding") self._update_selected_data_items(viewer_item['id'], data_ids) else: raise ValueError( @@ -615,7 +614,6 @@ def remove_data_from_viewer(self, viewer_reference, data_label): if data_id in selected_items: selected_items.remove(data_id) - print("Updating selected data from removal.") self._update_selected_data_items( viewer_item['id'], selected_items) @@ -841,12 +839,10 @@ def _update_selected_data_items(self, viewer_id, selected_items): for data in viewer_data: if data.label not in active_data_labels: viewer.remove_data(data) - print("Removing ", data.label) remove_data_message = RemoveDataMessage(data, viewer, viewer_id=viewer_id, sender=self) self.hub.broadcast(remove_data_message) - print("DONE") # Sets the plot axes labels to be the units of the most recently # active data. From 8c97dbc7bc8e3afb2c1605d4b2c6ff221f83350c Mon Sep 17 00:00:00 2001 From: Nicholas Earl Date: Mon, 27 Jul 2020 14:57:52 -0400 Subject: [PATCH 5/7] Fix comment wording --- jdaviz/app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jdaviz/app.py b/jdaviz/app.py index 607b4c0a2a..8f78436382 100644 --- a/jdaviz/app.py +++ b/jdaviz/app.py @@ -158,8 +158,8 @@ def __init__(self, configuration=None, *args, **kwargs): self.hub.subscribe(self, DataCollectionAddMessage, handler=self._on_data_added) - # Subscribe to the event fired when data is added to the application- - # level data collection object + # Subscribe to the event fired when data is delected from the + # application-level data collection object self.hub.subscribe(self, DataCollectionDeleteMessage, handler=self._on_data_deleted) From b12c920338c6c761547b736d764a87c77be74a0f Mon Sep 17 00:00:00 2001 From: Nicholas Earl Date: Wed, 29 Jul 2020 10:49:04 -0400 Subject: [PATCH 6/7] Fix pep8 compliance --- jdaviz/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jdaviz/app.py b/jdaviz/app.py index 8f78436382..559c87a304 100644 --- a/jdaviz/app.py +++ b/jdaviz/app.py @@ -158,7 +158,7 @@ def __init__(self, configuration=None, *args, **kwargs): self.hub.subscribe(self, DataCollectionAddMessage, handler=self._on_data_added) - # Subscribe to the event fired when data is delected from the + # Subscribe to the event fired when data is deleted from the # application-level data collection object self.hub.subscribe(self, DataCollectionDeleteMessage, handler=self._on_data_deleted) From 501991ddcd24bcbd39dae62356ae5fc203666964 Mon Sep 17 00:00:00 2001 From: nmearl Date: Mon, 3 Aug 2020 11:19:33 -0400 Subject: [PATCH 7/7] Close pool after multi-process fitting --- jdaviz/configs/default/plugins/model_fitting/fitting_backend.py | 2 ++ jdaviz/utils.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/jdaviz/configs/default/plugins/model_fitting/fitting_backend.py b/jdaviz/configs/default/plugins/model_fitting/fitting_backend.py index 40a35d86bb..fcf876989e 100644 --- a/jdaviz/configs/default/plugins/model_fitting/fitting_backend.py +++ b/jdaviz/configs/default/plugins/model_fitting/fitting_backend.py @@ -164,6 +164,8 @@ def collect_result(result): for r in results: r.wait() + pool.close() + # Collect units from all parameters param_units = [] for name in initial_model.param_names: diff --git a/jdaviz/utils.py b/jdaviz/utils.py index b9443dcd31..6efa1cc000 100644 --- a/jdaviz/utils.py +++ b/jdaviz/utils.py @@ -12,7 +12,7 @@ def load_template(file_name, path=None, traitlet=True): ---------- file_name : str The name of the template file. - root_path : str + path : str The path to where the template file is stored. If none is given, assumes the directory where the python file calling this function resides.