Skip to content

False positive "unsafe[] overlapping" for _floordiv__/__rfloordiv__ with Real argument, but nearly identical signatures for other operators are fine #10755

@posita

Description

@posita

Bug Report

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.py
from numbers import Real
from operator import floordiv, mul, truediv
from typing import NamedTuple, Union

_OperandT = Union[float, Real]
# _OperandT = Real  # <- results in the same error
# _OperandT = float  # <- this works

class Spam(NamedTuple):
    value: _OperandT

    def __floordiv__(self, other: _OperandT) -> "Spam":
        return Spam(floordiv(self.value, other))

    def __rfloordiv__(self, other: _OperandT) -> "Spam":  # <- this presents an error …
        return Spam(floordiv(other, self.value))

    def __mul__(self, other: _OperandT) -> "Spam":
        return Spam(mul(self.value, other))

    def __rmul__(self, other: _OperandT) -> "Spam":  # <- … but this is just fine …
        return Spam(mul(other, self.value))

    def __truediv__(self, other: _OperandT) -> "Spam":
        return Spam(truediv(self.value, other))

    def __rtruediv__(self, other: _OperandT) -> "Spam":  # <- … and so is this
        return Spam(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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugmypy got something wrong

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions