@@ -1040,6 +1040,45 @@ reveal_type(x) # N: Revealed type is "Tuple[builtins.int, fallback=__main__.Tes
10401040[builtins fixtures/tuple.pyi]
10411041[out]
10421042
1043+ # ----------------------------------------------------------------------------
1044+ # Union-in-Tuple distribution
1045+ # ----------------------------------------------------------------------------
1046+
1047+ [case testTupleUnionDistributionSuccess]
1048+ from typing import Tuple, Optional, Union
1049+
1050+ def f1(x: Tuple[float, Optional[float]]) -> Union[Tuple[float, float], Tuple[float, None]]:
1051+ return x
1052+
1053+ def f2(x: Tuple[Union[int, str], float]) -> Union[Tuple[int, float], Tuple[str, float]]:
1054+ return x
1055+
1056+ def f3(x: Tuple[int, Union[str, None]]) -> Union[Tuple[int, str], Tuple[int, None]]:
1057+ return x
1058+
1059+ def f4(x: Tuple[Union[int, float]]) -> Union[Tuple[int], Tuple[float]]:
1060+ return x
1061+
1062+ def f5(x: Tuple[Union[int, str], Union[bool, None]]) -> Union[
1063+ Tuple[int, bool],
1064+ Tuple[int, None],
1065+ Tuple[str, bool],
1066+ Tuple[str, None],
1067+ ]:
1068+ return x
1069+
1070+ [builtins fixtures/tuple.pyi]
1071+
1072+ [case testTupleUnionDistributionFail]
1073+ from typing import Tuple, Optional, Union
1074+
1075+ def g1(x: Tuple[float, Optional[float]]) -> Union[Tuple[float, float], Tuple[str, float]]:
1076+ return x # E: Incompatible return value type (got "Tuple[float, Optional[float]]", expected "Union[Tuple[float, float], Tuple[str, float]]")
1077+
1078+ def g2(x: Tuple[float, Optional[float]]) -> Union[Tuple[float, str], Tuple[float, None]]:
1079+ return x # E: Incompatible return value type (got "Tuple[float, Optional[float]]", expected "Union[Tuple[float, str], Tuple[float, None]]")
1080+
1081+ [builtins fixtures/tuple.pyi]
10431082
10441083-- Variable-length tuples (Tuple[t, ...] with literal '...')
10451084-- ---------------------------------------------------------
0 commit comments