Skip to content

Commit 0e109f9

Browse files
committed
Fix synchronization issue in Vizrank(s)
When the widget received e.g. new data, it called `initialize`, which set `keep_running` to `False` and the `saved_state` to `None`. When `run` stopped (a bit later), it saved the current state to `saved_state`, overriding `None` set by `initialize`.
1 parent bb05eb3 commit 0e109f9

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

Orange/widgets/visualize/owmosaic.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ def set_data(self, data):
343343
self.bar_button.setDisabled(not disc_class)
344344
self.interior_coloring = \
345345
self.CLASS_DISTRIBUTION if disc_class else self.PEARSON
346-
self.vizrank.initialize()
346+
self.vizrank.stop_and_reset()
347347
self.vizrank_button.setEnabled(
348348
self.data is not None and self.data.domain.class_var is not None
349349
and len(self.data.domain.attributes) >= 1 and len(self.data) > 1)
@@ -377,7 +377,7 @@ def clear_selection(self):
377377
self.send_selection()
378378

379379
def coloring_changed(self):
380-
self.vizrank.initialize()
380+
self.vizrank.stop_and_reset()
381381
self.update_graph()
382382

383383
def reset_graph(self):

Orange/widgets/visualize/utils/__init__.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ def __init__(self, master):
9090
self.master = master
9191

9292
self.keep_running = False
93+
self.schedule_initialize = False
9394
self.saved_state = None
9495
self.saved_progress = 0
9596
self.scores = []
@@ -168,13 +169,21 @@ def initialize(self):
168169
e.g. from `set_data` handler.
169170
"""
170171
self.keep_running = False
172+
self.schedule_initialize = False
171173
self.saved_state = None
172174
self.saved_progress = 0
173175
self.scores = []
174176
self.rank_model.clear()
175177
self.button.setText("Start")
176178
self.button.setEnabled(self.check_preconditions())
177179

180+
def stop_and_reset(self):
181+
if self.keep_running:
182+
self.schedule_initialize = True
183+
self.keep_running = False
184+
else:
185+
self.initialize()
186+
178187
def check_preconditions(self):
179188
"""Check whether there is sufficient data for ranking."""
180189
return True
@@ -245,9 +254,12 @@ def run(self):
245254
progress.advance(self.saved_progress)
246255
for state in self.iterate_states(self.saved_state):
247256
if not self.keep_running:
248-
self.saved_state = state
249-
self.saved_progress = progress.count
250-
self._select_first_if_none()
257+
if self.schedule_initialize:
258+
self.initialize()
259+
else:
260+
self.saved_state = state
261+
self.saved_progress = progress.count
262+
self._select_first_if_none()
251263
return
252264
score = self.compute_score(state)
253265
if score is not None:

0 commit comments

Comments
 (0)