@@ -2980,18 +2980,62 @@ z: Type[Literal[1, 2]] # E: Type[...] can't contain "Union[Literal[...], Litera
29802980[case testJoinLiteralAndInstance]
29812981from typing import Generic, TypeVar, Literal
29822982
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)
29842986
2985- class A(Generic[T]): ...
2987+ class A_inv(Generic[T]): ...
2988+ class A_co(Generic[T_co]): ...
29862989
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: ...
29892993
2990- def check(obj: A[Literal[1]]) -> None:
29912994 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"
29942997 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" \
29963028 # 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"
29973041[builtins fixtures/tuple.pyi]
0 commit comments