From a716c1271d96b4f76d139f22e220dbb6c1d0b334 Mon Sep 17 00:00:00 2001 From: Primoz Godec Date: Fri, 28 Jan 2022 10:19:59 +0100 Subject: [PATCH 1/2] Table: from_file/from_url remove type transformation --- Orange/data/table.py | 7 ------- Orange/tests/test_naive_bayes.py | 5 ++++- Orange/tests/test_table.py | 13 ------------- 3 files changed, 4 insertions(+), 21 deletions(-) diff --git a/Orange/data/table.py b/Orange/data/table.py index 9cefb1f2b34..4645f1d8d6d 100644 --- a/Orange/data/table.py +++ b/Orange/data/table.py @@ -1077,11 +1077,6 @@ def from_file(cls, filename, sheet=None): reader.select_sheet(sheet) data = reader.read() - # Readers return plain table. Make sure to cast it to appropriate - # (subclass) type - if cls != data.__class__: - data = cls(data) - # no need to call _init_ids as fuctions from .io already # construct a table with .ids @@ -1093,8 +1088,6 @@ def from_url(cls, url): from Orange.data.io import UrlReader reader = UrlReader(url) data = reader.read() - if cls != data.__class__: - data = cls(data) return data # Helper function for __setitem__: diff --git a/Orange/tests/test_naive_bayes.py b/Orange/tests/test_naive_bayes.py index 37c5a52d372..9c20e76a73f 100644 --- a/Orange/tests/test_naive_bayes.py +++ b/Orange/tests/test_naive_bayes.py @@ -18,7 +18,10 @@ class NotATable(Table): # pylint: disable=too-many-ancestors,abstract-method - pass + @classmethod + def from_file(cls, *args, **kwargs): + table = super().from_file(*args, **kwargs) + return cls(table) class TestNaiveBayesLearner(unittest.TestCase): diff --git a/Orange/tests/test_table.py b/Orange/tests/test_table.py index f82c9921ae7..e16850ce5ff 100644 --- a/Orange/tests/test_table.py +++ b/Orange/tests/test_table.py @@ -2163,19 +2163,6 @@ def test_value_assignment(self): self.table[i, j] = new_value self.assertEqual(self.table[i, j], new_value) - def test_subclasses(self): - from pathlib import Path - - class _ExtendedTable(data.Table): - pass - - data_file = _ExtendedTable('iris') - data_url = _ExtendedTable.from_url( - Path(os.path.dirname(__file__), 'datasets/test1.tab').as_uri()) - - self.assertIsInstance(data_file, _ExtendedTable) - self.assertIsInstance(data_url, _ExtendedTable) - class TestTableStats(TableTests): def test_get_nan_frequency(self): From 52567e40f99eed4549e5fbbd0b667a056b319cb4 Mon Sep 17 00:00:00 2001 From: Primoz Godec Date: Fri, 28 Jan 2022 12:15:01 +0100 Subject: [PATCH 2/2] Table: test from_file unlocked --- Orange/data/tests/test_table.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Orange/data/tests/test_table.py b/Orange/data/tests/test_table.py index 52caca50513..0a607b8f431 100644 --- a/Orange/data/tests/test_table.py +++ b/Orange/data/tests/test_table.py @@ -385,6 +385,16 @@ def test_unpickled_owns_data(self): with unpickled.unlocked(): unpickled.X[0, 0] = 42 + @staticmethod + def test_unlock_table_derived(): + # pylint: disable=abstract-method + class ExtendedTable(Table): + pass + + t = ExtendedTable.from_file("iris") + with t.unlocked(): + pass + class TestTableFilters(unittest.TestCase): def setUp(self):