@@ -2411,6 +2411,59 @@ def test_is_monotonic(self):
24112411
24122412 self .assertFalse (i .is_monotonic )
24132413
2414+ def test_reconstruct_sort (self ):
2415+
2416+ # starts off lexsorted & monotonic
2417+ mi = MultiIndex .from_arrays ([
2418+ ['A' , 'A' , 'B' , 'B' , 'B' ], [1 , 2 , 1 , 2 , 3 ]
2419+ ])
2420+ assert mi .is_lexsorted ()
2421+ assert mi .is_monotonic
2422+
2423+ recons = mi ._reconstruct (sort = True )
2424+ assert recons .is_lexsorted ()
2425+ assert recons .is_monotonic
2426+ assert mi is recons
2427+
2428+ assert mi .equals (recons )
2429+ assert Index (mi .values ).equals (Index (recons .values ))
2430+
2431+ recons = mi ._reconstruct (sort = False )
2432+ assert recons .is_lexsorted ()
2433+ assert recons .is_monotonic
2434+ assert mi is recons
2435+
2436+ assert mi .equals (recons )
2437+ assert Index (mi .values ).equals (Index (recons .values ))
2438+
2439+ # cannot convert to lexsorted
2440+ mi = pd .MultiIndex .from_tuples ([('z' , 'a' ), ('x' , 'a' ), ('y' , 'b' ),
2441+ ('x' , 'b' ), ('y' , 'a' ), ('z' , 'b' )],
2442+ names = ['one' , 'two' ])
2443+ assert not mi .is_lexsorted ()
2444+ assert not mi .is_monotonic
2445+
2446+ recons = mi ._reconstruct (sort = True )
2447+ assert not recons .is_lexsorted ()
2448+ assert not recons .is_monotonic
2449+
2450+ assert mi .equals (recons )
2451+ assert Index (mi .values ).equals (Index (recons .values ))
2452+
2453+ # cannot convert to lexsorted
2454+ mi = MultiIndex (levels = [['b' , 'd' , 'a' ], [1 , 2 , 3 ]],
2455+ labels = [[0 , 1 , 0 , 2 ], [2 , 0 , 0 , 1 ]],
2456+ names = ['col1' , 'col2' ])
2457+ assert not mi .is_lexsorted ()
2458+ assert not mi .is_monotonic
2459+
2460+ recons = mi ._reconstruct (sort = True )
2461+ assert not recons .is_lexsorted ()
2462+ assert not recons .is_monotonic
2463+
2464+ assert mi .equals (recons )
2465+ assert Index (mi .values ).equals (Index (recons .values ))
2466+
24142467 def test_isin (self ):
24152468 values = [('foo' , 2 ), ('bar' , 3 ), ('quux' , 4 )]
24162469
0 commit comments