python / python/mypy

generic super false-posistive error on argument type

Offen
#6,224 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug false-positive priority-1-normal topic-inheritance topic-type-variables
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

input:

NT = TypeVar('NT', int, float)
NTU = Union['KspVar[NT]', 'AstBase[NT]', 'ProcessNum[NT]', NT]


class AstOperatorUnary(AstBase[NT], ProcessNum[NT]):
    arg1: NTU[NT]
    string: ClassVar[str]
    priority: ClassVar[int]

    def __init__(self, arg1: NTU[NT]) -> None:
        self.arg1: NTU[NT] = arg1
        self.arg1_pure: NT = get_value(arg1)
        self.arg1_str: str = get_compiled(arg1)


class AstOperatorDouble(AstOperatorUnary[NT]):
    arg2: NTU[NT]

    def __init__(self, arg1: NTU[NT], arg2: NTU[NT]) -> None:
        super().__init__(arg1)
        self.arg2 = arg2
        self.arg2_pure: NT = get_value(arg2)
        self.arg2_str: str = get_compiled(arg2)

Traceback:

E:\packages\pyksp\pyksp\new_base_types.py:285: error: Argument 1 to "__init__" of "AstOperatorUnary" has incompatible type "Union[KspVar[int], AstBase[int], ProcessNum[int], int]"; expected "Union[KspVar[NT], AstBase[NT], ProcessNum[NT], NT]"
E:\packages\pyksp\pyksp\new_base_types.py:285: error: Argument 1 to "__init__" of "AstOperatorUnary" has incompatible type "Union[KspVar[float], AstBase[float], ProcessNum[float], float]"; expected "Union[KspVar[NT], AstBase[NT], ProcessNum[NT], NT]"

ProcessNum has not got __init__

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 mit den generischen Klassendefinitionen in pyksp/new_base_types.py ungefähr ab Zeile 285 und reproduziere die gemeldeten mypy-Fehler anhand des bereitgestellten Beispiels mit AstOperatorUnary und AstOperatorDouble. Untersuche, warum der Aufruf von super().init die spezialisierte Union ablehnt; abgeschlossen ist die Untersuchung, wenn für diesen Fall keine falsch-positiven Argumentfehler mehr auftreten.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
30/100

Neue Issues direkt in Ihr Postfach

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