Skip to content

Commit

Permalink
Merge pull request #2723 from jerneju/fix-correspondenceanalysis-no-c…
Browse files Browse the repository at this point in the history
…ategorical

[FIX] Correspondence Analysis: do not crash when no categorical
  • Loading branch information
janezd authored Oct 31, 2017
2 parents 0691d30 + b24a4b8 commit 9225e8d
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 8 deletions.
19 changes: 11 additions & 8 deletions Orange/widgets/unsupervised/owcorrespondence.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ class Inputs:

class Error(widget.OWWidget.Error):
empty_data = widget.Msg("Empty data set")
no_disc_vars = widget.Msg("No categorical data")

def __init__(self):
super().__init__()
Expand Down Expand Up @@ -102,23 +103,25 @@ def __init__(self):
def set_data(self, data):
self.closeContext()
self.clear()
self.Error.clear()

if data is not None and not len(data):
self.Error.empty_data()
data = None
else:
self.Error.empty_data.clear()

self.data = data
if data is not None:
self.varlist[:] = [var for var in data.domain.variables
if var.is_discrete]
self.selected_var_indices = [0, 1][:len(self.varlist)]
self.component_x = 0
self.component_y = int(len(self.varlist[self.selected_var_indices[-1]].values) > 1)
self.openContext(data)
self._restore_selection()
# self._invalidate()
if not len(self.varlist[:]):
self.Error.no_disc_vars()
self.data = None
else:
self.selected_var_indices = [0, 1][:len(self.varlist)]
self.component_x = 0
self.component_y = int(len(self.varlist[self.selected_var_indices[-1]].values) > 1)
self.openContext(data)
self._restore_selection()
self._update_CA()

def clear(self):
Expand Down
22 changes: 22 additions & 0 deletions Orange/widgets/unsupervised/tests/test_owcorrespondence.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,25 @@ def test_data_one_value_zero(self):
[(0,), (0,), (0,)]
)
self.send_signal(self.widget.Inputs.data, table)

def test_no_discrete_variables(self):
"""
Do not crash when there are no discrete (categorical) variable(s).
GH-2723
"""
table = Table(
Domain(
[ContinuousVariable("a")]
),
[(1,), (2,), (3,)]
)
self.assertFalse(self.widget.Error.no_disc_vars.is_shown())
self.send_signal(self.widget.Inputs.data, table)
self.assertTrue(self.widget.Error.no_disc_vars.is_shown())
self.send_signal(self.widget.Inputs.data, None)
self.assertFalse(self.widget.Error.no_disc_vars.is_shown())

self.send_signal(self.widget.Inputs.data, table)
self.assertTrue(self.widget.Error.no_disc_vars.is_shown())
self.send_signal(self.widget.Inputs.data, Table("iris"))
self.assertFalse(self.widget.Error.no_disc_vars.is_shown())

0 comments on commit 9225e8d

Please sign in to comment.