python / python/mypy

overloads not properly evaluated with mypy 2.3.0 and numpy 2.5.1

Offen
#21,733 3 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug topic-overloads
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Bug Report

The final reveal_type() below should show DatetimeArray, but it is showing Any

With pyright, ty and pyrefly, it produces the correct result. May be related to #21608

To Reproduce

import numpy as np
from typing import Any, Sequence, overload, reveal_type


class DatetimeArray:
    pass


class NumpyExtensionArray:
    pass


@overload
def array(  # pyright: ignore[reportOverlappingOverload]
    data: Sequence[np.datetime64],
) -> DatetimeArray: ...
@overload
def array(data: Sequence[Any]) -> NumpyExtensionArray: ...
def array(data: Sequence[Any]) -> DatetimeArray | NumpyExtensionArray:
    return (
        DatetimeArray() if isinstance(data[0], np.datetime64) else NumpyExtensionArray()
    )


foo1 = [np.datetime64("2026-01-05 23:27:59")]
foo0 = np.datetime64("2026-01-05 23:27:59")

reveal_type(foo0)
reveal_type(foo1)
reveal_type(array(foo1))  # Should be DatetimeArray

Expected Behavior

numpy_datetimearray.py:28: note: Revealed type is "numpy.datetime64[Any]"
numpy_datetimearray.py:29: note: Revealed type is "list[numpy.datetime64[Any]]"
numpy_datetimearray.py:30: note: Revealed type is "DatetimeArray"

Actual Behavior

numpy_datetimearray.py:28: note: Revealed type is "numpy.datetime64[Any]"
numpy_datetimearray.py:29: note: Revealed type is "list[numpy.datetime64[Any]]"
numpy_datetimearray.py:30: note: Revealed type is "Any"

Your Environment

  • Mypy version used: 2.3.0
  • Mypy command-line flags: None
  • Mypy configuration options from mypy.ini (and other config files): None
  • Python version used: 3.12
  • Numpy version used: 2.5.1

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

Das Issue nennt keine Repository-Datei und keinen bestehenden Test. Speichere zunächst den bereitgestellten Reproducer und führe ihn mit mypy 2.3.0 aus. Verfolge anschließend die Auswertung der Overloads für die beiden Array-Signaturen und vergleiche das Ergebnis mit der erwarteten reveal_type-Ausgabe. Erledigt ist die Aufgabe, wenn der Aufruf DatetimeArray enthüllt und ein Regressionstest diesen Fall abdeckt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
numpy, python
Bereich
devtools, tooling
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
52/100

Neue Issues direkt in Ihr Postfach

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