Skip to content

Commit 98fa03c

Browse files
authored
Merge pull request #4364 from rokgomiscek/tSNE_one_variable
[FIX] Error message on tSNE with one variable
2 parents dbf762d + e52b104 commit 98fa03c

File tree

2 files changed

+29
-21
lines changed

2 files changed

+29
-21
lines changed

Orange/widgets/unsupervised/owtsne.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,8 @@ class Information(OWDataProjectionWidget.Information):
278278

279279
class Error(OWDataProjectionWidget.Error):
280280
not_enough_rows = Msg("Input data needs at least 2 rows")
281+
not_enough_cols = Msg("Input data needs at least 2 attributes")
281282
constant_data = Msg("Input data is constant")
282-
no_attributes = Msg("Data has no attributes")
283283
no_valid_data = Msg("No projection due to no valid data")
284284

285285
def __init__(self):
@@ -387,8 +387,8 @@ def error(err):
387387
if len(self.data) < 2:
388388
error(self.Error.not_enough_rows)
389389

390-
elif not self.data.domain.attributes:
391-
error(self.Error.no_attributes)
390+
elif len(self.data.domain.attributes) < 2:
391+
error(self.Error.not_enough_cols)
392392

393393
elif not self.data.is_sparse():
394394
if np.all(~np.isfinite(self.data.X)):

Orange/widgets/unsupervised/tests/test_owtsne.py

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -70,49 +70,57 @@ def restore_mocked_functions(self):
7070

7171
def test_wrong_input(self):
7272
# no data
73-
self.data = None
74-
self.send_signal(self.widget.Inputs.data, self.data)
73+
data = None
74+
self.send_signal(self.widget.Inputs.data, data)
7575
self.wait_until_stop_blocking()
7676
self.assertIsNone(self.widget.data)
7777

7878
# <2 rows
79-
self.data = Table.from_list(self.domain, [[1, 2, 3, 4, 5, 'STG1']])
80-
self.send_signal(self.widget.Inputs.data, self.data)
79+
data = Table.from_list(self.domain, [[1, 2, 3, 4, 5, 'STG1']])
80+
self.send_signal(self.widget.Inputs.data, data)
8181
self.wait_until_stop_blocking()
8282
self.assertIsNone(self.widget.data)
8383
self.assertTrue(self.widget.Error.not_enough_rows.is_shown())
8484

8585
# no attributes
86-
self.data = Table.from_list(self.empty_domain, [['STG1']] * 2)
87-
self.send_signal(self.widget.Inputs.data, self.data)
86+
data = Table.from_list(self.empty_domain, [['STG1']] * 2)
87+
self.send_signal(self.widget.Inputs.data, data)
8888
self.wait_until_stop_blocking()
8989
self.assertIsNone(self.widget.data)
90-
self.assertTrue(self.widget.Error.no_attributes.is_shown())
90+
self.assertTrue(self.widget.Error.not_enough_cols.is_shown())
91+
92+
# one attributes
93+
data = Table.from_list(self.empty_domain, [[1, 'STG1'],
94+
[2, 'STG1']])
95+
self.send_signal(self.widget.Inputs.data, data)
96+
self.wait_until_stop_blocking()
97+
self.assertIsNone(self.widget.data)
98+
self.assertTrue(self.widget.Error.not_enough_cols.is_shown())
9199

92100
# constant data
93-
self.data = Table.from_list(self.domain, [[1, 2, 3, 4, 5, 'STG1']] * 2)
94-
self.send_signal(self.widget.Inputs.data, self.data)
101+
data = Table.from_list(self.domain, [[1, 2, 3, 4, 5, 'STG1']] * 2)
102+
self.send_signal(self.widget.Inputs.data, data)
95103
self.wait_until_stop_blocking()
96104
self.assertIsNone(self.widget.data)
97105
self.assertTrue(self.widget.Error.constant_data.is_shown())
98106

99107
# correct input
100-
self.data = Table.from_list(self.domain, [[1, 2, 3, 4, 5, 'STG1'],
101-
[5, 4, 3, 2, 1, 'STG1']])
102-
self.send_signal(self.widget.Inputs.data, self.data)
108+
data = Table.from_list(self.domain, [[1, 2, 3, 4, 5, 'STG1'],
109+
[5, 4, 3, 2, 1, 'STG1']])
110+
self.send_signal(self.widget.Inputs.data, data)
103111
self.wait_until_stop_blocking()
104112
self.assertIsNotNone(self.widget.data)
105113
self.assertFalse(self.widget.Error.not_enough_rows.is_shown())
106-
self.assertFalse(self.widget.Error.no_attributes.is_shown())
114+
self.assertFalse(self.widget.Error.not_enough_cols.is_shown())
107115
self.assertFalse(self.widget.Error.constant_data.is_shown())
108116

109117
def test_input(self):
110-
self.data = Table.from_list(self.domain, [[1, 1, 1, 1, 1, 'STG1'],
111-
[2, 2, 2, 2, 2, 'STG1'],
112-
[4, 4, 4, 4, 4, 'STG2'],
113-
[5, 5, 5, 5, 5, 'STG2']])
118+
data = Table.from_list(self.domain, [[1, 1, 1, 1, 1, 'STG1'],
119+
[2, 2, 2, 2, 2, 'STG1'],
120+
[4, 4, 4, 4, 4, 'STG2'],
121+
[5, 5, 5, 5, 5, 'STG2']])
114122

115-
self.send_signal(self.widget.Inputs.data, self.data)
123+
self.send_signal(self.widget.Inputs.data, data)
116124
self.wait_until_stop_blocking()
117125

118126
def test_attr_models(self):

0 commit comments

Comments
 (0)