From 91ad02f1eed16fcc6d445cb1013a5832a8a9a907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Primo=C5=BE=20Godec?= Date: Thu, 28 May 2020 19:48:51 +0200 Subject: [PATCH] OWSelectRows: fix saving mate variables in context --- Orange/widgets/data/owselectrows.py | 9 ++++-- .../widgets/data/tests/test_owselectrows.py | 30 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/Orange/widgets/data/owselectrows.py b/Orange/widgets/data/owselectrows.py index 2b07394d829..2bf0364357e 100644 --- a/Orange/widgets/data/owselectrows.py +++ b/Orange/widgets/data/owselectrows.py @@ -62,8 +62,13 @@ def encode_setting(self, context, setting, value): values = [QLocale().toDouble(v)[0] for v in values] elif isinstance(attr, DiscreteVariable): values = [attr.values[i - 1] if i else "" for i in values] - encoded.append( - (attr.name, context.attributes.get(attr.name), op, values)) + encoded.append(( + attr.name, + context.attributes.get(attr.name) + or context.metas.get(attr.name), + op, + values + )) return encoded def decode_setting(self, setting, value, domain=None): diff --git a/Orange/widgets/data/tests/test_owselectrows.py b/Orange/widgets/data/tests/test_owselectrows.py index a69e3ba9295..2ec939698b0 100644 --- a/Orange/widgets/data/tests/test_owselectrows.py +++ b/Orange/widgets/data/tests/test_owselectrows.py @@ -518,6 +518,36 @@ def test_purge_discretized(self): expected = (expected == 2).astype(float) np.testing.assert_equal(out.Y, expected) + def test_meta_setting(self): + """ + Test if all conditions from all segments (attributes, class, meta) + stores correctly + """ + data = Table("iris") + data = Table.from_table( + Domain( + data.domain.attributes[:3], + data.domain.class_var, + data.domain.attributes[3:] + ), data) + self.send_signal(self.widget.Inputs.data, data) + + vars_ = [ + data.domain.metas[0], + data.domain.attributes[0], + data.domain.class_var + ] + cond = [0, 0, 0] + val = [(0, ), (0, ), (1, )] + conds = list(zip(vars_, cond, val)) + + self.widget.conditions = conds + self.assertListEqual([c[0] for c in self.widget.conditions], vars_) + + # when sending new-same data conditions are restored from the context + self.send_signal(self.widget.Inputs.data, data) + self.assertListEqual([c[0] for c in self.widget.conditions], vars_) + def widget_with_context(self, domain, conditions): ch = SelectRowsContextHandler() context = ch.new_context(domain, *ch.encode_domain(domain))