python / python/mypy

Inconsistent constraint resolution for tuples.

Offen
#19,860 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug topic-pep-646
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
Ø Merge
1 T. 18 Std.
Gemergte PRs (30 T.)
54

Beschreibung

Adding the following test to ConstraintsSuite fails with assert set() == {1 <: B, 1 <: A}:

    def test_wrapped_tuple_identical_results(self) -> None:
        # test inferred constraints of tuple[T, ...] <: tuple[A, B]
        # vs inferred constraints of tuple[*tuple[T, ...]] <: tuple[A, B]
        fx = self.fx
        t = Instance(fx.std_tuplei, [fx.t])
        assert set(infer_constraints(
            t,
            TupleType([self.fx.a, self.fx.b], fallback=self.fx.std_tuple),
            SUBTYPE_OF,
        )) == set(infer_constraints(
            TupleType([UnpackType(t)], fallback=self.fx.std_tuple),
            TupleType([self.fx.a, self.fx.b], fallback=self.fx.std_tuple),
            SUBTYPE_OF,
        ))

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 in ConstraintsSuite mit test_wrapped_tuple_identical_results und untersuche infer_constraints für die beiden gezeigten Tupelformen. Reproduziere die Assertion, sorge dann dafür, dass beide Aufrufe von infer_constraints identische Constraints erzeugen, und führe den fokussierten ConstraintsSuite-Test erneut aus, um zu bestätigen, dass er erfolgreich ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

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