Mypy fails to solve `tuple[int, *Ts, int]` as an `Iterable[T]`.
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
from typing import Iterable
def upcast[T](arg: Iterable[T]) -> Iterable[T]: return arg
def f[*Ts](padded_tuple: tuple[int, *Ts, int]) -> None:
as_iterable = upcast(padded_tuple) # Argument 1 to "upcast" has incompatible type
reveal_type(as_iterable) # "typing.Iterable[builtins.int]" ❌
For comparison, pyright predicts Code sample in pyright playground Iterable[int | Union[*Ts@demo]].
Since Union of TypeVarTuple is not specced yet, mypy should nevertheless probably fall back to something like Iterable[object] or Iterable[Any], but Iterable[int] is just wrong.
If the tuple is not padded, then mypy still falsely issues [arg-type], but at least the reveal_type is Iterable[Any]. https://mypy-play.net/?mypy=latest&python=3.12&enable-incomplete-feature=PreciseTupleTypes&gist=b3429973142b9a329d0fcc1dda8aabb2
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 dalle riproduzioni collegate di mypy-play e confronta i casi di tuple con e senza padding. Traccia l’inferenza di TypeVarTuple per la chiamata a Iterable[T] e verifica il risultato rispetto al comportamento segnalato di pyright; il lavoro è completato quando non si verifica alcun errore arg-type errato e non viene ristretto erroneamente alcun tipo Iterable[int].
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
- 38/100