Skip to content

Commit

Permalink
Merge pull request #4901 from aturanjanin/owmanifold
Browse files Browse the repository at this point in the history
ManifoldLearning: data info displayed in the status bar
  • Loading branch information
PrimozGodec committed Sep 24, 2020
2 parents 0e4191b + 1f64f9c commit a385a0e
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
16 changes: 16 additions & 0 deletions Orange/widgets/unsupervised/owmanifoldlearning.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
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
Expand Down Expand Up @@ -249,6 +250,9 @@ 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(self.controlArea, "Parameters")

self.tsne_editor = TSNEParametersEditor(self)
Expand Down Expand Up @@ -285,6 +289,7 @@ 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()
Expand Down Expand Up @@ -339,8 +344,19 @@ 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())
Expand Down
24 changes: 23 additions & 1 deletion Orange/widgets/unsupervised/tests/test_owmanifoldlearning.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Test methods with long descriptive names can omit docstrings
# pylint: disable=missing-docstring
# pylint: disable=missing-docstring, protected-access
from unittest import skip
from unittest.mock import patch, Mock

Expand All @@ -10,6 +10,7 @@
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):
Expand Down Expand Up @@ -158,3 +159,24 @@ 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.assertEqual(info._StateInfo__input_summary.brief, "")
self.assertEqual(info._StateInfo__input_summary.details, no_input)
self.assertEqual(info._StateInfo__output_summary.brief, "")
self.assertEqual(info._StateInfo__output_summary.details, no_output)

0 comments on commit a385a0e

Please sign in to comment.