Skip to content

Commit e909199

Browse files
committed
OWDBSCAN: data info displayed in the status bar
1 parent c838736 commit e909199

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

Orange/widgets/unsupervised/owdbscan.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from Orange.clustering import DBSCAN
1616
from Orange.widgets.utils.annotated_data import ANNOTATED_DATA_SIGNAL_NAME
1717
from Orange.widgets.utils.signals import Input, Output
18+
from Orange.widgets.utils.state_summary import format_summary_details
1819
from Orange.widgets.widget import Msg
1920

2021

@@ -89,6 +90,8 @@ def __init__(self):
8990
self.data_normalized = None
9091
self.db = None
9192
self.model = None
93+
self._set_input_summary(None)
94+
self._set_output_summary(None)
9295

9396
box = gui.widgetBox(self.controlArea, "Parameters")
9497
gui.spin(box, self, "min_samples", 1, 100, 1,
@@ -169,10 +172,12 @@ def _compute_cut_point(self):
169172
@Inputs.data
170173
def set_data(self, data):
171174
self.Error.clear()
175+
self._set_input_summary(data)
172176
if not self.check_data_size(data):
173177
data = None
174178
self.data = self.data_normalized = data
175179
if self.data is None:
180+
self._set_output_summary(None)
176181
self.Outputs.annotated_data.send(None)
177182
self.plot.clear_plot()
178183
return
@@ -220,8 +225,19 @@ def send_data(self):
220225
domain = Domain(attributes, classes, meta_attrs)
221226
new_table = Table(domain, x, y, metas, self.data.W)
222227

228+
self._set_output_summary(new_table)
223229
self.Outputs.annotated_data.send(new_table)
224230

231+
def _set_input_summary(self, data):
232+
summary = len(data) if data else self.info.NoInput
233+
details = format_summary_details(data) if data else ""
234+
self.info.set_input_summary(summary, details)
235+
236+
def _set_output_summary(self, output):
237+
summary = len(output) if output else self.info.NoOutput
238+
details = format_summary_details(output) if output else ""
239+
self.info.set_output_summary(summary, details)
240+
225241
def _invalidate(self):
226242
self.commit()
227243

Orange/widgets/unsupervised/tests/test_owdbscan.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# pylint: disable=protected-access
12
import numpy as np
23
from scipy.sparse import csr_matrix, csc_matrix
34

@@ -6,6 +7,7 @@
67
from Orange.widgets.tests.base import WidgetTest
78
from Orange.widgets.tests.utils import simulate, possible_duplicate_table
89
from Orange.widgets.unsupervised.owdbscan import OWDBSCAN, get_kth_distances
10+
from Orange.widgets.utils.state_summary import format_summary_details
911

1012

1113
class TestOWDBSCAN(WidgetTest):
@@ -220,3 +222,23 @@ def test_missing_data(self):
220222
self.send_signal(w.Inputs.data, self.iris)
221223
output = self.get_output(w.Outputs.annotated_data)
222224
self.assertTupleEqual((150, 1), output[:, "Cluster"].metas.shape)
225+
226+
def test_summary(self):
227+
"""Check if the status bar updates when data on input"""
228+
info = self.widget.info
229+
no_input, no_output = "No data on input", "No data on output"
230+
231+
self.send_signal(self.widget.Inputs.data, self.iris)
232+
summary, details = f"{len(self.iris)}", format_summary_details(self.iris)
233+
self.assertEqual(info._StateInfo__input_summary.brief, summary)
234+
self.assertEqual(info._StateInfo__input_summary.details, details)
235+
output = self.get_output(self.widget.Outputs.annotated_data)
236+
summary, details = f"{len(output)}", format_summary_details(output)
237+
self.assertEqual(info._StateInfo__output_summary.brief, summary)
238+
self.assertEqual(info._StateInfo__output_summary.details, details)
239+
240+
self.send_signal(self.widget.Inputs.data, None)
241+
self.assertEqual(info._StateInfo__input_summary.brief, "")
242+
self.assertEqual(info._StateInfo__input_summary.details, no_input)
243+
self.assertEqual(info._StateInfo__output_summary.brief, "")
244+
self.assertEqual(info._StateInfo__output_summary.details, no_output)

0 commit comments

Comments
 (0)