@@ -68,45 +68,54 @@ def test_inplace_mutation_resets_values():
68
68
69
69
mi1 = MultiIndex (levels = levels , codes = codes )
70
70
mi2 = MultiIndex (levels = levels2 , codes = codes )
71
+
72
+ assert "_values" not in mi1 ._cache
73
+ assert "_values" not in mi2 ._cache
74
+
71
75
vals = mi1 .values .copy ()
72
76
vals2 = mi2 .values .copy ()
73
77
74
- assert mi1 ._tuples is not None
78
+ assert isinstance ( mi1 ._cache [ "_values" ], np . ndarray )
75
79
76
80
# Make sure level setting works
77
81
new_vals = mi1 .set_levels (levels2 ).values
78
82
tm .assert_almost_equal (vals2 , new_vals )
79
83
80
- # Non-inplace doesn't kill _tuples [implementation detail]
81
- tm .assert_almost_equal (mi1 ._tuples , vals )
84
+ # Non-inplace doesn't drop _values from _cache [implementation detail]
85
+ tm .assert_almost_equal (mi1 ._cache [ "_values" ] , vals )
82
86
83
87
# ...and values is still same too
84
88
tm .assert_almost_equal (mi1 .values , vals )
85
89
86
- # Inplace should kill _tuples
90
+ # Inplace should drop _values from _cache
87
91
with tm .assert_produces_warning (FutureWarning ):
88
92
mi1 .set_levels (levels2 , inplace = True )
93
+ assert "_values" not in mi1 ._cache
89
94
tm .assert_almost_equal (mi1 .values , vals2 )
90
95
91
96
# Make sure label setting works too
92
97
codes2 = [[0 , 0 , 0 , 0 , 0 , 0 ], [0 , 0 , 0 , 0 , 0 , 0 ]]
93
98
exp_values = np .empty ((6 ,), dtype = object )
94
99
exp_values [:] = [(1 , "a" )] * 6
95
-
96
100
# Must be 1d array of tuples
97
101
assert exp_values .shape == (6 ,)
98
- new_values = mi2 .set_codes (codes2 ).values
102
+
103
+ new_mi = mi2 .set_codes (codes2 )
104
+ assert "_values" not in new_mi ._cache
105
+ new_values = new_mi .values
106
+ assert "_values" in new_mi ._cache
99
107
100
108
# Not inplace shouldn't change
101
- tm .assert_almost_equal (mi2 ._tuples , vals2 )
109
+ tm .assert_almost_equal (mi2 ._cache [ "_values" ] , vals2 )
102
110
103
111
# Should have correct values
104
112
tm .assert_almost_equal (exp_values , new_values )
105
113
106
- # ...and again setting inplace should kill _tuples , etc
107
- with tm . assert_produces_warning ( FutureWarning ):
108
- mi2 .set_codes ( codes2 , inplace = True )
114
+ # ...and again setting inplace should drop _values from _cache , etc
115
+ mi2 . set_codes ( codes2 , inplace = True )
116
+ assert "_values" not in mi2 ._cache
109
117
tm .assert_almost_equal (mi2 .values , new_values )
118
+ assert "_values" in mi2 ._cache
110
119
111
120
112
121
def test_ndarray_compat_properties (idx , compat_props ):
0 commit comments