@@ -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