34 lines
1.1 KiB
Cython
34 lines
1.1 KiB
Cython
import numpy as np
|
|
|
|
cimport numpy as cnp
|
|
|
|
cnp.import_array()
|
|
|
|
from pandas._libs.util cimport is_array
|
|
|
|
|
|
cdef cnp.dtype _dtype_obj = np.dtype("object")
|
|
|
|
|
|
cpdef check_result_array(object obj, object dtype):
|
|
# Our operation is supposed to be an aggregation/reduction. If
|
|
# it returns an ndarray, this likely means an invalid operation has
|
|
# been passed. See test_apply_without_aggregation, test_agg_must_agg
|
|
if is_array(obj):
|
|
if dtype != _dtype_obj:
|
|
# If it is object dtype, the function can be a reduction/aggregation
|
|
# and still return an ndarray e.g. test_agg_over_numpy_arrays
|
|
raise ValueError("Must produce aggregated value")
|
|
|
|
|
|
cpdef inline extract_result(object res):
|
|
""" extract the result object, it might be a 0-dim ndarray
|
|
or a len-1 0-dim, or a scalar """
|
|
if hasattr(res, "_values"):
|
|
# Preserve EA
|
|
res = res._values
|
|
if res.ndim == 1 and len(res) == 1:
|
|
# see test_agg_lambda_with_timezone, test_resampler_grouper.py::test_apply
|
|
res = res[0]
|
|
return res
|