Crash on diverging recursive generic protocols
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
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."""
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, die verlinkte mypy-play-Reproduktion mit der aktuellen mypy-Version auszuführen und sie mit dem verlinkten Issue-Kommentar zu vergleichen, da sich der ursprüngliche Absturz nicht mehr reproduzieren lässt. Isoliere die Auswirkungen von Literal und Transform.or, während du den verbleibenden Fehler nachverfolgst. Das Issue nennt keine Repository-Dateien oder Tests, daher würde eine abgeschlossene Behebung einen neuen Regressionstest für das bestätigte Verhalten erfordern.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 25/100