@@ -3435,6 +3435,49 @@ def test_has_duplicates(self):
34353435 [0 , 1 , 2 , 0 , 0 , 1 , 2 ]])
34363436 self .assertTrue (index .has_duplicates )
34373437
3438+ # GH 9075
3439+ t = [(u'x' , u'out' , u'z' , 5 , u'y' , u'in' , u'z' , 169 ),
3440+ (u'x' , u'out' , u'z' , 7 , u'y' , u'in' , u'z' , 119 ),
3441+ (u'x' , u'out' , u'z' , 9 , u'y' , u'in' , u'z' , 135 ),
3442+ (u'x' , u'out' , u'z' , 13 , u'y' , u'in' , u'z' , 145 ),
3443+ (u'x' , u'out' , u'z' , 14 , u'y' , u'in' , u'z' , 158 ),
3444+ (u'x' , u'out' , u'z' , 16 , u'y' , u'in' , u'z' , 122 ),
3445+ (u'x' , u'out' , u'z' , 17 , u'y' , u'in' , u'z' , 160 ),
3446+ (u'x' , u'out' , u'z' , 18 , u'y' , u'in' , u'z' , 180 ),
3447+ (u'x' , u'out' , u'z' , 20 , u'y' , u'in' , u'z' , 143 ),
3448+ (u'x' , u'out' , u'z' , 21 , u'y' , u'in' , u'z' , 128 ),
3449+ (u'x' , u'out' , u'z' , 22 , u'y' , u'in' , u'z' , 129 ),
3450+ (u'x' , u'out' , u'z' , 25 , u'y' , u'in' , u'z' , 111 ),
3451+ (u'x' , u'out' , u'z' , 28 , u'y' , u'in' , u'z' , 114 ),
3452+ (u'x' , u'out' , u'z' , 29 , u'y' , u'in' , u'z' , 121 ),
3453+ (u'x' , u'out' , u'z' , 31 , u'y' , u'in' , u'z' , 126 ),
3454+ (u'x' , u'out' , u'z' , 32 , u'y' , u'in' , u'z' , 155 ),
3455+ (u'x' , u'out' , u'z' , 33 , u'y' , u'in' , u'z' , 123 ),
3456+ (u'x' , u'out' , u'z' , 12 , u'y' , u'in' , u'z' , 144 )]
3457+ index = pd .MultiIndex .from_tuples (t )
3458+ self .assertFalse (index .has_duplicates )
3459+
3460+ # handle int64 overflow if possible
3461+ def check (nlevels ):
3462+ labels = np .tile (np .arange (500 ), 2 )
3463+ level = np .arange (500 )
3464+
3465+ # no dups
3466+ index = MultiIndex (levels = [level ] * nlevels + [[0 , 1 ]],
3467+ labels = [labels ] * nlevels + [np .arange (2 ).repeat (500 )])
3468+ self .assertFalse (index .has_duplicates )
3469+
3470+ # with a dup
3471+ values = index .values .tolist ()
3472+ index = MultiIndex .from_tuples (values + [values [0 ]])
3473+ self .assertTrue (index .has_duplicates )
3474+
3475+ # no overflow
3476+ check (4 )
3477+
3478+ # overflow possible
3479+ check (8 )
3480+
34383481 def test_tolist (self ):
34393482 result = self .index .tolist ()
34403483 exp = list (self .index .values )
0 commit comments