Skip to content

Commit

Permalink
Merge pull request #4904 from aturanjanin/owdistances
Browse files Browse the repository at this point in the history
Distances: data info displayed in the status bar
  • Loading branch information
janezd committed Oct 22, 2020
2 parents 81ccf30 + 366d360 commit 1e35859
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
18 changes: 18 additions & 0 deletions Orange/widgets/unsupervised/owdistances.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
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


Expand Down Expand Up @@ -98,6 +99,9 @@ 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
Expand Down Expand Up @@ -125,6 +129,7 @@ def __init__(self):
def set_data(self, data):
self.cancel()
self.data = data
self._set_input_summary(data)
self.refresh_metrics()
self.unconditional_commit()

Expand Down Expand Up @@ -210,6 +215,7 @@ 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):
Expand All @@ -222,6 +228,18 @@ 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()
Expand Down
24 changes: 23 additions & 1 deletion Orange/widgets/unsupervised/tests/test_owdistances.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
import unittest
from unittest.mock import Mock

Expand All @@ -11,6 +11,7 @@
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):
Expand Down Expand Up @@ -228,6 +229,27 @@ 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.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)

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()

0 comments on commit 1e35859

Please sign in to comment.