Skip to content

TYP: make numpy.typing available from pandas._typing #41945

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Jun 25, 2021
3 changes: 3 additions & 0 deletions pandas/_typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
final,
)

import numpy.typing as npt

from pandas._libs import (
Period,
Timedelta,
Expand Down Expand Up @@ -73,6 +75,7 @@
from pandas.io.formats.format import EngFormatter
from pandas.tseries.offsets import DateOffset
else:
npt: Any = None
# typing.final does not exist until py38
final = lambda x: x
# typing.TypedDict does not exist until py38
Expand Down
4 changes: 2 additions & 2 deletions pandas/core/frame.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,13 @@
IndexKeyFunc,
IndexLabel,
Level,
NpDtype,
PythonFuncType,
Renamer,
Scalar,
StorageOptions,
Suffixes,
ValueKeyFunc,
npt,
)
from pandas.compat._optional import import_optional_dependency
from pandas.compat.numpy import function as nv
Expand Down Expand Up @@ -1593,7 +1593,7 @@ def from_dict(

def to_numpy(
self,
dtype: NpDtype | None = None,
dtype: npt.DTypeLike | None = None,
copy: bool = False,
na_value=lib.no_default,
) -> np.ndarray:
Expand Down
4 changes: 2 additions & 2 deletions pandas/core/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
JSONSerializable,
Level,
Manager,
NpDtype,
RandomState,
Renamer,
StorageOptions,
Expand All @@ -55,6 +54,7 @@
TimestampConvertibleTypes,
ValueKeyFunc,
final,
npt,
)
from pandas.compat._optional import import_optional_dependency
from pandas.compat.numpy import function as nv
Expand Down Expand Up @@ -1988,7 +1988,7 @@ def empty(self) -> bool_t:
# GH#23114 Ensure ndarray.__op__(DataFrame) returns NotImplemented
__array_priority__ = 1000

def __array__(self, dtype: NpDtype | None = None) -> np.ndarray:
def __array__(self, dtype: npt.DTypeLike | None = None) -> np.ndarray:
return np.asarray(self._values, dtype=dtype)

def __array_wrap__(
Expand Down
37 changes: 26 additions & 11 deletions pandas/core/internals/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
from pandas._libs.internals import BlockPlacement
from pandas._typing import (
ArrayLike,
Dtype,
DtypeObj,
Shape,
npt,
type_t,
)
from pandas.errors import PerformanceWarning
Expand Down Expand Up @@ -1385,7 +1385,7 @@ def to_dict(self, copy: bool = True):
def as_array(
self,
transpose: bool = False,
dtype: Dtype | None = None,
dtype: npt.DTypeLike | None = None,
copy: bool = False,
na_value=lib.no_default,
) -> np.ndarray:
Expand Down Expand Up @@ -1425,17 +1425,21 @@ def as_array(
# error: Item "ndarray" of "Union[ndarray, ExtensionArray]" has no
# attribute "to_numpy"
arr = blk.values.to_numpy( # type: ignore[union-attr]
dtype=dtype, na_value=na_value
# pandas/core/internals/managers.py:1428: error: Argument "dtype" to
# "to_numpy" of "ExtensionArray" has incompatible type
# "Optional[Union[dtype[Any], None, type, _SupportsDType, str,
# Union[Tuple[Any, int], Tuple[Any, Union[SupportsIndex,
# Sequence[SupportsIndex]]], List[Any], _DTypeDict, Tuple[Any,
# Any]]]]"; expected "Optional[Union[ExtensionDtype, Union[str,
# dtype[Any]], Type[str], Type[float], Type[int], Type[complex],
# Type[bool], Type[object]]]"
dtype=dtype, # type: ignore[arg-type]
na_value=na_value,
).reshape(blk.shape)
else:
arr = np.asarray(blk.get_values())
if dtype:
# error: Argument 1 to "astype" of "_ArrayOrScalarCommon" has
# incompatible type "Union[ExtensionDtype, str, dtype[Any],
# Type[object]]"; expected "Union[dtype[Any], None, type,
# _SupportsDType, str, Union[Tuple[Any, int], Tuple[Any, Union[int,
# Sequence[int]]], List[Any], _DTypeDict, Tuple[Any, Any]]]"
arr = arr.astype(dtype, copy=False) # type: ignore[arg-type]
arr = arr.astype(dtype, copy=False)
else:
arr = self._interleave(dtype=dtype, na_value=na_value)
# The underlying data was copied within _interleave
Expand All @@ -1450,7 +1454,9 @@ def as_array(
return arr.transpose() if transpose else arr

def _interleave(
self, dtype: Dtype | None = None, na_value=lib.no_default
self,
dtype: npt.DTypeLike | ExtensionDtype | None = None,
na_value=lib.no_default,
) -> np.ndarray:
"""
Return ndarray from blocks with specified item order
Expand Down Expand Up @@ -1485,7 +1491,16 @@ def _interleave(
# error: Item "ndarray" of "Union[ndarray, ExtensionArray]" has no
# attribute "to_numpy"
arr = blk.values.to_numpy( # type: ignore[union-attr]
dtype=dtype, na_value=na_value
# pandas/core/internals/managers.py:1485: error: Argument "dtype" to
# "to_numpy" of "ExtensionArray" has incompatible type
# "Union[dtype[Any], None, type, _SupportsDType, str, Tuple[Any,
# Union[SupportsIndex, Sequence[SupportsIndex]]], List[Any],
# _DTypeDict, Tuple[Any, Any], ExtensionDtype]"; expected
# "Optional[Union[ExtensionDtype, Union[str, dtype[Any]], Type[str],
# Type[float], Type[int], Type[complex], Type[bool], Type[object]]]"
# [arg-type]
dtype=dtype, # type: ignore[arg-type]
na_value=na_value,
)
else:
# error: Argument 1 to "get_values" of "Block" has incompatible type
Expand Down
4 changes: 2 additions & 2 deletions pandas/core/series.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@
FillnaOptions,
FrameOrSeriesUnion,
IndexKeyFunc,
NpDtype,
SingleManager,
StorageOptions,
ValueKeyFunc,
npt,
)
from pandas.compat.numpy import function as nv
from pandas.errors import InvalidIndexError
Expand Down Expand Up @@ -808,7 +808,7 @@ def view(self, dtype: Dtype | None = None) -> Series:
# NDArray Compat
_HANDLED_TYPES = (Index, ExtensionArray, np.ndarray)

def __array__(self, dtype: NpDtype | None = None) -> np.ndarray:
def __array__(self, dtype: npt.DTypeLike | None = None) -> np.ndarray:
"""
Return the values as a NumPy array.

Expand Down