Wrong overload resolution with alias to Any
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Bug Report
Overload resolution appears to pick the first matching overload if the argument type is an alias to Any. It should consider all overloads. This works correctly when using Any directly (without an alias). This came up in https://github.com/python/typeshed/issues/10405.
To Reproduce
from typing import Any, Union, overload
@overload
def my_origin(x: type) -> type: ...
@overload
def my_origin(x: Any) -> Any: ...
def my_origin(x: Any) -> Any:
return x
def call_any(spec: Any) -> bool:
return my_origin(spec) is Union
TypeSpec = Any
def call_alias(spec: TypeSpec) -> bool:
return my_origin(spec) is Union
https://mypy-play.net/?mypy=latest&python=3.11&flags=strict&gist=26e08b7414caad553cd0e9549928da11
Expected Behavior
Both call_any and call_alias should type check without errors, since they are the same thing.
Actual Behavior
call_alias produces an error in strict mode:
proj/overload.py:18: error: Non-overlapping identity check (left operand type: "type", right operand type: "<typing special form>") [comparison-overlap]
Your Environment
- Mypy version used: 1.4.1
- Mypy command-line flags: --strict
- Python version used: 3.10.6
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia eseguendo il riproduttore in modalità strict dell’issue e confronta la risoluzione degli overload per Any con l’alias TypeSpec. Individua il percorso di risoluzione degli overload responsabile del diverso risultato di sovrapposizione dei confronti; il lavoro è completato quando sia call_any sia call_alias vengono verificati dal sistema dei tipi senza errori e un test di regressione copre il caso.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100