Skip to content

Commit 32b48e8

Browse files
committed
Outliers: Semi-interruptible widget
1 parent c5ef939 commit 32b48e8

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

Orange/widgets/data/owoutliers.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from Orange.classification import OneClassSVMLearner, EllipticEnvelopeLearner,\
1313
LocalOutlierFactorLearner, IsolationForestLearner
1414
from Orange.data import Table
15+
from Orange.data.util import progress_callback
1516
from Orange.widgets import gui
1617
from Orange.widgets.settings import Setting
1718
from Orange.widgets.utils.concurrent import TaskState, ConcurrentWidgetMixin
@@ -31,8 +32,16 @@ def run(data: Table, learner: Learner, state: TaskState) -> Results:
3132
if not data:
3233
return results
3334

34-
model = learner(data)
35-
pred = model(data) # type: Table
35+
def callback(i: float, status=""):
36+
state.set_progress_value(i * 100)
37+
if status:
38+
state.set_status(status)
39+
if state.is_interruption_requested():
40+
raise Exception
41+
42+
callback(0, "Initializing...")
43+
model = learner(data, progress_callback(callback, end=0.6))
44+
pred = model(data, progress_callback(callback, start=0.6, end=0.99))
3645

3746
col = pred.get_column_view(model.outlier_var)[0]
3847
inliers_ind = np.where(col == 1)[0]
@@ -41,6 +50,7 @@ def run(data: Table, learner: Learner, state: TaskState) -> Results:
4150
results.inliers = data[inliers_ind]
4251
results.outliers = data[outliers_ind]
4352
results.annotated_data = pred
53+
callback(1)
4454
return results
4555

4656

Orange/widgets/data/tests/test_owoutliers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
class TestRun(unittest.TestCase):
1414
def test_results(self):
1515
iris = Table("iris")
16-
learner = LocalOutlierFactorLearner()
17-
18-
res = run(iris, learner, Mock())
16+
state = Mock()
17+
state.is_interruption_requested = Mock(return_value=False)
18+
res = run(iris, LocalOutlierFactorLearner(), state)
1919
self.assertIsInstance(res.inliers, Table)
2020
self.assertIsInstance(res.outliers, Table)
2121
self.assertIsInstance(res.annotated_data, Table)

0 commit comments

Comments
 (0)