You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
False positive "unsafe[] overlapping" for _floordiv__/__rfloordiv__ with Real argument, but nearly identical signatures for other operators are fine
#10755
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
Where the single argument to __floordiv__/__rfloordiv__ includes numbers.Real, it results in (what I think is) a false Signatures … are unsafely overlapping error.
To Reproduce
# test_case.pyfromnumbersimportRealfromoperatorimportfloordiv, mul, truedivfromtypingimportNamedTuple, Union_OperandT=Union[float, Real]
# _OperandT = Real # <- results in the same error# _OperandT = float # <- this worksclassSpam(NamedTuple):
value: _OperandTdef__floordiv__(self, other: _OperandT) ->"Spam":
returnSpam(floordiv(self.value, other))
def__rfloordiv__(self, other: _OperandT) ->"Spam": # <- this presents an error …returnSpam(floordiv(other, self.value))
def__mul__(self, other: _OperandT) ->"Spam":
returnSpam(mul(self.value, other))
def__rmul__(self, other: _OperandT) ->"Spam": # <- … but this is just fine …returnSpam(mul(other, self.value))
def__truediv__(self, other: _OperandT) ->"Spam":
returnSpam(truediv(self.value, other))
def__rtruediv__(self, other: _OperandT) ->"Spam": # <- … and so is thisreturnSpam(truediv(other, self.value))
Actual Behavior
$ mypy --version
mypy 0.902
$ mypy test_case.py
test_case.py:16: error: Signatures of "__rfloordiv__" of "Spam" and "__floordiv__" of "Union[float, Real]" are unsafely overlapping
Found 1 error in 1 file (checked 1 source file)
Expected Behavior
I would expect symmetry with other binary operator signatures. I'm also pretty sure there isn't any actual overlap here, but I could be wrong.
The text was updated successfully, but these errors were encountered:
posita
changed the title
Alleged "unsafe[] overlapping" with _floordiv__/__rfloordiv__ only with Real argument, but nearly identical __truediv__/__rtruediv__ signatures are fine
False positive "unsafe[] overlapping" for _floordiv__/__rfloordiv__ with Real argument, but nearly identical signatures for other operators are fine
Jul 2, 2021
Did you ever find a fix for this? I ran into the same exact issue with my code, which is structured similarly to yours. In particular, I get the issue if I use numbers.Rational in the signature for __floordiv__ and __rfloordiv__, but not any other arithmetic operation.
I suspect this is because numbers.pyi in typeshed declares Real.__rfloordiv__ as returning int, but Real.__rmul__ returns Any. I'm not sure how this should be fixed though.
Bug Report
Where the single argument to
__floordiv__
/__rfloordiv__
includesnumbers.Real
, it results in (what I think is) a falseSignatures … are unsafely overlapping
error.To Reproduce
Actual Behavior
Expected Behavior
I would expect symmetry with other binary operator signatures. I'm also pretty sure there isn't any actual overlap here, but I could be wrong.
The text was updated successfully, but these errors were encountered: