`mypy` widens multiple type parameters even when only the first one is relevant
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 48/100
Rechercherichtung
Beginne damit, die verknüpfte mypy-play-Reproduktion auszuführen, und vergleiche den inferierten Typ mit der Erwartung von assert_type. Verfolge anschließend das Overload-Matching und die Logik zur Erweiterung von Typparametern, die am add-Aufruf beteiligt sind, und füge einen Regressionstest hinzu, der zeigt, dass nur der nicht übereinstimmende Parameter erweitert wird, während der gemeinsame EA-Parameter erhalten bleibt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Bug Report
When there are two type parameters to widen, mypy widens both to Any, even when the matched overloads agree on the second parameter and only actually disagree on the first.
Related to #19952
To Reproduce
https://mypy-play.net/?gist=6ab5724e788384125e85da02ae0386d3
from collections.abc import Sequence
from typing import Any, Generic, Protocol, assert_type, overload
from typing_extensions import TypeVar
S1 = TypeVar("S1")
class EA: ...
A = TypeVar("A", bound=EA, default=EA, covariant=True)
S2 = TypeVar("S2", bound=EA)
S2_contra = TypeVar("S2_contra", bound=EA, contravariant=True)
class Supports_ProtoAdd(Protocol[S2_contra, S2]):
def _proto_add(self, other: S2_contra, /) -> "Ser2[S2, EA]": ...
class Ser2(Generic[S1, A]):
def _proto_add(self, other: Any, /) -> "Ser2[Any, EA]":
raise NotImplementedError
@overload
def __add__(
self: Supports_ProtoAdd[S2_contra, S2],
other: "S2_contra | Sequence[S2_contra]",
) -> "Ser2[S2]": ...
@overload
def __add__(self: "Ser2[bool, EA]", other: Sequence[Any]) -> "Ser2[int]": ...
def __add__(self, other: Any) -> Any:
raise NotImplementedError
def f(a2: "Ser2[Any, EA]", seq: "Sequence[Any]") -> None:
assert_type(a2 + seq, "Ser2[Any, EA]")
# error: Expression is of type "Ser2[Any, Any]", not "Ser2[Any, EA]" [assert-type]
Expected Behaviour
Error free, as is the case for pyright, pyrefly and ty
Actual Behaviour
main.py:24: error: Expression is of type "Ser2[Any, Any]", not "Ser2[bool, EA]" [assert-type]
Found 1 error in 1 file (checked 1 source file)
Your Environment*
mypy 2.3.1 (playground)
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- Ø Merge
- 1 T. 3 Std.
- Gemergte PRs (30 T.)
- 59
Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus python/mypy
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
-
documentation
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
-
bug topic-configuration topic-error-reporting
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
-
bug topic-attrs
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
Ähnliche Issues
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
xinnan-tech/xiaozhi-fde-talk#263 ·
-
rules
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
huggingface/Repo2RLEnv#163 · 1 Kommentar ·
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 95/100
huggingface/sentence-transformers#4074 ·
-
comp/dashboard invalid P3
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
NousResearch/hermes-agent#121143 ·