Unclear when Join is picked vs Union in upcast operation.
Aperta
Nessuno ha ancora preso questa issue.
bug
topic-join-v-union
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
I noticed some rather erratic behavior when sometimes it picks union and other times the join.
from typing import Iterable
class A: ...
class B: ...
class C: ...
def upcast[T](arg: Iterable[T]) -> Iterable[T]: return arg
def test_builtin(x: tuple[int, str, None]) -> None:
reveal_type(upcast(x)) # Iterable[str | int | None]
def test_custom(x: tuple[A, B, C]) -> None:
reveal_type(upcast(x)) # Iterable[object]
def test_mixed1(x: tuple[A, str, None]) -> None:
reveal_type(upcast(x)) # Iterable[str | A | None]
def test_mixed2(x: tuple[int, str, C]) -> None:
reveal_type(upcast(x)) # Iterable[object]
https://mypy-play.net/?mypy=latest&python=3.12&gist=833674a36174c4140a89645b609da8a9
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 i quattro esempi nella configurazione mypy-play collegata, iniziando dalle chiamate di upcast e dai relativi risultati di reveal_type. Segui il percorso di inferenza dei tipi che sceglie un’unione o un object join, quindi definisci il comportamento coerente previsto e verificalo con questi esempi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- tooling
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 38/100