Skip to content

Commit

Permalink
Merge pull request #4 from VesnaT/fix_report
Browse files Browse the repository at this point in the history
Report: Round values for tables to three decimals
  • Loading branch information
kernc authored Sep 19, 2016
2 parents 71b62c8 + 250fcd4 commit 830790c
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 22 deletions.
17 changes: 5 additions & 12 deletions Orange/canvas/report/report.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,9 @@ def report_table(self, name, table=None, header_rows=0, header_columns=0,
name, table = self._fix_args(name, table)
join = "".join

def try_fmtnum(s):
return try_(lambda: num_format.format(float(s)), s)

def data(item):
return item and item.data(Qt.DisplayRole) or ""

Expand All @@ -216,7 +219,7 @@ def data(role=Qt.DisplayRole,
if row is None or col is None:
return model.headerData(col if row is None else row,
orientation, role)
return model.data(model.index(row, col), role)
return try_fmtnum(model.data(model.index(row, col), role))

selected = (view.selectionModel().isSelected(model.index(row, col))
if view and row is not None and col is not None else False)
Expand Down Expand Up @@ -271,22 +274,12 @@ def data(role=Qt.DisplayRole,

return ''.join(stream)

if num_format:
def fmtnum(s):
try:
return num_format.format(float(s))
except:
return s
else:
def fmtnum(s):
return s

def report_list(data,
header_rows=header_rows, header_columns=header_columns):
cells = ["<td>{}</td>", "<th>{}</th>"]
return join(" <tr>\n {}</tr>\n".format(
join(cells[rowi < header_rows or coli < header_columns]
.format(fmtnum(elm)) for coli, elm in enumerate(row))
.format(try_fmtnum(elm)) for coli, elm in enumerate(row))
) for rowi, row in enumerate(data))

self.report_name(name)
Expand Down
16 changes: 8 additions & 8 deletions Orange/widgets/data/owtable.py
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ class OWDataTable(widget.OWWidget):
def __init__(self):
super().__init__()

self.inputs = OrderedDict()
self._inputs = OrderedDict()

self.dist_color = QtGui.QColor(*self.dist_color_RGB)

Expand Down Expand Up @@ -436,9 +436,9 @@ def set_dataset(self, data, tid=None):
"""Set the input dataset."""
self.closeContext()
if data is not None:
if tid in self.inputs:
if tid in self._inputs:
# update existing input slot
slot = self.inputs[tid]
slot = self._inputs[tid]
view = slot.view
# reset the (header) view state.
view.setModel(None)
Expand Down Expand Up @@ -472,7 +472,7 @@ def sort_reset(index, order):
self._setup_table_view(view, data)
slot = TableSlot(tid, data, table_summary(data), view)
view._input_slot = slot
self.inputs[tid] = slot
self._inputs[tid] = slot

self.tabs.setCurrentIndex(self.tabs.indexOf(view))

Expand All @@ -485,8 +485,8 @@ def update(f):

slot.summary.len.add_done_callback(update)

elif tid in self.inputs:
slot = self.inputs.pop(tid)
elif tid in self._inputs:
slot = self._inputs.pop(tid)
view = slot.view
view.hide()
view.deleteLater()
Expand Down Expand Up @@ -657,7 +657,7 @@ def _update_variable_labels(self, view):

def _on_show_variable_labels_changed(self):
"""The variable labels (var.attribues) visibility was changed."""
for slot in self.inputs.values():
for slot in self._inputs.values():
self._update_variable_labels(slot.view)

def _on_distribution_color_changed(self):
Expand All @@ -683,7 +683,7 @@ def _on_distribution_color_changed(self):
tab.reset()

def _on_select_rows_changed(self):
for slot in self.inputs.values():
for slot in self._inputs.values():
selection_model = slot.view.selectionModel()
selection_model.setSelectBlocks(not self.select_rows)
if self.select_rows:
Expand Down
23 changes: 23 additions & 0 deletions Orange/widgets/data/tests/test_owtable.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from Orange.data import Table
from Orange.widgets.data.owtable import OWDataTable
from Orange.widgets.tests.base import WidgetTest


class TestOWDataTable(WidgetTest):
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.assertEqual(self.widget.tabs.count(), 1)
self.send_signal("Data", self.iris, 2)
self.assertEqual(self.widget.tabs.count(), 2)

def test_input_data_disconnect(self):
"""Check number of tabs after disconnecting data from the input"""
self.send_signal("Data", self.iris, 1)
self.assertEqual(self.widget.tabs.count(), 1)
self.send_signal("Data", None, 1)
self.assertEqual(self.widget.tabs.count(), 0)
4 changes: 2 additions & 2 deletions Orange/widgets/tests/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ def show(self, widget=None):
widget.show()
app.exec()

def send_signal(self, input_name, value, id=None, widget=None):
def send_signal(self, input_name, value, *args, widget=None):
""" Send signal to widget by calling appropriate triggers.
Parameters
Expand All @@ -167,7 +167,7 @@ def send_signal(self, input_name, value, id=None, widget=None):
widget = self.widget
for input_signal in widget.inputs:
if input_signal.name == input_name:
getattr(widget, input_signal.handler)(value)
getattr(widget, input_signal.handler)(value, *args)
break
widget.handleNewSignals()

Expand Down

0 comments on commit 830790c

Please sign in to comment.