python / python/mypy

stubtest false positive: default (list,) incompatible with tuple[type[list[_T]]]

Offen
#19,852 1 Kommentar 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug topic-stubtest
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

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Ö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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.