Skip to content

Commit 7ef60c4

Browse files
committed
OWSVM: Upgrade unittests
1 parent d104f32 commit 7ef60c4

File tree

2 files changed

+108
-95
lines changed

2 files changed

+108
-95
lines changed
Lines changed: 56 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,69 @@
11
# Test methods with long descriptive names can omit docstrings
22
# pylint: disable=missing-docstring
3-
from PyQt4 import QtGui
4-
5-
from Orange.data import Table
63
from Orange.widgets.classify.owsvmclassification import OWSVMClassification
7-
from Orange.widgets.tests.base import WidgetTest
4+
from Orange.widgets.tests.base import (WidgetTest, DefaultParameterMapping,
5+
ParameterMapping, WidgetLearnerTestMixin)
86

97

10-
class TestOWSVMClassification(WidgetTest):
8+
class TestOWSVMClassification(WidgetTest, WidgetLearnerTestMixin):
119
def setUp(self):
12-
self.widget = self.create_widget(OWSVMClassification)
13-
self.widget.spin_boxes = self.widget.findChildren(QtGui.QDoubleSpinBox)
14-
# max iter spin
15-
self.widget.spin_boxes.append(self.widget.findChildren(QtGui.QSpinBox)[0])
16-
# max iter checkbox
17-
self.widget.max_iter_check_box = self.widget.findChildren(QtGui.QCheckBox)[0]
18-
self.spin_boxes = self.widget.spin_boxes
19-
self.event_data = None
20-
21-
def test_kernel_equation_run(self):
22-
""" Check if right text is written for specific kernel """
23-
for i in range(0, 4):
24-
if self.widget.kernel_box.buttons[i].isChecked():
25-
self.assertEqual(self.widget.kernel_eq, self.widget.kernels[i][1])
26-
27-
def test_kernel_equation(self):
28-
""" Check if right text is written for specific kernel after click """
29-
for index in range(0, 4):
30-
self.widget.kernel_box.buttons[index].click()
31-
self.assertEqual(self.widget.kernel_eq, self.widget.kernels[index][1])
10+
self.widget = self.create_widget(OWSVMClassification,
11+
stored_settings={"auto_apply": False})
12+
self.init()
13+
gamma_spin = self.widget._kernel_params[0]
14+
values = [self.widget._default_gamma, gamma_spin.maximum()]
3215

33-
def test_kernel_display_run(self):
34-
""" Check if right spinner box for selected kernel are visible after widget start """
35-
for button_pos, value in ((0, [False, False, False]),
36-
(1, [True, True, True]),
37-
(2, [True, False, False]),
38-
(3, [True, True, False])):
39-
if self.widget.kernel_box.buttons[button_pos].isChecked():
40-
self.assertEqual([not self.spin_boxes[i].box.isHidden() for i in range(2, 5)],
41-
value)
42-
break
16+
def getter():
17+
value = gamma_spin.value()
18+
return gamma_spin.specialValueText() \
19+
if value == gamma_spin.minimum() else value
4320

44-
def test_kernel_display(self):
45-
""" Check if right spinner box for selected kernel are visible after we select kernel """
46-
for button_pos, value in ((0, [False, False, False]),
47-
(1, [True, True, True]),
48-
(2, [True, False, False]),
49-
(3, [True, True, False])):
50-
self.widget.kernel_box.buttons[button_pos].click()
51-
self.widget.kernel_box.buttons[button_pos].isChecked()
52-
self.assertEqual([not self.spin_boxes[i].box.isHidden() for i in range(2, 5)], value)
21+
def setter(value):
22+
if value == gamma_spin.specialValueText():
23+
gamma_spin.setValue(gamma_spin.minimum())
24+
else:
25+
gamma_spin.setValue(value)
5326

54-
def test_optimization_box_visible(self):
55-
""" Check if both spinner box is visible after starting widget """
56-
self.assertEqual(self.spin_boxes[5].box.isHidden(), False)
57-
self.assertEqual(self.spin_boxes[6].box.isHidden(), False)
27+
self.parameters = [
28+
ParameterMapping("C", self.widget.c_spin),
29+
ParameterMapping("gamma", self.widget._kernel_params[0],
30+
values=values, setter=setter, getter=getter),
31+
ParameterMapping("coef0", self.widget._kernel_params[1]),
32+
ParameterMapping("degree", self.widget._kernel_params[2]),
33+
ParameterMapping("tol", self.widget.tol_spin),
34+
ParameterMapping("max_iter", self.widget.max_iter_spin[1])]
5835

59-
def test_optimization_box_checked(self):
60-
""" Check if spinner box for iteration limit is enabled or disabled """
61-
for value in (True, False):
62-
self.widget.max_iter_check_box.setChecked(value)
63-
self.assertEqual(self.widget.max_iter_check_box.isChecked(), value)
64-
self.assertEqual(self.spin_boxes[6].isEnabled(), value)
36+
def test_parameters_unchecked(self):
37+
"""Check learner and model for various values of all parameters
38+
when Iteration limit is not checked
39+
"""
40+
self.widget.max_iter_spin[0].setCheckState(False)
41+
self.parameters[-1] = DefaultParameterMapping("max_iter", -1)
42+
self.test_parameters()
6543

66-
def test_type_button_checked(self):
67-
""" Check if SVM type is selected after click """
68-
self.widget.type_box.buttons[0].click()
69-
self.assertEqual(self.widget.type_box.buttons[0].isChecked(), True)
70-
self.widget.type_box.buttons[1].click()
71-
self.assertEqual(self.widget.type_box.buttons[1].isChecked(), True)
44+
def test_parameters_svm_type(self):
45+
"""Check learner and model for various values of all parameters
46+
when NuSVM is chosen
47+
"""
48+
self.assertEqual(self.widget.svmtype, OWSVMClassification.C_SVC)
49+
# setChecked(True) does not trigger callback event
50+
self.widget.nu_radio.click()
51+
self.assertEqual(self.widget.svmtype, OWSVMClassification.Nu_SVC)
52+
self.parameters[0] = ParameterMapping("nu", self.widget.nu_spin)
53+
self.test_parameters()
7254

73-
def test_type_button_properties_visible(self):
74-
""" Check if spinner box in SVM type are visible """
75-
self.assertEqual(not self.spin_boxes[0].isHidden(), True)
76-
self.assertEqual(not self.spin_boxes[1].isHidden(), True)
77-
78-
def test_data_before_apply(self):
79-
""" Check if data are set """
80-
self.widget.set_data(Table("iris")[:100])
81-
self.widget.apply()
82-
self.assertEqual(len(self.widget.data), 100)
83-
84-
def test_output_signal_learner(self):
85-
""" Check if we have on output learner """
86-
self.widget.kernel_box.buttons[0].click()
87-
self.widget.set_data(Table("iris")[:100])
88-
self.widget.apply()
89-
self.assertNotEqual(self.widget.learner, None)
55+
def test_kernel_equation(self):
56+
"""Check if the right equation is written according to kernel """
57+
for i in range(4):
58+
self.widget.kernel_box.buttons[i].click()
59+
self.assertEqual(self.widget.kernel_eq, self.widget.kernels[i][1])
9060

91-
def test_output_params(self):
92-
""" Check ouput params """
93-
self.widget.kernel_box.buttons[0].click()
94-
self.widget.set_data(Table("iris")[:100])
95-
self.widget.max_iter_check_box.setChecked(True)
96-
self.widget.apply()
97-
self.widget.type_box.buttons[0].click()
98-
params = self.widget.learner.params
99-
self.assertEqual(params.get('C'), self.spin_boxes[0].value())
100-
self.widget.type_box.buttons[1].click()
101-
params = self.widget.learner.params
102-
self.assertEqual(params.get('nu'), self.spin_boxes[1].value())
103-
self.assertEqual(params.get('gamma'), self.spin_boxes[2].value())
104-
self.assertEqual(params.get('coef0'), self.spin_boxes[3].value())
105-
self.assertEqual(params.get('degree'), self.spin_boxes[4].value())
106-
self.assertEqual(params.get('tol'), self.spin_boxes[5].value())
107-
self.assertEqual(params.get('max_iter'), self.spin_boxes[6].value())
61+
def test_kernel_spins(self):
62+
"""Check if the right spins are visible according to kernel """
63+
for i, hidden in enumerate([[True, True, True],
64+
[False, False, False],
65+
[False, True, True],
66+
[False, False, True]]):
67+
self.widget.kernel_box.buttons[i].click()
68+
self.assertEqual([self.widget._kernel_params[j].box.isHidden()
69+
for j in range(3)], hidden)
Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,62 @@
11
# Test methods with long descriptive names can omit docstrings
22
# pylint: disable=missing-docstring
33
from Orange.widgets.regression.owsvmregression import OWSVMRegression
4-
from Orange.widgets.tests.base import WidgetTest, WidgetLearnerTestMixin
4+
from Orange.widgets.tests.base import (WidgetTest, WidgetLearnerTestMixin,
5+
ParameterMapping)
56

67

78
class TestOWSVMRegression(WidgetTest, WidgetLearnerTestMixin):
89
def setUp(self):
910
self.widget = self.create_widget(OWSVMRegression,
1011
stored_settings={"auto_apply": False})
1112
self.init()
13+
gamma_spin = self.widget._kernel_params[0]
14+
values = [self.widget._default_gamma, gamma_spin.maximum()]
15+
16+
def getter():
17+
value = gamma_spin.value()
18+
return gamma_spin.specialValueText() \
19+
if value == gamma_spin.minimum() else value
20+
21+
def setter(value):
22+
if value == gamma_spin.specialValueText():
23+
gamma_spin.setValue(gamma_spin.minimum())
24+
else:
25+
gamma_spin.setValue(value)
26+
27+
self.parameters = [
28+
ParameterMapping("C", self.widget.epsilon_C_spin),
29+
ParameterMapping("epsilon", self.widget.epsilon_spin),
30+
ParameterMapping("gamma", self.widget._kernel_params[0],
31+
values=values, setter=setter, getter=getter),
32+
ParameterMapping("coef0", self.widget._kernel_params[1]),
33+
ParameterMapping("degree", self.widget._kernel_params[2]),
34+
ParameterMapping("tol", self.widget.tol_spin)]
35+
36+
def test_parameters_svr_type(self):
37+
"""Check learner and model for various values of all parameters
38+
when NuSVR is chosen
39+
"""
40+
self.assertEqual(self.widget.svrtype, OWSVMRegression.Epsilon_SVR)
41+
# setChecked(True) does not trigger callback event
42+
self.widget.nu_radio.click()
43+
self.assertEqual(self.widget.svrtype, OWSVMRegression.Nu_SVR)
44+
self.parameters[0] = ParameterMapping("C", self.widget.nu_C_spin)
45+
self.parameters[1] = ParameterMapping("nu", self.widget.nu_spin)
46+
self.test_parameters()
47+
48+
def test_kernel_equation(self):
49+
"""Check if the right equation is written according to kernel """
50+
for i in range(4):
51+
self.widget.kernel_box.buttons[i].click()
52+
self.assertEqual(self.widget.kernel_eq, self.widget.kernels[i][1])
53+
54+
def test_kernel_spins(self):
55+
"""Check if the right spins are visible according to kernel """
56+
for i, hidden in enumerate([[True, True, True],
57+
[False, False, False],
58+
[False, True, True],
59+
[False, False, True]]):
60+
self.widget.kernel_box.buttons[i].click()
61+
self.assertEqual([self.widget._kernel_params[j].box.isHidden()
62+
for j in range(3)], hidden)

0 commit comments

Comments
 (0)