@@ -1077,6 +1077,52 @@ x, y = g(z) # E: Argument 1 to "g" has incompatible type "int"; expected "Tuple[
1077
1077
[builtins fixtures/tuple.pyi]
1078
1078
[out]
1079
1079
1080
+ [case testTupleJoinIrregular]
1081
+ from typing import Tuple
1082
+
1083
+ tup1 = None # type: Tuple[bool, int]
1084
+ tup2 = None # type: Tuple[bool]
1085
+
1086
+ reveal_type(tup1 if int() else tup2) # N: Revealed type is 'builtins.tuple[builtins.int]'
1087
+ reveal_type(tup2 if int() else tup1) # N: Revealed type is 'builtins.tuple[builtins.int]'
1088
+
1089
+ reveal_type(tup1 if int() else ()) # N: Revealed type is 'builtins.tuple[builtins.int]'
1090
+ reveal_type(() if int() else tup1) # N: Revealed type is 'builtins.tuple[builtins.int]'
1091
+
1092
+ reveal_type(tup2 if int() else ()) # N: Revealed type is 'builtins.tuple[builtins.bool]'
1093
+ reveal_type(() if int() else tup2) # N: Revealed type is 'builtins.tuple[builtins.bool]'
1094
+
1095
+ [builtins fixtures/tuple.pyi]
1096
+ [out]
1097
+
1098
+ [case testTupleSubclassJoinIrregular]
1099
+ from typing import Tuple, NamedTuple
1100
+
1101
+ class NTup1(NamedTuple):
1102
+ a: bool
1103
+
1104
+ class NTup2(NTup1):
1105
+ b: bool
1106
+
1107
+ class SubTuple(Tuple[bool, int, int]): ...
1108
+
1109
+ tup1 = None # type: NTup1
1110
+ tup2 = None # type: NTup2
1111
+ subtup = None # type: SubTuple
1112
+
1113
+ # FIXME NamedTuple inheritance has some unexpected behavior
1114
+ reveal_type(tup1 if int() else tup2) # N: Revealed type is 'Tuple[builtins.bool, fallback=__main__.NTup1]'
1115
+ reveal_type(tup2 if int() else tup1) # N: Revealed type is 'Tuple[builtins.bool, fallback=__main__.NTup1]'
1116
+
1117
+ reveal_type(tup1 if int() else subtup) # N: Revealed type is 'builtins.tuple[builtins.int]'
1118
+ reveal_type(subtup if int() else tup1) # N: Revealed type is 'builtins.tuple[builtins.int]'
1119
+
1120
+ reveal_type(tup2 if int() else subtup) # N: Revealed type is 'builtins.tuple[builtins.int]'
1121
+ reveal_type(subtup if int() else tup2) # N: Revealed type is 'builtins.tuple[builtins.int]'
1122
+
1123
+ [builtins fixtures/tuple.pyi]
1124
+ [out]
1125
+
1080
1126
[case testTupleWithUndersizedContext]
1081
1127
a = ([1], 'x')
1082
1128
if int():
0 commit comments