mirror of
https://github.com/astral-sh/ruff.git
synced 2025-11-25 22:29:02 +00:00
[ty] Fix subtyping of invariant generics specialized with Any (#20650)
This commit is contained in:
parent
d9473a2fcf
commit
20eb5b5b35
2 changed files with 51 additions and 11 deletions
|
|
@ -830,6 +830,42 @@ static_assert(not is_subtype_of(object, Any))
|
|||
static_assert(is_subtype_of(int, Any | int))
|
||||
static_assert(is_subtype_of(Intersection[Any, int], int))
|
||||
static_assert(not is_subtype_of(tuple[int, int], tuple[int, Any]))
|
||||
|
||||
class Covariant[T]:
|
||||
def get(self) -> T:
|
||||
raise NotImplementedError
|
||||
|
||||
static_assert(not is_subtype_of(Covariant[Any], Covariant[Any]))
|
||||
static_assert(not is_subtype_of(Covariant[Any], Covariant[int]))
|
||||
static_assert(not is_subtype_of(Covariant[int], Covariant[Any]))
|
||||
static_assert(is_subtype_of(Covariant[Any], Covariant[object]))
|
||||
static_assert(not is_subtype_of(Covariant[object], Covariant[Any]))
|
||||
|
||||
class Contravariant[T]:
|
||||
def receive(self, input: T): ...
|
||||
|
||||
static_assert(not is_subtype_of(Contravariant[Any], Contravariant[Any]))
|
||||
static_assert(not is_subtype_of(Contravariant[Any], Contravariant[int]))
|
||||
static_assert(not is_subtype_of(Contravariant[int], Contravariant[Any]))
|
||||
static_assert(not is_subtype_of(Contravariant[Any], Contravariant[object]))
|
||||
static_assert(is_subtype_of(Contravariant[object], Contravariant[Any]))
|
||||
|
||||
class Invariant[T]:
|
||||
mutable_attribute: T
|
||||
|
||||
static_assert(not is_subtype_of(Invariant[Any], Invariant[Any]))
|
||||
static_assert(not is_subtype_of(Invariant[Any], Invariant[int]))
|
||||
static_assert(not is_subtype_of(Invariant[int], Invariant[Any]))
|
||||
static_assert(not is_subtype_of(Invariant[Any], Invariant[object]))
|
||||
static_assert(not is_subtype_of(Invariant[object], Invariant[Any]))
|
||||
|
||||
class Bivariant[T]: ...
|
||||
|
||||
static_assert(is_subtype_of(Bivariant[Any], Bivariant[Any]))
|
||||
static_assert(is_subtype_of(Bivariant[Any], Bivariant[int]))
|
||||
static_assert(is_subtype_of(Bivariant[int], Bivariant[Any]))
|
||||
static_assert(is_subtype_of(Bivariant[Any], Bivariant[object]))
|
||||
static_assert(is_subtype_of(Bivariant[object], Bivariant[Any]))
|
||||
```
|
||||
|
||||
The same for `Unknown`:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue