|
1 |
| -from functools import wraps |
2 | 1 | import numbers
|
3 | 2 |
|
4 | 3 | import numpy as np
|
5 | 4 |
|
6 | 5 | from pandas._libs import lib
|
| 6 | +from pandas.compat.numpy import function as nv |
7 | 7 |
|
8 | 8 | from pandas.core.dtypes.common import extract_array
|
9 | 9 | from pandas.core.dtypes.dtypes import ExtensionDtype
|
|
16 | 16 | from .base import ExtensionArray, ExtensionOpsMixin
|
17 | 17 |
|
18 | 18 |
|
19 |
| -def _validate_reduction_args(func): |
20 |
| - """ |
21 |
| - Validate that unused keyword arguments are not set. |
22 |
| - """ |
23 |
| - check = {'out', 'keepdims', 'initial', 'dtype'} |
24 |
| - |
25 |
| - msg = ( |
26 |
| - "'{}' does not support the '{}' parameter." |
27 |
| - ) |
28 |
| - |
29 |
| - @wraps(func) |
30 |
| - def wrapper(*args, **kwargs): |
31 |
| - if len(args) > 1: |
32 |
| - raise TypeError( |
33 |
| - "'{}' requires keyword arguments.".format(func.__name__) |
34 |
| - ) |
35 |
| - for kw, value in kwargs.items(): |
36 |
| - if kw in check and value is not None: |
37 |
| - raise TypeError(msg.format(func.__name__, kw)) |
38 |
| - elif kw == 'ovewrite_input' and kw is not False: |
39 |
| - raise TypeError(msg.format(func.__name__, kw)) |
40 |
| - |
41 |
| - return func(*args, **kwargs) |
42 |
| - return wrapper |
43 |
| - |
44 |
| - |
45 | 19 | class PandasDtype(ExtensionDtype):
|
46 | 20 | """
|
47 | 21 | A Pandas ExtensionDtype for NumPy dtypes.
|
@@ -333,72 +307,83 @@ def _reduce(self, name, skipna=True, **kwargs):
|
333 | 307 | )
|
334 | 308 | raise TypeError(msg.format(type(self).__name__, name))
|
335 | 309 |
|
336 |
| - @_validate_reduction_args |
337 |
| - def any(self, axis=None, out=None, keepdims=None, skipna=True): |
| 310 | + # @_validate_reduction_args |
| 311 | + def any(self, axis=None, out=None, keepdims=False, skipna=True): |
| 312 | + nv.validate_any((), dict(out=out, keepdims=keepdims)) |
338 | 313 | return nanops.nanany(self._ndarray, axis=axis, skipna=skipna)
|
339 | 314 |
|
340 |
| - @_validate_reduction_args |
341 |
| - def all(self, axis=None, out=None, keepdims=None, skipna=True): |
| 315 | + # @_validate_reduction_args |
| 316 | + def all(self, axis=None, out=None, keepdims=False, skipna=True): |
| 317 | + nv.validate_all((), dict(out=out, keepdims=keepdims)) |
342 | 318 | return nanops.nanall(self._ndarray, axis=axis, skipna=skipna)
|
343 | 319 |
|
344 |
| - @_validate_reduction_args |
345 |
| - def min(self, axis=None, out=None, keepdims=None, initial=None, |
346 |
| - skipna=True): |
| 320 | + # @_validate_reduction_args |
| 321 | + def min(self, axis=None, out=None, keepdims=False, skipna=True): |
| 322 | + nv.validate_min((), dict(out=out, keepdims=keepdims)) |
347 | 323 | return nanops.nanmin(self._ndarray, axis=axis, skipna=skipna)
|
348 | 324 |
|
349 |
| - @_validate_reduction_args |
350 |
| - def max(self, axis=None, out=None, keepdims=None, initial=None, |
351 |
| - skipna=True): |
| 325 | + # @_validate_reduction_args |
| 326 | + def max(self, axis=None, out=None, keepdims=False, skipna=True): |
| 327 | + nv.validate_max((), dict(out=out, keepdims=keepdims)) |
352 | 328 | return nanops.nanmax(self._ndarray, axis=axis, skipna=skipna)
|
353 | 329 |
|
354 |
| - @_validate_reduction_args |
355 |
| - def sum(self, axis=None, dtype=None, out=None, keepdims=None, |
| 330 | + # @_validate_reduction_args |
| 331 | + def sum(self, axis=None, dtype=None, out=None, keepdims=False, |
356 | 332 | initial=None, skipna=True, min_count=0):
|
| 333 | + nv.validate_sum((), dict(dtype=dtype, out=out, keepdims=keepdims, |
| 334 | + initial=initial)) |
357 | 335 | return nanops.nansum(self._ndarray, axis=axis, skipna=skipna,
|
358 | 336 | min_count=min_count)
|
359 | 337 |
|
360 |
| - @_validate_reduction_args |
361 |
| - def prod(self, axis=None, dtype=None, out=None, keepdims=None, |
| 338 | + def prod(self, axis=None, dtype=None, out=None, keepdims=False, |
362 | 339 | initial=None, skipna=True, min_count=0):
|
| 340 | + nv.validate_prod((), dict(dtype=dtype, out=out, keepdims=keepdims, |
| 341 | + initial=initial)) |
363 | 342 | return nanops.nanprod(self._ndarray, axis=axis, skipna=skipna,
|
364 | 343 | min_count=min_count)
|
365 | 344 |
|
366 |
| - @_validate_reduction_args |
367 |
| - def mean(self, axis=None, dtype=None, out=None, keepdims=None, |
| 345 | + def mean(self, axis=None, dtype=None, out=None, keepdims=False, |
368 | 346 | skipna=True):
|
| 347 | + nv.validate_mean((), dict(dtype=dtype, out=out, keepdims=keepdims)) |
369 | 348 | return nanops.nanmean(self._ndarray, axis=axis, skipna=skipna)
|
370 | 349 |
|
371 |
| - @_validate_reduction_args |
372 | 350 | def median(self, axis=None, out=None, overwrite_input=False,
|
373 | 351 | keepdims=False, skipna=True):
|
| 352 | + nv.validate_median((), dict(out=out, overwrite_input=overwrite_input, |
| 353 | + keepdims=keepdims)) |
374 | 354 | return nanops.nanmedian(self._ndarray, axis=axis, skipna=skipna)
|
375 | 355 |
|
376 |
| - @_validate_reduction_args |
377 |
| - def std(self, axis=None, dtype=None, out=None, ddof=1, keepdims=None, |
| 356 | + def std(self, axis=None, dtype=None, out=None, ddof=1, keepdims=False, |
378 | 357 | skipna=True):
|
| 358 | + nv.validate_stat_ddof_func((), dict(dtype=dtype, out=out, |
| 359 | + keepdims=keepdims)) |
379 | 360 | return nanops.nanstd(self._ndarray, axis=axis, skipna=skipna,
|
380 | 361 | ddof=ddof)
|
381 | 362 |
|
382 |
| - @_validate_reduction_args |
383 |
| - def var(self, axis=None, dtype=None, out=None, ddof=1, keepdims=None, |
| 363 | + def var(self, axis=None, dtype=None, out=None, ddof=1, keepdims=False, |
384 | 364 | skipna=True):
|
| 365 | + nv.validate_stat_ddof_func((), dict(dtype=dtype, out=out, |
| 366 | + keepdims=keepdims)) |
385 | 367 | return nanops.nanvar(self._ndarray, axis=axis, skipna=skipna,
|
386 | 368 | ddof=ddof)
|
387 | 369 |
|
388 |
| - @_validate_reduction_args |
389 |
| - def sem(self, axis=None, dtype=None, out=None, ddof=1, keepdims=None, |
| 370 | + def sem(self, axis=None, dtype=None, out=None, ddof=1, keepdims=False, |
390 | 371 | skipna=True):
|
| 372 | + nv.validate_stat_ddof_func((), dict(dtype=dtype, out=out, |
| 373 | + keepdims=keepdims)) |
391 | 374 | return nanops.nansem(self._ndarray, axis=axis, skipna=skipna,
|
392 | 375 | ddof=ddof)
|
393 | 376 |
|
394 |
| - @_validate_reduction_args |
395 |
| - def kurt(self, axis=None, dtype=None, out=None, keepdims=None, |
| 377 | + def kurt(self, axis=None, dtype=None, out=None, keepdims=False, |
396 | 378 | skipna=True):
|
| 379 | + nv.validate_stat_ddof_func((), dict(dtype=dtype, out=out, |
| 380 | + keepdims=keepdims)) |
397 | 381 | return nanops.nankurt(self._ndarray, axis=axis, skipna=skipna)
|
398 | 382 |
|
399 |
| - @_validate_reduction_args |
400 |
| - def skew(self, axis=None, dtype=None, out=None, keepdims=None, |
| 383 | + def skew(self, axis=None, dtype=None, out=None, keepdims=False, |
401 | 384 | skipna=True):
|
| 385 | + nv.validate_stat_ddof_func((), dict(dtype=dtype, out=out, |
| 386 | + keepdims=keepdims)) |
402 | 387 | return nanops.nanskew(self._ndarray, axis=axis, skipna=skipna)
|
403 | 388 |
|
404 | 389 | # ------------------------------------------------------------------------
|
|
0 commit comments