Skip to content

Commit 820b29f

Browse files
committed
add NumpyExtensionArray
add all arrays removed disappeared classes fixup remove internal APIs and add tests tests more overloads more tests mypy test_timedelta_array two more test files interval array Categorical numpy_extension_array refactor after separating dtype args test dtype dtype numpy extension array fix: py310 floating pyright
1 parent 0dcb695 commit 820b29f

31 files changed

+670
-181
lines changed

pandas-stubs/_libs/arrays.pyi

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from collections.abc import Sequence
2+
from typing import Any
3+
4+
import numpy as np
5+
from typing_extensions import Self
6+
7+
from pandas._typing import (
8+
AnyArrayLikeInt,
9+
AxisInt,
10+
DtypeObj,
11+
Shape,
12+
)
13+
14+
class NDArrayBacked:
15+
_dtype: DtypeObj
16+
_ndarray: np.ndarray
17+
def __setstate__(self, state: Any) -> None: ...
18+
def __len__(self) -> int: ...
19+
@property
20+
def shape(self) -> Shape: ...
21+
@property
22+
def ndim(self) -> int: ...
23+
@property
24+
def size(self) -> int: ...
25+
@property
26+
def nbytes(self) -> int: ...
27+
def copy(self, order=...) -> Self: ...
28+
def delete(self, loc, axis=...) -> Self: ...
29+
def swapaxes(self, axis1, axis2) -> Self: ...
30+
def repeat(
31+
self,
32+
repeats: int | Sequence[int] | AnyArrayLikeInt,
33+
axis: AxisInt | None = None,
34+
) -> Self: ...
35+
def reshape(self, *args: Any, **kwargs: Any) -> Self: ...
36+
def ravel(self, order=...) -> Self: ...
37+
@property
38+
def T(self) -> Self: ...

pandas-stubs/arrays/__init__.pyi

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,31 @@
11
from pandas.core.arrays import (
2-
BooleanArray as BooleanArray,
3-
Categorical as Categorical,
4-
DatetimeArray as DatetimeArray,
5-
IntegerArray as IntegerArray,
6-
IntervalArray as IntervalArray,
7-
PandasArray as PandasArray,
8-
PeriodArray as PeriodArray,
9-
SparseArray as SparseArray,
10-
StringArray as StringArray,
11-
TimedeltaArray as TimedeltaArray,
2+
ArrowExtensionArray,
3+
ArrowStringArray,
4+
BooleanArray,
5+
Categorical,
6+
DatetimeArray,
7+
FloatingArray,
8+
IntegerArray,
9+
IntervalArray,
10+
NumpyExtensionArray,
11+
PeriodArray,
12+
SparseArray,
13+
StringArray,
14+
TimedeltaArray,
1215
)
16+
17+
__all__ = [
18+
"ArrowExtensionArray",
19+
"ArrowStringArray",
20+
"BooleanArray",
21+
"Categorical",
22+
"DatetimeArray",
23+
"FloatingArray",
24+
"IntegerArray",
25+
"IntervalArray",
26+
"NumpyExtensionArray",
27+
"PeriodArray",
28+
"SparseArray",
29+
"StringArray",
30+
"TimedeltaArray",
31+
]

pandas-stubs/core/algorithms.pyi

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,19 @@ def unique(values: IntervalIndex[IntervalT]) -> IntervalIndex[IntervalT]: ...
3838
@overload
3939
def unique(values: PeriodIndex) -> PeriodIndex: ...
4040
@overload
41-
# switch to DatetimeIndex after Pandas 3.0
41+
# TODO: switch to DatetimeIndex after Pandas 3.0 pandas-dev/pandas#57064
4242
def unique(values: DatetimeIndex) -> np_1darray_dt | DatetimeIndex: ...
4343
@overload
44-
# switch to TimedeltaIndex after Pandas 3.0
44+
# TODO: switch to TimedeltaIndex after Pandas 3.0 pandas-dev/pandas#57064
4545
def unique(values: TimedeltaIndex) -> np_1darray_td: ...
4646
@overload
4747
# switch to Index[int] after Pandas 3.0
4848
def unique(values: RangeIndex) -> np_1darray_int64: ...
4949
@overload
5050
def unique(values: MultiIndex) -> np_ndarray: ...
5151
@overload
52-
def unique(values: Index) -> np_1darray | Index: ... # switch to Index after Pandas 3.0
52+
# TODO: switch to Index after Pandas 3.0 pandas-dev/pandas#57064
53+
def unique(values: Index) -> np_1darray | Index: ...
5354
@overload
5455
def unique(values: Categorical) -> Categorical: ...
5556

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,39 @@
1+
from pandas.core.arrays.arrow import ArrowExtensionArray
12
from pandas.core.arrays.base import (
2-
ExtensionArray as ExtensionArray,
3-
ExtensionOpsMixin as ExtensionOpsMixin,
4-
ExtensionScalarOpsMixin as ExtensionScalarOpsMixin,
3+
ExtensionArray,
4+
ExtensionOpsMixin,
5+
ExtensionScalarOpsMixin,
56
)
6-
from pandas.core.arrays.boolean import BooleanArray as BooleanArray
7-
from pandas.core.arrays.categorical import Categorical as Categorical
8-
from pandas.core.arrays.datetimes import DatetimeArray as DatetimeArray
9-
from pandas.core.arrays.integer import IntegerArray as IntegerArray
10-
from pandas.core.arrays.interval import IntervalArray as IntervalArray
11-
from pandas.core.arrays.numpy_ import PandasArray as PandasArray
12-
from pandas.core.arrays.period import PeriodArray as PeriodArray
13-
from pandas.core.arrays.sparse import SparseArray as SparseArray
14-
from pandas.core.arrays.string_ import StringArray as StringArray
15-
from pandas.core.arrays.timedeltas import TimedeltaArray as TimedeltaArray
7+
from pandas.core.arrays.boolean import BooleanArray
8+
from pandas.core.arrays.categorical import Categorical
9+
from pandas.core.arrays.datetimes import DatetimeArray
10+
from pandas.core.arrays.floating import FloatingArray
11+
from pandas.core.arrays.integer import IntegerArray
12+
from pandas.core.arrays.interval import IntervalArray
13+
from pandas.core.arrays.masked import BaseMaskedArray
14+
from pandas.core.arrays.numpy_ import NumpyExtensionArray
15+
from pandas.core.arrays.period import PeriodArray
16+
from pandas.core.arrays.sparse import SparseArray
17+
from pandas.core.arrays.string_ import StringArray
18+
from pandas.core.arrays.string_arrow import ArrowStringArray
19+
from pandas.core.arrays.timedeltas import TimedeltaArray
20+
21+
__all__ = [
22+
"ArrowExtensionArray",
23+
"ArrowStringArray",
24+
"BaseMaskedArray",
25+
"BooleanArray",
26+
"Categorical",
27+
"DatetimeArray",
28+
"ExtensionArray",
29+
"ExtensionOpsMixin",
30+
"ExtensionScalarOpsMixin",
31+
"FloatingArray",
32+
"IntegerArray",
33+
"IntervalArray",
34+
"NumpyExtensionArray",
35+
"PeriodArray",
36+
"SparseArray",
37+
"StringArray",
38+
"TimedeltaArray",
39+
]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
class ArrowStringArrayMixin: ...
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from pandas.core.arrays.base import ExtensionArray
2+
from pandas.core.series import Series
3+
from typing_extensions import Self
4+
5+
from pandas._libs.arrays import NDArrayBacked
6+
from pandas._typing import (
7+
AxisInt,
8+
Scalar,
9+
)
10+
11+
class NDArrayBackedExtensionArray(NDArrayBacked, ExtensionArray):
12+
def argmin(self, axis: AxisInt = 0, skipna: bool = True) -> int: ...
13+
def argmax(self, axis: AxisInt = 0, skipna: bool = True) -> int: ...
14+
def insert(self, loc: int, item: Scalar) -> Self: ...
15+
def value_counts(self, dropna: bool = True) -> Series[int]: ...
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from pandas.core.arrays.arrow.accessors import (
2+
ListAccessor,
3+
StructAccessor,
4+
)
5+
from pandas.core.arrays.arrow.array import ArrowExtensionArray
6+
7+
__all__ = ["ArrowExtensionArray", "ListAccessor", "StructAccessor"]
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from abc import ABCMeta
2+
3+
class ArrowAccessor(metaclass=ABCMeta): ...
4+
class ListAccessor(ArrowAccessor): ...
5+
class StructAccessor(ArrowAccessor): ...
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from pandas.core.arraylike import OpsMixin
2+
from pandas.core.arrays._arrow_string_mixins import ArrowStringArrayMixin
3+
from pandas.core.arrays.base import ExtensionArraySupportsAnyAll
4+
5+
class ArrowExtensionArray(
6+
OpsMixin, ExtensionArraySupportsAnyAll, ArrowStringArrayMixin
7+
): ...

pandas-stubs/core/arrays/base.pyi

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class ExtensionArray:
8787
) -> np.intp: ...
8888
def factorize(self, use_na_sentinel: bool = True) -> tuple[np_1darray, Self]: ...
8989
def repeat(
90-
self, repeats: int | AnyArrayLikeInt | Sequence[int], axis: None = None
90+
self, repeats: int | Sequence[int] | AnyArrayLikeInt, axis: None = None
9191
) -> Self: ...
9292
def take(
9393
self,
@@ -114,6 +114,8 @@ class ExtensionArray:
114114
**kwargs: Any,
115115
) -> Self: ...
116116

117+
class ExtensionArraySupportsAnyAll(ExtensionArray): ...
118+
117119
class ExtensionOpsMixin:
118120
@classmethod
119121
def _add_arithmetic_ops(cls) -> None: ...

0 commit comments

Comments
 (0)