python / python/mypy

Mypy fails to solve `tuple[int, *Ts, int]` as an `Iterable[T]`.

Aperta
#19,659 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug topic-pep-646
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]" ❌

https://mypy-play.net/?mypy=latest&python=3.12&enable-incomplete-feature=PreciseTupleTypes&gist=ed0d06b3234441ebf6f31b98224618fc

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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. 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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.