@@ -2980,18 +2980,62 @@ z: Type[Literal[1, 2]] # E: Type[...] can't contain "Union[Literal[...], Litera
2980
2980
[case testJoinLiteralAndInstance]
2981
2981
from typing import Generic, TypeVar, Literal
2982
2982
2983
- T = TypeVar("T")
2983
+ T_co = TypeVar("T_co", covariant=True)
2984
+ T = TypeVar("T", covariant=False, contravariant=False)
2985
+ S = TypeVar("S", covariant=False, contravariant=False)
2984
2986
2985
- class A(Generic[T]): ...
2987
+ class A_inv(Generic[T]): ...
2988
+ class A_co(Generic[T_co]): ...
2986
2989
2987
- def f(a: A[T], t: T) -> T: ...
2988
- def g(a: T, t: A[T]) -> T: ...
2990
+ def check_inv(obj: A_inv[Literal[1]]) -> None:
2991
+ def f(a: A_inv[S], t: S) -> S: ...
2992
+ def g(a: S, t: A_inv[S]) -> S: ...
2989
2993
2990
- def check(obj: A[Literal[1]]) -> None:
2991
2994
reveal_type(f(obj, 1)) # N: Revealed type is "Literal[1]"
2992
- reveal_type(f(obj, '')) # E: Cannot infer value of type parameter "T " of "f" \
2993
- # N: Revealed type is "Any"
2995
+ reveal_type(f(obj, '')) # E: Cannot infer value of type parameter "S " of "f" \
2996
+ # N: Revealed type is "Any"
2994
2997
reveal_type(g(1, obj)) # N: Revealed type is "Literal[1]"
2995
- reveal_type(g('', obj)) # E: Cannot infer value of type parameter "T" of "g" \
2998
+ reveal_type(g('', obj)) # E: Cannot infer value of type parameter "S" of "g" \
2999
+ # N: Revealed type is "Any"
3000
+
3001
+ def check_co(obj: A_co[Literal[1]]) -> None:
3002
+ def f(a: A_co[S], t: S) -> S: ...
3003
+ def g(a: S, t: A_co[S]) -> S: ...
3004
+
3005
+ reveal_type(f(obj, 1)) # N: Revealed type is "builtins.int"
3006
+ reveal_type(f(obj, '')) # N: Revealed type is "builtins.object"
3007
+ reveal_type(g(1, obj)) # N: Revealed type is "builtins.int"
3008
+ reveal_type(g('', obj)) # N: Revealed type is "builtins.object"
3009
+
3010
+
3011
+ [case testJoinLiteralAndInstance312]
3012
+ # flags: --python-version 3.12
3013
+ from typing import Literal
3014
+
3015
+ class A_inv[T]:
3016
+ def getter(self) -> T: ...
3017
+ def setter(self, value: T) -> None: ...
3018
+
3019
+ class A_co[T]:
3020
+ def getter(self) -> T: ...
3021
+
3022
+ def check_inv(obj: A_inv[Literal[1]]) -> None:
3023
+ def f[S](a: A_inv[S], t: S) -> S: ...
3024
+ def g[S](a: S, t: A_inv[S]) -> S: ...
3025
+
3026
+ reveal_type(f(obj, 1)) # N: Revealed type is "Literal[1]"
3027
+ reveal_type(f(obj, '')) # E: Cannot infer value of type parameter "S" of "f" \
2996
3028
# N: Revealed type is "Any"
3029
+ reveal_type(g(1, obj)) # N: Revealed type is "Literal[1]"
3030
+ reveal_type(g('', obj)) # E: Cannot infer value of type parameter "S" of "g" \
3031
+ # N: Revealed type is "Any"
3032
+
3033
+ def check_co(obj: A_co[Literal[1]]) -> None:
3034
+ def f[S](a: A_co[S], t: S) -> S: ...
3035
+ def g[S](a: S, t: A_co[S]) -> S: ...
3036
+
3037
+ reveal_type(f(obj, 1)) # N: Revealed type is "builtins.int"
3038
+ reveal_type(f(obj, '')) # N: Revealed type is "builtins.object"
3039
+ reveal_type(g(1, obj)) # N: Revealed type is "builtins.int"
3040
+ reveal_type(g('', obj)) # N: Revealed type is "builtins.object"
2997
3041
[builtins fixtures/tuple.pyi]
0 commit comments