Crash on diverging recursive generic protocols
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
EDIT: Although the original repro is not causing a crash anymore, the underlying issue is still there, see https://github.com/python/mypy/issues/17326#issuecomment-2151135134
Crash Report
Not sure how to title this, the following example produces a segfault, I simplified it from more complicated code. It seems to be multicausal, removing the Literal makes it disappear, so does removing the __or__ operator on Transform.
To Reproduce
https://mypy-play.net/?mypy=latest&python=3.12&gist=2409c60fc1d5734569f6ab55344a85f0
from typing import Any, Literal, Protocol, TypeVar, overload
X = TypeVar("X")
Y = TypeVar("Y")
Z = TypeVar("Z")
X2 = TypeVar("X2")
Y2 = TypeVar("Y2")
class Transform(Protocol[X, Y]):
def __or__(
self, other: "Transform[X2, Y2]", /
) -> "Transform[tuple[X, X2], tuple[Y, Y2]]": ...
@overload # 1 arg
def chain_encoders(
e: Transform[X, Y], /, *, simplify: Literal[True] = ...
) -> Transform[X, Y]: ...
@overload # ≥2 args
def chain_encoders(
*es: *tuple[Transform[Any, Y], *tuple[Transform, ...], Transform[X, Any]],
simplify: Literal[True] = ...,
) -> Transform[X, Y]: ...
def chain_encoders(*encoders: Transform, simplify: bool = True) -> Transform:
r"""Chain encoders."""
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 la riproduzione collegata di mypy-play con la versione attuale di mypy e confrontala con il commento collegato dell’issue, poiché il crash originale non è più riproducibile. Isola gli effetti di Literal e Transform.or mentre analizzi il problema rimanente. L’issue non indica file o test del repository, quindi una correzione completa richiederebbe un nuovo test di regressione per il comportamento confermato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- devtools
- Tipo di issue
- Bug
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100