Skip to content

Commit 0a65399

Browse files
authored
Merge pull request #4379 from VesnaT/continuize_sparse
[FIX] Continuize: Disable normalizing sparse data
2 parents 9a4da3d + f0523b5 commit 0a65399

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

Orange/widgets/data/owcontinuize.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,12 @@ class Outputs:
3434
buttons_area_orientation = Qt.Vertical
3535
resizing_enabled = False
3636

37+
# continuous treats
38+
Leave, NormalizeBySpan, NormalizeBySD = range(3)
39+
3740
multinomial_treatment = Setting(0)
3841
zero_based = Setting(1)
39-
continuous_treatment = Setting(0)
42+
continuous_treatment = Setting(Leave)
4043
class_treatment = Setting(0)
4144

4245
transform_class = Setting(False)
@@ -107,6 +110,7 @@ def settings_changed(self):
107110
@check_sql_input
108111
def setData(self, data):
109112
self.data = data
113+
self.enable_normalization()
110114
if data is None:
111115
self.info.set_input_summary(self.info.NoInput)
112116
self.info.set_output_summary(self.info.NoOutput)
@@ -115,6 +119,15 @@ def setData(self, data):
115119
self.info.set_input_summary(len(data))
116120
self.unconditional_commit()
117121

122+
def enable_normalization(self):
123+
enable = not (self.data and self.data.is_sparse())
124+
if not enable and self.continuous_treatment in (self.NormalizeBySpan,
125+
self.NormalizeBySD):
126+
self.continuous_treatment = self.Leave
127+
buttons = self.controls.continuous_treatment.buttons
128+
buttons[self.NormalizeBySpan].setEnabled(enable)
129+
buttons[self.NormalizeBySD].setEnabled(enable)
130+
118131
def constructContinuizer(self):
119132
conzer = DomainContinuizer(
120133
zero_based=self.zero_based,

Orange/widgets/data/tests/test_owcontinuize.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,45 @@ def test_one_column_nan_values_normalize_span(self):
110110
self.send_signal(self.widget.Inputs.data, table)
111111
self.widget.unconditional_commit()
112112

113+
def test_disable_normalize_sparse(self):
114+
def assert_enabled(enabled):
115+
buttons[BySpan].click()
116+
buttons[BySD].click()
117+
self.assertTrue(buttons[Leave].isEnabled())
118+
self.assertEqual(buttons[BySpan].isEnabled(), enabled)
119+
self.assertEqual(buttons[BySD].isEnabled(), enabled)
120+
121+
w = self.widget
122+
Leave, BySpan, BySD = w.Leave, w.NormalizeBySpan, w.NormalizeBySD
123+
buttons = w.controls.continuous_treatment.buttons
124+
iris = Table("iris")
125+
sparse_iris = iris.to_sparse()
126+
127+
# input dense
128+
self.send_signal(w.Inputs.data, iris)
129+
assert_enabled(True)
130+
self.assertEqual(w.continuous_treatment, BySD)
131+
132+
# input sparse
133+
self.send_signal(w.Inputs.data, sparse_iris)
134+
assert_enabled(False)
135+
self.assertEqual(w.continuous_treatment, Leave)
136+
137+
self.widget.continuous_treatment = BySpan
138+
self.assertRaises(ValueError, w.commit)
139+
140+
# remove data
141+
self.send_signal(w.Inputs.data, None)
142+
assert_enabled(True)
143+
144+
# input sparse
145+
self.send_signal(w.Inputs.data, sparse_iris)
146+
assert_enabled(False)
147+
148+
# input dense
149+
self.send_signal(w.Inputs.data, iris)
150+
assert_enabled(True)
151+
113152

114153
class TestOWContinuizeUtils(unittest.TestCase):
115154
def test_dummy_coding_zero_based(self):

0 commit comments

Comments
 (0)