Skip to content

Commit 3bdc218

Browse files
committed
Preprocess: Add missing __repr__methods
1 parent 0d3e3ee commit 3bdc218

File tree

2 files changed

+40
-6
lines changed

2 files changed

+40
-6
lines changed

Orange/widgets/data/owpreprocess.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from Orange.preprocess import Continuize, ProjectPCA, RemoveNaNRows, \
2828
ProjectCUR, Scale as _Scale, Randomize as _Randomize, RemoveSparse
2929
from Orange.widgets import widget, gui
30+
from Orange.widgets.utils.localization import pl
3031
from Orange.widgets.settings import Setting
3132
from Orange.widgets.utils.overlay import OverlayWidget
3233
from Orange.widgets.utils.sql import check_sql_input
@@ -253,9 +254,9 @@ def createinstance(params):
253254
def __repr__(self):
254255
return self.Continuizers[self.__treatment]
255256

256-
class RemoveSparseEditor(BaseEditor):
257257

258-
options = ["missing", "zeros"]
258+
class RemoveSparseEditor(BaseEditor):
259+
options = ["missing values", "zeros"]
259260

260261
def __init__(self, parent=None, **kwargs):
261262
super().__init__(parent, **kwargs)
@@ -266,11 +267,9 @@ def __init__(self, parent=None, **kwargs):
266267
self.setLayout(QVBoxLayout())
267268

268269
self.layout().addWidget(QLabel("Remove features with too many"))
269-
options = ["missing values",
270-
"zeros"]
271270
self.filter_buttons = QButtonGroup(exclusive=True)
272271
self.filter_buttons.buttonClicked.connect(self.filterByClicked)
273-
for idx, option, in enumerate(options):
272+
for idx, option, in enumerate(self.options):
274273
btn = QRadioButton(self, text=option, checked=idx == 0)
275274
self.filter_buttons.addButton(btn, id=idx)
276275
self.layout().addWidget(btn)
@@ -354,6 +353,15 @@ def createinstance(params):
354353
threshold = params.pop('percThresh', 5) / 100
355354
return RemoveSparse(threshold, filter0)
356355

356+
def __repr__(self):
357+
desc = f"remove features with too many {self.options[self.filter0]}, threshold: "
358+
if self.useFixedThreshold:
359+
desc += f"{self.fixedThresh} {pl(self.fixedThresh, 'instance')}"
360+
else:
361+
desc += f"{self.percThresh} %"
362+
return desc
363+
364+
357365
class ImputeEditor(BaseEditor):
358366
(NoImputation, Constant, Average,
359367
Model, Random, DropRows, DropColumns) = 0, 1, 2, 3, 4, 5, 6
@@ -727,6 +735,12 @@ def createinstance(params):
727735
# further implementations
728736
raise NotImplementedError
729737

738+
def __repr__(self):
739+
if self.__strategy == self.Fixed:
740+
return f"select {self.__k} {pl(self.__k,'feature')}"
741+
else:
742+
return f"select {self.__p} % features"
743+
730744

731745
def index_to_enum(enum, i):
732746
"""Enums, by default, are not int-comparable, so use an ad-hoc mapping of

Orange/widgets/data/tests/test_owpreprocess.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Test methods with long descriptive names can omit docstrings
22
# pylint: disable=missing-docstring,unsubscriptable-object
3+
import unittest
4+
35
import numpy as np
46

57
from Orange.data import Table
@@ -281,8 +283,8 @@ def test_editor(self):
281283
self.assertEqual(p.rank, 5)
282284
self.assertEqual(p.max_error, 0.5)
283285

284-
class TestRemoveSparseEditor(WidgetTest):
285286

287+
class TestRemoveSparseEditor(WidgetTest):
286288
def test_editor(self):
287289
widget = owpreprocess.RemoveSparseEditor()
288290
self.assertEqual(
@@ -304,3 +306,21 @@ def test_editor(self):
304306
self.assertIsInstance(p, RemoveSparse)
305307
self.assertEqual(p.threshold, 30)
306308
self.assertFalse(p.filter0)
309+
310+
def test_repr(self):
311+
widget = owpreprocess.RemoveSparseEditor()
312+
for widget.useFixedThreshold in (False, True):
313+
repr(widget)
314+
315+
316+
class TestRandomFeatureSelectEditor(WidgetTest):
317+
def test_repr(self):
318+
widget = owpreprocess.RandomFeatureSelectEditor()
319+
for strategy in (owpreprocess.RandomFeatureSelectEditor.Fixed,
320+
owpreprocess.RandomFeatureSelectEditor.Percentage):
321+
widget.setStrategy(strategy)
322+
repr(widget)
323+
324+
325+
if __name__ == "__main__":
326+
unittest.main()

0 commit comments

Comments
 (0)