'TypeVar's `bound` parameter does not play nice with overloads(?)
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
'TypeVar's bound parameter does not play nice with overloads(?)
To Reproduce
from typing import Union, TypeVar, overload
class C1:...
class C2:...
T = TypeVar('T', bound=Union[C1, C2])
@overload
def update(elt: C1) -> C1:...
@overload
def update(elt:C2) -> C2:...
def update(elt: Union[C1, C2]) -> Union[C1, C2]:
pass
def get_copy(elt: T) -> T:
new_elt = update(elt)
return new_elt
Expected Behavior
This should type-check(?)
Actual Behavior
I get errors:
type_tests.py:47: error: Argument 1 to "update" has incompatible type "T"; expected "B1"
type_tests.py:48: error: Incompatible return value type (got "D1", expected "T")
If I replace T = TypeVar('T', bound=Union[C1, C2]) with T = TypeVar('T', C1, C2, Union[C1, C2]), it
passes just fine
Your Environment
- Mypy version used: mypy 0.812
- Mypy command-line flags: None: command was
mypy type_tests.py - Mypy configuration options from
mypy.ini(and other config files): default - Python version used: 3.7.8
- Operating system and version: Ubuntu 16.04
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
Riproduci gli errori segnalati eseguendo mypy type_tests.py con le definizioni di bound di TypeVar e overload mostrate nell’issue, quindi confrontali con la variante constrained-TypeVar. Traccia il modo in cui mypy gestisce il bound durante la risoluzione degli overload e il controllo del tipo restituito; il lavoro è completato quando viene determinato il comportamento previsto e viene aggiunto un test di regressione oppure viene documentato il motivo per cui il bound viene rifiutato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- devtools
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100