@@ -865,43 +865,59 @@ def test_from_tuples_different_lengths_gh60695():
865865
866866 GH#60695
867867 """
868- # Test case 1: Original issue example with string values
868+ # Test case 1: Basic string tuples
869869 tuples = [("l1" ,), ("l1" , "l2" )]
870- result = pd . MultiIndex .from_tuples (tuples )
871- expected = pd . MultiIndex .from_tuples ([("l1" , np .nan ), ("l1" , "l2" )])
872- tm .assert_index_equal (result , expected , exact = True )
870+ result = MultiIndex .from_tuples (tuples )
871+ expected = MultiIndex .from_tuples ([("l1" , np .nan ), ("l1" , "l2" )])
872+ tm .assert_index_equal (result , expected )
873873
874- # Test case 2: Series construction with tuple keys
874+ # Test case 2: Series with tuple keys
875875 s = pd .Series ({("l1" ,): "v1" , ("l1" , "l2" ): "v2" })
876876 expected = pd .Series (
877877 ["v1" , "v2" ],
878- index = pd . MultiIndex .from_tuples ([("l1" , np .nan ), ("l1" , "l2" )])
878+ index = MultiIndex .from_tuples ([("l1" , np .nan ), ("l1" , "l2" )])
879879 )
880- tm .assert_series_equal (s , expected , check_index_type = True )
880+ tm .assert_series_equal (s , expected )
881881
882- # Test case 3: Handle numeric values
882+ # Test case 3: Numeric tuples
883883 tuples = [(1 ,), (1 , 2 )]
884- result = pd . MultiIndex .from_tuples (tuples )
885- expected = pd . MultiIndex .from_tuples ([(1 , np .nan ), (1 , 2 )])
886- tm .assert_index_equal (result , expected , exact = True )
884+ result = MultiIndex .from_tuples (tuples )
885+ expected = MultiIndex .from_tuples ([(1 , np .nan ), (1 , 2 )])
886+ tm .assert_index_equal (result , expected )
887887
888- # Test case 4: Mixed types (strings and integers)
888+ # Test case 4: Mixed types
889889 tuples = [(1 , "a" ), (1 ,), (2 , "b" , "c" )]
890- result = pd . MultiIndex .from_tuples (tuples )
891- expected = pd . MultiIndex .from_tuples ([
890+ result = MultiIndex .from_tuples (tuples )
891+ expected = MultiIndex .from_tuples ([
892892 (1 , "a" , np .nan ),
893893 (1 , np .nan , np .nan ),
894894 (2 , "b" , "c" )
895895 ])
896- tm .assert_index_equal (result , expected , exact = True )
896+ tm .assert_index_equal (result , expected )
897897
898- # Test case 5: Empty tuples
899- tuples = []
898+ # Test case 5: Empty input with names
899+ empty_idx = MultiIndex .from_tuples ([], names = ["a" , "b" ])
900+ assert empty_idx .names == ["a" , "b" ]
901+ assert len (empty_idx ) == 0
902+
903+ # Test case 6: Empty input without names
900904 with pytest .raises (TypeError , match = "Cannot infer number of levels" ):
901- pd . MultiIndex .from_tuples (tuples )
905+ MultiIndex .from_tuples ([] )
902906
903- # Test case 6: Single level consistency
904- tuples = [("a" ,)]
905- result = pd .MultiIndex .from_tuples (tuples )
906- expected = pd .MultiIndex .from_tuples ([("a" ,)])
907- tm .assert_index_equal (result , expected , exact = True )
907+ # Test case 7: None values
908+ tuples = [(1 , None ), (1 , 2 )]
909+ result = MultiIndex .from_tuples (tuples )
910+ expected = MultiIndex .from_tuples ([(1 , np .nan ), (1 , 2 )])
911+ tm .assert_index_equal (result , expected )
912+
913+ # Test case 8: DataFrame with tuple index
914+ df = pd .DataFrame (
915+ {"col" : ["v1" , "v2" ]},
916+ index = MultiIndex .from_tuples ([("l1" ,), ("l1" , "l2" )])
917+ )
918+ expected_index = MultiIndex .from_tuples ([("l1" , np .nan ), ("l1" , "l2" )])
919+ expected_df = pd .DataFrame (
920+ {"col" : ["v1" , "v2" ]},
921+ index = expected_index
922+ )
923+ tm .assert_frame_equal (df , expected_df )
0 commit comments