Skip to content

Commit 297ec2c

Browse files
committed
Gradient Boosting - Remove try/catch around imports
1 parent 041c0ce commit 297ec2c

File tree

5 files changed

+18
-103
lines changed

5 files changed

+18
-103
lines changed

Orange/classification/__init__.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,6 @@
2020
from .sgd import *
2121
from .neural_network import *
2222
from .calibration import *
23-
try:
24-
from .catgb import *
25-
except ModuleNotFoundError:
26-
pass
23+
from .catgb import *
2724
from .gb import *
28-
try:
29-
from .xgb import *
30-
except Exception:
31-
pass
25+
from .xgb import *

Orange/modelling/__init__.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,6 @@
1111
from .randomforest import *
1212
from .svm import *
1313
from .tree import *
14-
try:
15-
from .catgb import *
16-
except ImportError:
17-
pass
14+
from .catgb import *
1815
from .gb import *
19-
try:
20-
from .xgb import *
21-
except ImportError:
22-
pass
16+
from .xgb import *

Orange/regression/__init__.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,7 @@
1414
from .tree import *
1515
from .neural_network import *
1616
from ..classification.simple_tree import *
17-
try:
18-
from .catgb import *
19-
except ModuleNotFoundError:
20-
pass
17+
from .catgb import *
2118
from .gb import *
22-
try:
23-
from .xgb import *
24-
except Exception:
25-
pass
19+
from .xgb import *
2620
from .curvefit import *

Orange/widgets/model/owgradientboosting.py

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,44 +9,26 @@
99
from Orange.base import Learner
1010
from Orange.data import Table
1111
from Orange.modelling import GBLearner
12-
13-
try:
14-
from Orange.modelling import CatGBLearner
15-
except ImportError:
16-
CatGBLearner = None
17-
try:
18-
from Orange.modelling import XGBLearner, XGBRFLearner
19-
except ImportError:
20-
XGBLearner = XGBRFLearner = None
21-
12+
from Orange.modelling import CatGBLearner
13+
from Orange.modelling import XGBLearner, XGBRFLearner
2214
from Orange.widgets import gui
2315
from Orange.widgets.settings import Setting, SettingProvider
2416
from Orange.widgets.utils.owlearnerwidget import OWBaseLearner
2517
from Orange.widgets.utils.widgetpreview import WidgetPreview
2618

2719

2820
class LearnerItemModel(QStandardItemModel):
29-
LEARNERS = [
30-
(GBLearner, "", ""),
31-
(XGBLearner, "Extreme Gradient Boosting (xgboost)", "xgboost"),
32-
(XGBRFLearner, "Extreme Gradient Boosting Random Forest (xgboost)",
33-
"xgboost"),
34-
(CatGBLearner, "Gradient Boosting (catboost)", "catboost"),
35-
]
21+
LEARNERS = [GBLearner, XGBLearner, XGBRFLearner, CatGBLearner]
3622

3723
def __init__(self, parent):
3824
super().__init__(parent)
3925
self._add_data()
4026

4127
def _add_data(self):
42-
for cls, opt_name, lib in self.LEARNERS:
28+
for cls in self.LEARNERS:
4329
item = QStandardItem()
44-
imported = bool(cls)
45-
name = cls.name if imported else opt_name
30+
name = cls.name
4631
item.setData(f"{name}", Qt.DisplayRole)
47-
item.setEnabled(imported)
48-
if not imported:
49-
item.setToolTip(f"{lib} is not installed")
5032
self.appendRow(item)
5133

5234

Orange/widgets/model/tests/test_owgradientboosting.py

Lines changed: 7 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,18 @@
11
import json
22
import unittest
3-
import sys
43
from typing import Type
5-
from unittest.mock import patch, Mock
4+
from unittest.mock import Mock
65

76
from Orange.classification import GBClassifier
87

9-
try:
10-
from Orange.classification import XGBClassifier, XGBRFClassifier
11-
except ImportError:
12-
XGBClassifier = XGBRFClassifier = None
13-
try:
14-
from Orange.classification import CatGBClassifier
15-
except ImportError:
16-
CatGBClassifier = None
8+
from Orange.classification import XGBClassifier, XGBRFClassifier
9+
from Orange.classification import CatGBClassifier
1710
from Orange.data import Table
18-
from Orange.modelling import GBLearner
1911
from Orange.preprocess.score import Scorer
2012
from Orange.regression import GBRegressor
2113

22-
try:
23-
from Orange.regression import XGBRegressor, XGBRFRegressor
24-
except ImportError:
25-
XGBRegressor = XGBRFRegressor = None
26-
try:
27-
from Orange.regression import CatGBRegressor
28-
except ImportError:
29-
CatGBRegressor = None
14+
from Orange.regression import XGBRegressor, XGBRFRegressor
15+
from Orange.regression import CatGBRegressor
3016
from Orange.widgets.model.owgradientboosting import OWGradientBoosting, \
3117
LearnerItemModel, GBLearnerEditor, XGBLearnerEditor, XGBRFLearnerEditor, \
3218
CatGBLearnerEditor, BaseEditor
@@ -65,16 +51,6 @@ def test_model(self):
6551
self.assertEqual(model.item(i).isEnabled(),
6652
classifiers[i] is not None)
6753

68-
@patch("Orange.widgets.model.owgradientboosting.LearnerItemModel.LEARNERS",
69-
[(GBLearner, "", ""),
70-
(None, "Gradient Boosting (catboost)", "catboost")])
71-
def test_missing_lib(self):
72-
widget = create_parent(CatGBLearnerEditor)
73-
model = LearnerItemModel(widget)
74-
self.assertEqual(model.rowCount(), 2)
75-
self.assertTrue(model.item(0).isEnabled())
76-
self.assertFalse(model.item(1).isEnabled())
77-
7854

7955
class BaseEditorTest(GuiTest):
8056
EditorClass: Type[BaseEditor] = None
@@ -146,7 +122,6 @@ def test_arguments(self):
146122
"colsample_bynode": 1, "subsample": 1, "random_state": 0}
147123
self.assertDictEqual(self.editor.get_arguments(), args)
148124

149-
@unittest.skipIf(XGBClassifier is None, "Missing 'xgboost' package")
150125
def test_learner_parameters(self):
151126
params = (("Method", "Extreme Gradient Boosting (xgboost)"),
152127
("Number of trees", 100),
@@ -160,7 +135,6 @@ def test_learner_parameters(self):
160135
("Fraction of features for each split", 1))
161136
self.assertTupleEqual(self.editor.get_learner_parameters(), params)
162137

163-
@unittest.skipIf(XGBClassifier is None, "Missing 'xgboost' package")
164138
def test_default_parameters_cls(self):
165139
data = Table("heart_disease")
166140
booster = XGBClassifier()
@@ -178,7 +152,6 @@ def test_default_parameters_cls(self):
178152
self.assertEqual(int(tp["colsample_bylevel"]), self.editor.colsample_bylevel)
179153
self.assertEqual(int(tp["colsample_bynode"]), self.editor.colsample_bynode)
180154

181-
@unittest.skipIf(XGBRegressor is None, "Missing 'xgboost' package")
182155
def test_default_parameters_reg(self):
183156
data = Table("housing")
184157
booster = XGBRegressor()
@@ -206,7 +179,6 @@ def test_arguments(self):
206179
"colsample_bynode": 1, "subsample": 1, "random_state": 0}
207180
self.assertDictEqual(self.editor.get_arguments(), args)
208181

209-
@unittest.skipIf(XGBRFClassifier is None, "Missing 'xgboost' package")
210182
def test_learner_parameters(self):
211183
params = (("Method",
212184
"Extreme Gradient Boosting Random Forest (xgboost)"),
@@ -221,7 +193,6 @@ def test_learner_parameters(self):
221193
("Fraction of features for each split", 1))
222194
self.assertTupleEqual(self.editor.get_learner_parameters(), params)
223195

224-
@unittest.skipIf(XGBRFClassifier is None, "Missing 'xgboost' package")
225196
def test_default_parameters_cls(self):
226197
data = Table("heart_disease")
227198
booster = XGBRFClassifier()
@@ -239,7 +210,6 @@ def test_default_parameters_cls(self):
239210
self.assertEqual(int(tp["colsample_bylevel"]), self.editor.colsample_bylevel)
240211
self.assertEqual(int(tp["colsample_bynode"]), self.editor.colsample_bynode)
241212

242-
@unittest.skipIf(XGBRFRegressor is None, "Missing 'xgboost' package")
243213
def test_default_parameters_reg(self):
244214
data = Table("housing")
245215
booster = XGBRFRegressor()
@@ -266,7 +236,6 @@ def test_arguments(self):
266236
"reg_lambda": 3, "colsample_bylevel": 1, "random_state": 0}
267237
self.assertDictEqual(self.editor.get_arguments(), args)
268238

269-
@unittest.skipIf(CatGBClassifier is None, "Missing 'catboost' package")
270239
def test_learner_parameters(self):
271240
params = (("Method", "Gradient Boosting (catboost)"),
272241
("Number of trees", 100),
@@ -277,7 +246,6 @@ def test_learner_parameters(self):
277246
("Fraction of features for each tree", 1))
278247
self.assertTupleEqual(self.editor.get_learner_parameters(), params)
279248

280-
@unittest.skipIf(CatGBClassifier is None, "Missing 'catboost' package")
281249
def test_default_parameters_cls(self):
282250
data = Table("heart_disease")
283251
booster = CatGBClassifier()
@@ -291,7 +259,6 @@ def test_default_parameters_cls(self):
291259
self.assertEqual(self.editor.learning_rate, 0.3)
292260
# params["learning_rate"] is automatically defined so don't test it
293261

294-
@unittest.skipIf(CatGBRegressor is None, "Missing 'catboost' package")
295262
def test_default_parameters_reg(self):
296263
data = Table("housing")
297264
booster = CatGBRegressor()
@@ -305,6 +272,7 @@ def test_default_parameters_reg(self):
305272
self.assertEqual(self.editor.learning_rate, 0.3)
306273
# params["learning_rate"] is automatically defined so don't test it
307274

275+
308276
class TestOWGradientBoosting(WidgetTest, WidgetLearnerTestMixin):
309277
def setUp(self):
310278
self.widget = self.create_widget(OWGradientBoosting,
@@ -328,7 +296,6 @@ def test_datasets(self):
328296
for ds in datasets.datasets():
329297
self.send_signal(self.widget.Inputs.data, ds)
330298

331-
@unittest.skipIf(XGBClassifier is None, "Missing 'xgboost' package")
332299
def test_xgb_params(self):
333300
simulate.combobox_activate_index(self.widget.controls.method_index, 1)
334301
editor = self.widget.editor
@@ -350,27 +317,11 @@ def test_xgb_params(self):
350317
def test_methods(self):
351318
self.send_signal(self.widget.Inputs.data, self.data)
352319
method_cb = self.widget.controls.method_index
353-
for i, (cls, _, _) in enumerate(LearnerItemModel.LEARNERS):
354-
if cls is None:
355-
continue
320+
for i, cls in enumerate(LearnerItemModel.LEARNERS):
356321
simulate.combobox_activate_index(method_cb, i)
357322
self.click_apply()
358323
self.assertIsInstance(self.widget.learner, cls)
359324

360-
def test_missing_lib(self):
361-
modules = {k: v for k, v in sys.modules.items()
362-
if "orange" not in k.lower()} # retain built-ins
363-
modules["xgboost"] = None
364-
modules["catboost"] = None
365-
# pylint: disable=reimported,redefined-outer-name
366-
# pylint: disable=import-outside-toplevel
367-
with patch.dict(sys.modules, modules, clear=True):
368-
from Orange.widgets.model.owgradientboosting import \
369-
OWGradientBoosting
370-
widget = self.create_widget(OWGradientBoosting,
371-
stored_settings={"method_index": 3})
372-
self.assertEqual(widget.method_index, 0)
373-
374325

375326
if __name__ == "__main__":
376327
unittest.main()

0 commit comments

Comments
 (0)