Skip to content

Commit 099ee74

Browse files
committed
tests: test tooltips for ROC analysis
1 parent 835f902 commit 099ee74

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

Orange/widgets/evaluate/tests/test_owrocanalysis.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import copy
55
import numpy as np
66

7+
from AnyQt.QtWidgets import QToolTip
8+
79
import Orange.data
810
import Orange.evaluation
911
import Orange.classification
@@ -12,6 +14,7 @@
1214
from Orange.widgets.evaluate.owrocanalysis import OWROCAnalysis
1315
from Orange.widgets.evaluate.tests.base import EvaluateTest
1416
from Orange.widgets.tests.base import WidgetTest
17+
from Orange.widgets.tests.utils import mouseMove
1518

1619

1720
class TestROC(unittest.TestCase):
@@ -156,3 +159,60 @@ def test_nan_input(self):
156159
self.assertTrue(self.widget.Error.invalid_results.is_shown())
157160
self.send_signal(self.widget.Inputs.evaluation_results, None)
158161
self.assertFalse(self.widget.Error.invalid_results.is_shown())
162+
163+
def test_tooltips(self):
164+
data_in = Orange.data.Table("titanic")
165+
res = Orange.evaluation.TestOnTrainingData(
166+
data=data_in,
167+
learners=[Orange.classification.KNNLearner(),
168+
Orange.classification.LogisticRegressionLearner()],
169+
store_data=True
170+
)
171+
172+
self.send_signal(self.widget.Inputs.evaluation_results, res)
173+
self.widget.roc_averaging = OWROCAnalysis.Merge
174+
self.widget.target_index = 0
175+
self.widget.selected_classifiers = [0, 1]
176+
vb = self.widget.plot.getViewBox()
177+
vb.childTransform() # Force pyqtgraph to update transforms
178+
179+
curve = self.widget.plot_curves(self.widget.target_index, 0)
180+
curve_merge = curve.merge()
181+
view = self.widget.plotview
182+
item = curve_merge.curve_item # type: pg.PlotCurveItem
183+
184+
# no tooltips to be shown
185+
pos = item.mapToScene(0.0, 1.0)
186+
pos = view.mapFromScene(pos)
187+
mouseMove(view.viewport(), pos)
188+
self.assertIs(self.widget._tooltip_cache, None)
189+
190+
# test single point
191+
pos = item.mapToScene(0.22504, 0.45400)
192+
pos = view.mapFromScene(pos)
193+
mouseMove(view.viewport(), pos)
194+
shown_thresh = self.widget._tooltip_cache[1]
195+
self.assertTrue(QToolTip.isVisible())
196+
np.testing.assert_almost_equal(shown_thresh, [0.40000], decimal=5)
197+
198+
pos = item.mapToScene(0.0, 0.0)
199+
pos = view.mapFromScene(pos)
200+
# test overlapping points
201+
mouseMove(view.viewport(), pos)
202+
shown_thresh = self.widget._tooltip_cache[1]
203+
self.assertTrue(QToolTip.isVisible())
204+
np.testing.assert_almost_equal(shown_thresh, [1.8, 1.89336], decimal=5)
205+
206+
# test that cache is invalidated when changing averaging mode
207+
self.widget.roc_averaging = OWROCAnalysis.Threshold
208+
self.widget._replot()
209+
mouseMove(view.viewport(), pos)
210+
shown_thresh = self.widget._tooltip_cache[1]
211+
self.assertTrue(QToolTip.isVisible())
212+
np.testing.assert_almost_equal(shown_thresh, [1, 1])
213+
214+
# test nan thresholds
215+
self.widget.roc_averaging = OWROCAnalysis.Vertical
216+
self.widget._replot()
217+
mouseMove(view.viewport(), pos)
218+
self.assertIs(self.widget._tooltip_cache, None)

0 commit comments

Comments
 (0)