Skip to content

Commit

Permalink
OWDataTable: Output Annotated Data insted of Other Data
Browse files Browse the repository at this point in the history
  • Loading branch information
VesnaT committed Oct 21, 2016
1 parent ae407e1 commit 86e2ebd
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 18 deletions.
18 changes: 8 additions & 10 deletions Orange/widgets/data/owtable.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
from Orange.widgets.settings import (Setting, ContextSetting,
DomainContextHandler)
from Orange.widgets.utils import datacaching
from Orange.widgets.utils.annotated_data import (create_annotated_table,
ANNOTATED_DATA_SIGNAL_NAME)
from Orange.widgets.utils.itemmodels import TableModel


Expand Down Expand Up @@ -367,7 +369,7 @@ class OWDataTable(widget.OWWidget):

inputs = [("Data", Table, "set_dataset", widget.Multiple)]
outputs = [("Selected Data", Table, widget.Default),
("Other Data", Table)]
(ANNOTATED_DATA_SIGNAL_NAME, Table)]

show_distributions = Setting(False)
dist_color_RGB = Setting((220, 220, 220, 255))
Expand Down Expand Up @@ -506,6 +508,7 @@ def update(f):
self.selected_cols = []
self.openContext(data)
self.set_selection()
self.commit()

def _setup_table_view(self, view, data):
"""Setup the `view` (QTableView) with `data` (Orange.data.Table)
Expand Down Expand Up @@ -785,7 +788,7 @@ def commit(self):
"""
Commit/send the current selected row/column selection.
"""
selected_data = other_data = None
selected_data = table = rowsel = None
view = self.tabs.currentWidget()
if view and view.model() is not None:
model = self._get_model(view)
Expand All @@ -795,7 +798,7 @@ def commit(self):
# for SqlTables
if isinstance(table, SqlTable):
self.send("Selected Data", selected_data)
self.send("Other Data", other_data)
self.send(ANNOTATED_DATA_SIGNAL_NAME, None)
return

rowsel, colsel = self.get_selection(view)
Expand Down Expand Up @@ -841,19 +844,14 @@ def select_vars(role):
# Avoid a copy if all/none rows are selected.
if not rowsel:
selected_data = None
other_data = select(table, None, domain)
elif len(rowsel) == len(table):
selected_data = select(table, None, domain)
other_data = None
else:
selected_data = select(table, rowsel, domain)
selmask = numpy.ones((len(table),), dtype=bool)
selmask[rowsel] = False

other_data = select(table, numpy.flatnonzero(selmask), domain)

self.send("Selected Data", selected_data)
self.send("Other Data", other_data)
self.send(ANNOTATED_DATA_SIGNAL_NAME,
create_annotated_table(table, rowsel))

def copy(self):
"""
Expand Down
31 changes: 23 additions & 8 deletions Orange/widgets/data/tests/test_owtable.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,37 @@
from Orange.data import Table
# Test methods with long descriptive names can omit docstrings
# pylint: disable=missing-docstring
from Orange.widgets.data.owtable import OWDataTable
from Orange.widgets.tests.base import WidgetTest
from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin


class TestOWDataTable(WidgetTest):
class TestOWDataTable(WidgetTest, WidgetOutputsTestMixin):
@classmethod
def setUpClass(cls):
super().setUpClass()
WidgetOutputsTestMixin.init(cls)

cls.signal_name = "Data"
cls.signal_data = cls.data

def setUp(self):
self.widget = self.create_widget(OWDataTable)
self.iris = Table("iris")

def test_input_data(self):
"""Check number of tabs with data on the input"""
self.send_signal("Data", self.iris, 1)
self.send_signal("Data", self.data, 1)
self.assertEqual(self.widget.tabs.count(), 1)
self.send_signal("Data", self.iris, 2)
self.send_signal("Data", self.data, 2)
self.assertEqual(self.widget.tabs.count(), 2)
self.send_signal("Data", None, 1)
self.assertEqual(self.widget.tabs.count(), 1)

def test_data_model(self):
self.send_signal("Data", self.iris, 1)
self.assertEqual(self.widget.tabs.widget(0).model().rowCount(), len(self.iris))
self.send_signal("Data", self.data, 1)
self.assertEqual(self.widget.tabs.widget(0).model().rowCount(),
len(self.data))

def _select_data(self):
self.widget.selected_cols = list(range(len(self.data.domain)))
self.widget.selected_rows = list(range(0, len(self.data.domain), 10))
self.widget.set_selection()
return self.widget.selected_rows

0 comments on commit 86e2ebd

Please sign in to comment.