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))