python / python/mypy

Invalid "overloaded function signature will never be matched"

Open
#15,998 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug topic-overloads
Dominant language
Python
Stars
20.6k
Forks
3.3k
PR merge metrics
PR metrics pending

Description

Bug Report

When trying to use typing.overload with frames from the astropy project (https://www.astropy.org/), incorrect errors are reported by mypy.

To Reproduce

from typing import overload

from astropy.coordinates import GCRS, ITRS


@overload
def f(frame: ITRS) -> None:
    ...


@overload
def f(frame: GCRS) -> None:
    ...


def f(frame: ITRS | GCRS) -> None:
    ...

Expected Behavior

No error.

Actual Behavior

Second overload generates

test.py:12: error: Overloaded function signature 2 will never be matched: signature 1's parameter type(s) are the same or broader  [misc]

Your Environment

  • Mypy version used: 1.151
  • Mypy command-line flags:
  • Mypy configuration options from mypy.ini (and other config files): warn_return_any = true and warn_unused_configs = true
  • Python version used: 3.10.5

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by running the minimal reproducer with mypy and compare the overload-matching diagnostic against the expected behavior. Trace the type-checking path responsible for reporting an overload as unreachable, then add a regression test based on the ITRS and GCRS example; done means the test passes without the erroneous error.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
compilers, devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.