From 715b52e4fd3a3f18e70a325551401901dad519fb Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Wed, 21 Dec 2022 09:52:21 -0500 Subject: [PATCH] add offending ranges to error messages --- .../default/plugins/model_fitting/model_fitting.py | 3 ++- .../default/plugins/model_fitting/tests/test_plugin.py | 2 +- .../specviz/plugins/line_analysis/line_analysis.py | 3 ++- .../plugins/line_analysis/tests/test_line_analysis.py | 2 +- jdaviz/core/template_mixin.py | 9 +++++++-- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/jdaviz/configs/default/plugins/model_fitting/model_fitting.py b/jdaviz/configs/default/plugins/model_fitting/model_fitting.py index 76ab5ae586..1335f1cda2 100644 --- a/jdaviz/configs/default/plugins/model_fitting/model_fitting.py +++ b/jdaviz/configs/default/plugins/model_fitting/model_fitting.py @@ -665,7 +665,8 @@ def calculate_fit(self, add_data=True): residuals (if ``residuals_calculate`` is set to ``True``) """ if not self.spectral_subset_valid: - raise ValueError("spectral subset is outside data range") + valid, spec_range, subset_range = self._check_dataset_spectral_subset_valid(return_ranges=True) # noqa + raise ValueError(f"spectral subset '{self.spectral_subset.selected}' {subset_range} is outside data range of '{self.dataset.selected}' {spec_range}") # noqa if self.cube_fit: return self._fit_model_to_cube(add_data=add_data) diff --git a/jdaviz/configs/default/plugins/model_fitting/tests/test_plugin.py b/jdaviz/configs/default/plugins/model_fitting/tests/test_plugin.py index 1ca8f3fa55..018024290e 100644 --- a/jdaviz/configs/default/plugins/model_fitting/tests/test_plugin.py +++ b/jdaviz/configs/default/plugins/model_fitting/tests/test_plugin.py @@ -317,7 +317,7 @@ def test_invalid_subset(specviz_helper, spectrum1d): plugin.spectral_subset = 'Subset 1' assert not plugin._obj.spectral_subset_valid - with pytest.raises(ValueError, match='spectral subset is outside data range'): + with pytest.raises(ValueError, match=r"spectral subset 'Subset 1' \(5000.0, 5888.888888888889\) is outside data range of 'right_spectrum' \(6000.0, 8000.0\)"): # noqa plugin.calculate_fit() plugin.dataset = 'left_spectrum' diff --git a/jdaviz/configs/specviz/plugins/line_analysis/line_analysis.py b/jdaviz/configs/specviz/plugins/line_analysis/line_analysis.py index fd8532536a..1e673e5b13 100644 --- a/jdaviz/configs/specviz/plugins/line_analysis/line_analysis.py +++ b/jdaviz/configs/specviz/plugins/line_analysis/line_analysis.py @@ -271,7 +271,8 @@ def get_results(self): # is closed if not self.spectral_subset_valid: - raise ValueError("spectral subset is outside data range") + valid, spec_range, subset_range = self._check_dataset_spectral_subset_valid(return_ranges=True) # noqa + raise ValueError(f"spectral subset '{self.spectral_subset.selected}' {subset_range} is outside data range of '{self.dataset.selected}' {spec_range}") # noqa self._calculate_statistics(ignore_plugin_closed=True) return self.results diff --git a/jdaviz/configs/specviz/plugins/line_analysis/tests/test_line_analysis.py b/jdaviz/configs/specviz/plugins/line_analysis/tests/test_line_analysis.py index 3ffef442c9..a6f6d13a28 100644 --- a/jdaviz/configs/specviz/plugins/line_analysis/tests/test_line_analysis.py +++ b/jdaviz/configs/specviz/plugins/line_analysis/tests/test_line_analysis.py @@ -427,7 +427,7 @@ def test_invalid_subset(specviz_helper, spectrum1d): plugin.spectral_subset = 'Subset 1' assert not plugin._obj.spectral_subset_valid - with pytest.raises(ValueError, match='spectral subset is outside data range'): + with pytest.raises(ValueError, match=r"spectral subset 'Subset 1' \(5000.0, 5888.888888888889\) is outside data range of 'right_spectrum' \(6000.0, 8000.0\)"): # noqa plugin.get_results() plugin.dataset = 'left_spectrum' diff --git a/jdaviz/core/template_mixin.py b/jdaviz/core/template_mixin.py index 7ae373147a..e899cbe11c 100644 --- a/jdaviz/core/template_mixin.py +++ b/jdaviz/core/template_mixin.py @@ -1071,7 +1071,7 @@ class DatasetSpectralSubsetValidMixin(VuetifyTemplate, HubListener): spectral_subset_valid = Bool(True).tag(sync=True) @observe("dataset_selected", "spectral_subset_selected") - def _check_dataset_spectral_subset_valid(self, event={}): + def _check_dataset_spectral_subset_valid(self, event={}, return_ranges=False): # TODO: does this window not account for gaps? Should we add the warning? # or can this be removed (see note above in _dataset_selected_changed) if self.spectral_subset_selected == "Entire Spectrum": @@ -1081,7 +1081,12 @@ def _check_dataset_spectral_subset_valid(self, event={}): spec_min, spec_max = np.nanmin(spec.spectral_axis), np.nanmax(spec.spectral_axis) subset_min, subset_max = self.spectral_subset.selected_min_max(spec) self.spectral_subset_valid = bool(subset_min < spec_max and subset_max > spec_min) - return self.spectral_subset_valid + if return_ranges: + return (self.spectral_subset_valid, + (spec_min.value, spec_max.value), + (subset_min.value, subset_max.value)) + else: + return self.spectral_subset_valid class ViewerSelect(SelectPluginComponent):