Skip to content

Commit 27c11e4

Browse files
committed
Data info displayed in the status bar
1 parent 4462394 commit 27c11e4

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

Orange/widgets/data/owdatasampler.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from Orange.data import Table
1212
from Orange.data.sql.table import SqlTable
1313
from Orange.widgets.utils.widgetpreview import WidgetPreview
14+
from Orange.widgets.utils.state_summary import format_summary_details
1415
from Orange.widgets.widget import Msg, OWWidget, Input, Output
1516
from Orange.util import Reprable
1617

@@ -179,14 +180,14 @@ def set_data(self, dataset):
179180
self.cb_seed.setVisible(not sql)
180181
self.cb_stratify.setVisible(not sql)
181182
self.cb_sql_dl.setVisible(sql)
182-
self.info.set_input_summary(str(len(dataset)))
183+
self.info.set_input_summary(len(dataset),
184+
format_summary_details(dataset))
183185

184186
if not sql:
185187
self._update_sample_max_size()
186188
self.updateindices()
187189
else:
188190
self.info.set_input_summary(self.info.NoInput)
189-
self.info.set_output_summary(self.info.NoInput)
190191
self.indices = None
191192
self.clear_messages()
192193
self.commit()
@@ -224,12 +225,16 @@ def commit(self):
224225
remaining, sample = self.indices
225226
elif self.sampling_type == self.CrossValidation:
226227
remaining, sample = self.indices[self.selectedFold - 1]
227-
self.info.set_output_summary(str(len(sample)))
228228

229229
sample = self.data[sample]
230230
other = self.data[remaining]
231231
self.sampled_instances = len(sample)
232232
self.remaining_instances = len(other)
233+
234+
summary = len(sample) if sample else self.info.NoOutput
235+
details = format_summary_details(sample) if sample else ""
236+
self.info.set_output_summary(summary, details)
237+
233238
self.Outputs.data_sample.send(sample)
234239
self.Outputs.remaining_data.send(other)
235240

Orange/widgets/data/tests/test_owdatasampler.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from Orange.data import Table
66
from Orange.widgets.data.owdatasampler import OWDataSampler
77
from Orange.widgets.tests.base import WidgetTest
8+
from Orange.widgets.utils.state_summary import format_summary_details
89

910

1011
class TestOWDataSampler(WidgetTest):
@@ -38,7 +39,6 @@ def test_stratified_on_unbalanced_data(self):
3839
self.assertTrue(self.widget.Warning.could_not_stratify.is_shown())
3940

4041
def test_bootstrap(self):
41-
output_sum = self.widget.info.set_output_summary = Mock()
4242
self.select_sampling_type(self.widget.Bootstrap)
4343

4444
self.send_signal("Data", self.iris)
@@ -59,20 +59,16 @@ def test_bootstrap(self):
5959
# high probability (1-(1/150*2/150*...*150/150) ~= 1-2e-64)
6060
self.assertGreater(len(in_sample), 0)
6161
self.assertGreater(len(in_remaining), 0)
62-
#Check if status bar shows correct number of output data
63-
output_sum.assert_called_with(str(len(sample)))
6462

6563
def select_sampling_type(self, sampling_type):
6664
buttons = self.widget.controls.sampling_type.group.buttons()
6765
buttons[sampling_type].click()
6866

6967
def test_no_intersection_in_outputs(self):
7068
""" Check whether outputs intersect and whether length of outputs sums
71-
to length of original data and
72-
if status bar displays correct output for each sampling type"""
69+
to length of original data"""
7370
self.send_signal("Data", self.iris)
7471
w = self.widget
75-
output_sum = self.widget.info.set_output_summary = Mock()
7672
sampling_types = [w.FixedProportion, w.FixedSize, w.CrossValidation]
7773

7874
for replicable in [True, False]:
@@ -87,7 +83,6 @@ def test_no_intersection_in_outputs(self):
8783
other = self.get_output("Remaining Data")
8884
self.assertEqual(len(self.iris), len(sample) + len(other))
8985
self.assertNoIntersection(sample, other)
90-
output_sum.assert_called_with(str(len(sample)))
9186

9287
def test_bigger_size_with_replacement(self):
9388
"""Allow bigger output without replacement."""
@@ -126,17 +121,23 @@ def test_shuffling(self):
126121

127122
def test_summary(self):
128123
"""Check if status bar is updated when data is received"""
129-
input_sum = self.widget.info.set_input_summary = Mock()
130124
data = self.iris
125+
input_sum = self.widget.info.set_input_summary = Mock()
126+
output_sum = self.widget.info.set_output_summary = Mock()
131127

132-
input_sum.reset_mock()
133-
self.send_signal(self.widget.Inputs.data, data[:])
134-
input_sum.assert_called_with("150")
128+
self.send_signal(self.widget.Inputs.data, data)
129+
input_sum.assert_called_with(len(data), format_summary_details(data))
130+
output = self.get_output(self.widget.Outputs.data_sample)
131+
output_sum.assert_called_with(len(output),
132+
format_summary_details(output))
135133

136134
input_sum.reset_mock()
135+
output_sum.reset_mock()
137136
self.send_signal(self.widget.Inputs.data, None)
138137
input_sum.assert_called_once()
139138
self.assertEqual(input_sum.call_args[0][0].brief, "")
139+
output_sum.assert_called_once()
140+
self.assertEqual(output_sum.call_args[0][0].brief, "")
140141

141142
def set_fixed_sample_size(self, sample_size, with_replacement=False):
142143
"""Set fixed sample size and return the number of gui spin.

0 commit comments

Comments
 (0)