Skip to content

Commit 1add477

Browse files
authored
Merge pull request #2316 from jerneju/memory-testlearners
[FIX] Test & Learn: handling memory error
2 parents f81d02c + de1d842 commit 1add477

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

Orange/widgets/evaluate/owtestlearners.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ class Error(OWWidget.Error):
217217
too_many_folds = Msg("Number of folds exceeds the data size")
218218
class_inconsistent = Msg("Test and train data sets "
219219
"have different target variables.")
220+
memory_error = Msg("Not enough memory.")
220221

221222
class Warning(OWWidget.Warning):
222223
missing_data = \
@@ -648,19 +649,23 @@ def commit(self):
648649
"""
649650
Commit the results to output.
650651
"""
652+
self.Error.memory_error.clear()
651653
valid = [slot for slot in self.learners.values()
652654
if slot.results is not None and slot.results.success]
655+
combined = None
656+
predictions = None
653657
if valid:
654658
# Evaluation results
655659
combined = results_merge([slot.results.value for slot in valid])
656660
combined.learner_names = [learner_name(slot.learner)
657661
for slot in valid]
658662

659663
# Predictions & Probabilities
660-
predictions = combined.get_augmented_data(combined.learner_names)
661-
else:
662-
combined = None
663-
predictions = None
664+
try:
665+
predictions = combined.get_augmented_data(combined.learner_names)
666+
except MemoryError:
667+
self.Error.memory_error()
668+
664669
self.Outputs.evaluations_results.send(combined)
665670
self.Outputs.predictions.send(predictions)
666671

Orange/widgets/evaluate/tests/test_owtestlearners.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,21 @@ def test_migrate_removes_invalid_contexts(self):
141141
self.widget.migrate_settings(settings, 2)
142142
self.assertEqual(settings['context_settings'], [context_valid])
143143

144+
def test_memory_error(self):
145+
"""
146+
Handling memory error.
147+
GH-2316
148+
"""
149+
data = Table("iris")[::3]
150+
self.send_signal("Data", data)
151+
self.assertFalse(self.widget.Error.memory_error.is_shown())
152+
153+
with unittest.mock.patch(
154+
"Orange.evaluation.testing.Results.get_augmented_data",
155+
side_effect=MemoryError):
156+
self.send_signal("Learner", MajorityLearner(), 0, wait=5000)
157+
self.assertTrue(self.widget.Error.memory_error.is_shown())
158+
144159

145160
class TestHelpers(unittest.TestCase):
146161
def test_results_one_vs_rest(self):

0 commit comments

Comments
 (0)