@@ -643,3 +643,45 @@ def test_constructor_string_and_tuples(self):
643
643
c = pd .Categorical (np .array (["c" , ("a" , "b" ), ("b" , "a" ), "c" ], dtype = object ))
644
644
expected_index = pd .Index ([("a" , "b" ), ("b" , "a" ), "c" ])
645
645
assert c .categories .equals (expected_index )
646
+
647
+ def test_interval (self ):
648
+ idx = pd .interval_range (0 , 10 , periods = 10 )
649
+ cat = pd .Categorical (idx , categories = idx )
650
+ expected_codes = np .arange (10 , dtype = "int8" )
651
+ tm .assert_numpy_array_equal (cat .codes , expected_codes )
652
+ tm .assert_index_equal (cat .categories , idx )
653
+
654
+ # infer categories
655
+ cat = pd .Categorical (idx )
656
+ tm .assert_numpy_array_equal (cat .codes , expected_codes )
657
+ tm .assert_index_equal (cat .categories , idx )
658
+
659
+ # list values
660
+ cat = pd .Categorical (list (idx ))
661
+ tm .assert_numpy_array_equal (cat .codes , expected_codes )
662
+ tm .assert_index_equal (cat .categories , idx )
663
+
664
+ # list values, categories
665
+ cat = pd .Categorical (list (idx ), categories = list (idx ))
666
+ tm .assert_numpy_array_equal (cat .codes , expected_codes )
667
+ tm .assert_index_equal (cat .categories , idx )
668
+
669
+ # shuffled
670
+ values = idx .take ([1 , 2 , 0 ])
671
+ cat = pd .Categorical (values , categories = idx )
672
+ tm .assert_numpy_array_equal (cat .codes , np .array ([1 , 2 , 0 ], dtype = "int8" ))
673
+ tm .assert_index_equal (cat .categories , idx )
674
+
675
+ # extra
676
+ values = pd .interval_range (8 , 11 , periods = 3 )
677
+ cat = pd .Categorical (values , categories = idx )
678
+ expected_codes = np .array ([8 , 9 , - 1 ], dtype = "int8" )
679
+ tm .assert_numpy_array_equal (cat .codes , expected_codes )
680
+ tm .assert_index_equal (cat .categories , idx )
681
+
682
+ # overlapping
683
+ idx = pd .IntervalIndex ([pd .Interval (0 , 2 ), pd .Interval (0 , 1 )])
684
+ cat = pd .Categorical (idx , categories = idx )
685
+ expected_codes = np .array ([0 , 1 ], dtype = "int8" )
686
+ tm .assert_numpy_array_equal (cat .codes , expected_codes )
687
+ tm .assert_index_equal (cat .categories , idx )
0 commit comments