From 0cefc175f4e7facac38eba0bfd6b4c6ef1a29ddd Mon Sep 17 00:00:00 2001 From: janezd Date: Fri, 25 Feb 2022 08:35:31 +0100 Subject: [PATCH] Calibration plot: Fix crash for Results without folds --- Orange/widgets/evaluate/owcalibrationplot.py | 2 +- .../evaluate/tests/test_owcalibrationplot.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Orange/widgets/evaluate/owcalibrationplot.py b/Orange/widgets/evaluate/owcalibrationplot.py index 72c2822d8c1..853c7ae3c42 100644 --- a/Orange/widgets/evaluate/owcalibrationplot.py +++ b/Orange/widgets/evaluate/owcalibrationplot.py @@ -487,7 +487,7 @@ def commit(self): if results is not None: problems = [ msg for condition, msg in ( - (len(results.folds) > 1, + (results.folds is not None and len(results.folds) > 1, "each training data sample produces a different model"), (results.models is None, "test results do not contain stored models - try testing " diff --git a/Orange/widgets/evaluate/tests/test_owcalibrationplot.py b/Orange/widgets/evaluate/tests/test_owcalibrationplot.py index 87f1fdc9e17..bfcb9cd9198 100644 --- a/Orange/widgets/evaluate/tests/test_owcalibrationplot.py +++ b/Orange/widgets/evaluate/tests/test_owcalibrationplot.py @@ -1,5 +1,6 @@ import copy import warnings +import unittest from unittest.mock import Mock, patch import numpy as np @@ -637,3 +638,19 @@ def test_warn_nan_probabilities(self, *_): self.assertTrue(widget.Warning.omitted_nan_prob_points.is_shown()) self._set_list_selection(widget.controls.selected_classifiers, [0, 2]) self.assertFalse(widget.Warning.omitted_folds.is_shown()) + + @patch("Orange.widgets.evaluate.owcalibrationplot.ThresholdClassifier") + @patch("Orange.widgets.evaluate.owcalibrationplot.CalibratedLearner") + def test_no_folds(self, *_): + """Warn about omitted points with nan probabiities""" + widget = self.widget + + self.results.folds = None + self.send_signal(widget.Inputs.evaluation_results, self.results) + widget.selected_classifiers = [0] + widget.commit.now() + self.assertIsNotNone(self.get_output(widget.Outputs.calibrated_model)) + + +if __name__ == "__main__": + unittest.main()