Skip to content

Commit 00d8d2a

Browse files
authored
Backport PR #61098: CI/TST: Address TestArrowArray::test_reduce_series_numeric supporting skew (#61102)
* Backport PR #61098: CI/TST: Address TestArrowArray::test_reduce_series_numeric supporting skew * remove skew from check * Remove kurt too * Add skew to bool skip list * Add boolean * bool fails regardless of skipna
1 parent 47bc953 commit 00d8d2a

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

pandas/compat/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
pa_version_under17p0,
3636
pa_version_under18p0,
3737
pa_version_under19p0,
38+
pa_version_under20p0,
3839
)
3940

4041
if TYPE_CHECKING:
@@ -195,6 +196,7 @@ def get_bz2_file() -> type[pandas.compat.compressors.BZ2File]:
195196
"pa_version_under17p0",
196197
"pa_version_under18p0",
197198
"pa_version_under19p0",
199+
"pa_version_under20p0",
198200
"HAS_PYARROW",
199201
"IS64",
200202
"ISMUSL",

pandas/tests/extension/test_arrow.py

+26-9
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
pa_version_under11p0,
4141
pa_version_under13p0,
4242
pa_version_under14p0,
43+
pa_version_under20p0,
4344
)
4445

4546
from pandas.core.dtypes.dtypes import (
@@ -448,6 +449,9 @@ def test_accumulate_series(self, data, all_numeric_accumulations, skipna, reques
448449
self.check_accumulate(ser, op_name, skipna)
449450

450451
def _supports_reduction(self, ser: pd.Series, op_name: str) -> bool:
452+
if op_name == "kurt" or (pa_version_under20p0 and op_name == "skew"):
453+
return False
454+
451455
dtype = ser.dtype
452456
# error: Item "dtype[Any]" of "dtype[Any] | ExtensionDtype" has
453457
# no attribute "pyarrow_dtype"
@@ -464,7 +468,7 @@ def _supports_reduction(self, ser: pd.Series, op_name: str) -> bool:
464468
pass
465469
else:
466470
return False
467-
elif pa.types.is_binary(pa_dtype) and op_name == "sum":
471+
elif pa.types.is_binary(pa_dtype) and op_name in ["sum", "skew"]:
468472
return False
469473
elif (
470474
pa.types.is_string(pa_dtype) or pa.types.is_binary(pa_dtype)
@@ -525,18 +529,31 @@ def test_reduce_series_numeric(self, data, all_numeric_reductions, skipna, reque
525529
f"pyarrow={pa.__version__} for {pa_dtype}"
526530
),
527531
)
528-
if all_numeric_reductions in {"skew", "kurt"} and (
529-
dtype._is_numeric or dtype.kind == "b"
530-
):
531-
request.applymarker(xfail_mark)
532-
533-
elif pa.types.is_boolean(pa_dtype) and all_numeric_reductions in {
532+
if pa.types.is_boolean(pa_dtype) and all_numeric_reductions in {
534533
"sem",
535534
"std",
536535
"var",
537536
"median",
538537
}:
539538
request.applymarker(xfail_mark)
539+
elif (
540+
not pa_version_under20p0
541+
and all_numeric_reductions == "skew"
542+
and (
543+
pa.types.is_boolean(pa_dtype)
544+
or (
545+
skipna
546+
and (
547+
pa.types.is_integer(pa_dtype) or pa.types.is_floating(pa_dtype)
548+
)
549+
)
550+
)
551+
):
552+
request.applymarker(
553+
pytest.mark.xfail(
554+
reason="https://github.com/apache/arrow/issues/45733",
555+
)
556+
)
540557
super().test_reduce_series_numeric(data, all_numeric_reductions, skipna)
541558

542559
@pytest.mark.parametrize("skipna", [True, False])
@@ -563,7 +580,7 @@ def _get_expected_reduction_dtype(self, arr, op_name: str, skipna: bool):
563580
if op_name in ["max", "min"]:
564581
cmp_dtype = arr.dtype
565582
elif arr.dtype.name == "decimal128(7, 3)[pyarrow]":
566-
if op_name not in ["median", "var", "std"]:
583+
if op_name not in ["median", "var", "std", "skew"]:
567584
cmp_dtype = arr.dtype
568585
else:
569586
cmp_dtype = "float64[pyarrow]"
@@ -582,7 +599,7 @@ def _get_expected_reduction_dtype(self, arr, op_name: str, skipna: bool):
582599
@pytest.mark.parametrize("skipna", [True, False])
583600
def test_reduce_frame(self, data, all_numeric_reductions, skipna, request):
584601
op_name = all_numeric_reductions
585-
if op_name == "skew":
602+
if op_name == "skew" and pa_version_under20p0:
586603
if data.dtype._is_numeric:
587604
mark = pytest.mark.xfail(reason="skew not implemented")
588605
request.applymarker(mark)

0 commit comments

Comments
 (0)