Skip to content

Commit f3a6562

Browse files
committed
Pythagoranstree/forest: Remove unnecessary setting combo box indexes
1 parent a4644bc commit f3a6562

File tree

4 files changed

+52
-14
lines changed

4 files changed

+52
-14
lines changed

Orange/widgets/visualize/owpythagorastree.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class Outputs:
5757
graph_name = 'scene'
5858

5959
# Settings
60-
settingsHandler = settings.DomainContextHandler()
60+
settingsHandler = settings.ClassValuesContextHandler()
6161

6262
depth_limit = settings.ContextSetting(10)
6363
target_class_index = settings.ContextSetting(0)
@@ -155,6 +155,8 @@ def set_tree(self, model=None):
155155

156156
if model is not None:
157157
self.data = model.instances
158+
159+
self._update_target_class_combo()
158160
self.tree_adapter = self._get_tree_adapter(self.model)
159161
self.ptree.clear()
160162

@@ -169,11 +171,12 @@ def set_tree(self, model=None):
169171
self._update_legend_colors()
170172
self._update_legend_visibility()
171173
self._update_info_box()
172-
self._update_target_class_combo()
173174

174175
self._update_main_area()
175176

176-
self.openContext(self.model)
177+
self.openContext(
178+
model.domain.class_var if model.domain is not None else None
179+
)
177180

178181
self.update_depth()
179182

@@ -277,8 +280,7 @@ def _clear_depth_slider(self):
277280

278281
def _clear_target_class_combo(self):
279282
self.target_class_combo.clear()
280-
self.target_class_index = 0
281-
self.target_class_combo.setCurrentIndex(self.target_class_index)
283+
self.target_class_index = -1
282284

283285
def _set_max_depth(self):
284286
"""Set the depth to the max depth and update appropriate actors."""
@@ -339,7 +341,8 @@ def _update_target_class_combo(self):
339341
values = list(ContinuousTreeNode.COLOR_METHODS.keys())
340342
label.setText(label_text)
341343
self.target_class_combo.addItems(values)
342-
self.target_class_combo.setCurrentIndex(self.target_class_index)
344+
# set it to 0, context will change if required
345+
self.target_class_index = 0
343346

344347
def _update_legend_colors(self):
345348
if self.legend is not None:

Orange/widgets/visualize/owpythagoreanforest.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,9 @@ class Outputs:
174174
graph_name = 'scene'
175175

176176
# Settings
177-
settingsHandler = settings.DomainContextHandler()
177+
settingsHandler = settings.ClassValuesContextHandler()
178178

179-
depth_limit = settings.ContextSetting(10)
179+
depth_limit = settings.Setting(10)
180180
target_class_index = settings.ContextSetting(0)
181181
size_calc_idx = settings.Setting(0)
182182
zoom = settings.Setting(200)
@@ -274,15 +274,18 @@ def set_rf(self, model=None):
274274
self.rf_model = model
275275

276276
if model is not None:
277+
self.instances = model.instances
278+
self._update_target_class_combo()
279+
277280
self.forest = self._get_forest_adapter(self.rf_model)
278281
self.forest_model[:] = self.forest.trees
279-
self.instances = model.instances
280282

281283
self._update_info_box()
282-
self._update_target_class_combo()
283284
self._update_depth_slider()
284285

285-
self.openContext(model)
286+
self.openContext(
287+
model.domain.class_var if model.domain is not None else None
288+
)
286289
# Restore item selection
287290
if self.selected_index is not None:
288291
index = self.list_view.model().index(self.selected_index)
@@ -324,15 +327,15 @@ def _update_target_class_combo(self):
324327
values = list(ContinuousTreeNode.COLOR_METHODS.keys())
325328
label.setText(label_text)
326329
self.ui_target_class_combo.addItems(values)
327-
self.ui_target_class_combo.setCurrentIndex(self.target_class_index)
330+
# set it to 0, context will change if required
331+
self.target_class_index = 0
328332

329333
def _clear_info_box(self):
330334
self.ui_info.setText('No forest on input.')
331335

332336
def _clear_target_class_combo(self):
333337
self.ui_target_class_combo.clear()
334-
self.target_class_index = 0
335-
self.ui_target_class_combo.setCurrentIndex(self.target_class_index)
338+
self.target_class_index = -1
336339

337340
def _clear_depth_slider(self):
338341
self.ui_depth_slider.parent().setEnabled(False)

Orange/widgets/visualize/tests/test_owpythagorastree.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,21 @@ def test_changing_data_restores_depth_from_previous_settings(self):
396396
self.send_signal(self.widget.Inputs.tree, forest.trees[1])
397397
self.assertEqual(self.widget.ptree._depth_limit, 1)
398398

399+
def test_context(self):
400+
iris_tree = TreeLearner()(Table("iris"))
401+
self.send_signal(self.widget.Inputs.tree, self.titanic)
402+
self.widget.target_class_index = 1
403+
404+
self.send_signal(self.widget.Inputs.tree, iris_tree)
405+
self.assertEqual(0, self.widget.target_class_index)
406+
407+
self.widget.target_class_index = 2
408+
self.send_signal(self.widget.Inputs.tree, self.titanic)
409+
self.assertEqual(1, self.widget.target_class_index)
410+
411+
self.send_signal(self.widget.Inputs.tree, iris_tree)
412+
self.assertEqual(2, self.widget.target_class_index)
413+
399414

400415
if __name__ == "__main__":
401416
unittest.main()

Orange/widgets/visualize/tests/test_owpythagoreanforest.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,3 +221,20 @@ def test_storing_selection(self):
221221
output = self.get_output(self.widget.Outputs.tree)
222222
self.assertIsNotNone(output)
223223
self.assertIs(output.skl_model, self.titanic.trees[idx].skl_model)
224+
225+
def test_context(self):
226+
iris = Table("iris")
227+
iris_tree = RandomForestLearner()(iris)
228+
iris_tree.instances = iris
229+
self.send_signal(self.widget.Inputs.random_forest, self.titanic)
230+
self.widget.target_class_index = 1
231+
232+
self.send_signal(self.widget.Inputs.random_forest, iris_tree)
233+
self.assertEqual(0, self.widget.target_class_index)
234+
235+
self.widget.target_class_index = 2
236+
self.send_signal(self.widget.Inputs.random_forest, self.titanic)
237+
self.assertEqual(1, self.widget.target_class_index)
238+
239+
self.send_signal(self.widget.Inputs.random_forest, iris_tree)
240+
self.assertEqual(2, self.widget.target_class_index)

0 commit comments

Comments
 (0)