Skip to content

Commit 2d9ea06

Browse files
committed
MDS: Handle subset data
1 parent 24dee7b commit 2d9ea06

File tree

3 files changed

+36
-22
lines changed

3 files changed

+36
-22
lines changed

Orange/widgets/tests/base.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -947,6 +947,21 @@ def test_plot_once(self, timeout=DEFAULT_TIMEOUT):
947947
self.widget.setup_plot.assert_called_once()
948948
self.widget.commit.assert_called_once()
949949

950+
def test_subset_data_color(self, timeout=DEFAULT_TIMEOUT):
951+
self.send_signal(self.widget.Inputs.data, self.data)
952+
953+
if self.widget.isBlocking():
954+
spy = QSignalSpy(self.widget.blockingStateChanged)
955+
self.assertTrue(spy.wait(timeout))
956+
957+
self.send_signal(self.widget.Inputs.data_subset, self.data[:10])
958+
subset = [brush.color().name() == "#46befa" for brush in
959+
self.widget.graph.scatterplot_item.data['brush'][:10]]
960+
other = [brush.color().name() == "#000000" for brush in
961+
self.widget.graph.scatterplot_item.data['brush'][10:]]
962+
self.assertTrue(all(subset))
963+
self.assertTrue(all(other))
964+
950965
def test_class_density(self, timeout=DEFAULT_TIMEOUT):
951966
"""Check class density update"""
952967
self.send_signal(self.widget.Inputs.data, self.data)

Orange/widgets/unsupervised/owmds.py

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ def __init__(self):
158158
#: Input data table
159159
self.signal_data = None
160160

161-
self.__invalidated = True
162161
self.embedding = None
163162
self.effective_matrix = None
164163

@@ -243,7 +242,7 @@ def clear(self):
243242
def _initialize(self):
244243
matrix_existed = self.effective_matrix is not None
245244
effective_matrix = self.effective_matrix
246-
self.__invalidated = True
245+
self._invalidated = True
247246
self.data = None
248247
self.effective_matrix = None
249248
self.closeContext()
@@ -285,11 +284,11 @@ def _initialize(self):
285284

286285
self.init_attr_values()
287286
self.openContext(self.data)
288-
self.__invalidated = not (matrix_existed and
289-
self.effective_matrix is not None and
290-
np.array_equal(effective_matrix,
291-
self.effective_matrix))
292-
if self.__invalidated:
287+
self._invalidated = not (matrix_existed and
288+
self.effective_matrix is not None and
289+
np.array_equal(effective_matrix,
290+
self.effective_matrix))
291+
if self._invalidated:
293292
self.clear()
294293
self.graph.set_effective_matrix(self.effective_matrix)
295294

@@ -444,12 +443,15 @@ def __next_step(self):
444443

445444
def do_PCA(self):
446445
self.__invalidate_embedding(self.PCA)
446+
self.setup_plot()
447447

448448
def do_random(self):
449449
self.__invalidate_embedding(self.Random)
450+
self.setup_plot()
450451

451452
def do_jitter(self):
452453
self.__invalidate_embedding(self.Jitter)
454+
self.setup_plot()
453455

454456
def __invalidate_embedding(self, initialization=PCA):
455457
def jitter_coord(part):
@@ -476,8 +478,6 @@ def jitter_coord(part):
476478
jitter_coord(self.embedding[:, 0])
477479
jitter_coord(self.embedding[:, 1])
478480

479-
self.setup_plot()
480-
481481
# restart the optimization if it was interrupted.
482482
if state == OWMDS.Running:
483483
self.__start()
@@ -496,15 +496,12 @@ def __invalidate_refresh(self):
496496

497497
def handleNewSignals(self):
498498
self._initialize()
499-
if self.__invalidated:
499+
if self._invalidated:
500500
self.graph.pause_drawing_pairs()
501-
self.__invalidated = False
502501
self.__invalidate_embedding()
503-
self.cb_class_density.setEnabled(self.can_draw_density())
502+
self.enable_controls()
504503
self.start()
505-
else:
506-
self.graph.update_point_props()
507-
self.commit()
504+
super().handleNewSignals()
508505

509506
def _invalidate_output(self):
510507
self.commit()

Orange/widgets/visualize/utils/widget.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,15 @@ def set_subset_data(self, subset):
459459
self.controls.graph.alpha_value.setEnabled(subset is None)
460460

461461
def handleNewSignals(self):
462+
self._handle_subset_data()
463+
if self._invalidated:
464+
self._invalidated = False
465+
self.setup_plot()
466+
else:
467+
self.graph.update_point_props()
468+
self.commit()
469+
470+
def _handle_subset_data(self):
462471
self.Warning.subset_independent.clear()
463472
self.Warning.subset_not_subset.clear()
464473
if self.data is None or self.subset_data is None:
@@ -471,13 +480,6 @@ def handleNewSignals(self):
471480
elif self.subset_indices - ids:
472481
self.Warning.subset_not_subset()
473482

474-
if self._invalidated:
475-
self._invalidated = False
476-
self.setup_plot()
477-
else:
478-
self.graph.update_point_props()
479-
self.commit()
480-
481483
def get_subset_mask(self):
482484
if not self.subset_indices:
483485
return None

0 commit comments

Comments
 (0)