Skip to content

Commit 130bbcf

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

File tree

5 files changed

+17
-100
lines changed

5 files changed

+17
-100
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: 6 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,15 @@
66

77
from Orange.classification import GBClassifier
88

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
9+
from Orange.classification import XGBClassifier, XGBRFClassifier
10+
from Orange.classification import CatGBClassifier
1711
from Orange.data import Table
1812
from Orange.modelling import GBLearner
1913
from Orange.preprocess.score import Scorer
2014
from Orange.regression import GBRegressor
2115

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
16+
from Orange.regression import XGBRegressor, XGBRFRegressor
17+
from Orange.regression import CatGBRegressor
3018
from Orange.widgets.model.owgradientboosting import OWGradientBoosting, \
3119
LearnerItemModel, GBLearnerEditor, XGBLearnerEditor, XGBRFLearnerEditor, \
3220
CatGBLearnerEditor, BaseEditor
@@ -65,16 +53,6 @@ def test_model(self):
6553
self.assertEqual(model.item(i).isEnabled(),
6654
classifiers[i] is not None)
6755

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-
7856

7957
class BaseEditorTest(GuiTest):
8058
EditorClass: Type[BaseEditor] = None
@@ -146,7 +124,6 @@ def test_arguments(self):
146124
"colsample_bynode": 1, "subsample": 1, "random_state": 0}
147125
self.assertDictEqual(self.editor.get_arguments(), args)
148126

149-
@unittest.skipIf(XGBClassifier is None, "Missing 'xgboost' package")
150127
def test_learner_parameters(self):
151128
params = (("Method", "Extreme Gradient Boosting (xgboost)"),
152129
("Number of trees", 100),
@@ -160,7 +137,6 @@ def test_learner_parameters(self):
160137
("Fraction of features for each split", 1))
161138
self.assertTupleEqual(self.editor.get_learner_parameters(), params)
162139

163-
@unittest.skipIf(XGBClassifier is None, "Missing 'xgboost' package")
164140
def test_default_parameters_cls(self):
165141
data = Table("heart_disease")
166142
booster = XGBClassifier()
@@ -178,7 +154,6 @@ def test_default_parameters_cls(self):
178154
self.assertEqual(int(tp["colsample_bylevel"]), self.editor.colsample_bylevel)
179155
self.assertEqual(int(tp["colsample_bynode"]), self.editor.colsample_bynode)
180156

181-
@unittest.skipIf(XGBRegressor is None, "Missing 'xgboost' package")
182157
def test_default_parameters_reg(self):
183158
data = Table("housing")
184159
booster = XGBRegressor()
@@ -206,7 +181,6 @@ def test_arguments(self):
206181
"colsample_bynode": 1, "subsample": 1, "random_state": 0}
207182
self.assertDictEqual(self.editor.get_arguments(), args)
208183

209-
@unittest.skipIf(XGBRFClassifier is None, "Missing 'xgboost' package")
210184
def test_learner_parameters(self):
211185
params = (("Method",
212186
"Extreme Gradient Boosting Random Forest (xgboost)"),
@@ -221,7 +195,6 @@ def test_learner_parameters(self):
221195
("Fraction of features for each split", 1))
222196
self.assertTupleEqual(self.editor.get_learner_parameters(), params)
223197

224-
@unittest.skipIf(XGBRFClassifier is None, "Missing 'xgboost' package")
225198
def test_default_parameters_cls(self):
226199
data = Table("heart_disease")
227200
booster = XGBRFClassifier()
@@ -239,7 +212,6 @@ def test_default_parameters_cls(self):
239212
self.assertEqual(int(tp["colsample_bylevel"]), self.editor.colsample_bylevel)
240213
self.assertEqual(int(tp["colsample_bynode"]), self.editor.colsample_bynode)
241214

242-
@unittest.skipIf(XGBRFRegressor is None, "Missing 'xgboost' package")
243215
def test_default_parameters_reg(self):
244216
data = Table("housing")
245217
booster = XGBRFRegressor()
@@ -266,7 +238,6 @@ def test_arguments(self):
266238
"reg_lambda": 3, "colsample_bylevel": 1, "random_state": 0}
267239
self.assertDictEqual(self.editor.get_arguments(), args)
268240

269-
@unittest.skipIf(CatGBClassifier is None, "Missing 'catboost' package")
270241
def test_learner_parameters(self):
271242
params = (("Method", "Gradient Boosting (catboost)"),
272243
("Number of trees", 100),
@@ -277,7 +248,6 @@ def test_learner_parameters(self):
277248
("Fraction of features for each tree", 1))
278249
self.assertTupleEqual(self.editor.get_learner_parameters(), params)
279250

280-
@unittest.skipIf(CatGBClassifier is None, "Missing 'catboost' package")
281251
def test_default_parameters_cls(self):
282252
data = Table("heart_disease")
283253
booster = CatGBClassifier()
@@ -291,7 +261,6 @@ def test_default_parameters_cls(self):
291261
self.assertEqual(self.editor.learning_rate, 0.3)
292262
# params["learning_rate"] is automatically defined so don't test it
293263

294-
@unittest.skipIf(CatGBRegressor is None, "Missing 'catboost' package")
295264
def test_default_parameters_reg(self):
296265
data = Table("housing")
297266
booster = CatGBRegressor()
@@ -305,6 +274,7 @@ def test_default_parameters_reg(self):
305274
self.assertEqual(self.editor.learning_rate, 0.3)
306275
# params["learning_rate"] is automatically defined so don't test it
307276

277+
308278
class TestOWGradientBoosting(WidgetTest, WidgetLearnerTestMixin):
309279
def setUp(self):
310280
self.widget = self.create_widget(OWGradientBoosting,
@@ -328,7 +298,6 @@ def test_datasets(self):
328298
for ds in datasets.datasets():
329299
self.send_signal(self.widget.Inputs.data, ds)
330300

331-
@unittest.skipIf(XGBClassifier is None, "Missing 'xgboost' package")
332301
def test_xgb_params(self):
333302
simulate.combobox_activate_index(self.widget.controls.method_index, 1)
334303
editor = self.widget.editor
@@ -350,27 +319,11 @@ def test_xgb_params(self):
350319
def test_methods(self):
351320
self.send_signal(self.widget.Inputs.data, self.data)
352321
method_cb = self.widget.controls.method_index
353-
for i, (cls, _, _) in enumerate(LearnerItemModel.LEARNERS):
354-
if cls is None:
355-
continue
322+
for i, cls in enumerate(LearnerItemModel.LEARNERS):
356323
simulate.combobox_activate_index(method_cb, i)
357324
self.click_apply()
358325
self.assertIsInstance(self.widget.learner, cls)
359326

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-
374327

375328
if __name__ == "__main__":
376329
unittest.main()

0 commit comments

Comments
 (0)