blob: ebfe86f2b24163511fdc4685170750453cf8e804 [file] [log] [blame] [edit]
[case testTotalOrderingEqLt]
from functools import total_ordering
@total_ordering
class Ord:
def __eq__(self, other: object) -> bool:
return False
def __lt__(self, other: "Ord") -> bool:
return False
reveal_type(Ord() < Ord()) # N: Revealed type is "builtins.bool"
reveal_type(Ord() <= Ord()) # N: Revealed type is "builtins.bool"
reveal_type(Ord() == Ord()) # N: Revealed type is "builtins.bool"
reveal_type(Ord() > Ord()) # N: Revealed type is "builtins.bool"
reveal_type(Ord() >= Ord()) # N: Revealed type is "builtins.bool"
Ord() < 1 # E: Unsupported operand types for < ("Ord" and "int")
Ord() <= 1 # E: Unsupported operand types for <= ("Ord" and "int")
Ord() == 1
Ord() > 1 # E: Unsupported operand types for > ("Ord" and "int")
Ord() >= 1 # E: Unsupported operand types for >= ("Ord" and "int")
[builtins fixtures/dict.pyi]
[case testTotalOrderingLambda]
from functools import total_ordering
from typing import Any, Callable, ClassVar
@total_ordering
class Ord:
__eq__: Callable[[Any, object], bool] = lambda self, other: False
__lt__: Callable[[Any, "Ord"], bool] = lambda self, other: False
reveal_type(Ord() < Ord()) # N: Revealed type is "builtins.bool"
reveal_type(Ord() <= Ord()) # N: Revealed type is "builtins.bool"
reveal_type(Ord() == Ord()) # N: Revealed type is "builtins.bool"
reveal_type(Ord() > Ord()) # N: Revealed type is "builtins.bool"
reveal_type(Ord() >= Ord()) # N: Revealed type is "builtins.bool"
Ord() < 1 # E: Argument 1 has incompatible type "int"; expected "Ord"
Ord() <= 1 # E: Unsupported operand types for <= ("Ord" and "int")
Ord() == 1
Ord() > 1 # E: Unsupported operand types for > ("Ord" and "int")
Ord() >= 1 # E: Unsupported operand types for >= ("Ord" and "int")
[builtins fixtures/dict.pyi]
[case testTotalOrderingNonCallable]
from functools import total_ordering
@total_ordering
class Ord(object):
def __eq__(self, other: object) -> bool:
return False
__lt__ = 5
Ord() <= Ord() # E: Unsupported left operand type for <= ("Ord")
Ord() > Ord() # E: "int" not callable
Ord() >= Ord() # E: Unsupported left operand type for >= ("Ord")
[builtins fixtures/dict.pyi]
[case testTotalOrderingReturnNotBool]
from functools import total_ordering
@total_ordering
class Ord:
def __eq__(self, other: object) -> bool:
return False
def __lt__(self, other: "Ord") -> str:
return "blah"
reveal_type(Ord() < Ord()) # N: Revealed type is "builtins.str"
reveal_type(Ord() <= Ord()) # N: Revealed type is "Any"
reveal_type(Ord() == Ord()) # N: Revealed type is "builtins.bool"
reveal_type(Ord() > Ord()) # N: Revealed type is "Any"
reveal_type(Ord() >= Ord()) # N: Revealed type is "Any"
[builtins fixtures/dict.pyi]
[case testTotalOrderingAllowsAny]
from functools import total_ordering
@total_ordering
class Ord:
def __eq__(self, other):
return False
def __gt__(self, other):
return False
reveal_type(Ord() < Ord()) # N: Revealed type is "Any"
Ord() <= Ord() # E: Unsupported left operand type for <= ("Ord")
reveal_type(Ord() == Ord()) # N: Revealed type is "Any"
reveal_type(Ord() > Ord()) # N: Revealed type is "Any"
Ord() >= Ord() # E: Unsupported left operand type for >= ("Ord")
Ord() < 1 # E: Unsupported left operand type for < ("Ord")
Ord() <= 1 # E: Unsupported left operand type for <= ("Ord")
Ord() == 1
Ord() > 1
Ord() >= 1 # E: Unsupported left operand type for >= ("Ord")
[builtins fixtures/dict.pyi]
[case testCachedProperty]
# flags: --python-version 3.8
from functools import cached_property
class Parent:
@property
def f(self) -> str: pass
class Child(Parent):
@cached_property
def f(self) -> str: pass
@cached_property
def g(self) -> int: pass
@cached_property # E: Too many arguments for property
def h(self, arg) -> int: pass
reveal_type(Parent().f) # N: Revealed type is "builtins.str"
reveal_type(Child().f) # N: Revealed type is "builtins.str"
reveal_type(Child().g) # N: Revealed type is "builtins.int"
Child().f = "Hello World"
Child().g = "invalid" # E: Incompatible types in assignment (expression has type "str", variable has type "int")
[file functools.pyi]
import sys
from typing import TypeVar, Generic
_T = TypeVar('_T')
class cached_property(Generic[_T]): ...
[builtins fixtures/property.pyi]
[case testTotalOrderingWithForwardReference]
from typing import Generic, Any, TypeVar
import functools
T = TypeVar("T", bound="C")
@functools.total_ordering
class D(Generic[T]):
def __lt__(self, other: Any) -> bool:
...
class C:
pass
def f(d: D[C]) -> None:
reveal_type(d.__gt__) # N: Revealed type is "def (other: Any) -> builtins.bool"
d: D[int] # E: Type argument "int" of "D" must be a subtype of "C"
[builtins fixtures/dict.pyi]