Skip to content

TYP: arange: accept datetime strings#30636

Merged
charris merged 2 commits intonumpy:maintenance/2.4.xfrom
charris:backport-20631
Jan 11, 2026
Merged

TYP: arange: accept datetime strings#30636
charris merged 2 commits intonumpy:maintenance/2.4.xfrom
charris:backport-20631

Conversation

@charris
Copy link
Member

@charris charris commented Jan 11, 2026

fixes #30628.

@charris charris added this to the 2.4.2 release milestone Jan 11, 2026
@charris charris added 08 - Backport Used to tag backport PRs 41 - Static typing labels Jan 11, 2026
@github-actions

This comment has been minimized.

@charris
Copy link
Member Author

charris commented Jan 11, 2026

@jorenham Does MyPy need an upgrade?

@jorenham
Copy link
Member

@jorenham Does MyPy need an upgrade?

Probably not; I expect that my suggestion will fix the errors

Co-authored-by: Joren Hammudoglu <jhammudoglu@gmail.com>
@github-actions
Copy link

Diff from mypy_primer, showing the effect of this PR on type check results on a corpus of open source code:

xarray (https://github.com/pydata/xarray)
+ xarray/tests/test_plot.py:1167: note:     def arange(str, /, stop: str, step: int | timedelta64[timedelta | int | None] | integer[Any] | numpy.bool[builtins.bool] | None = ..., *, dtype: type[datetime64[date | int | None]] | dtype[datetime64[date | int | None]] | _HasDType[dtype[datetime64[date | int | None]]] | _HasNumPyDType[dtype[datetime64[date | int | None]]] | Literal['datetime64', '|datetime64', '=datetime64', '<datetime64', '>datetime64', 'datetime64[Y]', '|datetime64[Y]', '=datetime64[Y]', '<datetime64[Y]', '>datetime64[Y]', 'datetime64[M]', '|datetime64[M]', '=datetime64[M]', '<datetime64[M]', '>datetime64[M]', 'datetime64[W]', '|datetime64[W]', '=datetime64[W]', '<datetime64[W]', '>datetime64[W]', 'datetime64[D]', '|datetime64[D]', '=datetime64[D]', '<datetime64[D]', '>datetime64[D]', 'datetime64[h]', '|datetime64[h]', '=datetime64[h]', '<datetime64[h]', '>datetime64[h]', 'datetime64[m]', '|datetime64[m]', '=datetime64[m]', '<datetime64[m]', '>datetime64[m]', 'datetime64[s]', '|datetime64[s]', '=datetime64[s]', '<datetime64[s]', '>datetime64[s]', 'datetime64[ms]', '|datetime64[ms]', '=datetime64[ms]', '<datetime64[ms]', '>datetime64[ms]', 'datetime64[us]', '|datetime64[us]', '=datetime64[us]', '<datetime64[us]', '>datetime64[us]', 'datetime64[ns]', '|datetime64[ns]', '=datetime64[ns]', '<datetime64[ns]', '>datetime64[ns]', 'datetime64[ps]', '|datetime64[ps]', '=datetime64[ps]', '<datetime64[ps]', '>datetime64[ps]', 'datetime64[fs]', '|datetime64[fs]', '=datetime64[fs]', '<datetime64[fs]', '>datetime64[fs]', 'datetime64[as]', '|datetime64[as]', '=datetime64[as]', '<datetime64[as]', '>datetime64[as]', 'M', '|M', '=M', '<M', '>M', 'M8', '|M8', '=M8', '<M8', '>M8', 'M8[Y]', '|M8[Y]', '=M8[Y]', '<M8[Y]', '>M8[Y]', 'M8[M]', '|M8[M]', '=M8[M]', '<M8[M]', '>M8[M]', 'M8[W]', '|M8[W]', '=M8[W]', '<M8[W]', '>M8[W]', 'M8[D]', '|M8[D]', '=M8[D]', '<M8[D]', '>M8[D]', 'M8[h]', '|M8[h]', '=M8[h]', '<M8[h]', '>M8[h]', 'M8[m]', '|M8[m]', '=M8[m]', '<M8[m]', '>M8[m]', 'M8[s]', '|M8[s]', '=M8[s]', '<M8[s]', '>M8[s]', 'M8[ms]', '|M8[ms]', '=M8[ms]', '<M8[ms]', '>M8[ms]', 'M8[us]', '|M8[us]', '=M8[us]', '<M8[us]', '>M8[us]', 'M8[ns]', '|M8[ns]', '=M8[ns]', '<M8[ns]', '>M8[ns]', 'M8[ps]', '|M8[ps]', '=M8[ps]', '<M8[ps]', '>M8[ps]', 'M8[fs]', '|M8[fs]', '=M8[fs]', '<M8[fs]', '>M8[fs]', 'M8[as]', '|M8[as]', '=M8[as]', '<M8[as]', '>M8[as]'], device: Literal['cpu'] | None = ..., like: _SupportsArrayFunc | None = ...) -> ndarray[tuple[int], dtype[datetime64[Any]]]
- xarray/tests/test_plot.py:1167: note:     def arange(integer[Any] | floating[Any] | datetime64[date | int | None] | timedelta64[timedelta | int | None] | float, /, stop: integer[Any] | floating[Any] | datetime64[date | int | None] | timedelta64[timedelta | int | None] | float | None = ..., step: integer[Any] | floating[Any] | datetime64[date | int | None] | timedelta64[timedelta | int | None] | float | None = ..., *, dtype: type[Any] | dtype[Any] | _HasDType[dtype[Any]] | _HasNumPyDType[dtype[Any]] | tuple[Any, Any] | list[Any] | _DTypeDict | str | None = ..., device: Literal['cpu'] | None = ..., like: _SupportsArrayFunc | None = ...) -> ndarray[tuple[int], dtype[Any]]
+ xarray/tests/test_plot.py:1167: note:     def arange(integer[Any] | floating[Any] | datetime64[date | int | None] | timedelta64[timedelta | int | None] | float | str, /, stop: integer[Any] | floating[Any] | datetime64[date | int | None] | timedelta64[timedelta | int | None] | float | str | None = ..., step: integer[Any] | floating[Any] | datetime64[date | int | None] | timedelta64[timedelta | int | None] | float | None = ..., *, dtype: type[Any] | dtype[Any] | _HasDType[dtype[Any]] | _HasNumPyDType[dtype[Any]] | tuple[Any, Any] | list[Any] | _DTypeDict | str | None = ..., device: Literal['cpu'] | None = ..., like: _SupportsArrayFunc | None = ...) -> ndarray[tuple[int], dtype[Any]]
+ xarray/tests/test_plot.py:1168: note:     def arange(str, /, stop: str, step: int | timedelta64[timedelta | int | None] | integer[Any] | numpy.bool[builtins.bool] | None = ..., *, dtype: type[datetime64[date | int | None]] | dtype[datetime64[date | int | None]] | _HasDType[dtype[datetime64[date | int | None]]] | _HasNumPyDType[dtype[datetime64[date | int | None]]] | Literal['datetime64', '|datetime64', '=datetime64', '<datetime64', '>datetime64', 'datetime64[Y]', '|datetime64[Y]', '=datetime64[Y]', '<datetime64[Y]', '>datetime64[Y]', 'datetime64[M]', '|datetime64[M]', '=datetime64[M]', '<datetime64[M]', '>datetime64[M]', 'datetime64[W]', '|datetime64[W]', '=datetime64[W]', '<datetime64[W]', '>datetime64[W]', 'datetime64[D]', '|datetime64[D]', '=datetime64[D]', '<datetime64[D]', '>datetime64[D]', 'datetime64[h]', '|datetime64[h]', '=datetime64[h]', '<datetime64[h]', '>datetime64[h]', 'datetime64[m]', '|datetime64[m]', '=datetime64[m]', '<datetime64[m]', '>datetime64[m]', 'datetime64[s]', '|datetime64[s]', '=datetime64[s]', '<datetime64[s]', '>datetime64[s]', 'datetime64[ms]', '|datetime64[ms]', '=datetime64[ms]', '<datetime64[ms]', '>datetime64[ms]', 'datetime64[us]', '|datetime64[us]', '=datetime64[us]', '<datetime64[us]', '>datetime64[us]', 'datetime64[ns]', '|datetime64[ns]', '=datetime64[ns]', '<datetime64[ns]', '>datetime64[ns]', 'datetime64[ps]', '|datetime64[ps]', '=datetime64[ps]', '<datetime64[ps]', '>datetime64[ps]', 'datetime64[fs]', '|datetime64[fs]', '=datetime64[fs]', '<datetime64[fs]', '>datetime64[fs]', 'datetime64[as]', '|datetime64[as]', '=datetime64[as]', '<datetime64[as]', '>datetime64[as]', 'M', '|M', '=M', '<M', '>M', 'M8', '|M8', '=M8', '<M8', '>M8', 'M8[Y]', '|M8[Y]', '=M8[Y]', '<M8[Y]', '>M8[Y]', 'M8[M]', '|M8[M]', '=M8[M]', '<M8[M]', '>M8[M]', 'M8[W]', '|M8[W]', '=M8[W]', '<M8[W]', '>M8[W]', 'M8[D]', '|M8[D]', '=M8[D]', '<M8[D]', '>M8[D]', 'M8[h]', '|M8[h]', '=M8[h]', '<M8[h]', '>M8[h]', 'M8[m]', '|M8[m]', '=M8[m]', '<M8[m]', '>M8[m]', 'M8[s]', '|M8[s]', '=M8[s]', '<M8[s]', '>M8[s]', 'M8[ms]', '|M8[ms]', '=M8[ms]', '<M8[ms]', '>M8[ms]', 'M8[us]', '|M8[us]', '=M8[us]', '<M8[us]', '>M8[us]', 'M8[ns]', '|M8[ns]', '=M8[ns]', '<M8[ns]', '>M8[ns]', 'M8[ps]', '|M8[ps]', '=M8[ps]', '<M8[ps]', '>M8[ps]', 'M8[fs]', '|M8[fs]', '=M8[fs]', '<M8[fs]', '>M8[fs]', 'M8[as]', '|M8[as]', '=M8[as]', '<M8[as]', '>M8[as]'], device: Literal['cpu'] | None = ..., like: _SupportsArrayFunc | None = ...) -> ndarray[tuple[int], dtype[datetime64[Any]]]
- xarray/tests/test_plot.py:1168: note:     def arange(integer[Any] | floating[Any] | datetime64[date | int | None] | timedelta64[timedelta | int | None] | float, /, stop: integer[Any] | floating[Any] | datetime64[date | int | None] | timedelta64[timedelta | int | None] | float | None = ..., step: integer[Any] | floating[Any] | datetime64[date | int | None] | timedelta64[timedelta | int | None] | float | None = ..., *, dtype: type[Any] | dtype[Any] | _HasDType[dtype[Any]] | _HasNumPyDType[dtype[Any]] | tuple[Any, Any] | list[Any] | _DTypeDict | str | None = ..., device: Literal['cpu'] | None = ..., like: _SupportsArrayFunc | None = ...) -> ndarray[tuple[int], dtype[Any]]
+ xarray/tests/test_plot.py:1168: note:     def arange(integer[Any] | floating[Any] | datetime64[date | int | None] | timedelta64[timedelta | int | None] | float | str, /, stop: integer[Any] | floating[Any] | datetime64[date | int | None] | timedelta64[timedelta | int | None] | float | str | None = ..., step: integer[Any] | floating[Any] | datetime64[date | int | None] | timedelta64[timedelta | int | None] | float | None = ..., *, dtype: type[Any] | dtype[Any] | _HasDType[dtype[Any]] | _HasNumPyDType[dtype[Any]] | tuple[Any, Any] | list[Any] | _DTypeDict | str | None = ..., device: Literal['cpu'] | None = ..., like: _SupportsArrayFunc | None = ...) -> ndarray[tuple[int], dtype[Any]]

@charris charris merged commit 1436c29 into numpy:maintenance/2.4.x Jan 11, 2026
11 checks passed
@charris charris deleted the backport-20631 branch January 11, 2026 21:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

08 - Backport Used to tag backport PRs 41 - Static typing

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants