From 8e2789dc7ca7067be0c921d053269b24caa44526 Mon Sep 17 00:00:00 2001 From: PrimozGodec Date: Fri, 16 Sep 2022 10:25:30 +0200 Subject: [PATCH] [FIX] VectorizationComputeValue - fix unpickling old pickles --- .../text/tests/data/old-bow-pickle.pkl | Bin 0 -> 191575 bytes .../text/tests/test_vectorization_base.py | 36 +++++++++++++++++- orangecontrib/text/vectorization/base.py | 14 +++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 orangecontrib/text/tests/data/old-bow-pickle.pkl diff --git a/orangecontrib/text/tests/data/old-bow-pickle.pkl b/orangecontrib/text/tests/data/old-bow-pickle.pkl new file mode 100644 index 0000000000000000000000000000000000000000..8304a19fe35533233610a24e46cc864fb527a3e7 GIT binary patch literal 191575 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

Fh_%cchV<=k{ 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

UX!_*f6b{V_ks{ZsR6x? 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 literal 0 HcmV?d00001 diff --git a/orangecontrib/text/tests/test_vectorization_base.py b/orangecontrib/text/tests/test_vectorization_base.py index 60edbe10e..f289fc66e 100644 --- a/orangecontrib/text/tests/test_vectorization_base.py +++ b/orangecontrib/text/tests/test_vectorization_base.py @@ -1,10 +1,14 @@ +import os import unittest import numpy as np import scipy.sparse as sp from orangecontrib.text.corpus import Corpus -from orangecontrib.text.vectorization.base import BaseVectorizer +from orangecontrib.text.vectorization.base import ( + BaseVectorizer, + VectorizationComputeValue, +) class BaseVectorizationTest(unittest.TestCase): @@ -32,3 +36,33 @@ def test_variable_attributes(self): for a in c2.domain.attributes: self.assertIn('foo', a.attributes) + + +class TestVectorizationComputeValue(unittest.TestCase): + def test_unpickling_old_pickle(self): + """ + Before orange3-text version 1.12.0 variable was wrongly set to current + variable (variable that has this compute value attached) instead of + original variable which caused fails after latest changes in core + Orange. Since variable from VectorizationComputeValue is never used in + practice we do not set it anymore (it is always None for + VectorizationComputeValue). + Anyway it is still set in pickles create before 1.12.0. With this test + we test that old pickle with variables that have VectorizationComputeValue + are un-pickled correctly. + """ + path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "data", "old-bow-pickle.pkl" + ) + data = Corpus.from_file(path) + self.assertEqual(len(data), 3) + self.assertIsInstance(data.domain["!"].compute_value, VectorizationComputeValue) + self.assertIsInstance( + data.domain["aboard"].compute_value, VectorizationComputeValue + ) + self.assertIsNone(data.domain["!"].compute_value.variable) + self.assertIsNone(data.domain["aboard"].compute_value.variable) + + +if __name__ == "__main__": + unittest.main() diff --git a/orangecontrib/text/vectorization/base.py b/orangecontrib/text/vectorization/base.py index 76ba44037..d98c06671 100644 --- a/orangecontrib/text/vectorization/base.py +++ b/orangecontrib/text/vectorization/base.py @@ -76,3 +76,17 @@ def __init__(self, compute_shared, name): def compute(self, _, shared_data): ind = shared_data.feature_name_to_index[self.name] return shared_data.X[:, ind] + + def __setstate__(self, state): + """ + Before orange3-text version 1.12.0 variable was wrongly set to current + variable (variable that has this compute value attached) instead of + original variable which caused fails after latest changes in core + Orange. Since variable from VectorizationComputeValue is never used in + practice we do not set it anymore (it is always None for + VectorizationComputeValue). + Anyway it is still set in pickles create before 1.12.0 and this line + removes it when unpickling old pickles. + """ + state["variable"] = None + self.__dict__.update(state)