From 64797669fbfff2698911d541bb2bfbc774f686af Mon Sep 17 00:00:00 2001 From: jreback Date: Fri, 3 Oct 2014 14:41:20 -0400 Subject: [PATCH] BUG: reset identity on legacy index pickles (GH8431) --- pandas/core/index.py | 2 ++ pandas/tests/data/s1-0.12.0.pkl | Bin 0 -> 862 bytes pandas/tests/data/s2-0.12.0.pkl | Bin 0 -> 814 bytes pandas/tests/test_index.py | 11 ++++++++++- pandas/tseries/index.py | 1 + 5 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 pandas/tests/data/s1-0.12.0.pkl create mode 100644 pandas/tests/data/s2-0.12.0.pkl diff --git a/pandas/core/index.py b/pandas/core/index.py index b528a628234cc..da8edf13ff18f 100644 --- a/pandas/core/index.py +++ b/pandas/core/index.py @@ -843,6 +843,7 @@ def __setstate__(self, state): np.ndarray.__setstate__(data, state) self._data = data + self._reset_identity() else: raise Exception("invalid pickle state") _unpickle_compat = __setstate__ @@ -3349,6 +3350,7 @@ def __setstate__(self, state): self._set_names(names) self.sortorder = sortorder self._verify_integrity() + self._reset_identity() def __getitem__(self, key): if np.isscalar(key): diff --git a/pandas/tests/data/s1-0.12.0.pkl b/pandas/tests/data/s1-0.12.0.pkl new file mode 100644 index 0000000000000000000000000000000000000000..0ce9cfdf3aa94fdfd9f8ad6ea00e72fa7eda6552 GIT binary patch literal 862 zcmZo*O3o|IEvVE>&M!*U%Pq|*$xJLNO049HFG@|$&nqq|DorloDr8J9NX$z~EQTm6 zPA$qzE#?Zz%uNl3FbkQy8CpXbliGs{nKir_z2#aV#&V^UR2HOi6|#gfrCE40cryYO zuxfZShcepu`T2SM2LdqR%}|om8T!FSUEoT>tcUxr)s_8Ijs3LWI_;WmV#&?@vK#N0 zoL>KQf8a;{X^E~M_s?K#x%;8zsr`i_ZuK`-fA@cJS*24K`*Oe8y*l?PA3p8(`ei62 zbnS%w5$TfaS1jJ`*NZZ%)|&BS|JvJ~j)$H<-hVEx)^DEoqx~v>jx4H;Il6z+xzj(_ zHvYH2f1A@KgW>9a)gQa(NFF=8|Ec5GEr(Bh*?<3;k-CNYJNvscUe7tHch>&PvcCaG zj~}sj+&X>D?sxa?tt`$aH9h;b|8i~p|IC=r_VS!ZE_W{fxSv5`anj?~XZ!izWbc?U z_u77j@IL~N8t(6RE7W>y+IiN#Bm*9>C6GYX%gjqjt>AJ=EJ-Z^2CpZWSI7nrU3N(5 zW&i`!7Z#u#8s03J0a~jO%9K|Oj0+$vX#)o@1H;3TA1{@885j)MdM#9dbp3S2b`X6| zW7|~_ExXH0MHNVM<#7n80qMy9bK*esiV22mLG*XUW4}SP+vX@Qbs%k=E@7qtq?>-M zX#vp}I~^~BXa(tOikd(=e@#{ah>l6nh|vPlt3U2p1)_g71^xulo+8iOwSn}ErB%~F zbZewVlMax+^6Jb55UpI3D6b2oi+I1~g6Mh<-JF)+2r15n#=YH_g(Fr^oAYBm;f)fRGVgmUKP z7v(1AWLBjX@^pr>K~xv=CZ|B7g9{WVDXBRniCl$zz~l^szy!@7%9354Qd}rd8_JmH R%~+b`*WQ-o*VdM#2LML=S0Vra literal 0 HcmV?d00001 diff --git a/pandas/tests/data/s2-0.12.0.pkl b/pandas/tests/data/s2-0.12.0.pkl new file mode 100644 index 0000000000000000000000000000000000000000..2318be2d9978bd2edefc4fe1afb2244e0f4c4601 GIT binary patch literal 814 zcmZY7Z%7ki9KiA0G;?Q5kzN!cDrru$iA6FbI2KcLS0k+>lx5wvGnekR`!h;wro&Cv zs|e9i=8K{d(<1sqr0`HpGi+k`r@(CBaFL0)GE-C5b1r?;J#e2p`0>2>@~ao?X{*Un zBiEZ*N^Y`N^G1?o$r|(wOX9fc?+Ad{*{T=rTjKyZwHh~7?*j!)rvISJi}9740r_w|xsf(d z7f}_-Q#{OAwEo9LZC2bGu2>1f9oq;OEyE-K4`-7RVw!`^;o+U@84+Yi_IxZ=iXe$E z)v0Mvl#Y(u11$};l?!%U%jp*UoznkDu;59VIvsl8+|FDX)V|c!DEPsp91%=T7*EN7 zn!Cn+Dzz!U~i}3ioJMQuxLl1a4*z-x3)#lQL3nVSi_Bq=86iA;yLuNl{3;5 z$Eo1vGLno22DLFUGD1R|Srb`ptfiQ3E+Q&C%}Dizf7wx?y@9IcNtD?R*ApJNps_?` Y)dd5`#MuZDjf<>0O_NinaXNMKziLWDZU6uP literal 0 HcmV?d00001 diff --git a/pandas/tests/test_index.py b/pandas/tests/test_index.py index 3001c4f09d982..5f240e896f57c 100644 --- a/pandas/tests/test_index.py +++ b/pandas/tests/test_index.py @@ -270,6 +270,15 @@ def test_view(self): i_view = i.view() self.assertEqual(i_view.name, 'Foo') + def test_legacy_pickle_identity(self): + + # GH 8431 + pth = tm.get_data_path() + s1 = pd.read_pickle(os.path.join(pth,'s1-0.12.0.pkl')) + s2 = pd.read_pickle(os.path.join(pth,'s2-0.12.0.pkl')) + self.assertFalse(s1.index.identical(s2.index)) + self.assertFalse(s1.index.equals(s2.index)) + def test_astype(self): casted = self.intIndex.astype('i8') @@ -532,7 +541,7 @@ def test_intersection(self): result3 = idx1.intersection(idx3) self.assertTrue(tm.equalContents(result3, expected3)) self.assertEqual(result3.name, expected3.name) - + # non-monotonic non-unique idx1 = Index(['A','B','A','C']) idx2 = Index(['B','D']) diff --git a/pandas/tseries/index.py b/pandas/tseries/index.py index 2483e0ebb32a5..7aaec511b82bf 100644 --- a/pandas/tseries/index.py +++ b/pandas/tseries/index.py @@ -630,6 +630,7 @@ def __setstate__(self, state): np.ndarray.__setstate__(data, state) self._data = data + self._reset_identity() else: raise Exception("invalid pickle state")