From 672214558243fefb1a3a811da649c1115f17d865 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Primo=C5=BE=20Godec?=
Date: Fri, 3 Jul 2020 11:06:55 +0200
Subject: [PATCH] Re-add TupleList to DiscreteVariable
---
Orange/data/tests/test_variable.py | 24 +++++++++++++++++++--
Orange/data/variable.py | 3 +++
Orange/tests/datasets/iris-orange-3-25.pkl | Bin 0 -> 9009 bytes
3 files changed, 25 insertions(+), 2 deletions(-)
create mode 100644 Orange/tests/datasets/iris-orange-3-25.pkl
diff --git a/Orange/data/tests/test_variable.py b/Orange/data/tests/test_variable.py
index 98bf8f2a9e1..a0109c47e25 100644
--- a/Orange/data/tests/test_variable.py
+++ b/Orange/data/tests/test_variable.py
@@ -1,12 +1,13 @@
# Test methods with long descriptive names can omit docstrings
# pylint: disable=missing-docstring
# pylint: disable=protected-access
-
+import os
import sys
import math
import unittest
import pickle
import pkgutil
+import warnings
from datetime import datetime, timezone
from io import StringIO
@@ -16,7 +17,7 @@
import Orange
from Orange.data import Variable, ContinuousVariable, DiscreteVariable, \
- StringVariable, TimeVariable, Unknown, Value
+ StringVariable, TimeVariable, Unknown, Value, Table
from Orange.data.io import CSVReader
from Orange.preprocess.transformation import Identity
from Orange.tests.base import create_pickling_tests
@@ -500,6 +501,25 @@ def test_remove_ordered(self):
"""
self.assertLess(Orange.__version__, "3.29.0")
+ @staticmethod
+ def test_pickle_backward_compatibility():
+ """
+ Test that pickle made with an older version of Orange are correctly
+ loaded after changes in DiscreteVariable
+ """
+ with warnings.catch_warnings():
+ # travis/gh-action tests change OrangeDeprecationWarning to error
+ # temporary disable it
+ warnings.simplefilter('default', OrangeDeprecationWarning)
+ this_dir = os.path.dirname(os.path.realpath(__file__))
+ datasets_dir = os.path.join(
+ this_dir, "..", "..", "tests", "datasets"
+ )
+ # pickle with values as list
+ Table(os.path.join(datasets_dir, "sailing-orange-3-20.pkl"))
+ # pickle with values as tuple list
+ Table(os.path.join(datasets_dir, "iris-orange-3-25.pkl"))
+
@variabletest(ContinuousVariable)
class TestContinuousVariable(VariableTest):
diff --git a/Orange/data/variable.py b/Orange/data/variable.py
index fc7a14d2767..21d03ed653a 100644
--- a/Orange/data/variable.py
+++ b/Orange/data/variable.py
@@ -602,6 +602,9 @@ def copy(self, compute_value=Variable._CopyComputeValue,
return var
+TupleList = tuple # backward compatibility (for pickled table)
+
+
class DiscreteVariable(Variable):
"""
Descriptor for symbolic, discrete variables. Values of discrete variables
diff --git a/Orange/tests/datasets/iris-orange-3-25.pkl b/Orange/tests/datasets/iris-orange-3-25.pkl
new file mode 100644
index 0000000000000000000000000000000000000000..3b5d5daa3d41d4990e1b2339bd355a70df5a63af
GIT binary patch
literal 9009
zcmeI2S#TUz6^3Uo=tm6}u$o_U4`HbV$u$B?i&A(%BJK-jTkV;pQ8ZqND8y`CPMs_+sXJSzLE
z?tAaq?m4GhbM;92W4EtQR6jxYAy>B-jBHW&^{lVYm5eZGJW}OyIQD4xa5x$?6`itf
z*UfZGW=-J={Xg*aGh1NL6f(ryPgp)
znVE;fpfg|AkLO*dVi)s8YkoeQx$C{pzw-DKpSmaL&D)jooZ;r3`FznRSY^HBg}G$V
zsTUutcz(^jOn%;R%er5+E=X_4j?agcIkUs;5|)#%$E>1q)$BJnngg@upgCl&oi(+p
zG3Gj{++3eanzxC68)CxR7Y)BIa6;PV|4CYgq{U5}c%8!hFlZ~3bkB=+-wVx-QL*)1
z2Q07P8op7p@oCGo#EkZ!^+;v0WW3$-{BSu8GWUwxn?1vKJY8%`_3EhMdRDhQNuxzWKi;OuLJ{m6hlsLlwy>%uB?UXxt%Ptznqx>?batU)<1a)67RSB9Mw`jOV
zFT@*L5G3ymXJ=>M_L}%q|H~!(aBgYeQ$2~qeD%{eMK#$zMc0=mAOCptISuw=
zyrpjZnWv*q&lJsXouccDay`lG!TlDbZvQFR(GUMu)cHqxdm%rAd9OiJNFWblY)eiaRr2o90*e2yCs-G7SU$s9p@0wgs^VolmzuG?@
zCx7DmdlvEG^=u!<|Fj(E^`u|bAH`SI7sWy8r**xuzT)F_t>R1evVLVB>Ft`T9Y2No
z8G!t**IgeRAF`vhEz2Cpzl8p!>Z3OQ&dU5GIjTRfe)f;pQP*GSzRDlER{2G8
zZr;Dxep=U7xBoQ0D&{}Oi}ei4ahl&VMdW>0iMVoo@$=@g%sZKd#D|~5=TJW!f0f@f|AMrS_Nx(oaXoN-^~0|E{2}|;KknbEJ~=)_
zt`Fru*}?Ulg8lLR;pY$cSCtpA|-$n$vo`1!{6bDp1%y&rOaR`%8I
z5BoI)|G3^&eo;MfJgyA6(?+4{;67gOm<#RpL`b4Z>
zu>U>Kdj<8eI@TYC5$CIj59?R{vVFu=n9si-srb;oj=+vqSzmOY?c?V!*JnTGU4wlq
zrGK=J`$YnJxjxuG-fxcYAms7>a)07}!TPyBv;GwHvj1HFte@kv2J$;#5Brz{wLj_X5>li%DQdH?G5^ZMHQ;QqZjw*PDo{~ong?jP&p`0zE=
zmC{f5ld^tm$JPGPeU3*OdU(Gsp}ykv%l4(DeDaIGKTyv@wvYC!K0kRsYU2}+Z~XnX
zAN$AqtKP53pSXUtp2oTVvHdsikL1@%*&oOsu2=qjrau43pL8sr`S}{xuil?%9gknD
z>#r0?-aq!ApD+CTv+56QFUObt=lTi7H(5a{e}8Dc%X}dEX3Wgfw_efrVoCA6*uv7j
zPp4`1t^fbuB5)4*af`GwZ*&~^_s?5IrA)n1toF4=I>5M5YfFgMRt!>yVqf&XFZMJr*=rMRDF!-&9416?&~2y{37i$U@O=LX25oE1=s<0f?Z%Y*aP;0ePBO001kpf;4nA>
zt^`+stHCwkT2KSu1g-!qT0x8<3J7*F4C=n=+uPwWVT*2BiUI6@bC!{8H#
zv)XhP6SdK3!dO;Ycf>Tbif2S-RnMoznZH&xbg$wXWyAJ8VY%k(#~s@#TLo>=b;O^m
zl)ZIAmMs)l-8ooUFvOw1m(_M^qua*zXyZF~zxc@V_^w@9t>{>L#