Skip to content

Commit 4c078ff

Browse files
OWLouvain: Do not invalidate output on PCA slider changed when apply PCA is unchecked
1 parent 7ee820f commit 4c078ff

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

Orange/widgets/unsupervised/owlouvainclustering.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ def __init__(self):
135135
) # type: QWidget
136136

137137
def _invalidate_pca_projection(self):
138+
if not self.apply_pca:
139+
return
140+
138141
self.pca_projection = None
139142
self._invalidate_graph()
140143
self._set_modified(True)

Orange/widgets/unsupervised/tests/test_owlouvain.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,38 @@ def test_do_not_recluster_on_same_data(self):
100100
self.commit_and_wait()
101101
self.assertEqual(call_count + 1, commit.call_count)
102102

103+
def test_only_recluster_when_necessary_pca_components_change(self):
104+
# Compute clustering on some data
105+
self.send_signal(self.widget.Inputs.data, self.iris)
106+
107+
# When PCA checkbox is ticked, any update to slider should invalidate results
108+
self.widget.apply_pca_cbx.setChecked(True)
109+
self.widget.pca_components_slider.setValue(2)
110+
self.commit_and_wait()
111+
112+
with patch.object(self.widget, '_invalidate_output') as invalidate:
113+
# Change slider value, this should invalidate output
114+
self.widget.pca_components_slider.setValue(4)
115+
self.commit_and_wait()
116+
invalidate.assert_called_once()
117+
118+
with patch.object(self.widget, '_invalidate_output') as invalidate:
119+
# Don't change slider value, this shouldn't do anything
120+
self.widget.pca_components_slider.setValue(4)
121+
self.commit_and_wait()
122+
invalidate.assert_not_called()
123+
124+
# When PCA checkbox is not ticked updating the slider should have no effect
125+
self.widget.apply_pca_cbx.setChecked(False)
126+
self.widget.pca_components_slider.setValue(2)
127+
self.commit_and_wait()
128+
129+
with patch.object(self.widget, '_invalidate_output') as invalidate:
130+
# Change slider value, this should invalidate output
131+
self.widget.pca_components_slider.setValue(4)
132+
self.commit_and_wait()
133+
invalidate.assert_not_called()
134+
103135
def test_invalidate(self):
104136
# pylint: disable=protected-access
105137
data = self.iris

0 commit comments

Comments
 (0)