Skip to content

Commit 32ec4bf

Browse files
committed
owtestlearners: Fix migration of old settings
1 parent dbab861 commit 32ec4bf

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

Orange/widgets/evaluate/owtestlearners.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class OWTestLearners(OWWidget):
138138
outputs = [("Predictions", Table),
139139
("Evaluation Results", Results)]
140140

141-
settings_version = 2
141+
settings_version = 3
142142
settingsHandler = settings.PerfectDomainContextHandler(metas_in_res=True)
143143

144144
#: Resampling/testing types
@@ -750,10 +750,13 @@ def send_report(self):
750750
@classmethod
751751
def migrate_settings(cls, settings_, version):
752752
if version < 2:
753-
if not hasattr(settings_["context_settings"][0], "attributes"):
754-
settings_["context_settings"][0].attributes = {}
755753
if settings_["resampling"] > 0:
756754
settings_["resampling"] += 1
755+
if version < 3:
756+
# Older version used an incompatible context handler
757+
settings_["context_settings"] = [
758+
c for c in settings_.get("context_settings", ())
759+
if not hasattr(c, 'classes')]
757760

758761

759762
def learner_name(learner):

Orange/widgets/evaluate/tests/test_owtestlearners.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
# pylint: disable=missing-docstring
22
# pylint: disable=protected-access
3+
import collections
34
import unittest
45

5-
import collections
66
import numpy as np
7-
87
from AnyQt.QtWidgets import QMenu
98
from AnyQt.QtCore import QPoint
109

11-
from Orange.data import Table, Domain
1210
from Orange.classification import MajorityLearner
13-
from Orange.regression import MeanLearner
14-
from Orange.modelling import ConstantLearner
15-
11+
from Orange.data import Table, Domain
1612
from Orange.evaluation import Results, TestOnTestData
13+
from Orange.modelling import ConstantLearner
14+
from Orange.regression import MeanLearner
15+
from Orange.widgets.evaluate.owtestlearners import (
16+
OWTestLearners, results_one_vs_rest)
17+
from Orange.widgets.settings import (
18+
ClassValuesContextHandler, PerfectDomainContextHandler)
1719
from Orange.widgets.tests.base import WidgetTest
18-
from Orange.widgets.evaluate.owtestlearners import OWTestLearners
19-
from Orange.widgets.evaluate import owtestlearners
2020

2121

2222
class TestOWTestLearners(WidgetTest):
@@ -132,15 +132,22 @@ def execmenu(*_):
132132
unittest.mock.patch("AnyQt.QtWidgets.QMenu.exec", execmenu):
133133
w.show_column_chooser(QPoint(0, 0))
134134

135+
def test_migrate_removes_invalid_contexts(self):
136+
context_invalid = ClassValuesContextHandler().new_context([0, 1, 2])
137+
context_valid = PerfectDomainContextHandler().new_context(*[[]] * 4)
138+
settings = {'context_settings': [context_invalid, context_valid]}
139+
self.widget.migrate_settings(settings, 2)
140+
self.assertEqual(settings['context_settings'], [context_valid])
141+
135142

136143
class TestHelpers(unittest.TestCase):
137144
def test_results_one_vs_rest(self):
138145
data = Table("lenses")
139146
learners = [MajorityLearner()]
140147
res = TestOnTestData(data[1::2], data[::2], learners=learners)
141-
r1 = owtestlearners.results_one_vs_rest(res, pos_index=0)
142-
r2 = owtestlearners.results_one_vs_rest(res, pos_index=1)
143-
r3 = owtestlearners.results_one_vs_rest(res, pos_index=2)
148+
r1 = results_one_vs_rest(res, pos_index=0)
149+
r2 = results_one_vs_rest(res, pos_index=1)
150+
r3 = results_one_vs_rest(res, pos_index=2)
144151

145152
np.testing.assert_almost_equal(np.sum(r1.probabilities, axis=2), 1.0)
146153
np.testing.assert_almost_equal(np.sum(r2.probabilities, axis=2), 1.0)

0 commit comments

Comments
 (0)