def test_summary(self): """Check if the status bar is updated when data is received""" data = self.iris input_sum = self.widget.info.set_input_summary = Mock() output_sum = self.widget.info.set_output_summary = Mock() self.send_signal(self.widget.Inputs.data, data) input_sum.assert_called_with(len(data), format_summary_details(data)) output = self.get_output(self.widget.Outputs.filtered_data) self.assertIsNone(output) simulate.combobox_activate_item(self.widget.controls.row_feature, self.iris.domain.attributes[0].name) simulate.combobox_activate_item(self.widget.controls.col_feature, self.iris.domain.class_var.name) self.widget.table_view.set_selection(set([(11, 0), (11, 1), (12, 0)])) self.widget.table_view.selection_changed.emit() filtered = self.get_output(self.widget.Outputs.filtered_data) pivot = self.get_output(self.widget.Outputs.pivot_table) grouped = self.get_output(self.widget.Outputs.grouped_data) output_sum.assert_called_with( f"{len(pivot)}, {len(filtered)}, {len(grouped)}", format_multiple_summaries([("Pivot table", pivot), ("Filtered data", filtered), ("Grouped data", grouped)]), format=1) input_sum.reset_mock() output_sum.reset_mock() self.send_signal(self.widget.Inputs.data, None) input_sum.assert_called_once() self.assertEqual(input_sum.call_args[0][0].brief, "") output_sum.assert_called_once() self.assertEqual(output_sum.call_args[0][0].brief, "")
def test_multiple_summaries(self): data = Table('zoo') extra_data = Table('zoo')[20:] n_features_data = len(data.domain.variables) + len(data.domain.metas) n_features_extra_data = len(extra_data.domain.variables) + \ len(extra_data.domain.metas) details = f'Data:<br>zoo: {len(data)} instance, ' \ f'{n_features_data} variables<br>' \ f'Features: {len(data.domain.attributes)} categorical ' \ f'(no missing values)<br>' \ f'Target: categorical<br>' \ f'Metas: string<hr>'\ f'Extra Data:<br>zoo: {len(extra_data)} instances, ' \ f'{n_features_extra_data} variables<br>' \ f'Features: {len(extra_data.domain.attributes)} ' \ f'categorical (no missing values)<br>' \ f'Target: categorical<br>' \ f'Metas: string' inputs = [('Data', data), ('Extra Data', extra_data)] self.assertEqual(details, format_multiple_summaries(inputs)) details = f'zoo: {len(data)} instance, ' \ f'{n_features_data} variables<br>' \ f'Features: {len(data.domain.attributes)} categorical ' \ f'(no missing values)<br>' \ f'Target: categorical<br>' \ f'Metas: string<hr>'\ f'zoo: {len(extra_data)} instances, ' \ f'{n_features_extra_data} variables<br>' \ f'Features: {len(extra_data.domain.attributes)} ' \ f'categorical (no missing values)<br>' \ f'Target: categorical<br>' \ f'Metas: string' inputs = [('', data), ('', extra_data)] self.assertEqual(details, format_multiple_summaries(inputs)) details = f'No data on output.<hr>' \ f'Extra data:<br>zoo: {len(extra_data)} instances, ' \ f'{n_features_extra_data} variables<br>' \ f'Features: {len(extra_data.domain.attributes)} ' \ f'categorical (no missing values)<br>' \ f'Target: categorical<br>' \ f'Metas: string<hr>'\ f'No data on output.' outputs = [('', None), ('Extra data', extra_data), ('', None)] self.assertEqual(details, format_multiple_summaries(outputs, type_io='output'))
def test_summary(self): """Check if the status bar is updated when data is received""" info = self.widget.info no_input, no_output = "No data on input", "No data on output" self.send_signal(self.widget.Inputs.primary_data, self.iris) data_list = [("Primary data", self.iris), ("", None)] summary, details = "150, 0", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) output = self.get_output(self.widget.Outputs.data) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) self.send_signal(self.widget.Inputs.additional_data, self.titanic, 0) data_list = [("Primary data", self.iris), ("", self.titanic)] summary, details = "150, 2201", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) output = self.get_output(self.widget.Outputs.data) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) self.send_signal(self.widget.Inputs.primary_data, None) self.send_signal(self.widget.Inputs.additional_data, self.iris, 1) data_list = [("Primary data", None), ("", self.titanic), ("", self.iris)] summary, details = "0, 2201, 150", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) output = self.get_output(self.widget.Outputs.data) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) self.send_signal(self.widget.Inputs.additional_data, None, 0) self.send_signal(self.widget.Inputs.additional_data, None, 1) self.assertEqual(info._StateInfo__input_summary.brief, "") self.assertEqual(info._StateInfo__input_summary.details, no_input) self.assertEqual(info._StateInfo__output_summary.brief, "") self.assertEqual(info._StateInfo__output_summary.details, no_output)
def _set_input_summary(self): n_data = len(self.data) if self.data else 0 n_refs = len(self.reference) if self.reference else 0 summary, details, kwargs = self.info.NoInput, "", {} if self.data or self.reference: summary = f"{self.info.format_number(n_data)}, " \ f"{self.info.format_number(n_refs)}" data_list = [("Data", self.data), ("Reference", self.reference)] details = format_multiple_summaries(data_list) kwargs = {"format": Qt.RichText} self.info.set_input_summary(summary, details, **kwargs)
def test_summary(self): """Check if the status bar is updated when data is received""" data = Table("iris") info = self.widget.info no_input, no_output = "No data on input", "No data on output" self.send_signal(self.widget.Inputs.data, data) data_list = [("Data", data), ("Data subset", None)] summary, details = f"{len(data)}, 0", format_multiple_summaries( data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self.assertEqual(info._StateInfo__output_summary.brief, "0") self.send_signal(self.widget.Inputs.data_subset, data) data_list = [("Data", data), ("Data subset", data)] summary = f"{len(data)}, {len(data)}" details = format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) output = self.get_output(self.widget.Outputs.matching_data) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) self.send_signal(self.widget.Inputs.data, None) data_list = [("Data", None), ("Data subset", data)] summary, details = f"0, {len(data)}", format_multiple_summaries( data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self.assertEqual(info._StateInfo__output_summary.brief, "") self.assertEqual(info._StateInfo__output_summary.details, no_output) self.send_signal(self.widget.Inputs.data_subset, None) self.assertEqual(info._StateInfo__input_summary.brief, "") self.assertEqual(info._StateInfo__input_summary.details, no_input) self.assertEqual(info._StateInfo__output_summary.brief, "") self.assertEqual(info._StateInfo__output_summary.details, no_output)
def handleNewSignals(self): summary, details, kwargs = self.info.NoInput, "", {} if self.data or self.template_data: n_data = len(self.data) if self.data else 0 n_template = len(self.template_data) if self.template_data else 0 summary = f"{self.info.format_number(n_data)}, " \ f"{self.info.format_number(n_template)}" kwargs = {"format": Qt.RichText} details = format_multiple_summaries([("Data", self.data), ("Template data", self.template_data)]) self.info.set_input_summary(summary, details, **kwargs) self.apply()
def test_summary(self): info = self.widget.info reference = self.data[:1] no_input, no_output = "No data on input", "No data on output" self.assertIsInstance(info._StateInfo__input_summary, StateInfo.Empty) self.assertEqual(info._StateInfo__input_summary.details, no_input) self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) self.assertEqual(info._StateInfo__output_summary.details, no_output) self.send_signal(self.widget.Inputs.data, self.data) data_list = [("Data", self.data), ("Reference", None)] summary, details = "150, 0", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) output = self.get_output(self.widget.Outputs.data) details = format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, "151") self.assertEqual(info._StateInfo__output_summary.details, details) self.send_signal(self.widget.Inputs.reference, reference) data_list = [("Data", self.data), ("Reference", reference)] summary, details = "150, 1", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self.send_signal(self.widget.Inputs.data, None) data_list = [("Data", None), ("Reference", reference)] summary, details = "0, 1", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) self.assertEqual(info._StateInfo__output_summary.details, no_output) self.send_signal(self.widget.Inputs.reference, None) self.assertIsInstance(info._StateInfo__input_summary, StateInfo.Empty) self.assertEqual(info._StateInfo__input_summary.details, no_input)
def handleNewSignals(self): summary, details, kwargs = self.info.NoInput, "", {} if self.data or self.data_subset: n_data = len(self.data) if self.data else 0 n_data_subset = len(self.data_subset) if self.data_subset else 0 summary = f"{self.info.format_number(n_data)}, " \ f"{self.info.format_number(n_data_subset)}" kwargs = {"format": Qt.RichText} details = format_multiple_summaries([("Data", self.data), ("Data subset", self.data_subset)]) self.info.set_input_summary(summary, details, **kwargs) self._invalidate()
def test_summary(self): """Check if status bar is updated when data is received""" info = self.widget.info data, reference = Table("iris"), Table("iris")[:5] no_input, no_output = "No data on input", "No data on output" self.send_signal(self.widget.Inputs.data, data) data_list = [("Data", data), ("Reference", None)] summary, details = "150, 0", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self.assertEqual(info._StateInfo__output_summary.brief, "") self.assertEqual(info._StateInfo__output_summary.details, no_output) self.send_signal(self.widget.Inputs.reference, reference) data_list = [("Data", data), ("Reference", reference)] summary, details = "150, 5", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) output = self.get_output(self.widget.Outputs.data) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) self.send_signal(self.widget.Inputs.data, None) data_list = [("Data", None), ("Reference", reference)] summary, details = "0, 5", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self.assertEqual(info._StateInfo__output_summary.brief, "") self.assertEqual(info._StateInfo__output_summary.details, no_output) self.send_signal(self.widget.Inputs.reference, None) self.assertEqual(info._StateInfo__input_summary.brief, "") self.assertEqual(info._StateInfo__input_summary.details, no_input) self.assertEqual(info._StateInfo__output_summary.brief, "") self.assertEqual(info._StateInfo__output_summary.details, no_output)
def set_input_summary(self): summary, details, kwargs = self.info.NoInput, "", {} if self.data and self.test_data: summary = f"{self.info.format_number(len(self.data))}," \ f" {self.info.format_number(len(self.test_data))}" details = format_multiple_summaries([ ("Data", self.data), ("Test data", self.test_data) ]) kwargs = {"format": Qt.RichText} elif self.data and not self.test_data: summary, details = len(self.data), format_summary_details(self.data) elif self.test_data and not self.data: summary = len(self.test_data) details = format_summary_details(self.test_data) self.info.set_input_summary(summary, details, **kwargs)
def set_output_summary(self, pivot: Table, filtered: Table, grouped: Table): summary, detail, kwargs = self.info.NoOutput, "", {} if pivot or filtered or grouped: n_pivot = len(pivot) if pivot else 0 n_filtered = len(filtered) if filtered else 0 n_grouped = len(grouped) if grouped else 0 summary = f"{self.info.format_number(n_pivot)}, " \ f"{self.info.format_number(n_filtered)}, " \ f"{self.info.format_number(n_grouped)}" detail = format_multiple_summaries([("Pivot table", pivot), ("Filtered data", filtered), ("Grouped data", grouped)]) kwargs = {"format": Qt.RichText} self.info.set_output_summary(summary, detail, **kwargs)
def _set_input_summary(self): more_data = list(self.more_data.values()) if self.more_data else [None] n_primary = len(self.primary_data) if self.primary_data else 0 n_more_data = [len(data) if data else 0 for data in more_data] summary, details, kwargs = self.info.NoInput, "", {} if self.primary_data or self.more_data: summary = f"{self.info.format_number(n_primary)}, " \ + ", ".join(self.info.format_number(i) for i in n_more_data) details = format_multiple_summaries([("Primary data", self.primary_data)] + [("", data) for data in more_data]) kwargs = {"format": Qt.RichText} self.info.set_input_summary(summary, details, **kwargs)
def check_inputs(self): if self.data and len(self.data) > 1: self.Information.multiple_instances() summary, details, kwargs = self.info.NoInput, "", {} if self.data or self.background_data: n_data = len(self.data) if self.data else 0 n_background_data = len(self.background_data) \ if self.background_data else 0 summary = f"{self.info.format_number(n_background_data)}, " \ f"{self.info.format_number(n_data)}" kwargs = {"format": Qt.RichText} details = format_multiple_summaries([("Background data", self.background_data), ("Data", self.data)]) self.info.set_input_summary(summary, details, **kwargs)
def handleNewSignals(self): self.closeContext() self.attr_pairs = [self._find_best_match()] self.openContext(self.data and self.data.domain, self.extra_data and self.extra_data.domain) self.attr_boxes.set_state(self.attr_pairs) summary, details, kwargs = self.info.NoInput, "", {} if self.data or self.extra_data: n_data = len(self.data) if self.data else 0 n_extra_data = len(self.extra_data) if self.extra_data else 0 summary = f"{self.info.format_number(n_data)}, " \ f"{self.info.format_number(n_extra_data)}" kwargs = {"format": Qt.RichText} details = format_multiple_summaries([("Data", self.data), ("Extra data", self.extra_data)]) self.info.set_input_summary(summary, details, **kwargs) self.unconditional_commit()
def test_summary(self): """Check if the status bar updates when data is on input""" iris = Table("iris") train, test = iris[:120], iris[120:] info = self.widget.info no_input, no_output = "No data on input", "No data on output" self.send_signal(self.widget.Inputs.train_data, train) self.send_signal(self.widget.Inputs.learner, LogisticRegressionLearner(), 0) summary, details = f"{len(train)}", format_summary_details(train) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) output = self.get_output(self.widget.Outputs.predictions) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) self.send_signal(self.widget.Inputs.test_data, test) summary = f"{len(train)}, {len(test)}" details = format_multiple_summaries([("Data", train), ("Test data", test)]) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) output = self.get_output(self.widget.Outputs.predictions) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) self.send_signal(self.widget.Inputs.train_data, None) summary, details = f"{len(test)}", format_summary_details(test) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self.assertEqual(info._StateInfo__output_summary.brief, "-") self.assertEqual(info._StateInfo__output_summary.details, no_output) self.send_signal(self.widget.Inputs.test_data, None) self.assertEqual(info._StateInfo__input_summary.brief, "-") self.assertEqual(info._StateInfo__input_summary.details, no_input) self.assertEqual(info._StateInfo__output_summary.brief, "-") self.assertEqual(info._StateInfo__output_summary.details, no_output)
def test_output(self): # send data and template data info = self.widget.info no_input, no_output = "No data on input", "No data on output" self.send_signal(self.widget.Inputs.data, self.data[::15]) self.send_signal(self.widget.Inputs.template_data, self.disc_data) output = self.get_output(self.widget.Outputs.transformed_data) self.assertTableEqual(output, self.disc_data[::15]) self.assertEqual("Input data with 10 instances and 4 features.", self.widget.input_label.text()) self.assertEqual("Template domain applied.", self.widget.template_label.text()) self.assertEqual("Output data includes 4 features.", self.widget.output_label.text()) data_list = [("Data", self.data[::15]), ("Template data", self.disc_data)] summary, details = "10, 150", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) summary, details = "10", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) # remove template data self.send_signal(self.widget.Inputs.template_data, None) output = self.get_output(self.widget.Outputs.transformed_data) self.assertIsNone(output) self.assertEqual("Input data with 10 instances and 4 features.", self.widget.input_label.text()) self.assertEqual("No template data on input.", self.widget.template_label.text()) self.assertEqual("", self.widget.output_label.text()) data_list = [("Data", self.data[::15]), ("Template data", None)] summary, details = "10, 0", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self.assertEqual(info._StateInfo__output_summary.brief, "-") self.assertEqual(info._StateInfo__output_summary.details, no_output) # send template data self.send_signal(self.widget.Inputs.template_data, self.disc_data) output = self.get_output(self.widget.Outputs.transformed_data) self.assertTableEqual(output, self.disc_data[::15]) self.assertEqual("Input data with 10 instances and 4 features.", self.widget.input_label.text()) self.assertEqual("Template domain applied.", self.widget.template_label.text()) self.assertEqual("Output data includes 4 features.", self.widget.output_label.text()) # remove data self.send_signal(self.widget.Inputs.data, None) output = self.get_output(self.widget.Outputs.transformed_data) self.assertIsNone(output) self.assertEqual("No data on input.", self.widget.input_label.text()) self.assertEqual("Template data includes 4 features.", self.widget.template_label.text()) self.assertEqual("", self.widget.output_label.text()) data_list = [("Data", None), ("Template data", self.disc_data)] summary, details = "0, 150", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self.assertEqual(info._StateInfo__output_summary.brief, "-") self.assertEqual(info._StateInfo__output_summary.details, no_output) # remove template data self.send_signal(self.widget.Inputs.template_data, None) self.assertEqual("No data on input.", self.widget.input_label.text()) self.assertEqual("No template data on input.", self.widget.template_label.text()) self.assertEqual("", self.widget.output_label.text()) self.assertEqual(info._StateInfo__input_summary.brief, "-") self.assertEqual(info._StateInfo__input_summary.details, no_input) self.assertEqual(info._StateInfo__output_summary.brief, "-") self.assertEqual(info._StateInfo__output_summary.details, no_output)
def test_summary(self): """Check if status bar is updated when data is received""" info = self.widget.info no_input, no_output = "No data on input", "No data on output" zoo = Table("zoo") data_list = [("zoo", zoo)] self.send_signal(self.widget.Inputs.data, zoo, 1) summary, details = "101", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self.assertEqual(info._StateInfo__output_summary.brief, "") self.assertEqual(info._StateInfo__output_summary.details, no_output) self._select_data() output = self.get_output(self.widget.Outputs.selected_data) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) iris = Table("iris") data_list = [("zoo", zoo), ("iris", iris)] self.send_signal(self.widget.Inputs.data, iris, 2) summary, details = "101, 150", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self.assertEqual(info._StateInfo__output_summary.brief, "") self.assertEqual(info._StateInfo__output_summary.details, no_output) self._select_data() output = self.get_output(self.widget.Outputs.selected_data) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) brown = Table("brown-selected") data_list = [("zoo", zoo), ("iris", iris), ("brown-selected", brown)] self.send_signal(self.widget.Inputs.data, brown, 3) summary, details = "101, 150, 186", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self._select_data() output = self.get_output(self.widget.Outputs.selected_data) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) self.send_signal(self.widget.Inputs.data, None, 1) data_list = [("iris", iris), ("brown-selected", brown)] summary, details = "150, 186", format_multiple_summaries(data_list) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) self.assertEqual(info._StateInfo__output_summary.brief, "") self.assertEqual(info._StateInfo__output_summary.details, no_output) self._select_data() output = self.get_output(self.widget.Outputs.selected_data) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) self.send_signal(self.widget.Inputs.data, None, 2) self.send_signal(self.widget.Inputs.data, None, 3) self.assertEqual(info._StateInfo__input_summary.brief, "") self.assertEqual(info._StateInfo__input_summary.details, no_input) self.assertEqual(info._StateInfo__output_summary.brief, "") self.assertEqual(info._StateInfo__output_summary.details, no_output)