Skip to content

Commit a58fb19

Browse files
TYP: stricter typing of return value of to_numpy_dtype_inference helper function (pandas-dev#62284)
1 parent 3428a7f commit a58fb19

File tree

1 file changed

+21
-19
lines changed

1 file changed

+21
-19
lines changed

pandas/core/arrays/_utils.py

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,49 +15,51 @@
1515

1616
if TYPE_CHECKING:
1717
from pandas._typing import (
18-
ArrayLike,
1918
npt,
2019
)
2120

21+
from pandas.core.arrays.base import ExtensionArray
22+
2223

2324
def to_numpy_dtype_inference(
24-
arr: ArrayLike, dtype: npt.DTypeLike | None, na_value, hasna: bool
25-
) -> tuple[npt.DTypeLike, Any]:
25+
arr: ExtensionArray, dtype: npt.DTypeLike | None, na_value, hasna: bool
26+
) -> tuple[np.dtype | None, Any]:
27+
result_dtype: np.dtype | None
28+
inferred_numeric_dtype = False
2629
if dtype is None and is_numeric_dtype(arr.dtype):
27-
dtype_given = False
30+
inferred_numeric_dtype = True
2831
if hasna:
2932
if arr.dtype.kind == "b":
30-
dtype = np.dtype(np.object_)
33+
result_dtype = np.dtype(np.object_)
3134
else:
3235
if arr.dtype.kind in "iu":
33-
dtype = np.dtype(np.float64)
36+
result_dtype = np.dtype(np.float64)
3437
else:
35-
dtype = arr.dtype.numpy_dtype # type: ignore[union-attr]
38+
result_dtype = arr.dtype.numpy_dtype # type: ignore[attr-defined]
3639
if na_value is lib.no_default:
3740
na_value = np.nan
3841
else:
39-
dtype = arr.dtype.numpy_dtype # type: ignore[union-attr]
42+
result_dtype = arr.dtype.numpy_dtype # type: ignore[attr-defined]
4043
elif dtype is not None:
41-
dtype = np.dtype(dtype)
42-
dtype_given = True
44+
result_dtype = np.dtype(dtype)
4345
else:
44-
dtype_given = True
46+
result_dtype = None
4547

4648
if na_value is lib.no_default:
47-
if dtype is None or not hasna:
49+
if result_dtype is None or not hasna:
4850
na_value = arr.dtype.na_value
49-
elif dtype.kind == "f": # type: ignore[union-attr]
51+
elif result_dtype.kind == "f":
5052
na_value = np.nan
51-
elif dtype.kind == "M": # type: ignore[union-attr]
53+
elif result_dtype.kind == "M":
5254
na_value = np.datetime64("nat")
53-
elif dtype.kind == "m": # type: ignore[union-attr]
55+
elif result_dtype.kind == "m":
5456
na_value = np.timedelta64("nat")
5557
else:
5658
na_value = arr.dtype.na_value
5759

58-
if not dtype_given and hasna:
60+
if inferred_numeric_dtype and hasna:
5961
try:
60-
np_can_hold_element(dtype, na_value) # type: ignore[arg-type]
62+
np_can_hold_element(result_dtype, na_value) # type: ignore[arg-type]
6163
except LossySetitemError:
62-
dtype = np.dtype(np.object_)
63-
return dtype, na_value
64+
result_dtype = np.dtype(np.object_)
65+
return result_dtype, na_value

0 commit comments

Comments
 (0)