stubtest false positive: default (list,) incompatible with tuple[type[list[_T]]]
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
Mypy stubtests report a false positive for a signature of tuple[type[list[_T]]] and a default value of (list,).
Removing either the wrapping tuple or the TypeVar is accepted.
To Reproduce
def foo1(x = (list,)): ...
def foo2(x = (list,)): ...
def foo3(x = list): ...
from typing import TypeVar
_T = TypeVar('_T')
def foo1(x: tuple[type[list[_T]]] = ...): ...
def foo2(x: tuple[type[list]] = ...): ...
def foo3(x: type[list[_T]] = ...): ...
Expected Behavior
Stubtests accept this
Actual Behavior
$ python -m mypy.stubtest lib
error: lib.foo1 is inconsistent, runtime parameter "x" has a default value of type tuple[Overload(def [_T] () -> builtins.list[_T`1], def [_T] (typing.Iterable[_T`1]) -> builtins.list[_T`1])], which is incompatible with stub parameter type tuple[type[builtins.list[_T`-1]]]
Stub: in file D:\Programming\Projects\Testing\lib.pyi:5
def [_T] (x: tuple[type[builtins.list[_T`-1]]] =) -> Any
Runtime: in file D:\Programming\Projects\Testing\lib.py:1
def (x=(<class 'list'>,))
Found 1 error (checked 1 module)
Your Environment
Command: python -m mypy.stubtest lib
Python Version: Python 3.11.3
Mypy Version: mypy 1.18.1 (compiled: yes)
From: https://github.com/python/typeshed/issues/14718#issuecomment-3290882846
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, den Bericht mit Python 3.11.3 unter Verwendung von python -m mypy.stubtest lib zu reproduzieren, und vergleiche die Signaturen in lib.py und lib.pyi. Verfolge, wie stubtest den Laufzeitstandardwert (list,) mit tuple[type[list[_T]]] vergleicht; die Aufgabe ist abgeschlossen, wenn die gemeldete foo1-Abweichung akzeptiert wird, während die bestehenden Fälle foo2 und foo3 weiterhin abgedeckt bleiben.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- testing-qa, tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100