1212from Orange .classification import OneClassSVMLearner , EllipticEnvelopeLearner ,\
1313 LocalOutlierFactorLearner , IsolationForestLearner
1414from Orange .data import Table
15+ from Orange .data .util import progress_callback
1516from Orange .widgets import gui
1617from Orange .widgets .settings import Setting
1718from 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
0 commit comments