diff --git a/Orange/preprocess/preprocess.py b/Orange/preprocess/preprocess.py index a40fa3528a1..1334fbc8c0e 100644 --- a/Orange/preprocess/preprocess.py +++ b/Orange/preprocess/preprocess.py @@ -18,7 +18,7 @@ "SklImpute", "Normalize", "Randomize", "Preprocess", "RemoveConstant", "RemoveNaNClasses", "RemoveNaNColumns", "ProjectPCA", "ProjectCUR", "Scale", "RemoveSparse", - "AdaptiveNormalize"] + "AdaptiveNormalize", "PreprocessorList"] class Preprocess(Reprable): diff --git a/Orange/widgets/data/owaggregatecolumns.py b/Orange/widgets/data/owaggregatecolumns.py index 51947578fe8..d12be2ea93a 100644 --- a/Orange/widgets/data/owaggregatecolumns.py +++ b/Orange/widgets/data/owaggregatecolumns.py @@ -11,7 +11,6 @@ ContextSetting, Setting, DomainContextHandler ) from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Input, Output from Orange.widgets.utils.itemmodels import DomainModel @@ -80,22 +79,14 @@ def set_data(self, data: Table = None): self.data = data if self.data: self.variable_model.set_domain(data.domain) - self.info.set_input_summary(len(self.data), - format_summary_details(self.data)) self.openContext(data) else: self.variable_model.set_domain(None) - self.info.set_input_summary(self.info.NoInput) self.unconditional_commit() def commit(self): augmented = self._compute_data() self.Outputs.data.send(augmented) - if augmented is None: - self.info.set_output_summary(self.info.NoOutput) - else: - self.info.set_output_summary( - len(augmented), format_summary_details(augmented)) def _compute_data(self): if not self.data or not self.variables: diff --git a/Orange/widgets/data/owcolor.py b/Orange/widgets/data/owcolor.py index 3028cca3ce2..2ff3c5bbb4f 100644 --- a/Orange/widgets/data/owcolor.py +++ b/Orange/widgets/data/owcolor.py @@ -19,7 +19,6 @@ from Orange.widgets.gui import HorizontalGridDelegate from Orange.widgets.utils import itemmodels, colorpalettes from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.report import colored_square as square from Orange.widgets.widget import Input, Output @@ -580,9 +579,6 @@ def __init__(self): gui.rubber(self.buttonsArea) gui.auto_apply(self.buttonsArea, self, "auto_apply") - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - @staticmethod def sizeHint(): # pragma: no cover return QSize(500, 570) @@ -594,10 +590,8 @@ def set_data(self, data): self.cont_descs = [] if data is None: self.data = self.domain = None - self.info.set_input_summary(self.info.NoInput) else: self.data = data - self.info.set_input_summary(len(data), format_summary_details(data)) for var in chain(data.domain.variables, data.domain.metas): if var.is_discrete: self.disc_descs.append(DiscAttrDesc(var)) @@ -738,7 +732,6 @@ def make(variables): if self.data is None: self.Outputs.data.send(None) - self.info.set_output_summary(self.info.NoOutput) return disc_dict = {desc.var.name: desc for desc in self.disc_descs} @@ -748,8 +741,6 @@ def make(variables): new_domain = Orange.data.Domain( make(dom.attributes), make(dom.class_vars), make(dom.metas)) new_data = self.data.transform(new_domain) - self.info.set_output_summary(len(new_data), - format_summary_details(new_data)) self.Outputs.data.send(new_data) def send_report(self): diff --git a/Orange/widgets/data/owconcatenate.py b/Orange/widgets/data/owconcatenate.py index a56899ae02d..3ecc73681ba 100644 --- a/Orange/widgets/data/owconcatenate.py +++ b/Orange/widgets/data/owconcatenate.py @@ -23,8 +23,6 @@ from Orange.widgets.utils.annotated_data import add_columns from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details, \ - format_multiple_summaries from Orange.widgets.widget import Input, Output, Msg @@ -145,9 +143,6 @@ def __init__(self): gui.comboBox(ibox, self, "source_column_role", items=self.id_roles, callback=self._source_changed)) - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - ibox.layout().addLayout(form) mleft, mtop, mright, _ = ibox.layout().getContentsMargins() ibox.layout().setContentsMargins(mleft, mtop, mright, 4) @@ -170,25 +165,8 @@ def set_more_data(self, data=None, sig_id=None): elif sig_id in self.more_data: del self.more_data[sig_id] - 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 handleNewSignals(self): self.mergebox.setDisabled(self.primary_data is not None) - self._set_input_summary() if self.incompatible_types(): self.Error.bow_concatenation() else: @@ -242,10 +220,8 @@ def apply(self): source_ids = np.array(list(flatten( [i] * len(table) for i, table in enumerate(tables)))).reshape((-1, 1)) data[:, source_var] = source_ids - self.info.set_output_summary(len(data), format_summary_details(data)) else: data = None - self.info.set_output_summary(self.info.NoOutput) self.Outputs.data.send(data) diff --git a/Orange/widgets/data/owcontinuize.py b/Orange/widgets/data/owcontinuize.py index b2d8a845a79..7c944319cb8 100644 --- a/Orange/widgets/data/owcontinuize.py +++ b/Orange/widgets/data/owcontinuize.py @@ -13,7 +13,6 @@ from Orange.widgets.settings import Setting from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Input, Output @@ -99,8 +98,6 @@ def __init__(self): gui.auto_apply(self.buttonsArea, self, "autosend") self.data = None - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) def settings_changed(self): self.commit() @@ -111,12 +108,8 @@ def setData(self, data): self.data = data self.enable_normalization() if data is None: - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) self.Outputs.data.send(None) else: - self.info.set_input_summary(len(data), - format_summary_details(data)) self.unconditional_commit() def enable_normalization(self): @@ -147,8 +140,6 @@ def commit(self): domain = continuizer(self.data) data = self.data.transform(domain) self.Outputs.data.send(data) - self.info.set_output_summary(len(data), - format_summary_details(data)) else: self.Outputs.data.send(self.data) # None or empty data diff --git a/Orange/widgets/data/owcorrelations.py b/Orange/widgets/data/owcorrelations.py index 3f8593cd5e4..98f7840427e 100644 --- a/Orange/widgets/data/owcorrelations.py +++ b/Orange/widgets/data/owcorrelations.py @@ -25,7 +25,6 @@ from Orange.widgets.utils.itemmodels import DomainModel from Orange.widgets.utils.signals import Input, Output from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.utils import VizRankDialogAttrPair from Orange.widgets.widget import OWWidget, AttributeList, Msg @@ -297,9 +296,6 @@ def __init__(self): button_box = gui.hBox(self.buttonsArea) button_box.layout().addWidget(self.vizrank.button) - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - @staticmethod def sizeHint(): return QSize(350, 400) @@ -366,10 +362,6 @@ def set_data(self, data): self.Warning.not_enough_vars() else: self.cont_data = SklImpute()(cont_data) - self.info.set_input_summary(len(data), - format_summary_details(data)) - else: - self.info.set_input_summary(self.info.NoInput) self.set_feature_model() self.openContext(self.cont_data) self.apply() @@ -394,9 +386,6 @@ def apply(self): def commit(self): self.Outputs.data.send(self.data) - summary = len(self.data) if self.data else self.info.NoOutput - details = format_summary_details(self.data) if self.data else "" - self.info.set_output_summary(summary, details) if self.data is None or self.cont_data is None: self.Outputs.features.send(None) diff --git a/Orange/widgets/data/owcreateclass.py b/Orange/widgets/data/owcreateclass.py index 07621c0df10..bbf20096726 100644 --- a/Orange/widgets/data/owcreateclass.py +++ b/Orange/widgets/data/owcreateclass.py @@ -15,7 +15,6 @@ from Orange.widgets.settings import DomainContextHandler, ContextSetting from Orange.widgets.utils.itemmodels import DomainModel from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Msg, Input, Output @@ -269,9 +268,6 @@ def __init__(self): gui.button(self.buttonsArea, self, "Apply", callback=self.apply) - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - # TODO: Resizing upon changing the number of rules does not work self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) @@ -297,16 +293,12 @@ def set_data(self, data): self.closeContext() self.rules = {} self.data = data - summary = len(data) if data else self.info.NoInput - details = format_summary_details(data) if data else "" - self.info.set_input_summary(summary, details) model = self.controls.attribute.model() model.set_domain(data.domain if data is not None else None) self.Warning.no_nonnumeric_vars(shown=data is not None and not model) if not model: self.attribute = None self.Outputs.data.send(None) - self.info.set_output_summary(self.info.NoOutput) return self.attribute = model[0] self.openContext(data) @@ -513,7 +505,6 @@ def apply(self): self.class_name = self.class_name.strip() if not self.attribute: self.Outputs.data.send(None) - self.info.set_output_summary(self.info.NoOutput) return domain = self.data.domain if not self.class_name: @@ -522,15 +513,11 @@ def apply(self): self.Error.class_name_duplicated() if not self.class_name or self.class_name in domain: self.Outputs.data.send(None) - self.info.set_output_summary(self.info.NoOutput) return new_class = self._create_variable() new_domain = Domain( domain.attributes, new_class, domain.metas + domain.class_vars) new_data = self.data.transform(new_domain) - summary = len(new_data) if new_data is not None else self.info.NoOutput - details = format_summary_details(new_data) if new_data is not None else "" - self.info.set_output_summary(summary, details) self.Outputs.data.send(new_data) def _create_variable(self): diff --git a/Orange/widgets/data/owcreateinstance.py b/Orange/widgets/data/owcreateinstance.py index 845b9796625..3b96919ef15 100644 --- a/Orange/widgets/data/owcreateinstance.py +++ b/Orange/widgets/data/owcreateinstance.py @@ -17,8 +17,6 @@ from Orange.widgets import gui from Orange.widgets.utils.itemmodels import TableModel from Orange.widgets.settings import Setting -from Orange.widgets.utils.state_summary import format_summary_details, \ - format_multiple_summaries from Orange.widgets.utils.widgetpreview import WidgetPreview from Orange.widgets.widget import OWWidget, Input, Output, Msg @@ -527,8 +525,6 @@ def __init__(self): gui.rubber(self.buttonsArea) box = gui.auto_apply(self.buttonsArea, self, "auto_commit") - self._set_input_summary() - self._set_output_summary() self.settingsAboutToBePacked.connect(self.pack_settings) def __filter_edit_changed(self): @@ -604,7 +600,6 @@ def _initialize_values(self, fun: str, indices: List[QModelIndex] = None): @Inputs.data def set_data(self, data: Table): self.data = data - self._set_input_summary() self._set_model_data() self.unconditional_commit() @@ -624,27 +619,6 @@ def _set_model_data(self): @Inputs.reference def set_reference(self, data: Table): self.reference = data - self._set_input_summary() - - 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 _set_output_summary(self, data: Optional[Table] = None): - if data: - summary, details = len(data), format_summary_details(data) - else: - summary, details = self.info.NoOutput, "" - self.info.set_output_summary(summary, details) def commit(self): output_data = None @@ -652,7 +626,6 @@ def commit(self): output_data = self._create_data_from_values() if self.append_to_data: output_data = self._append_to_data(output_data) - self._set_output_summary(output_data) self.Outputs.data.send(output_data) def _create_data_from_values(self) -> Table: diff --git a/Orange/widgets/data/owcsvimport.py b/Orange/widgets/data/owcsvimport.py index 517469f2342..c6784321c75 100644 --- a/Orange/widgets/data/owcsvimport.py +++ b/Orange/widgets/data/owcsvimport.py @@ -66,7 +66,6 @@ from Orange.widgets.utils.settings import ( QSettings_readArray, QSettings_writeArray ) -from Orange.widgets.utils.state_summary import format_summary_details if typing.TYPE_CHECKING: # pylint: disable=invalid-name @@ -605,17 +604,17 @@ class OWCSVFileImport(widget.OWWidget): category = "Data" keywords = ["file", "load", "read", "open", "csv"] - outputs = [ - widget.OutputSignal( + class Outputs: + data = widget.Output( name="Data", type=Orange.data.Table, - doc="Loaded data set."), - widget.OutputSignal( + doc="Loaded data set.") + data_frame = widget.Output( name="Data Frame", type=pd.DataFrame, - doc="" + doc="", + auto_summary=False ) - ] class Error(widget.OWWidget.Error): error = widget.Msg( @@ -714,8 +713,6 @@ def __init__(self, *args, **kwargs): self.summary_text.viewport().setAutoFillBackground(False) box.layout().addWidget(self.summary_text) - self.info.set_output_summary(self.info.NoOutput) - button_box = QDialogButtonBox( orientation=Qt.Horizontal, standardButtons=QDialogButtonBox.Cancel | QDialogButtonBox.Retry @@ -1216,14 +1213,11 @@ def __handle_result(self, f): table.name = os.path.splitext(os.path.split(filename)[-1])[0] else: table = None - self.send("Data Frame", df) - self.send('Data', table) + self.Outputs.data_frame.send(df) + self.Outputs.data.send(table) self._update_status_messages(table) def _update_status_messages(self, data): - summary = len(data) if data else self.info.NoOutput - details = format_summary_details(data) if data else "" - self.info.set_output_summary(summary, details) if data is None: return diff --git a/Orange/widgets/data/owdatainfo.py b/Orange/widgets/data/owdatainfo.py index 20726727ed0..2811875d07b 100644 --- a/Orange/widgets/data/owdatainfo.py +++ b/Orange/widgets/data/owdatainfo.py @@ -4,7 +4,6 @@ from Orange.widgets import widget, gui from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Input from Orange.data.table import Table from Orange.data import StringVariable, DiscreteVariable, ContinuousVariable @@ -43,8 +42,6 @@ def __init__(self): bo = gui.vBox(self.controlArea, box) gui.label(bo, self, "%%(%s)s" % name) - self.info.set_input_summary(self.info.NoInput) - # ensure the widget has some decent minimum width. self.targets = "Categorical outcome with 123 values" self.layout().activate() @@ -59,12 +56,9 @@ def __init__(self): def data(self, data): if data is None: self._clear_fields() - self.info.set_input_summary(self.info.NoInput) else: self._set_fields(data) self._set_report(data) - self.info.set_input_summary(data.approx_len(), - format_summary_details(data)) def _clear_fields(self): self.data_set_name = "" diff --git a/Orange/widgets/data/owdatasampler.py b/Orange/widgets/data/owdatasampler.py index b0dbd1e1221..e6d9376a977 100644 --- a/Orange/widgets/data/owdatasampler.py +++ b/Orange/widgets/data/owdatasampler.py @@ -11,7 +11,6 @@ from Orange.data import Table from Orange.data.sql.table import SqlTable from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Msg, OWWidget, Input, Output from Orange.util import Reprable @@ -86,9 +85,6 @@ def __init__(self): self.indices = None self.sampled_instances = self.remaining_instances = None - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoInput) - self.sampling_box = gui.vBox(self.controlArea, "Sampling Type") sampling = gui.radioButtons(self.sampling_box, self, "sampling_type", callback=self.sampling_type_changed) @@ -194,14 +190,11 @@ def set_data(self, dataset): self.cb_seed.setVisible(not sql) self.cb_stratify.setVisible(not sql) self.cb_sql_dl.setVisible(sql) - self.info.set_input_summary(dataset.approx_len(), - format_summary_details(dataset)) if not sql: self._update_sample_max_size() self.updateindices() else: - self.info.set_input_summary(self.info.NoInput) self.indices = None self.clear_messages() self.commit() @@ -248,10 +241,6 @@ def commit(self): self.sampled_instances = len(sample) self.remaining_instances = len(other) - summary = sample.approx_len() if sample else self.info.NoOutput - details = format_summary_details(sample) if sample else "" - self.info.set_output_summary(summary, details) - self.Outputs.data_sample.send(sample) self.Outputs.remaining_data.send(other) diff --git a/Orange/widgets/data/owdatasets.py b/Orange/widgets/data/owdatasets.py index caf3cafb5cd..fb1c8cbdc05 100644 --- a/Orange/widgets/data/owdatasets.py +++ b/Orange/widgets/data/owdatasets.py @@ -28,7 +28,6 @@ from Orange.widgets import settings, gui from Orange.widgets.utils.signals import Output from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import OWWidget, Msg @@ -242,8 +241,6 @@ def __init__(self): self.splitter.addWidget(self.view) self.splitter.addWidget(box) - self.info.set_output_summary(self.info.NoOutput) - self.splitter.setSizes([300, 200]) self.splitter.splitterMoved.connect( lambda: @@ -550,12 +547,9 @@ def closeEvent(self, event): def load_and_output(self, path): if path is None: self.Outputs.data.send(None) - self.info.set_output_summary(self.info.NoOutput) else: data = self.load_data(path) self.Outputs.data.send(data) - self.info.set_output_summary(len(data), - format_summary_details(data)) self.current_output = path self.__update_cached_state() diff --git a/Orange/widgets/data/owdiscretize.py b/Orange/widgets/data/owdiscretize.py index 91494b68faa..142acd711d7 100644 --- a/Orange/widgets/data/owdiscretize.py +++ b/Orange/widgets/data/owdiscretize.py @@ -17,7 +17,6 @@ from Orange.widgets import widget, gui, settings from Orange.widgets.utils import itemmodels, vartype, unique_everseen from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Input, Output from Orange.widgets.data.oweditdomain import FixedSizeButton @@ -470,9 +469,6 @@ def set_manual_cuts(): self._update_spin_positions() - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - @property def default_method(self) -> Methods: return Methods[self.default_method_name] @@ -504,10 +500,7 @@ def set_data(self, data): self._restore(self.saved_var_states) # Complete the induction of cut points self._update_points() - self.info.set_input_summary(len(data), - format_summary_details(data)) else: - self.info.set_input_summary(self.info.NoInput) self._clear() self.unconditional_commit() @@ -775,10 +768,6 @@ def commit(self): if self.data is not None: domain = self.discretized_domain() output = self.data.transform(domain) - - summary = len(output) if output else self.info.NoOutput - details = format_summary_details(output) if output else "" - self.info.set_output_summary(summary, details) self.Outputs.data.send(output) def storeSpecificSettings(self): diff --git a/Orange/widgets/data/oweditdomain.py b/Orange/widgets/data/oweditdomain.py index dfd566ca6fa..cad60a98f8d 100644 --- a/Orange/widgets/data/oweditdomain.py +++ b/Orange/widgets/data/oweditdomain.py @@ -41,7 +41,6 @@ from Orange.widgets.utils.buttons import FixedSizeButton from Orange.widgets.utils.itemmodels import signal_blocking from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Input, Output ndarray = np.ndarray # pylint: disable=invalid-name @@ -1877,9 +1876,6 @@ def __init__(self): self.variables_view.setFocus(Qt.NoFocusReason) # initial focus - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - @Inputs.data def set_data(self, data): """Set input dataset.""" @@ -1888,8 +1884,6 @@ def set_data(self, data): self.data = data if self.data is not None: - self.info.set_input_summary(len(data), - format_summary_details(data)) self.setup_model(data) self.le_output_name.setPlaceholderText(data.name) self.openContext(self.data) @@ -1897,7 +1891,6 @@ def set_data(self, data): self._restore() else: self.le_output_name.setPlaceholderText("") - self.info.set_input_summary(self.info.NoInput) self.commit() @@ -2080,7 +2073,6 @@ def commit(self): data = self.data if data is None: self.Outputs.data.send(None) - self.info.set_output_summary(self.info.NoOutput) return model = self.variables_model @@ -2096,8 +2088,6 @@ def state(i): and not any(requires_transform(var, trs) for var, (_, trs) in zip(input_vars, state)): self.Outputs.data.send(data) - self.info.set_output_summary(len(data), - format_summary_details(data)) return assert all(v_.vtype.name == v.name @@ -2121,7 +2111,6 @@ def state(i): if len(output_vars) != len({v.name for v in output_vars}): self.Error.duplicate_var_name() self.Outputs.data.send(None) - self.info.set_output_summary(self.info.NoOutput) return domain = data.domain @@ -2148,8 +2137,6 @@ def construct_domain(vars_list): if self.output_table_name: new_data.name = self.output_table_name self.Outputs.data.send(new_data) - self.info.set_output_summary(len(new_data), - format_summary_details(new_data)) def sizeHint(self): sh = super().sizeHint() diff --git a/Orange/widgets/data/owfeatureconstructor.py b/Orange/widgets/data/owfeatureconstructor.py index fc92cb568d5..48b84219f20 100644 --- a/Orange/widgets/data/owfeatureconstructor.py +++ b/Orange/widgets/data/owfeatureconstructor.py @@ -39,7 +39,6 @@ from Orange.widgets.utils.sql import check_sql_input from Orange.widgets import report from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import OWWidget, Msg, Input, Output FeatureDescriptor = \ @@ -494,9 +493,6 @@ def generate_newname(fmt): self._on_selectedVariableChanged ) - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - layout.addWidget(self.featureview) box.layout().addLayout(layout, 1) @@ -563,14 +559,12 @@ def setData(self, data=None): self.data = data - self.info.set_input_summary(self.info.NoInput) if self.data is not None: descriptors = list(self.descriptors) currindex = self.currentIndex self.descriptors = [] self.currentIndex = -1 self.openContext(data) - self.info.set_input_summary(len(data), format_summary_details(data)) if descriptors != self.descriptors or \ self.currentIndex != currindex: @@ -591,7 +585,6 @@ def handleNewSignals(self): if self.data is not None: self.apply() else: - self.info.set_output_summary(self.info.NoOutput) self.Outputs.data.send(None) def addFeature(self, descriptor): @@ -698,7 +691,6 @@ def report_error(err): self.Error.more_values_needed(disc_attrs_not_ok) return - self.info.set_output_summary(len(data), format_summary_details(data)) self.Outputs.data.send(data) def send_report(self): diff --git a/Orange/widgets/data/owfeaturestatistics.py b/Orange/widgets/data/owfeaturestatistics.py index 05e0905c937..898eade7cdd 100644 --- a/Orange/widgets/data/owfeaturestatistics.py +++ b/Orange/widgets/data/owfeaturestatistics.py @@ -31,7 +31,6 @@ from Orange.widgets.utils.itemmodels import DomainModel, AbstractSortTableModel from Orange.widgets.utils.signals import Input, Output from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details def _categorical_entropy(x): @@ -792,9 +791,6 @@ def __init__(self): gui.rubber(self.buttonsArea) gui.auto_send(self.buttonsArea, self, "auto_commit") - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - @staticmethod def sizeHint(): return QSize(1050, 500) @@ -823,14 +819,11 @@ def set_data(self, data): self.data = data if data is not None: - self.info.set_input_summary(len(data), - format_summary_details(data)) self.color_var_model.set_domain(data.domain) self.color_var = None if self.data.domain.class_vars: self.color_var = self.data.domain.class_vars[0] else: - self.info.set_input_summary(self.info.NoInput) self.color_var_model.set_domain(None) self.color_var = None self.model.set_data(data) @@ -885,15 +878,12 @@ def on_select(self): def commit(self): if not self.selected_vars: - self.info.set_output_summary(self.info.NoOutput) self.Outputs.reduced_data.send(None) self.Outputs.statistics.send(None) return # Send a table with only selected columns to output variables = self.selected_vars - self.info.set_output_summary(len(self.data[:, variables]), - format_summary_details(self.data[:, variables])) self.Outputs.reduced_data.send(self.data[:, variables]) # Send the statistics of the selected variables to ouput diff --git a/Orange/widgets/data/owfile.py b/Orange/widgets/data/owfile.py index 31f6ee147eb..86d650a4793 100644 --- a/Orange/widgets/data/owfile.py +++ b/Orange/widgets/data/owfile.py @@ -21,7 +21,6 @@ from Orange.widgets.utils.filedialogs import RecentPathsWComboMixin, \ open_filename_dialog from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Output, Msg # Backward compatibility: class RecentPath used to be defined in this module, @@ -256,8 +255,6 @@ def __init__(self): callback=lambda: self.browse_file(True), autoDefault=False) gui.rubber(hBox) - self.info.set_output_summary(self.info.NoOutput) - self.set_file_list() # Must not call open_file from within __init__. open_file # explicitly re-enters the event loop (by a progress bar) @@ -343,7 +340,6 @@ def load_data(self): self.sheet_box.hide() self.Outputs.data.send(None) self.infolabel.setText("No data.") - self.info.set_output_summary(self.info.NoOutput) def _try_load(self): # pylint: disable=broad-except @@ -358,7 +354,6 @@ def _try_load(self): if self.reader is self.NoFileSelected: self.Outputs.data.send(None) - self.info.set_output_summary(self.info.NoOutput) return None try: @@ -512,9 +507,6 @@ def apply_domain_edit(self): self.Warning.multiple_targets( shown=table is not None and len(table.domain.class_vars) > 1) - summary = len(table) if table else self.info.NoOutput - details = format_summary_details(table) if table else "" - self.info.set_output_summary(summary, details) self.Outputs.data.send(table) self.apply_button.setEnabled(False) diff --git a/Orange/widgets/data/owimpute.py b/Orange/widgets/data/owimpute.py index 8f74e33e0d3..a3549fbfcd9 100644 --- a/Orange/widgets/data/owimpute.py +++ b/Orange/widgets/data/owimpute.py @@ -26,7 +26,6 @@ from Orange.widgets.utils import concurrent as qconcurrent from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.utils.spinbox import DoubleSpinBox from Orange.widgets.widget import OWWidget, Msg, Input, Output from Orange.classification import SimpleTreeLearner @@ -303,9 +302,6 @@ def set_default_time(datetime): gui.auto_apply(self.buttonsArea, self, "autocommit") - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - def create_imputer(self, method, *args): # type: (Method, ...) -> impute.BaseImputeMethod if method == Method.Model: @@ -371,9 +367,6 @@ def set_data(self, data): # restore per variable imputation state self._restore_state(self._variable_imputation_state) self.reset_button.setEnabled(len(self.varmodel) > 0) - summary = len(data) if data else self.info.NoInput - details = format_summary_details(data) if data else "" - self.info.set_input_summary(summary, details) self.update_varview() self.unconditional_commit() @@ -418,9 +411,6 @@ def commit(self): self.warning() self.Error.imputation_failed.clear() self.Error.model_based_imputer_sparse.clear() - summary = len(self.data) if self.data else self.info.NoOutput - detail = format_summary_details(self.data) if self.data else "" - self.info.set_output_summary(summary, detail) if not self.data or not self.varmodel.rowCount(): self.Outputs.data.send(self.data) @@ -530,9 +520,6 @@ def create_data(attributes, class_vars): self.Outputs.data.send(data) self.modified = False - summary = len(data) if data else self.info.NoOutput - details = format_summary_details(data) if data else "" - self.info.set_output_summary(summary, details) @Slot(int, int) def __progress_changed(self, n, d): diff --git a/Orange/widgets/data/owmergedata.py b/Orange/widgets/data/owmergedata.py index e48f37d8c8f..d704ff0d5bd 100644 --- a/Orange/widgets/data/owmergedata.py +++ b/Orange/widgets/data/owmergedata.py @@ -18,8 +18,6 @@ from Orange.widgets.utils.itemmodels import DomainModel from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_multiple_summaries, \ - format_summary_details from Orange.widgets.widget import Input, Output, Msg INSTANCEID = "Instance id" @@ -327,9 +325,6 @@ def __init__(self): self.model = DomainModelWithTooltips(content) self.extra_model = DomainModelWithTooltips(content) - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - grp = gui.radioButtons( self.controlArea, self, "merging", box="Merging", btnLabels=self.OptionNames, tooltips=self.OptionDescriptions, @@ -371,20 +366,6 @@ def handleNewSignals(self): 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 _find_best_match(self): @@ -409,9 +390,6 @@ def commit(self): self.clear_messages() merged = self.merge() if self.data and self.extra_data else None self.Outputs.data.send(merged) - details = format_summary_details(merged) if merged else "" - summary = len(merged) if merged else self.info.NoOutput - self.info.set_output_summary(summary, details) def send_report(self): # pylint: disable=invalid-sequence-index diff --git a/Orange/widgets/data/owneighbors.py b/Orange/widgets/data/owneighbors.py index caf5f864ef2..e449af029c0 100644 --- a/Orange/widgets/data/owneighbors.py +++ b/Orange/widgets/data/owneighbors.py @@ -11,8 +11,6 @@ from Orange.widgets.utils.signals import Input, Output from Orange.widgets.widget import OWWidget, Msg from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details,\ - format_multiple_summaries METRICS = [ ("Euclidean", distance.Euclidean), @@ -84,23 +82,6 @@ def __init__(self): callback=lambda: self.apply()) self.apply_button = gui.auto_apply(self.buttonsArea, self, commit=self.apply) - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - - 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)}" - details = format_multiple_summaries([ - ("Data", self.data), - ("Reference", self.reference) - ]) - kwargs = {"format": Qt.RichText} - self.info.set_input_summary(summary, details, **kwargs) @Inputs.data def set_data(self, data): @@ -113,7 +94,6 @@ def set_ref(self, refs): def handleNewSignals(self): self.compute_distances() - self._set_input_summary() self.unconditional_apply() def recompute(self): @@ -149,11 +129,8 @@ def apply(self): if indices is None: neighbors = None - self.info.set_output_summary(self.info.NoOutput) else: neighbors = self._data_with_similarity(indices) - summary, details = len(neighbors), format_summary_details(neighbors) - self.info.set_output_summary(summary, details) self.Outputs.data.send(neighbors) def _compute_indices(self): diff --git a/Orange/widgets/data/owoutliers.py b/Orange/widgets/data/owoutliers.py index 22e7814be46..c419a91d9cf 100644 --- a/Orange/widgets/data/owoutliers.py +++ b/Orange/widgets/data/owoutliers.py @@ -18,7 +18,6 @@ from Orange.widgets.utils.concurrent import TaskState, ConcurrentWidgetMixin from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Msg, Input, Output, OWWidget @@ -231,9 +230,6 @@ def init_gui(self): gui.auto_apply(self.buttonsArea, self, "auto_commit") - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - def _init_editors(self): self.svm_editor = SVMEditor(self) self.cov_editor = CovarianceEditor(self) @@ -266,9 +262,6 @@ def set_data(self, data): self.cancel() self.clear_messages() self.data = data - summary = len(data) if data else self.info.NoInput - details = format_summary_details(data) if data else "" - self.info.set_input_summary(summary, details) self.enable_controls() self.unconditional_commit() @@ -296,9 +289,6 @@ def on_partial_result(self, _): def on_done(self, result: Results): inliers, outliers = result.inliers, result.outliers - summary = len(inliers) if inliers else self.info.NoOutput - details = format_summary_details(inliers) if inliers else "" - self.info.set_output_summary(summary, details) self.n_inliers = len(inliers) if inliers else None self.n_outliers = len(outliers) if outliers else None diff --git a/Orange/widgets/data/owpaintdata.py b/Orange/widgets/data/owpaintdata.py index 5fcdf7fd36c..f78fd7e7550 100644 --- a/Orange/widgets/data/owpaintdata.py +++ b/Orange/widgets/data/owpaintdata.py @@ -30,7 +30,6 @@ from Orange.util import scale, namegen from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import OWWidget, Msg, Input, Output @@ -967,9 +966,6 @@ def _init_ui(self): self.mainArea.layout().addWidget(self.plotview) - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - # enable brush tool self.toolActions.actions()[0].setChecked(True) self.set_current_tool(self.TOOLS[0][2]) @@ -1008,13 +1004,11 @@ def _check_and_set_data(data): data = None elif len(data.domain.attributes) > 2: self.Information.use_first_two() - self.info.set_input_summary(len(data), format_summary_details(data)) self.input_data = data self.btResetToInput.setDisabled(data is None) return bool(data) if not _check_and_set_data(data): - self.info.set_input_summary(self.info.NoInput) return X = np.array([scale(vals) for vals in data.X[:, :2].T]).T @@ -1274,7 +1268,6 @@ def commit(self): if not self.data: self.Outputs.data.send(None) - self.info.set_output_summary(self.info.NoOutput) return data = np.array(self.data) if self.hasAttr2: @@ -1305,7 +1298,6 @@ def commit(self): data.name = self.table_name self.Outputs.data.send(data) - self.info.set_output_summary(len(data), format_summary_details(data)) def sizeHint(self): sh = super().sizeHint() diff --git a/Orange/widgets/data/owpivot.py b/Orange/widgets/data/owpivot.py index f62ea7833d6..8ac3530290e 100644 --- a/Orange/widgets/data/owpivot.py +++ b/Orange/widgets/data/owpivot.py @@ -27,8 +27,6 @@ from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.itemmodels import DomainModel from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details, \ - format_multiple_summaries from Orange.widgets.widget import OWWidget, Input, Output, Msg @@ -806,9 +804,6 @@ def _add_control_area_controls(self): gui.rubber(self.controlArea) gui.auto_apply(self.buttonsArea, self, "auto_commit") - self.set_input_summary() - self.set_output_summary(None, None, None) - def __add_aggregation_controls(self): def new_inbox(): nonlocal row, col, inbox @@ -906,7 +901,6 @@ def set_data(self, data): def check_data(self): self.clear_messages() - self.set_input_summary() def init_attr_values(self): domain = self.data.domain if self.data and len(self.data) else None @@ -933,7 +927,6 @@ def send_outputs(pivot_table, filtered_data, grouped_data): self.Outputs.grouped_data.send(grouped_data) self.Outputs.pivot_table.send(pivot_table) self.Outputs.filtered_data.send(filtered_data) - self.set_output_summary(pivot_table, filtered_data, grouped_data) self.Warning.renamed_vars.clear() self.Warning.too_many_values.clear() @@ -971,28 +964,6 @@ def send_outputs(pivot_table, filtered_data, grouped_data): if self.pivot.renamed: self.Warning.renamed_vars(self.pivot.renamed) - def set_input_summary(self): - summary = len(self.data) if self.data else self.info.NoInput - details = format_summary_details(self.data) if self.data else "" - self.info.set_input_summary(summary, details) - - 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 _update_graph(self): self.table_view.clear() if self.pivot.pivot_table: diff --git a/Orange/widgets/data/owpreprocess.py b/Orange/widgets/data/owpreprocess.py index 12ea6314afb..d43c0af37d3 100644 --- a/Orange/widgets/data/owpreprocess.py +++ b/Orange/widgets/data/owpreprocess.py @@ -29,7 +29,6 @@ from Orange.widgets.utils.overlay import OverlayWidget from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Input, Output from Orange.preprocess import Normalize from Orange.widgets.data.utils.preprocess import ( @@ -1160,9 +1159,6 @@ def sizeHint(self): gui.auto_apply(self.buttonsArea, self, "autocommit") - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - self._initialize() def _initialize(self): @@ -1290,10 +1286,6 @@ def __on_modelchanged(self): def set_data(self, data=None): """Set the input dataset.""" self.data = data - if data is not None: - self.info.set_input_summary(len(data), format_summary_details(data)) - else: - self.info.set_input_summary(self.info.NoInput) def handleNewSignals(self): self.apply() @@ -1337,10 +1329,8 @@ def apply(self): except (ValueError, ZeroDivisionError) as e: self.error(str(e)) return - self.info.set_output_summary(len(data), format_summary_details(data)) else: data = None - self.info.set_output_summary(self.info.NoOutput) self.Outputs.preprocessor.send(preprocessor) self.Outputs.preprocessed_data.send(data) diff --git a/Orange/widgets/data/owpurgedomain.py b/Orange/widgets/data/owpurgedomain.py index 8093bc2d79a..c0d6c4b225f 100644 --- a/Orange/widgets/data/owpurgedomain.py +++ b/Orange/widgets/data/owpurgedomain.py @@ -6,7 +6,6 @@ from Orange.widgets.settings import Setting from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Input, Output @@ -104,16 +103,11 @@ def add_line(parent): gui.auto_send(self.buttonsArea, self, "autoSend") - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - @Inputs.data @check_sql_input def setData(self, dataset): if dataset is not None: self.data = dataset - self.info.set_input_summary(len(dataset), - format_summary_details(dataset)) self.unconditional_commit() else: self.removedAttrs = "-" @@ -126,8 +120,6 @@ def setData(self, dataset): self.reducedMetas = "-" self.Outputs.data.send(None) self.data = None - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) def optionsChanged(self): self.commit() @@ -160,8 +152,6 @@ def commit(self): self.removedMetas = meta_res['removed'] self.reducedMetas = meta_res['reduced'] - self.info.set_output_summary(len(cleaned), - format_summary_details(cleaned)) self.Outputs.data.send(cleaned) def send_report(self): diff --git a/Orange/widgets/data/owrandomize.py b/Orange/widgets/data/owrandomize.py index 595bb544def..7556d0567e1 100644 --- a/Orange/widgets/data/owrandomize.py +++ b/Orange/widgets/data/owrandomize.py @@ -7,7 +7,6 @@ from Orange.preprocess import Randomize from Orange.widgets.settings import Setting from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import OWWidget, Input, Output from Orange.widgets import gui @@ -67,9 +66,6 @@ def __init__(self): box, self, "random_seed", "Replicable shuffling", callback=self._shuffle_check_changed) - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - gui.auto_apply(self.buttonsArea, self, commit=self.apply) @property @@ -89,9 +85,6 @@ def _set_scope_label(self): @Inputs.data def set_data(self, data): self.data = data - summary = len(data) if data else self.info.NoInput - details = format_summary_details(data) if data else "" - self.info.set_input_summary(summary, details) self.unconditional_apply() def apply(self): @@ -106,9 +99,6 @@ def apply(self): data = self.data.copy() for i, instance in zip(indices, randomized): data[i] = instance - summary = len(data) if data else self.info.NoOutput - details = format_summary_details(data) if data else "" - self.info.set_output_summary(summary, details) self.Outputs.data.send(data) def send_report(self): diff --git a/Orange/widgets/data/owrank.py b/Orange/widgets/data/owrank.py index 640da176c06..5e90242cd05 100644 --- a/Orange/widgets/data/owrank.py +++ b/Orange/widgets/data/owrank.py @@ -32,7 +32,6 @@ from Orange.widgets.utils.concurrent import ConcurrentWidgetMixin, TaskState from Orange.widgets.utils.itemmodels import PyTableModel from Orange.widgets.utils.sql import check_sql_input -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.utils.widgetpreview import WidgetPreview from Orange.widgets.widget import AttributeList, Input, Msg, Output, OWWidget @@ -377,9 +376,6 @@ def button(text, buttonid, toolTip=None): gui.auto_send(self.buttonsArea, self, "auto_apply") - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - self.resize(690, 500) def switchProblemType(self, index): @@ -413,9 +409,6 @@ def set_data(self, data): self.switchProblemType(ProblemType.CLASSIFICATION) if self.data is not None: domain = self.data.domain - self.info.set_input_summary(len(self.data), - format_summary_details(self.data)) - if domain.has_discrete_class: problem_type = ProblemType.CLASSIFICATION elif domain.has_continuous_class: @@ -436,8 +429,6 @@ def set_data(self, data): max((a.name for a in domain.attributes), key=len)) self.selectionMethod = OWRank.SelectNBest - else: - self.info.set_input_summary(self.info.NoInput) self.openContext(data) self.selectButtons.button(self.selectionMethod).setChecked(True) @@ -628,7 +619,6 @@ def commit(self): self.Outputs.reduced_data.send(None) self.Outputs.features.send(None) self.out_domain_desc = None - self.info.set_output_summary(self.info.NoOutput) else: reduced_domain = Domain( self.selected_attrs, self.data.domain.class_var, @@ -637,8 +627,6 @@ def commit(self): self.Outputs.reduced_data.send(data) self.Outputs.features.send(AttributeList(self.selected_attrs)) self.out_domain_desc = report.describe_domain(data.domain) - self.info.set_output_summary(len(data), - format_summary_details(data)) def create_scores_table(self, labels): self.Warning.renamed_variables.clear() diff --git a/Orange/widgets/data/owsave.py b/Orange/widgets/data/owsave.py index b3b55a4facd..eee2d338afd 100644 --- a/Orange/widgets/data/owsave.py +++ b/Orange/widgets/data/owsave.py @@ -8,7 +8,6 @@ from Orange.widgets.settings import Setting from Orange.widgets.utils.save.owsavebase import OWSaveBase from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details _userhome = os.path.expanduser(f"~{os.sep}") @@ -35,9 +34,6 @@ class Error(OWSaveBase.Error): def __init__(self): super().__init__(2) - - self.info.set_input_summary(self.info.NoInput) - self.grid.addWidget( gui.checkBox( None, self, "add_type_annotations", @@ -81,11 +77,6 @@ def update_messages(self): shown=self.data is not None and self.data.is_sparse() and self.filename and not self.writer.SUPPORT_SPARSE_DATA) - def update_status(self): - summary = len(self.data) if self.data else self.info.NoInput - details = format_summary_details(self.data) if self.data else "" - self.info.set_input_summary(summary, details) - def send_report(self): self.report_data_brief(self.data) writer = self.writer diff --git a/Orange/widgets/data/owselectbydataindex.py b/Orange/widgets/data/owselectbydataindex.py index 7bc8b5f082a..03a5cd8e33a 100644 --- a/Orange/widgets/data/owselectbydataindex.py +++ b/Orange/widgets/data/owselectbydataindex.py @@ -1,14 +1,10 @@ import numpy as np -from AnyQt.QtCore import Qt - from Orange.data import Table from Orange.widgets import widget, gui from Orange.widgets.utils import itemmodels from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details, \ - format_multiple_summaries from Orange.widgets.widget import Input, Output from Orange.widgets.utils.annotated_data import (create_annotated_table) @@ -54,9 +50,6 @@ def __init__(self): self.infoBoxExtraData = gui.label( box, self, self.data_info_text(None), box="Data Subset") - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - @Inputs.data @check_sql_input def set_data(self, data): @@ -70,19 +63,6 @@ def set_data_subset(self, data): self.infoBoxExtraData.setText(self.data_info_text(data)) 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() @staticmethod @@ -111,9 +91,6 @@ def commit(self): non_matching_output = self.data[~row_sel] annotated_output = create_annotated_table(self.data, row_sel) - summary = self.info.NoOutput if matching_output is None else len(matching_output) - details = "" if matching_output is None else format_summary_details(matching_output) - self.info.set_output_summary(summary, details) self.Outputs.matching_data.send(matching_output) self.Outputs.non_matching_data.send(non_matching_output) self.Outputs.annotated_data.send(annotated_output) diff --git a/Orange/widgets/data/owselectcolumns.py b/Orange/widgets/data/owselectcolumns.py index 3b1b1f1d108..86f99be760c 100644 --- a/Orange/widgets/data/owselectcolumns.py +++ b/Orange/widgets/data/owselectcolumns.py @@ -18,7 +18,6 @@ VariablesListItemView, slices, variables_filter ) from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Input, Output, AttributeList, Msg from Orange.data.table import Table from Orange.widgets.utils.itemmodels import VariableListModel @@ -321,9 +320,6 @@ def dropcompleted(action): self.output_data = None self.original_completer_items = [] - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - self.resize(600, 600) @property @@ -367,7 +363,6 @@ def set_data(self, data=None): self.class_attrs[:] = [] self.meta_attrs[:] = [] self.available_attrs[:] = [] - self.info.set_input_summary(self.info.NoInput) return self.openContext(data) @@ -384,7 +379,6 @@ def attrs_for_role(role): self.class_attrs[:] = attrs_for_role("class") self.meta_attrs[:] = attrs_for_role("meta") self.available_attrs[:] = attrs_for_role("available") - self.info.set_input_summary(len(data), format_summary_details(data)) self.update_interface_state(self.class_attrs_view) @@ -607,14 +601,11 @@ def commit(self): self.output_data = newdata self.Outputs.data.send(newdata) self.Outputs.features.send(AttributeList(attributes)) - self.info.set_output_summary(len(newdata), - format_summary_details(newdata)) self.Warning.multiple_targets(shown=len(class_var) > 1) else: self.output_data = None self.Outputs.data.send(None) self.Outputs.features.send(None) - self.info.set_output_summary(self.info.NoOutput) def reset(self): self.enable_used_attrs() diff --git a/Orange/widgets/data/owselectrows.py b/Orange/widgets/data/owselectrows.py index 71c69859c48..43ed2f9d094 100644 --- a/Orange/widgets/data/owselectrows.py +++ b/Orange/widgets/data/owselectrows.py @@ -30,7 +30,6 @@ from Orange.widgets.widget import Msg from Orange.widgets.utils.annotated_data import (create_annotated_table, ANNOTATED_DATA_SIGNAL_NAME) -from Orange.widgets.utils.state_summary import format_summary_details class SelectRowsContextHandler(DomainContextHandler): @@ -282,9 +281,6 @@ def __init__(self): acbox = gui.auto_send(self.buttonsArea, self, "auto_commit") - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - self.set_data(None) self.resize(600, 400) @@ -554,7 +550,6 @@ def set_data(self, data): data is None or len(data.domain.variables) + len(data.domain.metas) > 100) if not data: - self.info.set_input_summary(self.info.NoInput) self.data_desc = None self.variable_model.set_domain(None) self.commit() @@ -570,8 +565,6 @@ def set_data(self, data): if not self.cond_list.model().rowCount(): self.add_row() - self.info.set_input_summary(data.approx_len(), - format_summary_details(data)) self.unconditional_commit() def conditions_changed(self): @@ -712,11 +705,6 @@ def commit(self): self.match_desc = report.describe_data_brief(matching_output) self.nonmatch_desc = report.describe_data_brief(non_matching_output) - summary = matching_output.approx_len() if matching_output else \ - self.info.NoOutput - details = format_summary_details(matching_output) if matching_output else "" - self.info.set_output_summary(summary, details) - def send_report(self): if not self.data: self.report_paragraph("No data.") diff --git a/Orange/widgets/data/owtable.py b/Orange/widgets/data/owtable.py index 7ebaa6da5c3..45e54a15e00 100644 --- a/Orange/widgets/data/owtable.py +++ b/Orange/widgets/data/owtable.py @@ -178,7 +178,7 @@ class OWDataTable(OWWidget): keywords = [] class Inputs: - data = Input("Data", Table, multiple=True) + data = Input("Data", Table, multiple=True, auto_summary=False) class Outputs: selected_data = Output("Selected Data", Table, default=True) @@ -213,7 +213,6 @@ def __init__(self): info_box = gui.vBox(self.controlArea, "Info") self.info_text = gui.widgetLabel(info_box) self._set_input_summary(None) - self._set_output_summary(None) box = gui.vBox(self.controlArea, "Variables") self.c_show_attribute_labels = gui.checkBox( @@ -543,11 +542,6 @@ def desc(n, part): + format_part(summary.M)) return text - def _set_output_summary(self, output): - summary = len(output) if output else self.info.NoOutput - details = format_summary_details(output) if output else "" - self.info.set_output_summary(summary, details) - def _on_select_all(self, _): data_info = self.tabs.currentWidget().input_slot.summary if len(self.selected_rows) == data_info.len \ @@ -711,7 +705,6 @@ def commit(self): # Selections of individual instances are not implemented # for SqlTables if isinstance(table, SqlTable): - self._set_output_summary(selected_data) self.Outputs.selected_data.send(selected_data) self.Outputs.annotated_data.send(None) return @@ -747,7 +740,6 @@ def select_vars(role): else: selected_data = table.from_table(domain, table, rowsel) - self._set_output_summary(selected_data) self.Outputs.selected_data.send(selected_data) self.Outputs.annotated_data.send(create_annotated_table(table, rowsel)) diff --git a/Orange/widgets/data/owtransform.py b/Orange/widgets/data/owtransform.py index cbe3aa32097..1fbf465b8e0 100644 --- a/Orange/widgets/data/owtransform.py +++ b/Orange/widgets/data/owtransform.py @@ -1,14 +1,10 @@ from typing import Optional -from AnyQt.QtCore import Qt - from Orange.data import Table from Orange.widgets import gui from Orange.widgets.report.report import describe_data from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_multiple_summaries, \ - format_summary_details from Orange.widgets.widget import OWWidget, Input, Output, Msg @@ -46,9 +42,6 @@ def __init__(self): self.set_input_label_text() self.set_template_label_text() - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - def set_input_label_text(self): text = "No data on input." if self.data: @@ -85,18 +78,6 @@ def set_template_data(self, data): self.template_data = data 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 apply(self): @@ -109,9 +90,6 @@ def apply(self): self.Error.error(ex) data = transformed_data - summary = len(data) if data else self.info.NoOutput - details = format_summary_details(data) if data else "" - self.info.set_output_summary(summary, details) self.transformed_info = describe_data(data) self.Outputs.transformed_data.send(data) self.set_template_label_text() diff --git a/Orange/widgets/data/owtranspose.py b/Orange/widgets/data/owtranspose.py index cb56185a64c..973586d392c 100644 --- a/Orange/widgets/data/owtranspose.py +++ b/Orange/widgets/data/owtranspose.py @@ -6,7 +6,6 @@ from Orange.widgets.utils.concurrent import TaskState, ConcurrentWidgetMixin from Orange.widgets.utils.itemmodels import DomainModel from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import OWWidget, Msg from Orange.widgets import gui from Orange.widgets.widget import Input, Output @@ -102,9 +101,6 @@ def __init__(self): gui.auto_apply(self.buttonsArea, self, commit=self.apply) - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - self.set_controls() def _apply_editing(self): @@ -123,10 +119,6 @@ def set_data(self, data): if self.feature_model: self.closeContext() self.data = data - if data: - self.info.set_input_summary(len(data), format_summary_details(data)) - else: - self.info.set_input_summary(self.info.NoInput) self.set_controls() if self.feature_model: self.openContext(data) @@ -160,11 +152,6 @@ def on_partial_result(self, _): def on_done(self, transposed: Optional[Table]): self.Outputs.data.send(transposed) - if transposed: - self.info.set_output_summary(len(transposed), - format_summary_details(transposed)) - else: - self.info.set_output_summary(self.info.NoOutput) def on_exception(self, ex: Exception): if isinstance(ex, ValueError): diff --git a/Orange/widgets/data/tests/test_owaggregatecolumns.py b/Orange/widgets/data/tests/test_owaggregatecolumns.py index a67bfa3dab8..27c53adc784 100644 --- a/Orange/widgets/data/tests/test_owaggregatecolumns.py +++ b/Orange/widgets/data/tests/test_owaggregatecolumns.py @@ -13,7 +13,6 @@ ) from Orange.widgets.data.owaggregatecolumns import OWAggregateColumns from Orange.widgets.tests.base import WidgetTest -from Orange.widgets.utils.state_summary import format_summary_details class TestOWAggregateColumn(WidgetTest): @@ -36,31 +35,21 @@ def setUp(self): def test_no_input(self): widget = self.widget domain = self.data1.domain - input_sum = widget.info.set_input_summary = Mock() - output_sum = widget.info.set_output_summary = Mock() self.send_signal(widget.Inputs.data, self.data1) self.assertEqual(widget.variables, []) widget.commit() output = self.get_output(self.widget.Outputs.data) self.assertIs(output, self.data1) - input_sum.assert_called_with(len(self.data1), - format_summary_details(self.data1)) - output_sum.assert_called_with(len(output), - format_summary_details(output)) widget.variables = [domain[n] for n in "c1 c2 t2".split()] widget.commit() output = self.get_output(self.widget.Outputs.data) self.assertIsNotNone(output) - output_sum.assert_called_with(len(output), - format_summary_details(output)) self.send_signal(widget.Inputs.data, None) widget.commit() self.assertIsNone(self.get_output(self.widget.Outputs.data)) - input_sum.assert_called_with(widget.info.NoInput) - output_sum.assert_called_with(widget.info.NoOutput) def test_compute_data(self): domain = self.data1.domain diff --git a/Orange/widgets/data/tests/test_owcolor.py b/Orange/widgets/data/tests/test_owcolor.py index f48607e1065..859c2cdd242 100644 --- a/Orange/widgets/data/tests/test_owcolor.py +++ b/Orange/widgets/data/tests/test_owcolor.py @@ -10,14 +10,12 @@ from AnyQt.QtCore import Qt, QSize, QRect from AnyQt.QtGui import QBrush -from orangewidget.widget import StateInfo from orangewidget.tests.base import GuiTest from Orange.data import Table, ContinuousVariable, DiscreteVariable, Domain from Orange.preprocess.transformation import Identity from Orange.util import color_to_hex from Orange.widgets.utils import colorpalettes -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.data import owcolor from Orange.widgets.data.owcolor import ColorRole from Orange.widgets.tests.base import WidgetTest @@ -703,25 +701,6 @@ def test_report(self): def test_string_variables(self): self.send_signal(self.widget.Inputs.data, Table("zoo")) - 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.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - def test_reset(self): self.send_signal(self.widget.Inputs.data, self.iris) cont_model = self.widget.cont_model diff --git a/Orange/widgets/data/tests/test_owconcatenate.py b/Orange/widgets/data/tests/test_owconcatenate.py index 79db53c4262..25a0fa56089 100644 --- a/Orange/widgets/data/tests/test_owconcatenate.py +++ b/Orange/widgets/data/tests/test_owconcatenate.py @@ -5,15 +5,11 @@ import numpy as np -from orangewidget.widget import StateInfo - from Orange.data import ( Table, Domain, ContinuousVariable, DiscreteVariable, StringVariable ) from Orange.preprocess.transformation import Identity from Orange.widgets.data.owconcatenate import OWConcatenate -from Orange.widgets.utils.state_summary import format_summary_details, \ - format_multiple_summaries from Orange.widgets.tests.base import WidgetTest @@ -380,49 +376,6 @@ def test_different_number_decimals(self): x = out_dom.attributes[0] self.assertEqual(x.number_of_decimals, 4) - 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.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) - def _create_compute_values(self): a1, a2, a3, a4, c1 = self.iris.domain.variables diff --git a/Orange/widgets/data/tests/test_owcontinuize.py b/Orange/widgets/data/tests/test_owcontinuize.py index 57d3482526e..f717eebfdb5 100644 --- a/Orange/widgets/data/tests/test_owcontinuize.py +++ b/Orange/widgets/data/tests/test_owcontinuize.py @@ -1,18 +1,14 @@ # Test methods with long descriptive names can omit docstrings # pylint: disable=missing-docstring,unsubscriptable-object import unittest -from unittest.mock import Mock import numpy as np -from orangewidget.widget import StateInfo - from Orange.data import Table, DiscreteVariable, ContinuousVariable, Domain from Orange.preprocess import transformation from Orange.widgets.data import owcontinuize from Orange.widgets.data.owcontinuize import OWContinuize, WeightedIndicator from Orange.widgets.tests.base import WidgetTest -from Orange.widgets.utils.state_summary import format_summary_details class TestOWContinuize(WidgetTest): @@ -43,27 +39,6 @@ def test_empty_data(self): imp_data = self.get_output(self.widget.Outputs.data) self.assertIsNone(imp_data) - def test_summary(self): - """Check if status bar is updated when data is received""" - data = Table("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.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - def test_continuous(self): table = Table("housing") self.send_signal(self.widget.Inputs.data, table) diff --git a/Orange/widgets/data/tests/test_owcorrelations.py b/Orange/widgets/data/tests/test_owcorrelations.py index 062926333c3..6502136868b 100644 --- a/Orange/widgets/data/tests/test_owcorrelations.py +++ b/Orange/widgets/data/tests/test_owcorrelations.py @@ -8,8 +8,6 @@ from AnyQt.QtCore import Qt -from orangewidget.widget import StateInfo - from Orange.data import Table, Domain, ContinuousVariable, DiscreteVariable from Orange.tests import test_filename from Orange.widgets.data.owcorrelations import ( @@ -20,7 +18,6 @@ from Orange.widgets.tests.utils import simulate from Orange.widgets.visualize.owscatterplot import OWScatterPlot from Orange.widgets.widget import AttributeList -from Orange.widgets.utils.state_summary import format_summary_details class TestOWCorrelations(WidgetTest): @@ -303,26 +300,6 @@ def test_send_report(self): self.send_signal(self.widget.Inputs.data, None) self.widget.report_button.click() - def test_summary(self): - """Check if status bar is updated when data is received""" - data = Table("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.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - class TestCorrelationRank(WidgetTest): @classmethod diff --git a/Orange/widgets/data/tests/test_owcreateclass.py b/Orange/widgets/data/tests/test_owcreateclass.py index 2946cba581c..640addd72d2 100644 --- a/Orange/widgets/data/tests/test_owcreateclass.py +++ b/Orange/widgets/data/tests/test_owcreateclass.py @@ -5,15 +5,12 @@ import numpy as np -from orangewidget.widget import StateInfo - from Orange.data import Table, StringVariable, DiscreteVariable, Domain from Orange.widgets.data.owcreateclass import ( OWCreateClass, map_by_substring, ValueFromStringSubstring, ValueFromDiscreteSubstring, unique_in_order_mapping) from Orange.widgets.tests.base import WidgetTest -from Orange.widgets.utils.state_summary import format_summary_details class TestHelpers(unittest.TestCase): @@ -569,37 +566,6 @@ def test_same_class(self): self.get_output(widget2.Outputs.data, widget=widget2).domain.class_var ) - def test_summary(self): - """Check if status bar is updated when data is received""" - data = self.zoo - info = self.widget.info - no_input, no_output = "No data on input", "No data on output" - - self.send_signal(self.widget.Inputs.data, data) - summary, details = f"{len(data)}", format_summary_details(data) - 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, data) - self.widget.class_name = "" - self.widget.apply() - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) - self.widget.class_name = "type" - self.widget.apply() - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) - - self.send_signal(self.widget.Inputs.data, None) - 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) - if __name__ == "__main__": unittest.main() diff --git a/Orange/widgets/data/tests/test_owcreateinstance.py b/Orange/widgets/data/tests/test_owcreateinstance.py index 7684fc97709..a0fa57d6d11 100644 --- a/Orange/widgets/data/tests/test_owcreateinstance.py +++ b/Orange/widgets/data/tests/test_owcreateinstance.py @@ -7,7 +7,6 @@ from AnyQt.QtWidgets import QWidget, QLineEdit, QStyleOptionViewItem, QMenu, \ QPushButton -from orangewidget.widget import StateInfo from orangewidget.tests.base import GuiTest from Orange.data import Table, ContinuousVariable, Domain, DiscreteVariable, \ @@ -16,8 +15,6 @@ DiscreteVariableEditor, ContinuousVariableEditor, StringVariableEditor, \ TimeVariableEditor, VariableDelegate, VariableItemModel, ValueRole from Orange.widgets.tests.base import WidgetTest, datasets -from Orange.widgets.utils.state_summary import format_summary_details, \ - format_multiple_summaries class TestOWCreateInstance(WidgetTest): @@ -58,45 +55,6 @@ def test_output_append_data(self): self.assertTupleEqual(output.domain.metas[0].values, ("iris", "created")) - 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 _get_init_buttons(self, widget=None): if not widget: widget = self.widget diff --git a/Orange/widgets/data/tests/test_owcsvimport.py b/Orange/widgets/data/tests/test_owcsvimport.py index 03400f9013e..667686d2dfd 100644 --- a/Orange/widgets/data/tests/test_owcsvimport.py +++ b/Orange/widgets/data/tests/test_owcsvimport.py @@ -30,7 +30,6 @@ ) from Orange.widgets.utils.pathutils import PathItem, samepath from Orange.widgets.utils.settings import QSettings_writeArray -from Orange.widgets.utils.state_summary import format_summary_details W = TypeVar("W", bound=OWBaseWidget) @@ -147,25 +146,6 @@ def test_restore_from_local(self): ) self._check_data_regions(self.get_output("Data", w)) - def test_summary(self): - """Check if status bar is updated when data is received""" - dirname = os.path.dirname(__file__) - path = os.path.join(dirname, "data-regions.tab") - widget = self.create_widget( - owcsvimport.OWCSVFileImport, - stored_settings={ - "_session_items": [ - (path, self.data_regions_options.as_dict()) - ] - } - ) - output_sum = widget.info.set_output_summary = mock.Mock() - widget.commit() - self.wait_until_finished(widget) - output = self.get_output("Data", widget) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - data_csv_types_options = owcsvimport.Options( encoding="ascii", dialect=csv.excel_tab(), columntypes=[ diff --git a/Orange/widgets/data/tests/test_owdatainfo.py b/Orange/widgets/data/tests/test_owdatainfo.py index 0173a143773..c188f0abaee 100644 --- a/Orange/widgets/data/tests/test_owdatainfo.py +++ b/Orange/widgets/data/tests/test_owdatainfo.py @@ -1,13 +1,8 @@ # Test methods with long descriptive names can omit docstrings # pylint: disable=missing-docstring,unsubscriptable-object -from unittest.mock import Mock - -from orangewidget.widget import StateInfo - from Orange.data import Table from Orange.widgets.data.owdatainfo import OWDataInfo from Orange.widgets.tests.base import WidgetTest -from Orange.widgets.utils.state_summary import format_summary_details class TestOWDataInfo(WidgetTest): @@ -30,14 +25,3 @@ def test_data_attributes(self): data = Table("iris") data.attributes = {"att 1": 1, "att 2": True, "att 3": 3} self.send_signal(self.widget.Inputs.data, data) - - def test_summary(self): - """Check if the status bar is updated when data is received""" - data = Table("iris") - input_sum = self.widget.info.set_input_summary = Mock() - self.send_signal(self.widget.Inputs.data, data) - input_sum.assert_called_with(len(data), format_summary_details(data)) - input_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) diff --git a/Orange/widgets/data/tests/test_owdatasampler.py b/Orange/widgets/data/tests/test_owdatasampler.py index 252e079fa62..c59ba560014 100644 --- a/Orange/widgets/data/tests/test_owdatasampler.py +++ b/Orange/widgets/data/tests/test_owdatasampler.py @@ -1,14 +1,10 @@ # Test methods with long descriptive names can omit docstrings # pylint: disable=missing-docstring,unsubscriptable-object import unittest -from unittest.mock import Mock - -from orangewidget.widget import StateInfo from Orange.data import Table from Orange.widgets.data.owdatasampler import OWDataSampler from Orange.widgets.tests.base import WidgetTest -from Orange.widgets.utils.state_summary import format_summary_details class TestOWDataSampler(WidgetTest): @@ -122,26 +118,6 @@ def test_shuffling(self): self.assertTrue((self.iris.ids != sample.ids).any()) self.assertEqual(set(self.iris.ids), set(sample.ids)) - def test_summary(self): - """Check if 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.data_sample) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - def set_fixed_sample_size(self, sample_size, with_replacement=False): """Set fixed sample size and return the number of gui spin. diff --git a/Orange/widgets/data/tests/test_owdatasets.py b/Orange/widgets/data/tests/test_owdatasets.py index 45c3d7e3a18..344b3946ad4 100644 --- a/Orange/widgets/data/tests/test_owdatasets.py +++ b/Orange/widgets/data/tests/test_owdatasets.py @@ -7,7 +7,6 @@ from Orange.widgets.data.owdatasets import OWDataSets from Orange.widgets.tests.base import WidgetTest -from Orange.widgets.utils.state_summary import format_summary_details class TestOWDataSets(WidgetTest): @@ -76,24 +75,6 @@ def test_dir_depth(self): self.wait_until_stop_blocking(w) self.assertEqual(w.view.model().rowCount(), 2) - @patch("Orange.widgets.data.owdatasets.list_remote", - Mock(return_value={('core', 'iris.tab'): {}})) - @patch("Orange.widgets.data.owdatasets.list_local", - Mock(return_value={})) - @patch("Orange.widgets.data.owdatasets.ensure_local", - Mock(return_value="iris.tab")) - def test_summary(self): - """Check if status bar is updated when data is received""" - widget = self.create_widget(OWDataSets) - output_sum = widget.info.set_output_summary = Mock() - self.wait_until_stop_blocking(widget) - # select the only dataset - sel_type = QItemSelectionModel.ClearAndSelect | QItemSelectionModel.Rows - widget.view.selectionModel().select(widget.view.model().index(0, 0), sel_type) - widget.commit() - output = self.get_output(widget.Outputs.data, widget) - output_sum.assert_called_with(len(output), - format_summary_details(output)) if __name__ == "__main__": unittest.main() diff --git a/Orange/widgets/data/tests/test_owdiscretize.py b/Orange/widgets/data/tests/test_owdiscretize.py index 2d36b0a1e1e..c6ce6766c57 100644 --- a/Orange/widgets/data/tests/test_owdiscretize.py +++ b/Orange/widgets/data/tests/test_owdiscretize.py @@ -1,20 +1,16 @@ # Test methods with long descriptive names can omit docstrings # pylint: disable=missing-docstring,unsubscriptable-object,protected-access import unittest -from unittest.mock import Mock from AnyQt.QtCore import Qt, QPoint from AnyQt.QtWidgets import QWidget, QApplication, QStyleOptionViewItem -from orangewidget.widget import StateInfo - from Orange.data import Table, DiscreteVariable from Orange.widgets.data.owdiscretize import OWDiscretize, Default, EqualFreq, \ Remove, Leave, Custom, IncreasingNumbersListValidator, DiscDelegate, MDL, \ EqualWidth, DState, show_tip from Orange.widgets.tests.base import WidgetTest from Orange.widgets.tests.base import GuiTest -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.utils.itemmodels import select_row, VariableListModel @@ -35,26 +31,6 @@ def test_empty_data(self): widget.unconditional_commit() self.assertIsNotNone(self.get_output(widget.Outputs.data)) - def test_summary(self): - """Check if status bar is updated when data is received""" - input_sum = self.widget.info.set_input_summary = Mock() - output_sum = self.widget.info.set_output_summary = Mock() - - data = Table("iris") - 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.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - def test_select_method(self): widget = self.widget data = Table("iris")[::5] diff --git a/Orange/widgets/data/tests/test_oweditdomain.py b/Orange/widgets/data/tests/test_oweditdomain.py index e9a3862894e..5f7f0d99ed0 100644 --- a/Orange/widgets/data/tests/test_oweditdomain.py +++ b/Orange/widgets/data/tests/test_oweditdomain.py @@ -15,8 +15,6 @@ QStyleOptionViewItem, QDialog, QMenu from AnyQt.QtTest import QTest, QSignalSpy -from orangewidget.widget import StateInfo - from Orange.widgets.utils import colorpalettes from orangewidget.tests.utils import simulate from orangewidget.utils.itemmodels import PyListModel @@ -42,7 +40,6 @@ from Orange.widgets.tests.base import WidgetTest, GuiTest from Orange.widgets.tests.utils import contextMenu from Orange.tests import test_filename, assert_array_nanequal -from Orange.widgets.utils.state_summary import format_summary_details MArray = np.ma.MaskedArray @@ -340,45 +337,6 @@ def restore(state): tr = model.data(model.index(4), TransformRole) self.assertEqual(tr, [AsString(), Rename("Z")]) - def test_summary(self): - """Check if status bar is updated when data is received""" - data = Table("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.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - def enter_text(widget, text): - # type: (QLineEdit, str) -> None - widget.selectAll() - QTest.keyClick(widget, Qt.Key_Delete) - QTest.keyClicks(widget, text) - QTest.keyClick(widget, Qt.Key_Return) - - editor = self.widget.findChild(ContinuousVariableEditor) - enter_text(editor.name_edit, "sepal height") - self.widget.commit() - output = self.get_output(self.widget.Outputs.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - output_sum.reset_mock() - enter_text(editor.name_edit, "sepal width") - self.widget.commit() - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - class TestEditors(GuiTest): def test_variable_editor(self): diff --git a/Orange/widgets/data/tests/test_owfeatureconstructor.py b/Orange/widgets/data/tests/test_owfeatureconstructor.py index 85affd90539..7ec9bd147b3 100644 --- a/Orange/widgets/data/tests/test_owfeatureconstructor.py +++ b/Orange/widgets/data/tests/test_owfeatureconstructor.py @@ -6,17 +6,13 @@ import pickle import copy -from unittest.mock import Mock import numpy as np -from orangewidget.widget import StateInfo - from Orange.data import (Table, Domain, StringVariable, ContinuousVariable, DiscreteVariable, TimeVariable) from Orange.widgets.tests.base import WidgetTest from Orange.widgets.utils import vartype from Orange.widgets.utils.itemmodels import PyListModel -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.data.owfeatureconstructor import ( DiscreteDescriptor, ContinuousDescriptor, StringDescriptor, construct_variables, OWFeatureConstructor, @@ -377,26 +373,6 @@ def test_discrete_no_values(self): self.widget.apply() self.assertTrue(self.widget.Error.more_values_needed.is_shown()) - def test_summary(self): - """Check if status bar is updated when data is received""" - data = Table("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.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - class TestFeatureEditor(unittest.TestCase): def test_has_functions(self): diff --git a/Orange/widgets/data/tests/test_owfeaturestatistics.py b/Orange/widgets/data/tests/test_owfeaturestatistics.py index 05d3e078a7f..629cf98404d 100644 --- a/Orange/widgets/data/tests/test_owfeaturestatistics.py +++ b/Orange/widgets/data/tests/test_owfeaturestatistics.py @@ -5,13 +5,11 @@ from functools import partial from itertools import chain from typing import List -from unittest.mock import Mock import numpy as np from AnyQt.QtCore import QItemSelection, QItemSelectionRange, \ QItemSelectionModel, Qt -from orangewidget.widget import StateInfo from orangewidget.settings import Context from Orange.data import Table, Domain, StringVariable, ContinuousVariable, \ @@ -20,7 +18,6 @@ from Orange.widgets.tests.utils import simulate, table_dense_sparse from Orange.widgets.data.owfeaturestatistics import \ OWFeatureStatistics -from Orange.widgets.utils.state_summary import format_summary_details VarDataPair = namedtuple('VarDataPair', ['variable', 'data']) @@ -524,28 +521,6 @@ def setUp(self): ) self.select_rows = partial(select_rows, widget=self.widget) - def test_summary(self): - """Check if the status bar is updated when data is received""" - data = self.data - 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)) - - self.select_rows([0, 2]) - self.widget.unconditional_commit() - output = self.get_output(self.widget.Outputs.reduced_data) - output_sum.assert_called_with(len(output), format_summary_details(output)) - - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - if __name__ == "__main__": unittest.main() diff --git a/Orange/widgets/data/tests/test_owfile.py b/Orange/widgets/data/tests/test_owfile.py index f413813799d..13793f3737c 100644 --- a/Orange/widgets/data/tests/test_owfile.py +++ b/Orange/widgets/data/tests/test_owfile.py @@ -26,7 +26,6 @@ from Orange.tests import named_file from Orange.widgets.data.owfile import OWFile from Orange.widgets.utils.filedialogs import dialog_formats, format_filter, RecentPath -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.tests.base import WidgetTest from Orange.widgets.utils.domaineditor import ComboDelegate, VarTypeDelegate, VarTableModel @@ -546,14 +545,6 @@ def test_adds_origin(self): self.assertIn("origin", attrs) self.assertIn("origin1", attrs["origin"]) - def test_summary(self): - """Check if the status bar is updated when data is received""" - output_sum = self.widget.info.set_output_summary = Mock() - self.open_dataset("iris") - output = self.get_output(self.widget.Outputs.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - @patch("Orange.widgets.widget.OWWidget.workflowEnv", Mock(return_value={"basedir": getcwd()})) def test_open_moved_workflow(self): diff --git a/Orange/widgets/data/tests/test_owimpute.py b/Orange/widgets/data/tests/test_owimpute.py index ddcd7433be5..7cec4263864 100644 --- a/Orange/widgets/data/tests/test_owimpute.py +++ b/Orange/widgets/data/tests/test_owimpute.py @@ -1,20 +1,16 @@ # Test methods with long descriptive names can omit docstrings # pylint: disable=missing-docstring,pointless-statement,blacklisted-name,unsubscriptable-object -from unittest.mock import Mock import numpy as np from AnyQt.QtCore import Qt, QItemSelection from AnyQt.QtTest import QTest -from orangewidget.widget import StateInfo - from Orange.data import Table, Domain, ContinuousVariable, TimeVariable from Orange.preprocess import impute from Orange.widgets.data.owimpute import OWImpute, AsDefault, Learner, Method from Orange.widgets.tests.base import WidgetTest from Orange.widgets.tests.utils import simulate from Orange.widgets.utils.itemmodels import select_row -from Orange.widgets.utils.state_summary import format_summary_details class Foo(Learner): @@ -214,29 +210,3 @@ def effective_method(var): widget.value_combo.isEnabledTo(widget)) self.assertEqual(varbg.checkedId(), Method.Default) self.assertEqual(widget.value_combo.currentIndex(), 1) - - def test_summary(self): - """Check if the status bar is updated when data is received""" - data = Table("heart_disease") - 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.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - varbg = self.widget.variable_button_group - varbg.button(Method.AsValue).click() - output = self.get_output(self.widget.Outputs.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) diff --git a/Orange/widgets/data/tests/test_owmergedata.py b/Orange/widgets/data/tests/test_owmergedata.py index 2da8f97d31c..02b4ff37c77 100644 --- a/Orange/widgets/data/tests/test_owmergedata.py +++ b/Orange/widgets/data/tests/test_owmergedata.py @@ -12,15 +12,11 @@ from AnyQt.QtCore import Qt -from orangewidget.widget import StateInfo - from Orange.data import Table, Domain, DiscreteVariable, StringVariable, \ ContinuousVariable from Orange.widgets.data.owmergedata import OWMergeData, INSTANCEID, INDEX, \ MergeDataContextHandler from Orange.widgets.tests.base import WidgetTest -from Orange.widgets.utils.state_summary import format_multiple_summaries, \ - format_summary_details from Orange.tests import test_filename @@ -1024,44 +1020,6 @@ def test_keep_non_duplicate_variables_missing_rows(self): self.assertListEqual([m.name for m in merged_data.domain.variables], ["A", "B", "C"]) - def test_summary(self): - """Check if the status bar is updated when data is received""" - data = self.dataA - 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), ("Extra data", 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.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) - - self.send_signal(self.widget.Inputs.extra_data, data) - data_list = [("Data", data), ("Extra data", 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.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), ("Extra data", 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.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) - - self.send_signal(self.widget.Inputs.extra_data, None) - 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) def test_empty_tables(self): widget = self.widget diff --git a/Orange/widgets/data/tests/test_owneighbors.py b/Orange/widgets/data/tests/test_owneighbors.py index 7debdf81f85..3249c658a82 100644 --- a/Orange/widgets/data/tests/test_owneighbors.py +++ b/Orange/widgets/data/tests/test_owneighbors.py @@ -4,13 +4,9 @@ import numpy as np -from orangewidget.widget import StateInfo - from Orange.data import Table, Domain, ContinuousVariable from Orange.widgets.data.owneighbors import OWNeighbors, METRICS from Orange.widgets.tests.base import WidgetTest, ParameterMapping -from Orange.widgets.utils.state_summary import format_summary_details, \ - format_multiple_summaries class TestOWNeighbors(WidgetTest): @@ -117,44 +113,6 @@ def test_missing_values(self): widget.apply_button.button.click() self.assertIsNotNone(self.get_output("Neighbors")) - 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.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - 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.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) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) - def test_compute_distances_apply_called(self): """Check compute distances and apply are called when receiving signal""" widget = self.widget diff --git a/Orange/widgets/data/tests/test_owoutliers.py b/Orange/widgets/data/tests/test_owoutliers.py index 81e7b090162..2e4e3e14e20 100644 --- a/Orange/widgets/data/tests/test_owoutliers.py +++ b/Orange/widgets/data/tests/test_owoutliers.py @@ -4,13 +4,10 @@ import unittest from unittest.mock import patch, Mock -from orangewidget.widget import StateInfo - from Orange.data import Table from Orange.classification import LocalOutlierFactorLearner from Orange.widgets.data.owoutliers import OWOutliers, run from Orange.widgets.tests.base import WidgetTest, simulate -from Orange.widgets.utils.state_summary import format_summary_details class TestRun(unittest.TestCase): @@ -136,30 +133,6 @@ def test_nans(self): self.assertIsNotNone(self.get_output(self.widget.Outputs.inliers)) self.assertFalse(self.widget.Error.singular_cov.is_shown()) - def test_in_out_summary(self): - info = self.widget.info - self.assertIsInstance(info._StateInfo__input_summary, StateInfo.Empty) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__input_summary.details, "No data on input") - self.assertEqual(info._StateInfo__output_summary.details, "No data on output") - - self.send_signal(self.widget.Inputs.data, self.iris) - self.wait_until_finished() - self.assertEqual(info._StateInfo__input_summary.brief, "150") - self.assertIn(info._StateInfo__output_summary.brief, ["135", "136"]) - self.assertEqual(info._StateInfo__input_summary.details, - format_summary_details(self.iris)) - output = self.get_output(self.widget.Outputs.inliers) - self.assertEqual(info._StateInfo__output_summary.details, - format_summary_details(output)) - - self.send_signal(self.widget.Inputs.data, None) - self.wait_until_finished() - self.assertIsInstance(info._StateInfo__input_summary, StateInfo.Empty) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__input_summary.details, "No data on input") - self.assertEqual(info._StateInfo__output_summary.details, "No data on output") - @patch("Orange.widgets.data.owoutliers.OWOutliers.MAX_FEATURES", 3) @patch("Orange.widgets.data.owoutliers.OWOutliers.commit", Mock()) def test_covariance_enabled(self): diff --git a/Orange/widgets/data/tests/test_owpaintdata.py b/Orange/widgets/data/tests/test_owpaintdata.py index ddba2321e97..a8fda41d151 100644 --- a/Orange/widgets/data/tests/test_owpaintdata.py +++ b/Orange/widgets/data/tests/test_owpaintdata.py @@ -7,13 +7,10 @@ from AnyQt.QtCore import QRectF, QPointF, QEvent, Qt from AnyQt.QtGui import QMouseEvent -from orangewidget.widget import StateInfo - from Orange.data import Table, DiscreteVariable, ContinuousVariable, Domain from Orange.widgets.data import owpaintdata from Orange.widgets.data.owpaintdata import OWPaintData from Orange.widgets.tests.base import WidgetTest, datasets -from Orange.widgets.utils.state_summary import format_summary_details class TestOWPaintData(WidgetTest): @@ -122,41 +119,3 @@ def test_reset_to_input(self): self.widget.reset_to_input() output = self.get_output(self.widget.Outputs.data) self.assertEqual(len(output), len(data)) - - def test_summary(self): - """Check if status bar is updated when data is received""" - data, info = Table("iris"), self.widget.info - no_input, no_output = "No data on input", "No data on output" - - self.widget.set_current_tool(self.widget.TOOLS[1][2]) - tool = self.widget.current_tool - event = QMouseEvent(QEvent.MouseButtonPress, QPointF(0.17, 0.17), - Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) - tool.mousePressEvent(event) - self.assertIsInstance(info._StateInfo__input_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__input_summary.details, no_input) - 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, data) - summary, details = f"{len(data)}", format_summary_details(data) - 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) - self.assertIsInstance(info._StateInfo__input_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__input_summary.details, no_input) - 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.widget.set_current_tool(self.widget.TOOLS[5][2]) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) diff --git a/Orange/widgets/data/tests/test_owpivot.py b/Orange/widgets/data/tests/test_owpivot.py index fa7d8a4625d..f817f21351f 100644 --- a/Orange/widgets/data/tests/test_owpivot.py +++ b/Orange/widgets/data/tests/test_owpivot.py @@ -1,7 +1,7 @@ # Test methods with long descriptive names can omit docstrings # pylint: disable=missing-docstring,unsubscriptable-object import unittest -from unittest.mock import patch, Mock +from unittest.mock import patch from pickle import loads, dumps import numpy as np @@ -9,8 +9,6 @@ from AnyQt.QtCore import Qt, QPoint from AnyQt.QtTest import QTest -from orangewidget.widget import StateInfo - from Orange.data import (Table, Domain, ContinuousVariable as Cv, StringVariable as sv, DiscreteVariable as Dv, TimeVariable as Tv) @@ -18,8 +16,6 @@ AggregationFunctionsEnum) from Orange.widgets.tests.base import WidgetTest from Orange.widgets.tests.utils import simulate -from Orange.widgets.utils.state_summary import format_summary_details, \ - format_multiple_summaries class TestOWPivot(WidgetTest): @@ -245,39 +241,6 @@ def test_send_report(self): self.send_signal(self.widget.Inputs.data, None) self.widget.report_button.click() - 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.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - def test_renaming_warning(self): data = Table('iris') cls_var = data.domain.class_var.copy(name='Aggregate') diff --git a/Orange/widgets/data/tests/test_owpreprocess.py b/Orange/widgets/data/tests/test_owpreprocess.py index a8e404a424a..cfdf1456c40 100644 --- a/Orange/widgets/data/tests/test_owpreprocess.py +++ b/Orange/widgets/data/tests/test_owpreprocess.py @@ -1,10 +1,7 @@ # Test methods with long descriptive names can omit docstrings # pylint: disable=missing-docstring,unsubscriptable-object -from unittest.mock import Mock import numpy as np -from orangewidget.widget import StateInfo - from Orange.data import Table from Orange.preprocess import ( Randomize, Scale, Discretize, Continuize, Impute, ProjectPCA, \ @@ -14,7 +11,6 @@ from Orange.widgets.data import owpreprocess from Orange.widgets.data.owpreprocess import OWPreprocess, \ UnivariateFeatureSelect, Scale as ScaleEditor -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.tests.base import WidgetTest, datasets @@ -142,26 +138,6 @@ def test_data_column_nans(self): self.widget.set_model(model) self.send_signal(self.widget.Inputs.data, table) - def test_summary(self): - """Check if status bar is updated when data is received""" - data = Table("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.preprocessed_data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - # Test for editors class TestDiscretizeEditor(WidgetTest): diff --git a/Orange/widgets/data/tests/test_owpurgedomain.py b/Orange/widgets/data/tests/test_owpurgedomain.py index 37ad2b6e141..8066d23d6b4 100644 --- a/Orange/widgets/data/tests/test_owpurgedomain.py +++ b/Orange/widgets/data/tests/test_owpurgedomain.py @@ -1,13 +1,9 @@ # pylint: disable=unsubscriptable-object import unittest -from unittest.mock import Mock - -from orangewidget.widget import StateInfo from Orange.data import Table from Orange.widgets.data.owpurgedomain import OWPurgeDomain from Orange.widgets.tests.base import WidgetTest -from Orange.widgets.utils.state_summary import format_summary_details class TestOWPurgeDomain(WidgetTest): @@ -15,25 +11,6 @@ def setUp(self): self.widget = self.create_widget(OWPurgeDomain) self.iris = Table("iris") - 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.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - def test_minimum_size(self): pass diff --git a/Orange/widgets/data/tests/test_owrandomize.py b/Orange/widgets/data/tests/test_owrandomize.py index aacfbb12c98..ab594846cba 100644 --- a/Orange/widgets/data/tests/test_owrandomize.py +++ b/Orange/widgets/data/tests/test_owrandomize.py @@ -1,15 +1,12 @@ # Test methods with long descriptive names can omit docstrings # pylint: disable=missing-docstring,unsubscriptable-object -from unittest.mock import patch, Mock +from unittest.mock import patch import numpy as np -from orangewidget.widget import StateInfo - from Orange.data import Table from Orange.widgets.data.owrandomize import OWRandomize from Orange.widgets.tests.base import WidgetTest -from Orange.widgets.utils.state_summary import format_summary_details class TestOWRandomize(WidgetTest): @@ -77,26 +74,6 @@ def test_replicable_shuffling(self): np.testing.assert_array_equal(output.Y, output2.Y) np.testing.assert_array_equal(output.metas, output2.metas) - def test_summary(self): - """"Check if status bar displays correct input/output summary""" - output_sum = self.widget.info.set_output_summary = Mock() - input_sum = self.widget.info.set_input_summary = Mock() - - data = self.zoo - 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.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - def test_unconditional_commit_on_new_signal(self): with patch.object(self.widget, 'unconditional_apply') as apply: self.widget.auto_apply = False diff --git a/Orange/widgets/data/tests/test_owrank.py b/Orange/widgets/data/tests/test_owrank.py index d2c5522ac82..c015f313dd3 100644 --- a/Orange/widgets/data/tests/test_owrank.py +++ b/Orange/widgets/data/tests/test_owrank.py @@ -2,7 +2,7 @@ import time import warnings import unittest -from unittest.mock import patch, Mock +from unittest.mock import patch import numpy as np from sklearn.exceptions import ConvergenceWarning @@ -10,7 +10,6 @@ from AnyQt.QtCore import Qt, QItemSelection from AnyQt.QtWidgets import QCheckBox -from orangewidget.widget import StateInfo from orangewidget.settings import Context, IncompatibleContext from Orange.data import Table, Domain, ContinuousVariable, DiscreteVariable @@ -22,7 +21,6 @@ from Orange.widgets.data.owrank import OWRank, ProblemType, CLS_SCORES, REG_SCORES from Orange.widgets.tests.base import WidgetTest, datasets from Orange.widgets.widget import AttributeList -from Orange.widgets.utils.state_summary import format_summary_details class SlowScorer(Scorer): @@ -472,28 +470,6 @@ def test_selected_rows(self): self.assertEqual(len(output), len(self.iris)) - 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) - self.wait_until_finished() - input_sum.assert_called_with(len(data), format_summary_details(data)) - output = self.get_output(self.widget.Outputs.reduced_data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - self.wait_until_finished() - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - def test_concurrent_cancel(self): """ Send one signal after another. It test if the first process get diff --git a/Orange/widgets/data/tests/test_owsave.py b/Orange/widgets/data/tests/test_owsave.py index ec7da432c50..2f17a3d186a 100644 --- a/Orange/widgets/data/tests/test_owsave.py +++ b/Orange/widgets/data/tests/test_owsave.py @@ -7,15 +7,12 @@ import scipy.sparse as sp from AnyQt.QtWidgets import QFileDialog -from orangewidget.widget import StateInfo - from Orange.data import Table from Orange.data.io import TabReader, PickleReader, ExcelReader, FileFormat from Orange.tests import named_file from Orange.widgets.data.owsave import OWSave, OWSaveBase from Orange.widgets.utils.save.tests.test_owsavebase import \ SaveWidgetsTestBaseMixin -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.tests.base import WidgetTest, open_widget_classes @@ -53,32 +50,22 @@ class TestOWSave(OWSaveTestBase): def test_dataset(self): widget = self.widget widget.auto_save = True - insum = widget.info.set_input_summary = Mock() savefile = widget.save_file = Mock() datasig = widget.Inputs.data self.send_signal(datasig, self.iris) - insum.assert_called_with(len(self.iris), format_summary_details(self.iris)) - insum.reset_mock() savefile.reset_mock() widget.filename = "foo.tab" widget.writer = TabReader widget.auto_save = False self.send_signal(datasig, self.iris) - insum.assert_called_with(len(self.iris), format_summary_details(self.iris)) savefile.assert_not_called() widget.auto_save = True self.send_signal(datasig, self.iris) - insum.assert_called_with(len(self.iris), format_summary_details(self.iris)) savefile.assert_called() - insum.reset_mock() - self.send_signal(datasig, None) - insum.assert_called_once() - self.assertIsInstance(insum.call_args[0][0], StateInfo.Empty) - def test_initial_start_dir(self): widget = self.widget self.assertEqual(widget.initial_start_dir(), diff --git a/Orange/widgets/data/tests/test_owselectbydataindex.py b/Orange/widgets/data/tests/test_owselectbydataindex.py index e2a5bb323be..52bc180eb6a 100644 --- a/Orange/widgets/data/tests/test_owselectbydataindex.py +++ b/Orange/widgets/data/tests/test_owselectbydataindex.py @@ -1,13 +1,9 @@ # pylint: disable=protected-access -from orangewidget.widget import StateInfo - from Orange.data import Table, Domain from Orange.widgets.data.owselectbydataindex import OWSelectByDataIndex from Orange.widgets.tests.base import WidgetTest from Orange.widgets.utils.annotated_data import ANNOTATED_DATA_FEATURE_NAME -from Orange.widgets.utils.state_summary import format_summary_details, \ - format_multiple_summaries class TestOWSelectSubset(WidgetTest): @@ -49,42 +45,3 @@ def test_subset_nosubset(self): self.assertTrue(self.widget.Warning.instances_not_matching.is_shown()) self.assertEqual([], list(matching)) self.assertEqual(list(data), list(non_matching)) - - 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.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) - - self.send_signal(self.widget.Inputs.data_subset, None) - 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) diff --git a/Orange/widgets/data/tests/test_owselectcolumns.py b/Orange/widgets/data/tests/test_owselectcolumns.py index e0c473f511e..174ca9938ab 100644 --- a/Orange/widgets/data/tests/test_owselectcolumns.py +++ b/Orange/widgets/data/tests/test_owselectcolumns.py @@ -7,12 +7,10 @@ from AnyQt.QtCore import QMimeData, QPoint, Qt from AnyQt.QtGui import QDragEnterEvent -from orangewidget.widget import StateInfo from Orange.data import Table, ContinuousVariable, DiscreteVariable, Domain from Orange.widgets.settings import ContextSetting from Orange.widgets.utils import vartype -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.tests.base import WidgetTest from Orange.widgets.data.owselectcolumns \ import OWSelectAttributes, VariablesListItemModel, \ @@ -379,26 +377,6 @@ def test_move_rows(self): data.domain.attributes ) - def test_summary(self): - """Check if status bar is updated when data is received""" - input_sum = self.widget.info.set_input_summary = Mock() - output_sum = self.widget.info.set_output_summary = Mock() - - data = Table("iris") - 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.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - def test_domain_new_feature(self): """ Test scenario when new attribute is added at position 0 """ data = Table("iris") diff --git a/Orange/widgets/data/tests/test_owselectrows.py b/Orange/widgets/data/tests/test_owselectrows.py index 955967bcbe1..39331071ca0 100644 --- a/Orange/widgets/data/tests/test_owselectrows.py +++ b/Orange/widgets/data/tests/test_owselectrows.py @@ -1,14 +1,13 @@ # Test methods with long descriptive names can omit docstrings # pylint: disable=missing-docstring,unsubscriptable-object import time -from unittest.mock import Mock, patch +from unittest.mock import patch import numpy as np from AnyQt.QtCore import QLocale, Qt, QDate from AnyQt.QtTest import QTest from AnyQt.QtWidgets import QLineEdit, QComboBox -from orangewidget.widget import StateInfo from orangewidget.settings import VERSION_KEY from Orange.data import ( @@ -23,7 +22,6 @@ from Orange.data.filter import FilterContinuous, FilterString from Orange.widgets.tests.utils import simulate, override_locale from Orange.widgets.utils.annotated_data import ANNOTATED_DATA_FEATURE_NAME -from Orange.widgets.utils.state_summary import format_summary_details from Orange.tests import test_filename CFValues = { @@ -396,30 +394,6 @@ def test_is_defined_on_continuous_variable(self): # Test saving of settings self.widget.settingsHandler.pack_data(self.widget) - def test_summary(self): - """Check if status bar displays correct input/output summary""" - input_sum = self.widget.info.set_input_summary = Mock() - output_sum = self.widget.info.set_output_summary = Mock() - - data = Table("iris") - self.send_signal(self.widget.Inputs.data, data) - input_sum.assert_called_with(len(data), format_summary_details(data)) - output = self.get_output("Matching Data") - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - self.enterFilter(data.domain["iris"], "is", "Iris-setosa") - output = self.get_output("Matching Data") - output_sum.assert_called_with(len(output), - format_summary_details(output)) - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - def test_output_filter(self): """ None on output when there is no data. diff --git a/Orange/widgets/data/tests/test_owtable.py b/Orange/widgets/data/tests/test_owtable.py index c661a39aea7..a9db551481e 100644 --- a/Orange/widgets/data/tests/test_owtable.py +++ b/Orange/widgets/data/tests/test_owtable.py @@ -108,7 +108,7 @@ def test_sorting(self): output = self.get_output(self.widget.Outputs.selected_data) output, _ = output.get_column_view(0) output_sorted = output.tolist() - + # the two outputs should not be the same. self.assertTrue(output_original != output_sorted) @@ -131,46 +131,21 @@ def test_summary(self): summary, details = f"{len(data)}", format_summary_details(data) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) - self.assertEqual(info._StateInfo__output_summary.brief, summary) - self.assertEqual(info._StateInfo__output_summary.details, details) - self.widget.tabs.currentWidget().selectAll() - 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) data = Table("iris") self.send_signal(self.widget.Inputs.data, data, 2) summary, details = f"{len(data)}", format_summary_details(data) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) - self.assertEqual(info._StateInfo__output_summary.brief, summary) - self.assertEqual(info._StateInfo__output_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.widget.tabs.setCurrentWidget(self.widget._inputs[1].view) - 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) summary, details = f"{len(data)}", format_summary_details(data) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) - 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.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) def test_info(self): info_text = self.widget.info_text diff --git a/Orange/widgets/data/tests/test_owtransform.py b/Orange/widgets/data/tests/test_owtransform.py index 096e741c229..fc9fdf37d10 100644 --- a/Orange/widgets/data/tests/test_owtransform.py +++ b/Orange/widgets/data/tests/test_owtransform.py @@ -4,15 +4,11 @@ from numpy import testing as npt -from orangewidget.widget import StateInfo - from Orange.data import Table from Orange.preprocess import Discretize from Orange.widgets.data.owtransform import OWTransform from Orange.widgets.tests.base import WidgetTest from Orange.widgets.unsupervised.owpca import OWPCA -from Orange.widgets.utils.state_summary import format_summary_details, \ - format_multiple_summaries class TestOWTransform(WidgetTest): @@ -23,8 +19,6 @@ def setUp(self): 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) @@ -35,13 +29,6 @@ def test_output(self): 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) @@ -52,12 +39,6 @@ def test_output(self): 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.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) # send template data self.send_signal(self.widget.Inputs.template_data, self.disc_data) @@ -78,12 +59,6 @@ def test_output(self): 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.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) # remove template data self.send_signal(self.widget.Inputs.template_data, None) @@ -91,10 +66,6 @@ def test_output(self): self.assertEqual("No template data on input.", self.widget.template_label.text()) self.assertEqual("", self.widget.output_label.text()) - 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) def assertTableEqual(self, table1, table2): self.assertIs(table1.domain, table2.domain) diff --git a/Orange/widgets/data/tests/test_owtranspose.py b/Orange/widgets/data/tests/test_owtranspose.py index dd5fa7d6116..1d144a9f0ef 100644 --- a/Orange/widgets/data/tests/test_owtranspose.py +++ b/Orange/widgets/data/tests/test_owtranspose.py @@ -6,13 +6,10 @@ import numpy as np -from orangewidget.widget import StateInfo - from Orange.data import Table from Orange.widgets.data.owtranspose import OWTranspose, run from Orange.widgets.tests.base import WidgetTest from Orange.widgets.tests.utils import simulate -from Orange.widgets.utils.state_summary import format_summary_details from Orange.tests import test_filename @@ -219,28 +216,6 @@ def test_unconditional_commit_on_new_signal(self): self.send_signal(self.widget.Inputs.data, self.zoo) apply.assert_called() - def test_summary(self): - """Check if status bar is updated when data is received""" - input_sum = self.widget.info.set_input_summary = Mock() - output_sum = self.widget.info.set_output_summary = Mock() - - data = Table("iris") - self.send_signal(self.widget.Inputs.data, data) - input_sum.assert_called_with(len(data), format_summary_details(data)) - self.wait_until_finished() - output = self.get_output(self.widget.Outputs.data) - output_sum.assert_called_with(len(output), - format_summary_details(output)) - - input_sum.reset_mock() - output_sum.reset_mock() - self.send_signal(self.widget.Inputs.data, None) - input_sum.assert_called_once() - self.assertIsInstance(input_sum.call_args[0][0], StateInfo.Empty) - self.wait_until_finished() - output_sum.assert_called_once() - self.assertIsInstance(output_sum.call_args[0][0], StateInfo.Empty) - if __name__ == "__main__": unittest.main() diff --git a/Orange/widgets/evaluate/owconfusionmatrix.py b/Orange/widgets/evaluate/owconfusionmatrix.py index 771cec725f5..8b539cb30dd 100644 --- a/Orange/widgets/evaluate/owconfusionmatrix.py +++ b/Orange/widgets/evaluate/owconfusionmatrix.py @@ -20,7 +20,6 @@ from Orange.widgets.utils.annotated_data import (create_annotated_table, ANNOTATED_DATA_SIGNAL_NAME) from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Msg, Input, Output @@ -146,8 +145,6 @@ def __init__(self): gui.auto_apply(self.outputbox, self, "autocommit", box=False) - self.info.set_output_summary(self.info.NoOutput) - box = gui.vBox(self.mainArea, box=True) sbox = gui.hBox(box) @@ -418,10 +415,6 @@ def commit(self): data = None annotated_data = None - summary = len(data) if data else self.info.NoOutput - details = format_summary_details(data) if data else "" - self.info.set_output_summary(summary, details) - self.Outputs.selected_data.send(data) self.Outputs.annotated_data.send(annotated_data) diff --git a/Orange/widgets/evaluate/owpredictions.py b/Orange/widgets/evaluate/owpredictions.py index 483961e7ee7..1292b5a768d 100644 --- a/Orange/widgets/evaluate/owpredictions.py +++ b/Orange/widgets/evaluate/owpredictions.py @@ -87,9 +87,6 @@ def __init__(self): self.selection_store = None self.__pending_selection = self.selection - self._set_input_summary() - self._set_output_summary(None) - controlBox = gui.vBox(self.controlArea, "Show probabilities for") gui.listBox(controlBox, self, "selected_classes", "class_values", @@ -226,7 +223,6 @@ def handleNewSignals(self): self._update_predictions_model() self._update_prediction_delegate() self._set_errors() - self._set_input_summary() self.commit() def _call_predictors(self): @@ -332,19 +328,9 @@ def _set_errors(self): else: self.Warning.wrong_targets.clear() - def _set_input_summary(self): - if not self.data and not self.predictors: - self.info.set_input_summary(self.info.NoInput) - return - - summary = len(self.data) if self.data else 0 - details = self._get_details() - self.info.set_input_summary(summary, details, format=Qt.RichText) - def _get_details(self): details = "Data:
" - details += format_summary_details(self.data).replace('\n', '
') if \ - self.data else "No data on input." + details += format_summary_details(self.data, format=Qt.RichText) details += "
" pred_names = [v.name for v in self.predictors.values()] n_predictors = len(self.predictors) @@ -361,11 +347,6 @@ def _get_details(self): details += "Model:
No model on input." return details - def _set_output_summary(self, output): - summary = len(output) if output else self.info.NoOutput - details = format_summary_details(output) if output else "" - self.info.set_output_summary(summary, details) - def _invalidate_predictions(self): for inputid, pred in list(self.predictors.items()): self.predictors[inputid] = pred._replace(results=None) @@ -588,7 +569,6 @@ def _commit_evaluation_results(self): def _commit_predictions(self): if not self.data: - self._set_output_summary(None) self.Outputs.predictions.send(None) return @@ -634,7 +614,6 @@ def _commit_predictions(self): source_rows = [map_to(index(row, 0)).row() for row in rows] predictions = predictions[source_rows] self.Outputs.predictions.send(predictions) - self._set_output_summary(predictions) @staticmethod def _add_classification_out_columns(slot, newmetas, newcolumns): diff --git a/Orange/widgets/evaluate/owtestandscore.py b/Orange/widgets/evaluate/owtestandscore.py index eed2fc86557..bec4903f6df 100644 --- a/Orange/widgets/evaluate/owtestandscore.py +++ b/Orange/widgets/evaluate/owtestandscore.py @@ -39,8 +39,6 @@ from Orange.widgets.utils.itemmodels import DomainModel from Orange.widgets.utils.widgetpreview import WidgetPreview from Orange.widgets.utils.concurrent import ThreadExecutor, TaskState -from Orange.widgets.utils.state_summary import (format_multiple_summaries, - format_summary_details) from Orange.widgets.widget import OWWidget, Msg, Input, Output log = logging.getLogger(__name__) @@ -240,9 +238,6 @@ def __init__(self): self.__task = None # type: Optional[TaskState] self.__executor = ThreadExecutor() - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - sbox = gui.vBox(self.controlArea, "Sampling") rbox = gui.radioButtons( sbox, self, "resampling", callback=self._param_changed) @@ -541,26 +536,9 @@ def handleNewSignals(self): self.score_table.update_header(self.scorers) self._update_view_enabled() self.update_stats_model() - self.set_input_summary() if self.__needupdate: self.__update() - 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 kfold_changed(self): self.resampling = OWTestAndScore.KFold self._param_changed() @@ -866,10 +844,6 @@ def commit(self): except MemoryError: self.Error.memory_error() - summary = len(predictions) if predictions else self.info.NoOutput - details = format_summary_details(predictions) if predictions else "" - self.info.set_output_summary(summary, details) - self.Outputs.evaluations_results.send(combined) self.Outputs.predictions.send(predictions) diff --git a/Orange/widgets/evaluate/tests/test_owcalibrationplot.py b/Orange/widgets/evaluate/tests/test_owcalibrationplot.py index 47184337183..ab56c804509 100644 --- a/Orange/widgets/evaluate/tests/test_owcalibrationplot.py +++ b/Orange/widgets/evaluate/tests/test_owcalibrationplot.py @@ -101,7 +101,6 @@ def test_empty_input_error(self): res = copy.copy(self.results) res.row_indices = res.row_indices[:0] res.actual = res.actual[:0] - res.predicted = res.predicted[:, 0] res.probabilities = res.probabilities[:, :0, :] self.send_signal(widget.Inputs.evaluation_results, self.results) self.assertFalse(widget.Error.empty_input.is_shown()) @@ -124,7 +123,6 @@ def test_regression_input_error(self): res.domain = Domain([], ContinuousVariable("y")) res.row_indices = res.row_indices[:0] res.actual = res.actual[:0] - res.predicted = res.predicted[:, 0] res.probabilities = res.probabilities[:, :0, :] self.send_signal(widget.Inputs.evaluation_results, self.results) self.assertFalse(widget.Error.non_discrete_target.is_shown()) diff --git a/Orange/widgets/evaluate/tests/test_owconfusionmatrix.py b/Orange/widgets/evaluate/tests/test_owconfusionmatrix.py index 92b2fce1787..b3127c382c0 100644 --- a/Orange/widgets/evaluate/tests/test_owconfusionmatrix.py +++ b/Orange/widgets/evaluate/tests/test_owconfusionmatrix.py @@ -1,8 +1,6 @@ # pylint: disable=missing-docstring, protected-access import numpy as np -from orangewidget.widget import StateInfo - from Orange.data import Table from Orange.classification import NaiveBayesLearner, TreeLearner from Orange.regression import MeanLearner @@ -10,7 +8,6 @@ ShuffleSplit, Results from Orange.widgets.evaluate.owconfusionmatrix import OWConfusionMatrix from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.tests.utils import possible_duplicate_table @@ -121,23 +118,6 @@ def test_not_append_extra_meta_columns(self): self.widget.append_predictions = False self.send_signal(self.widget.Inputs.evaluation_results, self.results_1_iris) - def test_summary(self): - """Check if the status bar updates""" - info = self.widget.info - no_output = "No data on output" - - self.send_signal(self.widget.Inputs.evaluation_results, self.results_1_iris) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - 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.evaluation_results, None) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) - def test_unique_output_domain(self): bayes = NaiveBayesLearner() data = possible_duplicate_table('iris(Learner #1)') diff --git a/Orange/widgets/evaluate/tests/test_owpredictions.py b/Orange/widgets/evaluate/tests/test_owpredictions.py index 7472c47660b..28b2e15f5ce 100644 --- a/Orange/widgets/evaluate/tests/test_owpredictions.py +++ b/Orange/widgets/evaluate/tests/test_owpredictions.py @@ -9,8 +9,6 @@ from AnyQt.QtCore import QItemSelectionModel, QItemSelection from AnyQt.QtGui import QStandardItemModel -from orangewidget.widget import StateInfo - from Orange.base import Model from Orange.classification import LogisticRegressionLearner from Orange.data.io import TabReader @@ -28,7 +26,6 @@ from Orange.widgets.tests.utils import excepthook_catch, \ possible_duplicate_table from Orange.widgets.utils.colorpalettes import LimitedDiscretePalette -from Orange.widgets.utils.state_summary import format_summary_details class TestOWPredictions(WidgetTest): @@ -480,63 +477,6 @@ def test_unregister_prediction_model(self): self.send_signal(self.widget.Inputs.predictors, log_reg_iris) self.widget.selection_store.unregister.called_with(prev_model) - def test_summary(self): - """Check if the status bar updates when data is recieved""" - data = self.iris - info = self.widget.info - no_input, no_output = "No data on input", "No data on output" - predictor1 = ConstantLearner()(self.iris) - predictor2 = LogisticRegressionLearner()(self.iris) - - self.send_signal(self.widget.Inputs.predictors, predictor1) - details = f"Data:
{no_input}.
" + \ - "Model: 1 model (1 failed)" - self.assertEqual(info._StateInfo__input_summary.brief, "0") - 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.data, data) - details = "Data:
" + \ - format_summary_details(data).replace('\n', '
') + \ - "
Model: 1 model" - self.assertEqual(info._StateInfo__input_summary.brief, "150") - 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.predictors, predictor2, 1) - details = "Data:
"+ \ - format_summary_details(data).replace('\n', '
') + \ - "
Model: 2 models" - self.assertEqual(info._StateInfo__input_summary.brief, "150") - 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.predictors, None) - self.send_signal(self.widget.Inputs.predictors, None, 1) - details = "Data:
" + \ - format_summary_details(data).replace('\n', '
') + \ - "
Model:
No model on input." - self.assertEqual(info._StateInfo__input_summary.brief, "150") - 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.data, None) - 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) - class SelectionModelTest(unittest.TestCase): def setUp(self): diff --git a/Orange/widgets/evaluate/tests/test_owtestandscore.py b/Orange/widgets/evaluate/tests/test_owtestandscore.py index 841d9e726c4..1d84d8557f7 100644 --- a/Orange/widgets/evaluate/tests/test_owtestandscore.py +++ b/Orange/widgets/evaluate/tests/test_owtestandscore.py @@ -9,8 +9,6 @@ from AnyQt.QtWidgets import QApplication import baycomp -from orangewidget.widget import StateInfo - from Orange.classification import MajorityLearner, LogisticRegressionLearner, \ RandomForestLearner from Orange.classification.majority import ConstantModel @@ -28,8 +26,6 @@ ClassValuesContextHandler, PerfectDomainContextHandler) from Orange.widgets.tests.base import WidgetTest from Orange.widgets.tests.utils import simulate, possible_duplicate_table -from Orange.widgets.utils.state_summary import (format_summary_details, - format_multiple_summaries) from Orange.tests import test_filename @@ -686,46 +682,6 @@ def two_on_single(_1, _2, rope=0): label = w.comparison_table.cellWidget(1, 0) self.assertEqual(label.text(), "NA") - 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.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) - - self.send_signal(self.widget.Inputs.test_data, None) - 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) - def test_unique_output_domain(self): data = possible_duplicate_table('random forest') self.send_signal(self.widget.Inputs.train_data, data) diff --git a/Orange/widgets/tests/base.py b/Orange/widgets/tests/base.py index 7075fcb51c5..b4f44891927 100644 --- a/Orange/widgets/tests/base.py +++ b/Orange/widgets/tests/base.py @@ -762,39 +762,6 @@ def test_hidden_effective_variables(self, timeout=DEFAULT_TIMEOUT): self.wait_until_finished(timeout=timeout) self.send_signal(self.widget.Inputs.data, table) - def test_in_out_summary(self, timeout=DEFAULT_TIMEOUT): - info = self.widget.info - self.assertIsInstance(info._StateInfo__input_summary, StateInfo.Empty) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertIn(info._StateInfo__input_summary.details, - ["", "No data on input"]) - self.assertIn(info._StateInfo__output_summary.details, - ["", "No data on output"]) - - self.send_signal(self.widget.Inputs.data, self.data) - self.assertTrue( - self.signal_manager.wait_for_finished(self.widget, timeout), - f"Did not finish in the specified {timeout}ms timeout" - ) - ind = self._select_data() - self.assertEqual(info._StateInfo__input_summary.brief, - str(len(self.data))) - self.assertEqual(info._StateInfo__output_summary.brief, str(len(ind))) - self.assertGreater(info._StateInfo__input_summary.details, "") - self.assertGreater(info._StateInfo__output_summary.details, "") - self.assertNotIn(info._StateInfo__input_summary.details, - ["", "No data on input"]) - self.assertNotIn(info._StateInfo__output_summary.details, - ["", "No data on output"]) - - self.send_signal(self.widget.Inputs.data, None) - self.assertIsInstance(info._StateInfo__input_summary, StateInfo.Empty) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertIn(info._StateInfo__input_summary.details, - ["", "No data on input"]) - self.assertIn(info._StateInfo__output_summary.details, - ["", "No data on output"]) - def test_visual_settings(self, timeout=DEFAULT_TIMEOUT): graph = self.widget.graph font = QFont() diff --git a/Orange/widgets/unsupervised/owcorrespondence.py b/Orange/widgets/unsupervised/owcorrespondence.py index 3e20f4e2394..d88ea37fc4d 100644 --- a/Orange/widgets/unsupervised/owcorrespondence.py +++ b/Orange/widgets/unsupervised/owcorrespondence.py @@ -16,7 +16,6 @@ from Orange.widgets.utils import itemmodels, colorpalettes from Orange.widgets.utils.itemmodels import select_rows from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.owscatterplotgraph import ScatterPlotItem from Orange.widgets.widget import Input, Output @@ -62,9 +61,6 @@ def __init__(self): self.component_x = 0 self.component_y = 1 - self._set_input_summary(None) - self._set_output_summary(None) - box = gui.vBox(self.controlArea, "Variables") self.varlist = itemmodels.VariableListModel() self.varview = view = ListViewSearch( @@ -112,7 +108,6 @@ def set_data(self, data): data = None self.data = data - self._set_input_summary(self.data) if data is not None: self.varlist[:] = [var for var in data.domain.variables if var.is_discrete] @@ -152,7 +147,6 @@ def commit(self): StringVariable("Value")]), rf, metas=vars_data ) - self._set_output_summary(output_table) self.Outputs.coordinates.send(output_table) def clear(self): @@ -161,16 +155,6 @@ def clear(self): self.plot.clear() self.varlist[:] = [] - def _set_input_summary(self, data): - summary = len(data) if data else self.info.NoInput - details = format_summary_details(data) if data else "" - self.info.set_input_summary(summary, details) - - def _set_output_summary(self, output): - summary = len(output) if output else self.info.NoOutput - details = format_summary_details(output) if output else "" - self.info.set_output_summary(summary, details) - def selected_vars(self): rows = sorted( ind.row() for ind in self.varview.selectionModel().selectedRows()) diff --git a/Orange/widgets/unsupervised/owdbscan.py b/Orange/widgets/unsupervised/owdbscan.py index 82f742a069f..2687d605148 100644 --- a/Orange/widgets/unsupervised/owdbscan.py +++ b/Orange/widgets/unsupervised/owdbscan.py @@ -15,7 +15,6 @@ from Orange.clustering import DBSCAN from Orange.widgets.utils.annotated_data import ANNOTATED_DATA_SIGNAL_NAME from Orange.widgets.utils.signals import Input, Output -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Msg @@ -90,8 +89,6 @@ def __init__(self): self.data_normalized = None self.db = None self.model = None - self._set_input_summary(None) - self._set_output_summary(None) box = gui.widgetBox(self.controlArea, "Parameters") gui.spin(box, self, "min_samples", 1, 100, 1, @@ -172,12 +169,10 @@ def _compute_cut_point(self): @Inputs.data def set_data(self, data): self.Error.clear() - self._set_input_summary(data) if not self.check_data_size(data): data = None self.data = self.data_normalized = data if self.data is None: - self._set_output_summary(None) self.Outputs.annotated_data.send(None) self.plot.clear_plot() return @@ -217,19 +212,8 @@ def send_data(self): new_table = self.data.add_column(clust_var, clusters, to_metas=True) new_table = new_table.add_column(in_core_var, in_core, to_metas=True) - self._set_output_summary(new_table) self.Outputs.annotated_data.send(new_table) - def _set_input_summary(self, data): - summary = len(data) if data else self.info.NoInput - details = format_summary_details(data) if data else "" - self.info.set_input_summary(summary, details) - - def _set_output_summary(self, output): - summary = len(output) if output else self.info.NoOutput - details = format_summary_details(output) if output else "" - self.info.set_output_summary(summary, details) - def _invalidate(self): self.commit() diff --git a/Orange/widgets/unsupervised/owdistancemap.py b/Orange/widgets/unsupervised/owdistancemap.py index b3a30b8192f..e3b554436bd 100644 --- a/Orange/widgets/unsupervised/owdistancemap.py +++ b/Orange/widgets/unsupervised/owdistancemap.py @@ -26,7 +26,6 @@ from Orange.widgets.utils.widgetpreview import WidgetPreview from Orange.widgets.widget import Input, Output from Orange.widgets.utils.dendrogram import DendrogramWidget -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.utils.heatmap import ( GradientColorMap, GradientLegendWidget, ) @@ -296,9 +295,6 @@ def __init__(self): self._sort_indices = None self._selection = None - self._set_input_summary(None) - self._set_output_summary(None) - self.sorting_cb = gui.comboBox( self.controlArea, self, "sorting", box="Element Sorting", items=["None", "Clustering", "Clustering with ordered leaves"], @@ -406,7 +402,6 @@ def set_distances(self, matrix): self.closeContext() self.clear() self.error() - self._set_input_summary(matrix) if matrix is not None: N, _ = matrix.shape if N < 2: @@ -488,15 +483,6 @@ def handleNewSignals(self): self.pending_selection = None self.unconditional_commit() - def _set_input_summary(self, matrix): - summary = len(matrix) if matrix is not None else self.info.NoInput - self.info.set_input_summary(summary) - - def _set_output_summary(self, output): - summary = len(output) if output else self.info.NoOutput - details = format_summary_details(output) if output else "" - self.info.set_output_summary(summary, details) - def _clear_plot(self): def remove(item): item.setParentItem(None) @@ -667,8 +653,6 @@ def commit(self): subset = [self.items[i] for i in self._selection] featuresubset = widget.AttributeList(subset) - self._set_output_summary(datasubset) - self.Outputs.selected_data.send(datasubset) self.Outputs.annotated_data.send(create_annotated_table(self.items, self._selection)) self.Outputs.features.send(featuresubset) diff --git a/Orange/widgets/unsupervised/owdistances.py b/Orange/widgets/unsupervised/owdistances.py index 84cf3352fa7..1676d9c51da 100644 --- a/Orange/widgets/unsupervised/owdistances.py +++ b/Orange/widgets/unsupervised/owdistances.py @@ -11,7 +11,6 @@ from Orange.widgets.utils.concurrent import TaskState, ConcurrentWidgetMixin from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import OWWidget, Msg, Input, Output @@ -99,9 +98,6 @@ def __init__(self): self.data = None - self._set_input_summary(None) - self._set_output_summary(None) - gui.radioButtons( self.controlArea, self, "axis", ["Rows", "Columns"], box="Distances between", callback=self._invalidate @@ -129,7 +125,6 @@ def __init__(self): def set_data(self, data): self.cancel() self.data = data - self._set_input_summary(data) self.refresh_metrics() self.unconditional_commit() @@ -215,7 +210,6 @@ def on_partial_result(self, _): def on_done(self, result: Orange.misc.DistMatrix): assert isinstance(result, Orange.misc.DistMatrix) or result is None - self._set_output_summary(result) self.Outputs.distances.send(result) def on_exception(self, ex): @@ -228,18 +222,6 @@ def on_exception(self, ex): else: raise ex - def _set_input_summary(self, data): - summary = len(data) if data else self.info.NoInput - details = format_summary_details(data) if data else "" - self.info.set_input_summary(summary, details) - - def _set_output_summary(self, output): - if output is None: - self.info.set_output_summary(self.info.NoOutput) - else: - summary = f"{output.shape[0]}×{output.shape[1]}" - self.info.set_output_summary(summary, summary) - def onDeleteWidget(self): self.shutdown() super().onDeleteWidget() diff --git a/Orange/widgets/unsupervised/owhierarchicalclustering.py b/Orange/widgets/unsupervised/owhierarchicalclustering.py index 3e2c34e7a7e..6d3f8712078 100644 --- a/Orange/widgets/unsupervised/owhierarchicalclustering.py +++ b/Orange/widgets/unsupervised/owhierarchicalclustering.py @@ -35,7 +35,6 @@ from Orange.widgets.utils.stickygraphicsview import StickyGraphicsView from Orange.widgets.utils.graphicstextlist import TextListWidget from Orange.widgets.utils.dendrogram import DendrogramWidget -from Orange.widgets.utils.state_summary import format_summary_details __all__ = ["OWHierarchicalClustering"] @@ -163,9 +162,6 @@ def __init__(self): self._displayed_root = None self.cutoff_height = 0.0 - self._set_input_summary(None) - self._set_output_summary(None) - gui.comboBox( self.controlArea, self, "linkage", items=LINKAGE, box="Linkage", callback=self._invalidate_clustering) @@ -342,7 +338,6 @@ def set_distances(self, matrix): self.error() self.Error.clear() - self._set_input_summary(matrix) if matrix is not None: N, _ = matrix.shape if N < 2: @@ -417,15 +412,6 @@ def _set_displayed_root(self, root): ) self._main_graphics.layout().activate() - def _set_input_summary(self, matrix): - summary = len(matrix) if matrix is not None else self.info.NoInput - self.info.set_input_summary(summary) - - def _set_output_summary(self, output): - summary = len(output) if output else self.info.NoOutput - details = format_summary_details(output) if output else "" - self.info.set_output_summary(summary, details) - def _update(self): self._clear_plot() @@ -568,7 +554,6 @@ def _invalidate_pruning(self): def commit(self): items = getattr(self.matrix, "items", self.items) if not items: - self._set_output_summary(None) self.Outputs.selected_data.send(None) self.Outputs.annotated_data.send(None) return @@ -586,7 +571,6 @@ def commit(self): set(selected_indices)) if not selected_indices: - self._set_output_summary(None) self.Outputs.selected_data.send(None) annotated_data = create_annotated_table(items, []) \ if self.selection_method == 0 and self.matrix.axis else None @@ -634,8 +618,6 @@ def commit(self): selected_data = items.from_table(domain, items) data = None - self._set_output_summary(selected_data) - self.Outputs.selected_data.send(selected_data) annotated_data = create_annotated_table(data, selected_indices) self.Outputs.annotated_data.send(annotated_data) diff --git a/Orange/widgets/unsupervised/owkmeans.py b/Orange/widgets/unsupervised/owkmeans.py index 56ee0767a1b..c135503f5f2 100644 --- a/Orange/widgets/unsupervised/owkmeans.py +++ b/Orange/widgets/unsupervised/owkmeans.py @@ -23,7 +23,6 @@ from Orange.widgets.utils.concurrent import ThreadExecutor, FutureSetWatcher from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Input, Output @@ -170,9 +169,6 @@ def __init__(self): self.__executor = ThreadExecutor(parent=self) self.__task = None # type: Optional[Task] - self._set_input_summary() - self._set_output_summary(None) - layout = QGridLayout() bg = gui.radioButtonsInBox( self.controlArea, self, "optimize_k", orientation=layout, @@ -517,7 +513,6 @@ def send_data(self): km = self.clusterings.get(k) if self.data is None or km is None or isinstance(km, str): - self._set_output_summary(None) self.Outputs.annotated_data.send(None) self.Outputs.centroids.send(None) return @@ -572,7 +567,6 @@ def send_data(self): else: centroids.name = f"{self.data.name} centroids" - self._set_output_summary(new_table) self.Outputs.annotated_data.send(new_table) self.Outputs.centroids.send(centroids) @@ -581,8 +575,6 @@ def send_data(self): def set_data(self, data): self.data, old_data = data, self.data self.selection = None - self._set_input_summary() - self.controls.normalize.setDisabled( bool(self.data) and sp.issparse(self.data.X)) @@ -593,16 +585,6 @@ def set_data(self, data): else: self.invalidate(unconditional=True) - def _set_input_summary(self): - summary = len(self.data) if self.data else self.info.NoInput - details = format_summary_details(self.data) if self.data else "" - self.info.set_input_summary(summary, details) - - def _set_output_summary(self, output): - summary = len(output) if output else self.info.NoOutput - details = format_summary_details(output) if output else "" - self.info.set_output_summary(summary, details) - def send_report(self): # False positives (Setting is not recognized as int) # pylint: disable=invalid-sequence-index diff --git a/Orange/widgets/unsupervised/owlouvainclustering.py b/Orange/widgets/unsupervised/owlouvainclustering.py index 10b3761ea15..ee3296811b3 100644 --- a/Orange/widgets/unsupervised/owlouvainclustering.py +++ b/Orange/widgets/unsupervised/owlouvainclustering.py @@ -27,7 +27,6 @@ from Orange.widgets.utils.concurrent import FutureWatcher from Orange.widgets.utils.signals import Input, Output from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Msg try: @@ -101,8 +100,6 @@ def __init__(self): # Set up UI info_box = gui.vBox(self.controlArea, "Info") self.info_label = gui.widgetLabel(info_box, "No data on input.") # type: QLabel - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) preprocessing_box = gui.vBox(self.controlArea, "Preprocessing") self.normalize_cbx = gui.checkBox( @@ -391,10 +388,6 @@ def _send_data(self): new_table = self.data.transform(new_domain) new_table.get_column_view(cluster_var)[0][:] = new_partition - summary = len(new_table) if new_table else self.info.NoOutput - details = format_summary_details(new_table) if new_table else "" - self.info.set_output_summary(summary, details) - self.Outputs.annotated_data.send(new_table) if Network is not None: @@ -410,7 +403,6 @@ def set_data(self, data): self.Error.clear() prev_data, self.data = self.data, data - self._set_input_summary() # Make sure to properly enable/disable slider based on `apply_pca` setting self.controls.pca_components.setEnabled(self.apply_pca) @@ -421,7 +413,6 @@ def set_data(self, data): self.cancel() # Clear the outputs - self.info.set_output_summary(self.info.NoOutput) self.Outputs.annotated_data.send(None) if Network is not None: self.Outputs.graph.send(None) @@ -448,11 +439,6 @@ def set_data(self, data): self.commit() - def _set_input_summary(self): - summary = len(self.data) if self.data else self.info.NoInput - details = format_summary_details(self.data) if self.data else "" - self.info.set_input_summary(summary, details) - def clear(self): self.__cancel_task(wait=False) self.preprocessed_data = None diff --git a/Orange/widgets/unsupervised/owmanifoldlearning.py b/Orange/widgets/unsupervised/owmanifoldlearning.py index a5cec3438a7..e34a8c95646 100644 --- a/Orange/widgets/unsupervised/owmanifoldlearning.py +++ b/Orange/widgets/unsupervised/owmanifoldlearning.py @@ -13,7 +13,6 @@ SpectralEmbedding, TSNE) from Orange.projection.manifold import TSNEModel from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import OWWidget, Msg, Input, Output from Orange.widgets.settings import Setting, SettingProvider from Orange.widgets import gui @@ -229,9 +228,6 @@ def __init__(self): items=[m.name for m in self.MANIFOLD_METHODS], callback=self.manifold_method_changed) - self._set_input_summary() - self._set_output_summary(None) - self.params_box = gui.vBox(method_box) self.tsne_editor = TSNEParametersEditor(self) @@ -270,7 +266,6 @@ def settings_changed(self): @Inputs.data def set_data(self, data): self.data = data - self._set_input_summary() self.n_components_spin.setMaximum(len(self.data.domain.attributes) if self.data else 10) self.unconditional_apply() @@ -325,19 +320,8 @@ def _handle_disconnected_graph_warning(msg, *args, **kwargs): finally: warnings.warn = builtin_warn - self._set_output_summary(out) self.Outputs.transformed_data.send(out) - def _set_input_summary(self): - summary = len(self.data) if self.data else self.info.NoInput - details = format_summary_details(self.data) if self.data else "" - self.info.set_input_summary(summary, details) - - def _set_output_summary(self, output): - summary = len(output) if output else self.info.NoOutput - details = format_summary_details(output) if output else "" - self.info.set_output_summary(summary, details) - def get_method_parameters(self, data, method): parameters = dict(n_components=self.n_components) parameters.update(self.params_widget.get_parameters()) diff --git a/Orange/widgets/unsupervised/owmds.py b/Orange/widgets/unsupervised/owmds.py index c9657ca5853..98b580b06df 100644 --- a/Orange/widgets/unsupervised/owmds.py +++ b/Orange/widgets/unsupervised/owmds.py @@ -241,6 +241,7 @@ def __refresh_rate_combo_changed(self): if self.task is not None: self._run() + @Inputs.data def set_data(self, data): """Set the input dataset. diff --git a/Orange/widgets/unsupervised/owsavedistances.py b/Orange/widgets/unsupervised/owsavedistances.py index 67929c1f7c3..ea0731aea15 100644 --- a/Orange/widgets/unsupervised/owsavedistances.py +++ b/Orange/widgets/unsupervised/owsavedistances.py @@ -33,13 +33,6 @@ def do_save(self): self.Warning.part_not_saved("columns" if skip_col else "rows", shown=skip_row != skip_col,) - def update_status(self): - dist = self.data - if dist is None: - self.info.set_input_summary(self.info.NoInput) - else: - self.info.set_input_summary(str(len(dist)), self._description()) - def send_report(self): self.report_items(( ("Input:", "none" if self.data is None else self._description()), diff --git a/Orange/widgets/unsupervised/owsom.py b/Orange/widgets/unsupervised/owsom.py index d6160b94159..4917a6933f5 100644 --- a/Orange/widgets/unsupervised/owsom.py +++ b/Orange/widgets/unsupervised/owsom.py @@ -23,7 +23,6 @@ DomainContextHandler, ContextSetting, Setting from Orange.widgets.utils.itemmodels import DomainModel from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.utils.annotated_data import \ create_annotated_table, create_groups_table, ANNOTATED_DATA_SIGNAL_NAME from Orange.widgets.utils.colorpalettes import \ @@ -231,9 +230,6 @@ def __init__(self): self.selection = None self.colors = self.thresholds = self.bin_labels = None - self._set_input_summary(None) - self._set_output_summary(None) - box = gui.vBox(self.controlArea, box="SOM") shape = gui.comboBox( box, self, "", items=("Hexagonal grid", "Square grid")) @@ -358,19 +354,8 @@ def set_warnings(): self.set_color_bins() self.create_legend() self.recompute_dimensions() - self._set_input_summary(data) self.start_som() - def _set_input_summary(self, data): - summary = len(data) if data else self.info.NoInput - details = format_summary_details(data) if data else "" - self.info.set_input_summary(summary, details) - - def _set_output_summary(self, output): - summary = len(output) if output else self.info.NoOutput - details = format_summary_details(output) if output else "" - self.info.set_output_summary(summary, details) - def clear(self): self.data = self.cont_x = None self.cells = self.member_data = None @@ -812,7 +797,6 @@ def update_output(self): if self.data is None: self.Outputs.selected_data.send(None) self.Outputs.annotated_data.send(None) - self._set_output_summary(None) return indices = np.zeros(len(self.data), dtype=int) @@ -825,10 +809,8 @@ def update_output(self): if np.any(indices): sel_data = create_groups_table(self.data, indices, False, "Group") self.Outputs.selected_data.send(sel_data) - self._set_output_summary(sel_data) else: self.Outputs.selected_data.send(None) - self._set_output_summary(None) if np.max(indices) > 1: annotated = create_groups_table(self.data, indices) diff --git a/Orange/widgets/unsupervised/tests/test_owcorrespondence.py b/Orange/widgets/unsupervised/tests/test_owcorrespondence.py index f1ce768b7d4..bf61e1ed040 100644 --- a/Orange/widgets/unsupervised/tests/test_owcorrespondence.py +++ b/Orange/widgets/unsupervised/tests/test_owcorrespondence.py @@ -1,12 +1,9 @@ # Test methods with long descriptive names can omit docstrings # pylint: disable=missing-docstring, protected-access -from orangewidget.widget import StateInfo - from Orange.data import Table, Domain, DiscreteVariable, ContinuousVariable from Orange.widgets.tests.base import WidgetTest from Orange.widgets.unsupervised.owcorrespondence \ import OWCorrespondenceAnalysis, select_rows -from Orange.widgets.utils.state_summary import format_summary_details class TestOWCorrespondence(WidgetTest): @@ -92,24 +89,3 @@ def test_outputs(self): (8, 8)) self.send_signal(self.widget.Inputs.data, None) self.assertIsNone(self.get_output(w.Outputs.coordinates), None) - - def test_summary(self): - """Check if the status bar updates when data on input""" - 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) - summary, details = f"{len(self.data)}", format_summary_details( - self.data) - self.assertEqual(info._StateInfo__input_summary.brief, summary) - self.assertEqual(info._StateInfo__input_summary.details, details) - output = self.get_output(self.widget.Outputs.coordinates) - 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) - 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) diff --git a/Orange/widgets/unsupervised/tests/test_owdbscan.py b/Orange/widgets/unsupervised/tests/test_owdbscan.py index c7e434c1d3d..db0ad933280 100644 --- a/Orange/widgets/unsupervised/tests/test_owdbscan.py +++ b/Orange/widgets/unsupervised/tests/test_owdbscan.py @@ -2,14 +2,11 @@ import numpy as np from scipy.sparse import csr_matrix, csc_matrix -from orangewidget.widget import StateInfo - from Orange.data import Table from Orange.distance import Euclidean from Orange.widgets.tests.base import WidgetTest from Orange.widgets.tests.utils import simulate, possible_duplicate_table from Orange.widgets.unsupervised.owdbscan import OWDBSCAN, get_kth_distances -from Orange.widgets.utils.state_summary import format_summary_details class TestOWDBSCAN(WidgetTest): @@ -229,23 +226,3 @@ def test_missing_data(self): self.send_signal(w.Inputs.data, self.iris) output = self.get_output(w.Outputs.annotated_data) self.assertTupleEqual((150, 1), output[:, "Cluster"].metas.shape) - - def test_summary(self): - """Check if the status bar updates when data on input""" - info = self.widget.info - no_input, no_output = "No data on input", "No data on output" - - self.send_signal(self.widget.Inputs.data, self.iris) - summary, details = f"{len(self.iris)}", format_summary_details(self.iris) - self.assertEqual(info._StateInfo__input_summary.brief, summary) - self.assertEqual(info._StateInfo__input_summary.details, details) - output = self.get_output(self.widget.Outputs.annotated_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) - 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) diff --git a/Orange/widgets/unsupervised/tests/test_owdistancemap.py b/Orange/widgets/unsupervised/tests/test_owdistancemap.py index 29217b3bb9d..cb93dcd539f 100644 --- a/Orange/widgets/unsupervised/tests/test_owdistancemap.py +++ b/Orange/widgets/unsupervised/tests/test_owdistancemap.py @@ -3,12 +3,9 @@ import random import unittest -from orangewidget.widget import StateInfo - from Orange.distance import Euclidean from Orange.widgets.unsupervised.owdistancemap import OWDistanceMap from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin -from Orange.widgets.utils.state_summary import format_summary_details class TestOWDistanceMap(WidgetTest, WidgetOutputsTestMixin): @@ -43,29 +40,6 @@ def test_saved_selection(self): self.send_signal(self.signal_name, self.signal_data, widget=w) self.assertEqual(len(self.get_output(w.Outputs.selected_data, widget=w)), 10) - def test_summary(self): - """Check if the status bar updates""" - info = self.widget.info - no_input, no_output = "No data on input", "No data on output" - matrix = f"{len(self.signal_data)}" - - self.send_signal(self.widget.Inputs.distances, self.signal_data) - self.assertEqual(info._StateInfo__input_summary.brief, matrix) - self.assertEqual(info._StateInfo__input_summary.details, matrix) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - 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.distances, None) - 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) - if __name__ == "__main__": unittest.main() diff --git a/Orange/widgets/unsupervised/tests/test_owdistances.py b/Orange/widgets/unsupervised/tests/test_owdistances.py index e6999e964a8..7935fc73c85 100644 --- a/Orange/widgets/unsupervised/tests/test_owdistances.py +++ b/Orange/widgets/unsupervised/tests/test_owdistances.py @@ -5,15 +5,12 @@ import numpy as np -from orangewidget.widget import StateInfo - from Orange import distance from Orange.data import Table, Domain, ContinuousVariable from Orange.misc import DistMatrix from Orange.widgets.unsupervised.owdistances import OWDistances, METRICS, \ DistanceRunner from Orange.widgets.tests.base import WidgetTest -from Orange.widgets.utils.state_summary import format_summary_details class TestDistanceRunner(unittest.TestCase): @@ -231,27 +228,6 @@ def assert_no_error(): self.send_signal(widget.Inputs.data, self.iris) assert_no_error() - def test_summary(self): - """Check if the status bar updates""" - info = self.widget.info - no_input, no_output = "No data on input", "No data on output" - - self.send_signal(self.widget.Inputs.data, None) - 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.iris) - summary, details = f"{len(self.iris)}", format_summary_details( - self.iris) - self.assertEqual(info._StateInfo__input_summary.brief, summary) - self.assertEqual(info._StateInfo__input_summary.details, details) - output = self.get_output(self.widget.Outputs.distances) - summary = f"{output.shape[0]}×{output.shape[1]}" - self.assertEqual(info._StateInfo__output_summary.brief, summary) - self.assertEqual(info._StateInfo__output_summary.details, summary) - if __name__ == "__main__": unittest.main() diff --git a/Orange/widgets/unsupervised/tests/test_owhierarchicalclustering.py b/Orange/widgets/unsupervised/tests/test_owhierarchicalclustering.py index 29736d01464..bfd75ed87c9 100644 --- a/Orange/widgets/unsupervised/tests/test_owhierarchicalclustering.py +++ b/Orange/widgets/unsupervised/tests/test_owhierarchicalclustering.py @@ -7,15 +7,12 @@ from AnyQt.QtCore import QPoint, Qt from AnyQt.QtTest import QTest -from orangewidget.widget import StateInfo - import Orange.misc from Orange.data import Table, Domain, ContinuousVariable, DiscreteVariable from Orange.distance import Euclidean from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin from Orange.widgets.unsupervised.owhierarchicalclustering import \ OWHierarchicalClustering -from Orange.widgets.utils.state_summary import format_summary_details class TestOWHierarchicalClustering(WidgetTest, WidgetOutputsTestMixin): @@ -173,26 +170,3 @@ def test_restore_state(self): self.send_signal(w.Inputs.distances, self.distances, widget=w) ids_2 = self.get_output(w.Outputs.selected_data, widget=w).ids self.assertSequenceEqual(list(ids_1), list(ids_2)) - - def test_summary(self): - """Check if the status bar updates""" - info = self.widget.info - no_input, no_output = "No data on input", "No data on output" - matrix_len = f"{len(self.distances)}" - - self.send_signal(self.widget.Inputs.distances, self.distances) - self.assertEqual(info._StateInfo__input_summary.brief, matrix_len) - self.assertEqual(info._StateInfo__input_summary.details, matrix_len) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - 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.distances, None) - 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) diff --git a/Orange/widgets/unsupervised/tests/test_owkmeans.py b/Orange/widgets/unsupervised/tests/test_owkmeans.py index 2bf27e20dec..a77b5f8c01f 100644 --- a/Orange/widgets/unsupervised/tests/test_owkmeans.py +++ b/Orange/widgets/unsupervised/tests/test_owkmeans.py @@ -9,14 +9,11 @@ from AnyQt.QtWidgets import QRadioButton from sklearn.metrics import silhouette_score -from orangewidget.widget import StateInfo - import Orange.clustering from Orange.data import Table, Domain from Orange.widgets import gui from Orange.widgets.tests.base import WidgetTest from Orange.widgets.unsupervised.owkmeans import OWKMeans, ClusterTableModel -from Orange.widgets.utils.state_summary import format_summary_details class TestClusterTableModel(unittest.TestCase): @@ -567,26 +564,6 @@ def test_saved_selection(self): self.assertEqual(w.send_data.call_count, 2) self.assertEqual(self.widget.selected_row(), w.selected_row()) - def test_summary(self): - """Check if the status bar updates""" - 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) - summary, details = f"{len(self.data)}", format_summary_details(self.data) - self.assertEqual(info._StateInfo__input_summary.brief, summary) - self.assertEqual(info._StateInfo__input_summary.details, details) - output = self.get_output(self.widget.Outputs.annotated_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) - 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) - if __name__ == "__main__": unittest.main() diff --git a/Orange/widgets/unsupervised/tests/test_owlouvain.py b/Orange/widgets/unsupervised/tests/test_owlouvain.py index a39612b0443..2881d6c9fe1 100644 --- a/Orange/widgets/unsupervised/tests/test_owlouvain.py +++ b/Orange/widgets/unsupervised/tests/test_owlouvain.py @@ -4,7 +4,6 @@ import numpy as np from sklearn.utils import check_random_state -from orangewidget.widget import StateInfo from orangewidget.settings import Context from Orange.data import Table, Domain, ContinuousVariable @@ -12,7 +11,6 @@ from Orange.widgets.tests.base import WidgetTest from Orange.widgets.tests.utils import table_dense_sparse from Orange.widgets.unsupervised.owlouvainclustering import OWLouvainClustering -from Orange.widgets.utils.state_summary import format_summary_details # Deterministic tests np.random.seed(42) @@ -273,23 +271,3 @@ def test_migrate_settings(self): correct = {'apply_pca': True, 'k_neighbors': 29, 'metric_idx': 1, 'normalize': False, 'pca_components': 10, 'resolution': 1.0} self.assertEqual(sorted(settings.items()), sorted(correct.items())) - - def test_summary(self): - """Check if the status bar updates""" - info = self.widget.info - no_input, no_output = "No data on input", "No data on output" - - self.send_signal(self.widget.Inputs.data, self.iris) - summary, details = f"{len(self.iris)}", format_summary_details(self.iris) - self.assertEqual(info._StateInfo__input_summary.brief, summary) - self.assertEqual(info._StateInfo__input_summary.details, details) - output = self.get_output(self.widget.Outputs.annotated_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) - 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) diff --git a/Orange/widgets/unsupervised/tests/test_owmanifoldlearning.py b/Orange/widgets/unsupervised/tests/test_owmanifoldlearning.py index f3cd8b3b9d6..34104939311 100644 --- a/Orange/widgets/unsupervised/tests/test_owmanifoldlearning.py +++ b/Orange/widgets/unsupervised/tests/test_owmanifoldlearning.py @@ -6,13 +6,10 @@ import numpy as np from scipy import sparse -from orangewidget.widget import StateInfo - from Orange.data import Table, Domain, ContinuousVariable, DiscreteVariable from Orange.widgets.tests.base import WidgetTest from Orange.widgets.tests.utils import simulate, possible_duplicate_table from Orange.widgets.unsupervised.owmanifoldlearning import OWManifoldLearning -from Orange.widgets.utils.state_summary import format_summary_details class TestOWManifoldLearning(WidgetTest): @@ -161,24 +158,3 @@ def test_unconditional_commit_on_new_signal(self): apply.reset_mock() self.send_signal(self.widget.Inputs.data, self.iris) apply.assert_called() - - def test_summary(self): - """Check if the status bar updates when data on input""" - info = self.widget.info - no_input, no_output = "No data on input", "No data on output" - - self.send_signal(self.widget.Inputs.data, self.iris) - summary, details = f"{len(self.iris)}", format_summary_details( - self.iris) - self.assertEqual(info._StateInfo__input_summary.brief, summary) - self.assertEqual(info._StateInfo__input_summary.details, details) - output = self.get_output(self.widget.Outputs.transformed_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) - 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) diff --git a/Orange/widgets/unsupervised/tests/test_owsom.py b/Orange/widgets/unsupervised/tests/test_owsom.py index 0c9ed1bc50f..c3666d463a5 100644 --- a/Orange/widgets/unsupervised/tests/test_owsom.py +++ b/Orange/widgets/unsupervised/tests/test_owsom.py @@ -9,7 +9,6 @@ from Orange.data import Table, Domain from Orange.widgets.tests.base import WidgetTest from Orange.widgets.utils.annotated_data import ANNOTATED_DATA_FEATURE_NAME -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.unsupervised.owsom import OWSOM, SomView, SOM @@ -509,11 +508,6 @@ def test_on_selection_change_on_empty(self): def test_output(self): widget = self.widget self.send_signal(self.widget.Inputs.data, self.iris) - summary, details = f"{len(self.iris)}", format_summary_details( - self.iris) - self.assertEqual(widget.info._StateInfo__input_summary.brief, summary) - self.assertEqual(widget.info._StateInfo__input_summary.details, - details) self.assertIsNone(self.get_output(widget.Outputs.selected_data)) out = self.get_output(widget.Outputs.annotated_data) @@ -526,10 +520,6 @@ def test_output(self): widget.on_selection_change(m) out = self.get_output(widget.Outputs.selected_data) np.testing.assert_equal(out.ids, self.iris.ids[:30]) - summary, details = f"{len(out)}", format_summary_details(out) - self.assertEqual(widget.info._StateInfo__output_summary.brief, summary) - self.assertEqual(widget.info._StateInfo__output_summary.details, - details) out = self.get_output(widget.Outputs.annotated_data) np.testing.assert_equal( @@ -550,12 +540,6 @@ def test_output(self): self.send_signal(self.widget.Inputs.data, None) self.assertIsNone(self.get_output(widget.Outputs.selected_data)) self.assertIsNone(self.get_output(widget.Outputs.annotated_data)) - self.assertEqual(widget.info._StateInfo__input_summary.brief, "-") - self.assertEqual(widget.info._StateInfo__input_summary.details, - "No data on input") - self.assertEqual(widget.info._StateInfo__output_summary.brief, "-") - self.assertEqual(widget.info._StateInfo__output_summary.details, - "No data on output") if __name__ == "__main__": diff --git a/Orange/widgets/utils/owbasesql.py b/Orange/widgets/utils/owbasesql.py index 147d3168723..f7a97ddf4cb 100644 --- a/Orange/widgets/utils/owbasesql.py +++ b/Orange/widgets/utils/owbasesql.py @@ -10,7 +10,6 @@ from Orange.widgets.credentials import CredentialManager from Orange.widgets.settings import Setting from Orange.widgets.utils.signals import Output -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import OWWidget, Msg @@ -158,9 +157,6 @@ def open_table(self): data = self.get_table() self.data_desc_table = data self.Outputs.data.send(data) - info = data.approx_len() if data else self.info.NoOutput - detail = format_summary_details(data) if data else "" - self.info.set_output_summary(info, detail) def get_table(self) -> Table: """ @@ -177,7 +173,6 @@ def clear(self): self.database_desc = None self.data_desc_table = None self.Outputs.data.send(None) - self.info.set_output_summary(self.info.NoOutput) def send_report(self): if not self.database_desc: diff --git a/Orange/widgets/utils/owlearnerwidget.py b/Orange/widgets/utils/owlearnerwidget.py index 8f61ab0f5c1..c45859f6b51 100644 --- a/Orange/widgets/utils/owlearnerwidget.py +++ b/Orange/widgets/utils/owlearnerwidget.py @@ -11,7 +11,6 @@ from Orange.widgets.utils import getmembers from Orange.widgets.utils.signals import Output, Input from Orange.widgets.utils.sql import check_sql_input -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import OWWidget, WidgetMetaClass, Msg @@ -100,8 +99,6 @@ def __init__(self, preprocessors=None): self.preprocessors = preprocessors self.outdated_settings = False - self.info.set_input_summary(self.info.NoInput) - self.setup_layout() QTimer.singleShot(0, getattr(self, "unconditional_apply", self.apply)) @@ -133,7 +130,6 @@ def set_data(self, data): """Set the input train dataset.""" self.Error.data_error.clear() self.data = data - self.set_input_summary() if data is not None and data.domain.class_var is None: if data.domain.class_vars: @@ -148,11 +144,6 @@ def set_data(self, data): self.update_model() - def set_input_summary(self): - summary = len(self.data) if self.data else self.info.NoInput - details = format_summary_details(self.data) if self.data else "" - self.info.set_input_summary(summary, details) - def apply(self): """Applies learner and sends new model.""" self.update_learner() diff --git a/Orange/widgets/utils/state_summary.py b/Orange/widgets/utils/state_summary.py index aa3666d11c5..cdcca2efa8d 100644 --- a/Orange/widgets/utils/state_summary.py +++ b/Orange/widgets/utils/state_summary.py @@ -1,5 +1,21 @@ -from Orange.data import StringVariable, DiscreteVariable, ContinuousVariable, \ - TimeVariable +from datetime import date +from html import escape + +from AnyQt.QtCore import Qt + +from orangewidget.utils.signals import summarize, PartialSummary + +from Orange.data import ( + StringVariable, DiscreteVariable, ContinuousVariable, TimeVariable, + Table +) + +from Orange.evaluation import Results +from Orange.misc import DistMatrix +from Orange.preprocess import Preprocess, PreprocessorList +from Orange.preprocess.score import Scorer +from Orange.widgets.utils.signals import AttributeList +from Orange.base import Model, Learner def format_variables_string(variables): @@ -37,7 +53,12 @@ def format_variables_string(variables): return var_string -def format_summary_details(data): +def _plural(number): + return 's' * (number % 100 != 1) + + +# `format` is a good name for the argument, pylint: disable=redefined-builtin +def format_summary_details(data, format=Qt.PlainText): """ A function that forms the entire descriptive part of the input/output summary. @@ -46,23 +67,52 @@ def format_summary_details(data): :type data: Orange.data.Table :return: A formatted string """ - def _plural(number): - return 's' * (number != 1) - - details = '' - if data: - features = format_variables_string(data.domain.attributes) - targets = format_variables_string(data.domain.class_vars) - metas = format_variables_string(data.domain.metas) - - features_missing = missing_values(data.has_missing_attribute() - and data.get_nan_frequency_attribute()) - n_features = len(data.domain.variables) + len(data.domain.metas) + if data is None: + return "" + + if format == Qt.PlainText: + def b(s): + return s + else: + def b(s): + return f"{s}" + + features = format_variables_string(data.domain.attributes) + targets = format_variables_string(data.domain.class_vars) + metas = format_variables_string(data.domain.metas) + + features_missing = missing_values(data.has_missing_attribute() + and data.get_nan_frequency_attribute()) + n_features = len(data.domain.variables) + len(data.domain.metas) + name = getattr(data, "name", None) + if name == "untitled": + name = None + basic = f'{len(data):n} instance{_plural(len(data))}, ' \ + f'{n_features} variable{_plural(n_features)}' + + if format == Qt.PlainText: details = \ - f'{len(data)} instance{_plural(len(data))}, ' \ - f'{n_features} variable{_plural(n_features)}\n' \ - f'Features: {features} {features_missing}\n' \ - f'Target: {targets}\nMetas: {metas}' + (f"{name}: " if name else "") + basic \ + + f'\nFeatures: {features} {features_missing}' \ + + f'\nTarget: {targets}' + if data.domain.metas: + details += f'\nMetas: {metas}' + else: + descs = [] + if name: + descs.append(_nobr(f"{escape(name)}: {basic}")) + else: + descs.append(_nobr(f'{basic}')) + + if data.domain.variables: + descs.append(_nobr(f'Features: {features} {features_missing}')) + if data.domain.class_vars: + descs.append(_nobr(f"Target: {targets}")) + if data.domain.metas: + descs.append(_nobr(f"Metas: {metas}")) + + details = '
'.join(descs) + return details @@ -70,7 +120,7 @@ def missing_values(value): if value: return f'({value*100:.1f}% missing values)' else: - return '(No missing values)' + return '(no missing values)' def format_multiple_summaries(data_list, type_io='input'): @@ -101,3 +151,69 @@ def new_line(text): details = f'No data on {type_io}.' full_details.append(details if not name else f'{name}:
{details}') return '
'.join(full_details) + + +def _name_of(object): + return _nobr(getattr(object, 'name', type(object).__name__)) + + +def _nobr(s): + return f"{s}" + + +@summarize.register(Table) +def summarize_(data: Table): + return PartialSummary( + data.approx_len(), + format_summary_details(data, format=Qt.RichText)) + + +@summarize.register(DistMatrix) +def summarize_(matrix: DistMatrix): # pylint: disable=function-redefined + n, m = matrix.shape + return PartialSummary(f"{n}×{m}", _nobr(f"{n}×{m} distance matrix")) + + +@summarize.register(Results) +def summarize_(results: Results): # pylint: disable=function-redefined + nmethods, ninstances = results.predicted.shape + summary = f"{nmethods}×{ninstances}" + details = f"{nmethods} method{_plural(nmethods)} " \ + f"on {ninstances} test instance{_plural(ninstances)}" + return PartialSummary(summary, _nobr(details)) + + +@summarize.register(AttributeList) +def summarize_(attributes): # pylint: disable=function-redefined + n = len(attributes) + if n == 0: + details = "empty list" + elif n <= 3: + details = _nobr(", ".join(var.name for var in attributes)) + else: + details = _nobr(", ".join(var.name for var in attributes[:2]) + + f" and {n - 2} others") + return PartialSummary(n, details) + + +@summarize.register(Preprocess) +def summarize_(preprocessor: Preprocess): + if isinstance(preprocessor, PreprocessorList): + if preprocessor.preprocessors: + details = "
".join(map(_name_of, preprocessor.preprocessors)) + else: + details = _nobr(f"{_name_of(preprocessor)} (empty)") + else: + details = _name_of(preprocessor) + return PartialSummary("🄿", details) + + +def summarize_by_name(type_, symbol): + @summarize.register(type_) + def summarize_(model: type_): + return PartialSummary(symbol, _name_of(model)) + + +summarize_by_name(Model, "⛄" if date.month == 12 else "🄼") +summarize_by_name(Learner, "🄻") +summarize_by_name(Scorer, "🅂") diff --git a/Orange/widgets/utils/tests/test_owbasesql.py b/Orange/widgets/utils/tests/test_owbasesql.py index 7568cf8f7a7..5840854c7b3 100644 --- a/Orange/widgets/utils/tests/test_owbasesql.py +++ b/Orange/widgets/utils/tests/test_owbasesql.py @@ -91,11 +91,6 @@ def test_report(self): self.widget.connectbutton.click() self.widget.report_button.click() # empty - def test_out_summary(self): - self.widget.open_table() - info = self.widget.info - self.assertEqual(info._StateInfo__output_summary.brief, "150") - if __name__ == "__main__": unittest.main() diff --git a/Orange/widgets/utils/tests/test_owlearnerwidget.py b/Orange/widgets/utils/tests/test_owlearnerwidget.py index 3a800c50491..e027d4a7acd 100644 --- a/Orange/widgets/utils/tests/test_owlearnerwidget.py +++ b/Orange/widgets/utils/tests/test_owlearnerwidget.py @@ -2,8 +2,6 @@ import scipy.sparse as sp -from orangewidget.widget import StateInfo - # pylint: disable=missing-docstring, protected-access from Orange.base import Learner, Model from Orange.classification import KNNLearner @@ -14,7 +12,6 @@ from Orange.widgets.utils.owlearnerwidget import OWBaseLearner from Orange.widgets.tests.base import WidgetTest from Orange.widgets.utils.signals import Output -from Orange.widgets.utils.state_summary import format_summary_details class TestOWBaseLearner(WidgetTest): @@ -137,23 +134,6 @@ class WidgetLR(OWBaseLearner): model = self.get_output(w.Outputs.model, widget=w) self.assertIsNotNone(model) - def test_summary(self): - """Check if the status bar is updated when data is received""" - class WidgetA(OWBaseLearner): - name = "A" - LEARNER = KNNLearner - widget = self.create_widget(WidgetA) - info = widget.info - no_input = "No data on input" - - self.send_signal(widget.Inputs.data, self.iris) - summary, details = "150", format_summary_details(self.iris) - self.assertEqual(info._StateInfo__input_summary.brief, summary) - self.assertEqual(info._StateInfo__input_summary.details, details) - self.send_signal(widget.Inputs.data, None) - self.assertIsInstance(info._StateInfo__input_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__input_summary.details, no_input) - def test_invalid_number_of_targets(self): class MockLearner(Fitter): name = 'mock' diff --git a/Orange/widgets/utils/tests/test_sql.py b/Orange/widgets/utils/tests/test_sql.py index f36c047c7df..7f04ee626a1 100644 --- a/Orange/widgets/utils/tests/test_sql.py +++ b/Orange/widgets/utils/tests/test_sql.py @@ -1,7 +1,7 @@ import unittest from unittest.mock import patch, MagicMock -from Orange.data import Table +from Orange.data import Table, Domain from Orange.data.sql.table import AUTO_DL_LIMIT, SqlTable from Orange.widgets.tests.base import WidgetTest from Orange.widgets.utils.signals import Input @@ -43,8 +43,10 @@ def test_inputs_check_sql(self): a_table = object() with patch("Orange.widgets.utils.sql.Table", - MagicMock(return_value=a_table)) as table_mock: + MagicMock(return_value=a_table)) as table_mock, \ + patch("Orange.widgets.utils.state_summary.format_summary_details"): d = SqlTable(None, None, MagicMock()) + d.domain = Domain([]) d.approx_len = MagicMock(return_value=AUTO_DL_LIMIT - 1) self.send_signal(self.widget.Inputs.data, d) diff --git a/Orange/widgets/utils/tests/test_state_summary.py b/Orange/widgets/utils/tests/test_state_summary.py index e8554bd445d..50abe2b97c8 100644 --- a/Orange/widgets/utils/tests/test_state_summary.py +++ b/Orange/widgets/utils/tests/test_state_summary.py @@ -105,32 +105,30 @@ def test_details(self): """Check if details part of the summary is formatted correctly""" data = Table('zoo') n_features = len(data.domain.variables) + len(data.domain.metas) - details = f'{len(data)} instances, ' \ + details = f'zoo: {len(data)} instance, ' \ f'{n_features} variables\n' \ f'Features: {len(data.domain.attributes)} categorical ' \ - f'(No missing values)\n' \ + f'(no missing values)\n' \ f'Target: categorical\n' \ f'Metas: string' self.assertEqual(details, format_summary_details(data)) data = Table('housing') n_features = len(data.domain.variables) + len(data.domain.metas) - details = f'{len(data)} instances, ' \ + details = f'housing: {len(data)} instances, ' \ f'{n_features} variables\n' \ f'Features: {len(data.domain.attributes)} numeric ' \ - f'(No missing values)\n' \ - f'Target: numeric\n' \ - f'Metas: —' + f'(no missing values)\n' \ + f'Target: numeric' self.assertEqual(details, format_summary_details(data)) data = Table('heart_disease') n_features = len(data.domain.variables) + len(data.domain.metas) - details = f'{len(data)} instances, ' \ + details = f'heart_disease: {len(data)} instances, ' \ f'{n_features} variables\n' \ f'Features: {len(data.domain.attributes)} ' \ f'(7 categorical, 6 numeric) (0.2% missing values)\n' \ - f'Target: categorical\n' \ - f'Metas: —' + f'Target: categorical' self.assertEqual(details, format_summary_details(data)) data = make_table( @@ -167,25 +165,22 @@ def test_details(self): f'{len(data.domain.variables)} variables\n' \ f'Features: {len(data.domain.attributes)} time ' \ f'(10.0% missing values)\n' \ - f'Target: categorical\n' \ - f'Metas: —' + f'Target: categorical' self.assertEqual(details, format_summary_details(data)) data = make_table([rgb_full, ints_full], target=None, metas=None) details = f'{len(data)} instances, ' \ f'{len(data.domain.variables)} variables\n' \ f'Features: {len(data.domain.variables)} categorical ' \ - f'(No missing values)\n' \ - f'Target: —\n' \ - f'Metas: —' + f'(no missing values)\n' \ + f'Target: —' self.assertEqual(details, format_summary_details(data)) data = make_table([rgb_full], target=None, metas=None) details = f'{len(data)} instances, ' \ f'{len(data.domain.variables)} variable\n' \ - f'Features: categorical (No missing values)\n' \ - f'Target: —\n' \ - f'Metas: —' + f'Features: categorical (no missing values)\n' \ + f'Target: —' self.assertEqual(details, format_summary_details(data)) data = None @@ -197,41 +192,41 @@ def test_multiple_summaries(self): 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:
{len(data)} instances, ' \ + details = f'Data:
zoo: {len(data)} instance, ' \ f'{n_features_data} variables
' \ f'Features: {len(data.domain.attributes)} categorical ' \ - f'(No missing values)
' \ + f'(no missing values)
' \ f'Target: categorical
' \ f'Metas: string
'\ - f'Extra Data:
{len(extra_data)} instances, ' \ + f'Extra Data:
zoo: {len(extra_data)} instances, ' \ f'{n_features_extra_data} variables
' \ f'Features: {len(extra_data.domain.attributes)} ' \ - f'categorical (No missing values)
' \ + f'categorical (no missing values)
' \ f'Target: categorical
' \ f'Metas: string' inputs = [('Data', data), ('Extra Data', extra_data)] self.assertEqual(details, format_multiple_summaries(inputs)) - details = f'{len(data)} instances, ' \ + details = f'zoo: {len(data)} instance, ' \ f'{n_features_data} variables
' \ f'Features: {len(data.domain.attributes)} categorical ' \ - f'(No missing values)
' \ + f'(no missing values)
' \ f'Target: categorical
' \ f'Metas: string
'\ - f'{len(extra_data)} instances, ' \ + f'zoo: {len(extra_data)} instances, ' \ f'{n_features_extra_data} variables
' \ f'Features: {len(extra_data.domain.attributes)} ' \ - f'categorical (No missing values)
' \ + f'categorical (no missing values)
' \ f'Target: categorical
' \ f'Metas: string' inputs = [('', data), ('', extra_data)] self.assertEqual(details, format_multiple_summaries(inputs)) details = f'No data on output.
' \ - f'Extra data:
{len(extra_data)} instances, ' \ + f'Extra data:
zoo: {len(extra_data)} instances, ' \ f'{n_features_extra_data} variables
' \ f'Features: {len(extra_data.domain.attributes)} ' \ - f'categorical (No missing values)
' \ + f'categorical (no missing values)
' \ f'Target: categorical
' \ f'Metas: string
'\ f'No data on output.' diff --git a/Orange/widgets/visualize/owbarplot.py b/Orange/widgets/visualize/owbarplot.py index a5e61a849df..665819d5417 100644 --- a/Orange/widgets/visualize/owbarplot.py +++ b/Orange/widgets/visualize/owbarplot.py @@ -24,7 +24,6 @@ from Orange.widgets.utils.itemmodels import DomainModel from Orange.widgets.utils.plot import OWPlotGUI, SELECT, PANNING, ZOOMING from Orange.widgets.utils.sql import check_sql_input -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.owscatterplotgraph import LegendItem from Orange.widgets.visualize.utils.customizableplot import Updater, \ CommonParameterSetter @@ -482,9 +481,6 @@ def _add_controls(self): gui.auto_send(self.buttonsArea, self, "auto_commit") - self._set_input_summary(None) - self._set_output_summary(None) - def __parameter_changed(self): self.graph.reset_graph() @@ -519,7 +515,6 @@ def set_data(self, data: Optional[Table]): self.closeContext() self.clear() self.orig_data = self.data = data - self._set_input_summary(data) self.check_data() self.init_attr_values() self.openContext(self.data) @@ -658,7 +653,6 @@ def commit(self): if self.data is not None and bool(self.selection): selected = self.data[self.selection] annotated = create_annotated_table(self.orig_data, self.selection) - self._set_output_summary(selected) self.Outputs.selected_data.send(selected) self.Outputs.annotated_data.send(annotated) @@ -671,19 +665,6 @@ def clear(self): def clear_cache(): OWBarPlot.grouped_indices.fget.cache_clear() - def _set_input_summary(self, data: Optional[Table]): - self._set_summary(data, self.info.NoInput, self.info.set_input_summary) - - def _set_output_summary(self, data: Optional[Table]): - self._set_summary(data, self.info.NoOutput, - self.info.set_output_summary) - - @staticmethod - def _set_summary(data, empty, setter): - summary = len(data) if data else empty - details = format_summary_details(data) if data else "" - setter(summary, details) - def send_report(self): if self.data is None: return diff --git a/Orange/widgets/visualize/owboxplot.py b/Orange/widgets/visualize/owboxplot.py index c5c3584e64d..efbe10f52ef 100644 --- a/Orange/widgets/visualize/owboxplot.py +++ b/Orange/widgets/visualize/owboxplot.py @@ -27,7 +27,6 @@ from Orange.widgets.utils.annotated_data import (create_annotated_table, ANNOTATED_DATA_SIGNAL_NAME) from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Input, Output @@ -282,9 +281,6 @@ def __init__(self): self.stat_test = "" self.mainArea.setMinimumWidth(300) - - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) self.update_box_visibilities() def sizeHint(self): @@ -316,7 +312,6 @@ def reset_groups(self): @Inputs.data def set_data(self, dataset): - self._set_input_summary(dataset) self.closeContext() self._reset_all_data() if dataset and not ( @@ -341,11 +336,6 @@ def set_data(self, dataset): self.update_box_visibilities() self.commit() - def _set_input_summary(self, dataset): - summary = len(dataset) if dataset else self.info.NoInput - details = format_summary_details(dataset) if dataset else "" - self.info.set_input_summary(summary, details) - def _reset_all_data(self): self.clear_scene() self.Warning.no_vars.clear() @@ -1151,9 +1141,6 @@ def commit(self): self.dataset.ids, selected.ids, assume_unique=True).nonzero()[0] else: selected, selection = None, [] - summary = len(selected) if selected else self.info.NoOutput - details = format_summary_details(selected) if selected else "" - self.info.set_output_summary(summary, details) self.Outputs.selected_data.send(selected) self.Outputs.annotated_data.send( create_annotated_table(self.dataset, selection)) diff --git a/Orange/widgets/visualize/owdistributions.py b/Orange/widgets/visualize/owdistributions.py index 49c6da95088..0e75dc6c86a 100644 --- a/Orange/widgets/visualize/owdistributions.py +++ b/Orange/widgets/visualize/owdistributions.py @@ -20,7 +20,6 @@ create_groups_table, create_annotated_table, ANNOTATED_DATA_SIGNAL_NAME from Orange.widgets.utils.itemmodels import DomainModel from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.utils.plotutils import ElidedLabelsAxis from Orange.widgets.widget import Input, Output, OWWidget, Msg @@ -369,9 +368,6 @@ def __init__(self): gui.auto_apply(self.buttonsArea, self, commit=self.apply) - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - self._set_smoothing_visibility() self._setup_plots() self._setup_legend() @@ -437,9 +433,6 @@ def set_data(self, data): self.closeContext() self.var = self.cvar = None self.data = data - summary = len(data) if data else self.info.NoInput - details = format_summary_details(data) if data else "" - self.info.set_input_summary(summary, details) domain = self.data.domain if self.data else None varmodel = self.controls.var.model() cvarmodel = self.controls.cvar.model() @@ -1131,10 +1124,6 @@ def apply(self): annotated_data, hist_indices, var_name="Bin", values=hist_values) histogram_data = self._get_histogram_table() - summary = len(selected_data) if selected_data else self.info.NoOutput - details = format_summary_details(selected_data) if selected_data else "" - self.info.set_output_summary(summary, details) - self.Outputs.selected_data.send(selected_data) self.Outputs.annotated_data.send(annotated_data) self.Outputs.histogram_data.send(histogram_data) diff --git a/Orange/widgets/visualize/owheatmap.py b/Orange/widgets/visualize/owheatmap.py index c4738209e6f..f9ee97112fa 100644 --- a/Orange/widgets/visualize/owheatmap.py +++ b/Orange/widgets/visualize/owheatmap.py @@ -39,7 +39,6 @@ ColorMap, CategoricalColorMap, GradientColorMap from Orange.widgets.utils.colorgradientselection import ColorGradientSelection from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details __all__ = [] @@ -245,9 +244,6 @@ def __init__(self): self.__rows_cache = {} self.__columns_cache = {} - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - # GUI definition colorbox = gui.vBox(self.controlArea, "Color") @@ -576,7 +572,6 @@ def set_dataset(self, data=None): self.closeContext() self.clear() self.clear_messages() - self._set_input_summary(data) if isinstance(data, SqlTable): if data.approx_len() < 4000: @@ -674,11 +669,6 @@ def is_variable(obj): self.unconditional_commit() - def _set_input_summary(self, data): - summary = len(data) if data else self.info.NoInput - details = format_summary_details(data) if data else "" - self.info.set_input_summary(summary, details) - def __on_split_rows_activated(self): self.set_split_variable(self.row_split_cb.currentData(Qt.EditRole)) @@ -1235,9 +1225,6 @@ def commit(self): data = self.input_data[indices] - summary = len(data) if data else self.info.NoOutput - details = format_summary_details(data) if data else "" - self.info.set_output_summary(summary, details) self.Outputs.selected_data.send(data) self.Outputs.annotated_data.send(create_annotated_table(self.input_data, indices)) diff --git a/Orange/widgets/visualize/owlineplot.py b/Orange/widgets/visualize/owlineplot.py index 0a013584cba..7c9ca2a0c27 100644 --- a/Orange/widgets/visualize/owlineplot.py +++ b/Orange/widgets/visualize/owlineplot.py @@ -29,7 +29,6 @@ from Orange.widgets.utils.plot import OWPlotGUI, SELECT, PANNING, ZOOMING from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.owdistributions import LegendItem from Orange.widgets.visualize.utils.customizableplot import Updater, \ CommonParameterSetter @@ -687,9 +686,6 @@ def _add_controls(self): plot_gui.box_zoom_select(self.buttonsArea) gui.auto_send(self.buttonsArea, self, "auto_commit") - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - def __show_profiles_changed(self): self.check_display_options() self._update_visibility("profiles") @@ -719,7 +715,6 @@ def __group_var_changed(self): def set_data(self, data): self.closeContext() self.data = data - self._set_input_summary() self.clear() self.check_data() self.check_display_options() @@ -764,11 +759,6 @@ def check_display_options(self): len(self.data[self.valid_data]) < SEL_MAX_INSTANCES self.enable_selection.emit(enable) - def _set_input_summary(self): - summary = len(self.data) if self.data else self.info.NoInput - details = format_summary_details(self.data) if self.data else "" - self.info.set_input_summary(summary, details) - @Inputs.data_subset @check_sql_input def set_subset_data(self, subset): @@ -924,10 +914,6 @@ def commit(self): selected = self.data[self.selection] \ if self.data is not None and bool(self.selection) else None annotated = create_annotated_table(self.data, self.selection) - - summary = len(selected) if selected else self.info.NoOutput - details = format_summary_details(selected) if selected else "" - self.info.set_output_summary(summary, details) self.Outputs.selected_data.send(selected) self.Outputs.annotated_data.send(annotated) diff --git a/Orange/widgets/visualize/owmosaic.py b/Orange/widgets/visualize/owmosaic.py index 13948fd2c92..a75cd441bb7 100644 --- a/Orange/widgets/visualize/owmosaic.py +++ b/Orange/widgets/visualize/owmosaic.py @@ -27,7 +27,6 @@ ANNOTATED_DATA_SIGNAL_NAME) from Orange.widgets.utils.itemmodels import DomainModel from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.utils import ( CanvasText, CanvasRectangle, ViewWithPress, VizRankDialog) from Orange.widgets.visualize.utils.plotutils import wrap_legend_items @@ -354,9 +353,6 @@ def __init__(self): self.canvas_view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.canvas_view.setRenderHint(QPainter.Antialiasing) - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - box = gui.vBox(self.controlArea, box=True) self.model_1 = DomainModel( order=DomainModel.MIXED, valid_types=DomainModel.PRIMITIVE) @@ -469,10 +465,8 @@ def set_data(self, data): if self.data is None: self.discrete_data = None self.init_combos(None) - self.info.set_input_summary(self.info.NoInput) return - self.info.set_input_summary(len(data), format_summary_details(data)) self.init_combos(self.data) self.openContext(self.data) @@ -547,7 +541,6 @@ def send_selection(self): self.Outputs.selected_data.send(None) self.Outputs.annotated_data.send( create_annotated_table(self.data, [])) - self.info.set_output_summary(self.info.NoOutput) return filters = [] self.Warning.no_cont_selection_sql.clear() @@ -570,9 +563,6 @@ def send_selection(self): if self.discrete_data is not self.data: selection = self.data[sel_idx] - summary = len(selection) if selection else self.info.NoOutput - details = format_summary_details(selection) if selection else "" - self.info.set_output_summary(summary, details) self.Outputs.selected_data.send(selection) self.Outputs.annotated_data.send( create_annotated_table(self.data, sel_idx)) diff --git a/Orange/widgets/visualize/ownomogram.py b/Orange/widgets/visualize/ownomogram.py index faaa631d6fb..63047c2a6a7 100644 --- a/Orange/widgets/visualize/ownomogram.py +++ b/Orange/widgets/visualize/ownomogram.py @@ -27,7 +27,6 @@ from Orange.widgets.settings import Setting, ContextSetting, \ ClassValuesContextHandler from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import OWWidget, Msg, Input, Output, AttributeList from Orange.widgets import gui @@ -704,8 +703,6 @@ def __init__(self): self.old_target_class_index = self.target_class_index self.repaint = False - self.info.set_input_summary(self.info.NoInput) - # GUI box = gui.vBox(self.controlArea, "Target class") self.class_combo = gui.comboBox( @@ -864,9 +861,6 @@ def update_controls(self): @Inputs.data def set_data(self, data): self.instances = data - summary = len(data) if data else self.info.NoInput - details = format_summary_details(data) if data else "" - self.info.set_input_summary(summary, details) self.feature_marker_values = [] self.set_feature_marker_values() self.update_scene() diff --git a/Orange/widgets/visualize/owpythagorastree.py b/Orange/widgets/visualize/owpythagorastree.py index 095e6ffc09e..0d68549b797 100644 --- a/Orange/widgets/visualize/owpythagorastree.py +++ b/Orange/widgets/visualize/owpythagorastree.py @@ -14,7 +14,6 @@ ANNOTATED_DATA_SIGNAL_NAME ) from Orange.widgets.utils.signals import Input, Output -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.utils.widgetpreview import WidgetPreview from Orange.widgets.visualize.pythagorastreeviewer import ( PythagorasTreeViewer, @@ -94,7 +93,6 @@ def __init__(self): # Tree info area box_info = gui.widgetBox(self.controlArea, 'Tree Info') self.infolabel = gui.widgetLabel(box_info) - self.info.set_output_summary(self.info.NoOutput) # Display settings area box_display = gui.widgetBox(self.controlArea, 'Display Settings') @@ -309,7 +307,6 @@ def onDeleteWidget(self): def commit(self): """Commit the selected data to output.""" if self.data is None: - self.info.set_output_summary(self.info.NoOutput) self.Outputs.selected_data.send(None) self.Outputs.annotated_data.send(None) return @@ -320,9 +317,6 @@ def commit(self): ] data = self.tree_adapter.get_instances_in_nodes(nodes) - summary = len(data) if data else self.info.NoOutput - details = format_summary_details(data) if data else "" - self.info.set_output_summary(summary, details) self.Outputs.selected_data.send(data) selected_indices = self.tree_adapter.get_indices(nodes) self.Outputs.annotated_data.send( diff --git a/Orange/widgets/visualize/owruleviewer.py b/Orange/widgets/visualize/owruleviewer.py index df2888a2245..a36c4e759bb 100644 --- a/Orange/widgets/visualize/owruleviewer.py +++ b/Orange/widgets/visualize/owruleviewer.py @@ -14,7 +14,6 @@ from Orange.widgets.utils.annotated_data import (create_annotated_table, ANNOTATED_DATA_SIGNAL_NAME) from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Input, Output @@ -46,9 +45,6 @@ def __init__(self): self.classifier = None self.selected = None - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - self.model = CustomRuleViewerTableModel(parent=self) self.model.set_horizontal_header_labels( ["IF conditions", "", "THEN class", "Distribution", @@ -85,7 +81,6 @@ def __init__(self): @Inputs.data def set_data(self, data): self.data = data - self._set_input_summary() self.commit() @Inputs.classifier @@ -106,11 +101,6 @@ def set_classifier(self, classifier): self.on_update() self.commit() - def _set_input_summary(self): - summary = len(self.data) if self.data else self.info.NoInput - details = format_summary_details(self.data) if self.data else "" - self.info.set_input_summary(summary, details) - def on_update(self): self._save_selected() @@ -178,9 +168,6 @@ def commit(self): data_output = data.from_table_rows(data, selected_indices) \ if len(selected_indices) else None - summary = len(data_output) if data_output else self.info.NoOutput - details = format_summary_details(data_output) if data_output else "" - self.info.set_output_summary(summary, details) self.Outputs.selected_data.send(data_output) self.Outputs.annotated_data.send(create_annotated_table(data, selected_indices)) diff --git a/Orange/widgets/visualize/owscatterplot.py b/Orange/widgets/visualize/owscatterplot.py index 1aa0dfd292f..ac3ef7c512e 100644 --- a/Orange/widgets/visualize/owscatterplot.py +++ b/Orange/widgets/visualize/owscatterplot.py @@ -521,7 +521,7 @@ def commit(self): def send_features(self): features = [attr for attr in [self.attr_x, self.attr_y] if attr] - self.Outputs.features.send(features or None) + self.Outputs.features.send(AttributeList(features) or None) def get_widget_name_extension(self): if self.data is not None: diff --git a/Orange/widgets/visualize/owsieve.py b/Orange/widgets/visualize/owsieve.py index a2b563e30d3..57b88198a7d 100644 --- a/Orange/widgets/visualize/owsieve.py +++ b/Orange/widgets/visualize/owsieve.py @@ -20,7 +20,6 @@ ANNOTATED_DATA_SIGNAL_NAME) from Orange.widgets.utils.itemmodels import DomainModel from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.utils import ( CanvasText, CanvasRectangle, ViewWithPress, VizRankDialogAttrPair) from Orange.widgets.widget import OWWidget, AttributeList, Input, Output @@ -108,9 +107,6 @@ def __init__(self): self.areas = [] self.selection = set() - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - self.mainArea.layout().setSpacing(0) self.attr_box = gui.hBox(self.mainArea, margin=0) self.domain_model = DomainModel(valid_types=DomainModel.PRIMITIVE) @@ -178,11 +174,8 @@ def set_data(self, data): self.attrs[:] = [] self.domain_model.set_domain(None) self.discrete_data = None - self.info.set_input_summary(self.info.NoInput) else: self.domain_model.set_domain(data.domain) - self.info.set_input_summary(len(self.data), - format_summary_details(self.data)) self.attrs = [x for x in self.domain_model if isinstance(x, Variable)] if self.attrs: self.attr_x = self.attrs[0] @@ -307,7 +300,6 @@ def update_selection(self): if self.areas is None or not self.selection: self.Outputs.selected_data.send(None) self.Outputs.annotated_data.send(create_annotated_table(self.data, [])) - self.info.set_output_summary(self.info.NoOutput) return filts = [] @@ -335,9 +327,6 @@ def update_selection(self): if self.discrete_data is not self.data: selection = self.data[sel_idx] - summary = len(selection) if selection is not None else self.info.NoOutput - details = format_summary_details(selection) if selection is not None else "" - self.info.set_output_summary(summary, details) self.Outputs.selected_data.send(selection) self.Outputs.annotated_data.send(create_annotated_table(self.data, sel_idx)) diff --git a/Orange/widgets/visualize/owsilhouetteplot.py b/Orange/widgets/visualize/owsilhouetteplot.py index 5d61173104d..b999e12aa76 100644 --- a/Orange/widgets/visualize/owsilhouetteplot.py +++ b/Orange/widgets/visualize/owsilhouetteplot.py @@ -35,7 +35,6 @@ from Orange.widgets.utils.graphicslayoutitem import SimpleLayoutItem from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Msg, Input, Output @@ -133,9 +132,6 @@ def __init__(self): self._silhouette = None # type: Optional[np.ndarray] self._silplot = None # type: Optional[SilhouettePlot] - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - controllayout = self.controlArea.layout() assert isinstance(controllayout, QVBoxLayout) self._distances_gui_box = distbox = gui.widgetBox( @@ -237,9 +233,6 @@ def _set_distances(self, distances: DistMatrix): self.data = data def handleNewSignals(self): - summary = len(self.data) if self.data else self.info.NoInput - details = format_summary_details(self.data) if self.data else "" - self.info.set_input_summary(summary, details) if not self._is_empty(): self._update() self._replot() @@ -498,7 +491,7 @@ def commit(self): scores = self._silhouette var = self.cluster_var_model[self.cluster_var_idx] - + domain = self.data.domain proposed = "Silhouette ({})".format(escape(var.name)) names = [var.name for var in itertools.chain(domain.attributes, @@ -520,9 +513,6 @@ def commit(self): selected[:, silhouette_var] = np.c_[scores[selectedmask]] data[:, silhouette_var] = np.c_[scores] - summary = len(selected) if selected else self.info.NoOutput - details = format_summary_details(selected) if selected else "" - self.info.set_output_summary(summary, details) self.Outputs.selected_data.send(selected) self.Outputs.annotated_data.send(create_annotated_table(data, indices)) diff --git a/Orange/widgets/visualize/owtreeviewer.py b/Orange/widgets/visualize/owtreeviewer.py index 9eb49079644..d1e1802f028 100644 --- a/Orange/widgets/visualize/owtreeviewer.py +++ b/Orange/widgets/visualize/owtreeviewer.py @@ -12,7 +12,6 @@ from Orange.base import TreeModel, SklModel from Orange.widgets.utils.signals import Input, Output from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.owtreeviewer2d import \ GraphicsNode, GraphicsEdge, OWTreeViewer2D from Orange.widgets.utils import to_html @@ -199,8 +198,6 @@ def __init__(self): combo.activated[int].connect(self.color_changed) self.display_box.layout().addRow(self.color_label, combo) - self.info.set_output_summary(self.info.NoOutput) - def set_node_info(self): """Set the content of the node""" for node in self.scene.nodes(): @@ -295,7 +292,6 @@ def ctree(self, model=None): self.tree_adapter.num_nodes, len(self.tree_adapter.leaves(self.tree_adapter.root)))) self.setup_scene() - self.info.set_output_summary(self.info.NoOutput) self.Outputs.selected_data.send(None) self.Outputs.annotated_data.send(create_annotated_table(self.dataset, [])) @@ -323,9 +319,6 @@ def update_selection(self): if isinstance(item, TreeNode)] data = self.tree_adapter.get_instances_in_nodes(nodes) - summary = len(data) if data else self.info.NoOutput - details = format_summary_details(data) if data else "" - self.info.set_output_summary(summary, details) self.Outputs.selected_data.send(data) self.Outputs.annotated_data.send(create_annotated_table( self.dataset, self.tree_adapter.get_indices(nodes))) diff --git a/Orange/widgets/visualize/owvenndiagram.py b/Orange/widgets/visualize/owvenndiagram.py index a3922abe90c..4533cfa189a 100644 --- a/Orange/widgets/visualize/owvenndiagram.py +++ b/Orange/widgets/visualize/owvenndiagram.py @@ -34,7 +34,6 @@ ANNOTATED_DATA_SIGNAL_NAME) from Orange.widgets.utils.sql import check_sql_input from Orange.widgets.utils.widgetpreview import WidgetPreview -from Orange.widgets.utils.state_summary import format_summary_details, format_multiple_summaries from Orange.widgets.widget import Input, Output, Msg @@ -132,9 +131,6 @@ def __init__(self): self.vennwidget.itemTextEdited.connect(self._on_itemTextEdited) self.scene.selectionChanged.connect(self._on_selectionChanged) - self.info.set_input_summary(self.info.NoInput) - self.info.set_output_summary(self.info.NoOutput) - self.scene.addItem(self.vennwidget) box = gui.radioButtonsInBox( @@ -239,7 +235,6 @@ def settings_compatible(self): def handleNewSignals(self): self._inputUpdate = False - self.set_input_summary() self.vennwidget.clear() if not self.settings_compatible(): self.invalidateOutput() @@ -254,19 +249,6 @@ def handleNewSignals(self): super().handleNewSignals() - def set_input_summary(self): - names = [self.data[k].name for k in self.data.keys()] - tables = [self.data[k].table for k in self.data.keys()] - n_data = [self.info.format_number(len(self.data[k].table)) for k in - self.data.keys()] - - summary, details, kwargs = self.info.NoInput, "", {} - if self.data: - summary = ", ".join(n_data) - details = format_multiple_summaries(zip(names, tables)) - kwargs = {"format": Qt.RichText} - self.info.set_input_summary(summary, details, **kwargs) - def _intersection_string_attrs(self): sets = [set(string_attributes(data_.table.domain)) for data_ in self.data.values()] @@ -713,7 +695,6 @@ def commit(self): if not self.vennwidget.vennareas() or not self.data: self.Outputs.selected_data.send(None) self.Outputs.annotated_data.send(None) - self.info.set_output_summary(self.info.NoOutput) return self.selected_items = reduce( @@ -737,9 +718,6 @@ def commit(self): if self.selected_items: selected = self.create_from_columns(self.selected_items, selected_keys, True) - summary = len(selected) if selected else self.info.NoOutput - details = format_summary_details(selected) if selected else "" - self.info.set_output_summary(summary, details) self.Outputs.selected_data.send(selected) self.Outputs.annotated_data.send(annotated) diff --git a/Orange/widgets/visualize/owviolinplot.py b/Orange/widgets/visualize/owviolinplot.py index d146b328679..42270578e19 100644 --- a/Orange/widgets/visualize/owviolinplot.py +++ b/Orange/widgets/visualize/owviolinplot.py @@ -26,7 +26,6 @@ create_annotated_table from Orange.widgets.utils.itemmodels import VariableListModel from Orange.widgets.utils.sql import check_sql_input -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.owboxplot import SortProxyModel from Orange.widgets.visualize.utils.customizableplot import \ CommonParameterSetter, Updater @@ -861,9 +860,6 @@ def _add_controls(self): callback=self.__scale_changed ) - self._set_input_summary(None) - self._set_output_summary(None) - def __value_var_changed(self, selection: QItemSelection): if not selection: return @@ -918,7 +914,6 @@ def set_data(self, data: Optional[Table]): self.closeContext() self.clear() self.orig_data = self.data = data - self._set_input_summary(data) self.check_data() self.init_list_view() self.openContext(self.data) @@ -1072,7 +1067,6 @@ def commit(self): if self.data is not None and bool(self.selection): selected = self.data[self.selection] annotated = create_annotated_table(self.orig_data, self.selection) - self._set_output_summary(selected) self.Outputs.selected_data.send(selected) self.Outputs.annotated_data.send(annotated) @@ -1083,19 +1077,6 @@ def clear(self): self.selection_ranges = [] self.graph.clear_plot() - def _set_input_summary(self, data: Optional[Table]): - self._set_summary(data, self.info.NoInput, self.info.set_input_summary) - - def _set_output_summary(self, data: Optional[Table]): - self._set_summary(data, self.info.NoOutput, - self.info.set_output_summary) - - @staticmethod - def _set_summary(data, empty, setter): - summary = len(data) if data else empty - details = format_summary_details(data) if data else "" - setter(summary, details) - def send_report(self): if self.data is None: return diff --git a/Orange/widgets/visualize/tests/test_owbarplot.py b/Orange/widgets/visualize/tests/test_owbarplot.py index 0eda5afe138..69b437016a4 100644 --- a/Orange/widgets/visualize/tests/test_owbarplot.py +++ b/Orange/widgets/visualize/tests/test_owbarplot.py @@ -9,12 +9,9 @@ from AnyQt.QtCore import Qt from AnyQt.QtGui import QFont -from orangewidget.widget import StateInfo - from Orange.data import Table from Orange.widgets.tests.base import WidgetTest, simulate, \ WidgetOutputsTestMixin, datasets -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.owbarplot import OWBarPlot @@ -37,29 +34,6 @@ def _select_data(self): self.widget.graph.select_by_indices(list(range(0, len(self.data), 5))) return self.widget.selection - def test_summary(self): - 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) - details = format_summary_details(self.data) - self.assertEqual(info._StateInfo__input_summary.brief, "150") - 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._select_data() - output = self.get_output(self.widget.Outputs.selected_data) - details = format_summary_details(output) - self.assertEqual(info._StateInfo__output_summary.brief, "30") - self.assertEqual(info._StateInfo__output_summary.details, details) - - self.send_signal(self.widget.Inputs.data, None) - 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) - def test_input_no_cont_features(self): self.send_signal(self.widget.Inputs.data, self.titanic) self.assertTrue(self.widget.Error.no_cont_features.is_shown()) diff --git a/Orange/widgets/visualize/tests/test_owboxplot.py b/Orange/widgets/visualize/tests/test_owboxplot.py index a69e2fb5dad..4896051acef 100644 --- a/Orange/widgets/visualize/tests/test_owboxplot.py +++ b/Orange/widgets/visualize/tests/test_owboxplot.py @@ -6,15 +6,12 @@ import numpy as np from AnyQt.QtCore import QItemSelectionModel -from orangewidget.widget import StateInfo - from Orange.data import Table, ContinuousVariable, StringVariable, Domain, \ DiscreteVariable from Orange.widgets.visualize.owboxplot import ( OWBoxPlot, FilterGraphicsRectItem, _quantiles ) from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin -from Orange.widgets.utils.state_summary import format_summary_details from Orange.tests import test_filename @@ -357,30 +354,6 @@ def test_valid_data_range(self): if isinstance(box, FilterGraphicsRectItem): box.setSelected(True) - def test_summary(self): - """Check if status bar is updated when data is received""" - data, info = self.titanic, self.widget.info - no_input, no_output = "No data on input", "No data on output" - - self.send_signal(self.widget.Inputs.data, data) - summary, details = f"{len(data)}", format_summary_details(data) - 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._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) - 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) - class TestUtils(unittest.TestCase): def test(self): diff --git a/Orange/widgets/visualize/tests/test_owdistributions.py b/Orange/widgets/visualize/tests/test_owdistributions.py index 3b2b7c3a640..22eddc30cc2 100644 --- a/Orange/widgets/visualize/tests/test_owdistributions.py +++ b/Orange/widgets/visualize/tests/test_owdistributions.py @@ -7,13 +7,10 @@ import numpy as np from AnyQt.QtCore import QItemSelection, Qt -from orangewidget.widget import StateInfo - from Orange.data import Table, Domain, DiscreteVariable from Orange.widgets.tests.base import WidgetTest from Orange.widgets.utils.annotated_data import ANNOTATED_DATA_FEATURE_NAME from Orange.widgets.utils.itemmodels import DomainModel -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.owdistributions import OWDistributions @@ -527,32 +524,6 @@ def test_report(self): self.send_signal(widget.Inputs.data, self.iris) widget.send_report() - def test_summary(self): - """Check if status bar is updated when data is received""" - data, info = self.iris, self.widget.info - no_input, no_output = "No data on input", "No data on output" - - self.send_signal(self.widget.Inputs.data, data) - summary, details = f"{len(data)}", format_summary_details(data) - 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._set_slider(0) - self.widget.selection = {1, 2, 3, 5, 6, 9} - self.widget._on_end_selecting() - 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) - 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) - def test_sort_by_freq_no_split(self): data = Table("heart_disease") domain = data.domain diff --git a/Orange/widgets/visualize/tests/test_owheatmap.py b/Orange/widgets/visualize/tests/test_owheatmap.py index e4afec10e2f..c61075f77dd 100644 --- a/Orange/widgets/visualize/tests/test_owheatmap.py +++ b/Orange/widgets/visualize/tests/test_owheatmap.py @@ -9,12 +9,8 @@ from AnyQt.QtCore import Qt, QModelIndex -from orangewidget.widget import StateInfo - from Orange.data import Table, Domain, ContinuousVariable, DiscreteVariable -from Orange.preprocess import Continuize from Orange.widgets.utils import colorpalettes -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.owheatmap import OWHeatMap, Clustering from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin, datasets @@ -379,30 +375,6 @@ def test_col_color_annotations_with_na(self): widget.set_column_annotation_color_var(None) self.assertFalse(widget.scene.widget.top_side_colors[0].isVisible()) - 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" - - data = self.housing - self.send_signal(self.widget.Inputs.data, data) - summary, details = f"{len(data)}", format_summary_details(data) - 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._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) - 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) - if __name__ == "__main__": unittest.main() diff --git a/Orange/widgets/visualize/tests/test_owlineplot.py b/Orange/widgets/visualize/tests/test_owlineplot.py index 8260a1f0461..0df9f81f750 100644 --- a/Orange/widgets/visualize/tests/test_owlineplot.py +++ b/Orange/widgets/visualize/tests/test_owlineplot.py @@ -16,8 +16,6 @@ from orangewidget.tests.base import DEFAULT_TIMEOUT -from orangewidget.widget import StateInfo - from Orange.data import Table from Orange.widgets.tests.base import ( WidgetTest, WidgetOutputsTestMixin, datasets @@ -25,7 +23,6 @@ from Orange.widgets.visualize.owlineplot import ( OWLinePlot, ccw, intersects, line_intersects_profiles ) -from Orange.widgets.utils.state_summary import format_summary_details class TestOWLinePLot(WidgetTest, WidgetOutputsTestMixin): @@ -49,13 +46,10 @@ def _select_data(self): return self.widget.selection def test_input_data(self): - no_data = "No data on input" - self.assertEqual(self.widget.info._StateInfo__input_summary.details, no_data) self.send_signal(self.widget.Inputs.data, self.data) self.assertEqual(self.widget.group_view.model().rowCount(), 2) self.send_signal(self.widget.Inputs.data, None) self.assertEqual(self.widget.group_view.model().rowCount(), 1) - self.assertEqual(self.widget.info._StateInfo__input_summary.details, no_data) def test_input_continuous_class(self): self.send_signal(self.widget.Inputs.data, self.housing) @@ -296,32 +290,6 @@ def test_unconditional_commit_on_new_signal(self): self.send_signal(self.widget.Inputs.data, self.titanic) commit.assert_called() - 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" - - data = self.housing - self.send_signal(self.widget.Inputs.data, data) - summary, details = f"{len(data)}", format_summary_details(data) - 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) - - sel_indices = list(range(5)) - self.widget.selection_changed(sel_indices) - 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) - 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) - def test_visual_settings(self, timeout=DEFAULT_TIMEOUT): graph = self.widget.graph font = QFont() diff --git a/Orange/widgets/visualize/tests/test_owmosaic.py b/Orange/widgets/visualize/tests/test_owmosaic.py index a4abb9ea42e..577fdd5192b 100644 --- a/Orange/widgets/visualize/tests/test_owmosaic.py +++ b/Orange/widgets/visualize/tests/test_owmosaic.py @@ -7,14 +7,11 @@ from AnyQt.QtCore import QEvent, QPoint, Qt from AnyQt.QtGui import QMouseEvent -from orangewidget.widget import StateInfo - from Orange.data import Table, DiscreteVariable, Domain, ContinuousVariable, \ StringVariable from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin from Orange.widgets.visualize.owmosaic import OWMosaicDisplay from Orange.widgets.tests.utils import simulate -from Orange.widgets.utils.state_summary import format_summary_details class TestOWMosaicDisplay(WidgetTest, WidgetOutputsTestMixin): @@ -186,31 +183,6 @@ def test_selection_setting(self): self.assertEqual(w.selection, {1}) self.assertIsNotNone(self.get_output(w.Outputs.selected_data, widget=w)) - def test_summary(self): - """Check if status bar is updated when data is received""" - info = self.widget.info - data = Table("zoo") - no_input, no_output = "No data on input", "No data on output" - - self.send_signal(self.widget.Inputs.data, data) - summary, details = f"{len(data)}", format_summary_details(data) - 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._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) - 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) - # Derive from WidgetTest to simplify creation of the Mosaic widget, although # we are actually testing the MosaicVizRank dialog and not the widget diff --git a/Orange/widgets/visualize/tests/test_ownomogram.py b/Orange/widgets/visualize/tests/test_ownomogram.py index 9409cb8a953..538dfb0e5bc 100644 --- a/Orange/widgets/visualize/tests/test_ownomogram.py +++ b/Orange/widgets/visualize/tests/test_ownomogram.py @@ -7,8 +7,6 @@ from AnyQt.QtCore import QPoint, QPropertyAnimation -from orangewidget.widget import StateInfo - from Orange.data import Table, Domain, ContinuousVariable, DiscreteVariable from Orange.classification import ( NaiveBayesLearner, LogisticRegressionLearner, MajorityLearner @@ -16,7 +14,6 @@ from Orange.preprocess import Scale, Continuize from Orange.tests import test_filename from Orange.widgets.tests.base import WidgetTest -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.ownomogram import ( OWNomogram, DiscreteFeatureItem, ContinuousFeatureItem, ProbabilitiesDotItem, MovableToolTip @@ -284,20 +281,6 @@ def mocked_width(): # most left text at 3. iteration is the same -> stop self.assertEqual(mocked_item.call_args_list[15][0][0], "foo3") - def test_summary(self): - """Check if status bar is updated when data is received""" - data = self.data - info = self.widget.info - no_input = "No data on input" - - self.send_signal(self.widget.Inputs.data, data) - summary, details = f"{len(data)}", format_summary_details(data) - self.assertEqual(info._StateInfo__input_summary.brief, summary) - self.assertEqual(info._StateInfo__input_summary.details, details) - self.send_signal(self.widget.Inputs.data, None) - self.assertIsInstance(info._StateInfo__input_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__input_summary.details, no_input) - def test_dots_stop_flashing(self): self.widget.set_data(self.data) self.widget.set_classifier(self.nb_cls) diff --git a/Orange/widgets/visualize/tests/test_owpythagorastree.py b/Orange/widgets/visualize/tests/test_owpythagorastree.py index 79ec8b7cf9a..aec5cec84cf 100644 --- a/Orange/widgets/visualize/tests/test_owpythagorastree.py +++ b/Orange/widgets/visualize/tests/test_owpythagorastree.py @@ -5,15 +5,12 @@ from os import path -from orangewidget.widget import StateInfo - from Orange.classification.random_forest import RandomForestLearner from Orange.data import Table from Orange.modelling import TreeLearner from Orange.regression.random_forest import RandomForestRegressionLearner from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin from Orange.widgets.tests.utils import simulate -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.owpythagorastree import OWPythagorasTree from Orange.widgets.visualize.owpythagoreanforest import OWPythagoreanForest from Orange.widgets.visualize.pythagorastreeviewer import ( @@ -415,23 +412,6 @@ def test_context(self): self.send_signal(self.widget.Inputs.tree, iris_tree) self.assertEqual(2, self.widget.target_class_index) - def test_summary(self): - """Check if the status bar updates""" - info = self.widget.info - no_output = "No data on output" - - self.send_signal(self.widget.Inputs.tree, self.titanic) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - 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.tree, None) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) if __name__ == "__main__": unittest.main() diff --git a/Orange/widgets/visualize/tests/test_owruleviewer.py b/Orange/widgets/visualize/tests/test_owruleviewer.py index 0a6a4275add..4778f773513 100644 --- a/Orange/widgets/visualize/tests/test_owruleviewer.py +++ b/Orange/widgets/visualize/tests/test_owruleviewer.py @@ -2,13 +2,10 @@ from AnyQt.QtCore import Qt from AnyQt.QtWidgets import QApplication -from orangewidget.widget import StateInfo - from Orange.data import Table from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin from Orange.classification import CN2Learner from Orange.widgets.visualize.owruleviewer import OWRuleViewer -from Orange.widgets.utils.state_summary import format_summary_details class TestOWRuleViewer(WidgetTest, WidgetOutputsTestMixin): @@ -159,41 +156,3 @@ def _select_data(self): selection_model.select(self.widget.proxy_model.index(2, 0), selection_model.Select | selection_model.Rows) return list(range(586, 597)) - - 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" - - data = self.titanic - self.send_signal(self.widget.Inputs.data, data) - summary, details = f"{len(data)}", format_summary_details(data) - 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.classifier, self.classifier) - summary, details = f"{len(data)}", format_summary_details(data) - 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._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) - self.assertIsInstance(info._StateInfo__input_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__input_summary.details, no_input) - 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.classifier, None) - 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) diff --git a/Orange/widgets/visualize/tests/test_owsieve.py b/Orange/widgets/visualize/tests/test_owsieve.py index a8d9dee604e..3aab7721e04 100644 --- a/Orange/widgets/visualize/tests/test_owsieve.py +++ b/Orange/widgets/visualize/tests/test_owsieve.py @@ -9,8 +9,6 @@ from AnyQt.QtCore import QEvent, QPoint, Qt from AnyQt.QtGui import QMouseEvent -from orangewidget.widget import StateInfo - from Orange.data import ContinuousVariable, DiscreteVariable, Domain, Table from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin from Orange.widgets.tests.utils import simulate @@ -18,7 +16,6 @@ from Orange.widgets.visualize.owsieve import ChiSqStats from Orange.widgets.visualize.owsieve import Discretize from Orange.widgets.widget import AttributeList -from Orange.widgets.utils.state_summary import format_summary_details class TestOWSieveDiagram(WidgetTest, WidgetOutputsTestMixin): @@ -180,29 +177,6 @@ def test_input_features(self): self.assertTrue(self.widget.attr_box.isEnabled()) self.assertTrue(self.widget.vizrank.isEnabled()) - 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" - - data = self.iris - self.send_signal(self.widget.Inputs.data, data) - summary, details = f"{len(data)}", format_summary_details(data) - 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._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) - 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) if __name__ == "__main__": unittest.main() diff --git a/Orange/widgets/visualize/tests/test_owsilhouetteplot.py b/Orange/widgets/visualize/tests/test_owsilhouetteplot.py index 269aea75957..4791a155266 100644 --- a/Orange/widgets/visualize/tests/test_owsilhouetteplot.py +++ b/Orange/widgets/visualize/tests/test_owsilhouetteplot.py @@ -6,8 +6,6 @@ import numpy as np -from orangewidget.widget import StateInfo - import Orange.distance from Orange.data import ( Table, Domain, ContinuousVariable, DiscreteVariable, StringVariable) @@ -16,7 +14,6 @@ from Orange.widgets.visualize.owsilhouetteplot import OWSilhouettePlot from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin from Orange.widgets.tests.utils import possible_duplicate_table -from Orange.widgets.utils.state_summary import format_summary_details class TestOWSilhouettePlot(WidgetTest, WidgetOutputsTestMixin): @@ -218,43 +215,6 @@ def test_no_group_var(self): self.send_signal(widget.Inputs.data, None, widget=widget) self.assertFalse(widget.Error.input_validation_error.is_shown()) - 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" - - data = self.data - self.send_signal(self.widget.Inputs.data, data) - summary, details = f"{len(data)}", format_summary_details(data) - 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._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) - - matrix = Orange.distance.Euclidean(data) - self.send_signal(self.widget.Inputs.data, matrix) - summary, details = f"{len(data)}", format_summary_details(data) - 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._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) - 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) - def test_unique_output_domain(self): widget = self.widget data = possible_duplicate_table('Silhouette (iris)') diff --git a/Orange/widgets/visualize/tests/test_owtreegraph.py b/Orange/widgets/visualize/tests/test_owtreegraph.py index 4c86d0f68fc..75fd1943730 100644 --- a/Orange/widgets/visualize/tests/test_owtreegraph.py +++ b/Orange/widgets/visualize/tests/test_owtreegraph.py @@ -2,13 +2,10 @@ # pylint: disable=missing-docstring, protected-access from os import path -from orangewidget.widget import StateInfo - from Orange.classification import TreeLearner from Orange.data import Table from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin from Orange.widgets.visualize.owtreeviewer import OWTreeGraph -from Orange.widgets.utils.state_summary import format_summary_details class TestOWTreeGraph(WidgetTest, WidgetOutputsTestMixin): @@ -89,21 +86,3 @@ def _check_all_same(data): "sent to widget after receiving a dataset with variables with " "same entropy." % n_tries ) - - def test_summary(self): - """Check if status bar updates""" - info = self.widget.info - no_output = "No data on output" - - self.send_signal(self.widget.Inputs.tree, self.signal_data) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - 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.tree, None) - self.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - self.assertEqual(info._StateInfo__output_summary.details, no_output) diff --git a/Orange/widgets/visualize/tests/test_owvenndiagram.py b/Orange/widgets/visualize/tests/test_owvenndiagram.py index 494f1e85798..9d025291cea 100644 --- a/Orange/widgets/visualize/tests/test_owvenndiagram.py +++ b/Orange/widgets/visualize/tests/test_owvenndiagram.py @@ -9,14 +9,10 @@ from AnyQt.QtCore import Qt -from orangewidget.widget import StateInfo - from Orange.data import (Table, Domain, StringVariable, ContinuousVariable) from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin from Orange.widgets.utils.annotated_data import (ANNOTATED_DATA_FEATURE_NAME) -from Orange.widgets.utils.state_summary import (format_multiple_summaries, - format_summary_details) from Orange.widgets.visualize.owvenndiagram import ( OWVennDiagram, get_perm, arrays_equal, pad_columns, IDENTITY_STR, EQUALITY_STR) @@ -302,71 +298,6 @@ def test_no_attributes(self): out = self.get_output(self.widget.Outputs.annotated_data) self.assertEqual(len(out), len(table)) - 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.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - 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.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - 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.assertIsInstance(info._StateInfo__output_summary, StateInfo.Empty) - 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.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) - def test_migration_to_3(self): settings = {"selected_feature": None} OWVennDiagram.migrate_settings(settings, 1) @@ -378,7 +309,6 @@ def test_migration_to_3(self): class TestVennUtilities(unittest.TestCase): - def test_array_equals_cols(self): a = np.array([1, 2], dtype=np.float64) b = np.array([1, np.nan], dtype=np.float64) diff --git a/Orange/widgets/visualize/tests/test_owviolinplot.py b/Orange/widgets/visualize/tests/test_owviolinplot.py index 28c208cc47f..07905ff84d0 100644 --- a/Orange/widgets/visualize/tests/test_owviolinplot.py +++ b/Orange/widgets/visualize/tests/test_owviolinplot.py @@ -9,11 +9,9 @@ from pyqtgraph import ViewBox -from orangewidget.widget import StateInfo from Orange.data import Table from Orange.widgets.tests.base import datasets, simulate, \ WidgetOutputsTestMixin, WidgetTest -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.owviolinplot import OWViolinPlot, \ ViolinPlotViewBox, scale_density, WIDTH @@ -45,29 +43,6 @@ def _select_data(self): assert len(self.widget.selection) == 30 return self.widget.selection - def test_summary(self): - 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) - details = format_summary_details(self.data) - self.assertEqual(info._StateInfo__input_summary.brief, "150") - 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._select_data() - output = self.get_output(self.widget.Outputs.selected_data) - details = format_summary_details(output) - self.assertEqual(info._StateInfo__output_summary.brief, "30") - self.assertEqual(info._StateInfo__output_summary.details, details) - - self.send_signal(self.widget.Inputs.data, None) - 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) - def test_kernels(self): self.send_signal(self.widget.Inputs.data, self.data) kernel_combo = self.widget.controls.kernel_index diff --git a/Orange/widgets/visualize/utils/widget.py b/Orange/widgets/visualize/utils/widget.py index 11eeb9fef43..84f03ff768a 100644 --- a/Orange/widgets/visualize/utils/widget.py +++ b/Orange/widgets/visualize/utils/widget.py @@ -24,7 +24,6 @@ ) from Orange.widgets.utils.plot import OWPlotGUI from Orange.widgets.utils.sql import check_sql_input -from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.visualize.owscatterplotgraph import ( OWScatterPlotBase, MAX_COLORS ) @@ -403,8 +402,6 @@ def __init__(self): self.__pending_selection = self.selection self._invalidated = True self._domain_invalidated = True - self.input_changed.connect(self.set_input_summary) - self.output_changed.connect(self.set_output_summary) self.setup_gui() VisualSettingsDialog(self, self.graph.parameter_setter.initial_settings) @@ -506,16 +503,6 @@ def _update_opacity_warning(self): self.Warning.transparent_subset( shown=self.subset_indices and self.graph.alpha_value < 128) - def set_input_summary(self, data): - summary = len(data) if data else self.info.NoInput - detail = format_summary_details(data) if data else "" - self.info.set_input_summary(summary, detail) - - def set_output_summary(self, data): - summary = len(data) if data else self.info.NoOutput - detail = format_summary_details(data) if data else "" - self.info.set_output_summary(summary, detail) - def get_subset_mask(self): if not self.subset_indices: return None diff --git a/Orange/widgets/widget.py b/Orange/widgets/widget.py index b0d27010956..9afcc31a822 100644 --- a/Orange/widgets/widget.py +++ b/Orange/widgets/widget.py @@ -12,6 +12,8 @@ from Orange.widgets.report import DataReport as Report from Orange.widgets.utils.signals import AttributeList +# import this to register auto_summary functions +import Orange.widgets.utils.state_summary # pylint: disable=unused-import __all__ = [ "OWWidget", "Input", "Output", "AttributeList", "Message", "Msg",