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#