|  | 
| 12 | 12 | from pandas.core.dtypes.missing import isna | 
| 13 | 13 | 
 | 
| 14 | 14 | from pandas.core import nanops, ops | 
| 15 |  | -from pandas.core.array_algos import masked_reductions | 
| 16 | 15 | from pandas.core.arraylike import OpsMixin | 
| 17 | 16 | from pandas.core.arrays._mixins import NDArrayBackedExtensionArray | 
| 18 | 17 | from pandas.core.strings.object_array import ObjectStringArrayMixin | 
| @@ -275,83 +274,96 @@ def _values_for_factorize(self) -> Tuple[np.ndarray, int]: | 
| 275 | 274 | 
 | 
| 276 | 275 |     def any(self, *, axis=None, out=None, keepdims=False, skipna=True): | 
| 277 | 276 |         nv.validate_any((), dict(out=out, keepdims=keepdims)) | 
| 278 |  | -        return nanops.nanany(self._ndarray, axis=axis, skipna=skipna) | 
|  | 277 | +        result = nanops.nanany(self._ndarray, axis=axis, skipna=skipna) | 
|  | 278 | +        return self._wrap_reduction_result(axis, result) | 
| 279 | 279 | 
 | 
| 280 | 280 |     def all(self, *, axis=None, out=None, keepdims=False, skipna=True): | 
| 281 | 281 |         nv.validate_all((), dict(out=out, keepdims=keepdims)) | 
| 282 |  | -        return nanops.nanall(self._ndarray, axis=axis, skipna=skipna) | 
|  | 282 | +        result = nanops.nanall(self._ndarray, axis=axis, skipna=skipna) | 
|  | 283 | +        return self._wrap_reduction_result(axis, result) | 
| 283 | 284 | 
 | 
| 284 |  | -    def min(self, *, skipna: bool = True, **kwargs) -> Scalar: | 
|  | 285 | +    def min(self, *, axis=None, skipna: bool = True, **kwargs) -> Scalar: | 
| 285 | 286 |         nv.validate_min((), kwargs) | 
| 286 |  | -        return masked_reductions.min( | 
| 287 |  | -            values=self.to_numpy(), mask=self.isna(), skipna=skipna | 
|  | 287 | +        result = nanops.nanmin( | 
|  | 288 | +            values=self._ndarray, axis=axis, mask=self.isna(), skipna=skipna | 
| 288 | 289 |         ) | 
|  | 290 | +        return self._wrap_reduction_result(axis, result) | 
| 289 | 291 | 
 | 
| 290 |  | -    def max(self, *, skipna: bool = True, **kwargs) -> Scalar: | 
|  | 292 | +    def max(self, *, axis=None, skipna: bool = True, **kwargs) -> Scalar: | 
| 291 | 293 |         nv.validate_max((), kwargs) | 
| 292 |  | -        return masked_reductions.max( | 
| 293 |  | -            values=self.to_numpy(), mask=self.isna(), skipna=skipna | 
|  | 294 | +        result = nanops.nanmax( | 
|  | 295 | +            values=self._ndarray, axis=axis, mask=self.isna(), skipna=skipna | 
| 294 | 296 |         ) | 
|  | 297 | +        return self._wrap_reduction_result(axis, result) | 
| 295 | 298 | 
 | 
| 296 | 299 |     def sum(self, *, axis=None, skipna=True, min_count=0, **kwargs) -> Scalar: | 
| 297 | 300 |         nv.validate_sum((), kwargs) | 
| 298 |  | -        return nanops.nansum( | 
|  | 301 | +        result = nanops.nansum( | 
| 299 | 302 |             self._ndarray, axis=axis, skipna=skipna, min_count=min_count | 
| 300 | 303 |         ) | 
|  | 304 | +        return self._wrap_reduction_result(axis, result) | 
| 301 | 305 | 
 | 
| 302 | 306 |     def prod(self, *, axis=None, skipna=True, min_count=0, **kwargs) -> Scalar: | 
| 303 | 307 |         nv.validate_prod((), kwargs) | 
| 304 |  | -        return nanops.nanprod( | 
|  | 308 | +        result = nanops.nanprod( | 
| 305 | 309 |             self._ndarray, axis=axis, skipna=skipna, min_count=min_count | 
| 306 | 310 |         ) | 
|  | 311 | +        return self._wrap_reduction_result(axis, result) | 
| 307 | 312 | 
 | 
| 308 | 313 |     def mean(self, *, axis=None, dtype=None, out=None, keepdims=False, skipna=True): | 
| 309 | 314 |         nv.validate_mean((), dict(dtype=dtype, out=out, keepdims=keepdims)) | 
| 310 |  | -        return nanops.nanmean(self._ndarray, axis=axis, skipna=skipna) | 
|  | 315 | +        result = nanops.nanmean(self._ndarray, axis=axis, skipna=skipna) | 
|  | 316 | +        return self._wrap_reduction_result(axis, result) | 
| 311 | 317 | 
 | 
| 312 | 318 |     def median( | 
| 313 | 319 |         self, *, axis=None, out=None, overwrite_input=False, keepdims=False, skipna=True | 
| 314 | 320 |     ): | 
| 315 | 321 |         nv.validate_median( | 
| 316 | 322 |             (), dict(out=out, overwrite_input=overwrite_input, keepdims=keepdims) | 
| 317 | 323 |         ) | 
| 318 |  | -        return nanops.nanmedian(self._ndarray, axis=axis, skipna=skipna) | 
|  | 324 | +        result = nanops.nanmedian(self._ndarray, axis=axis, skipna=skipna) | 
|  | 325 | +        return self._wrap_reduction_result(axis, result) | 
| 319 | 326 | 
 | 
| 320 | 327 |     def std( | 
| 321 | 328 |         self, *, axis=None, dtype=None, out=None, ddof=1, keepdims=False, skipna=True | 
| 322 | 329 |     ): | 
| 323 | 330 |         nv.validate_stat_ddof_func( | 
| 324 | 331 |             (), dict(dtype=dtype, out=out, keepdims=keepdims), fname="std" | 
| 325 | 332 |         ) | 
| 326 |  | -        return nanops.nanstd(self._ndarray, axis=axis, skipna=skipna, ddof=ddof) | 
|  | 333 | +        result = nanops.nanstd(self._ndarray, axis=axis, skipna=skipna, ddof=ddof) | 
|  | 334 | +        return self._wrap_reduction_result(axis, result) | 
| 327 | 335 | 
 | 
| 328 | 336 |     def var( | 
| 329 | 337 |         self, *, axis=None, dtype=None, out=None, ddof=1, keepdims=False, skipna=True | 
| 330 | 338 |     ): | 
| 331 | 339 |         nv.validate_stat_ddof_func( | 
| 332 | 340 |             (), dict(dtype=dtype, out=out, keepdims=keepdims), fname="var" | 
| 333 | 341 |         ) | 
| 334 |  | -        return nanops.nanvar(self._ndarray, axis=axis, skipna=skipna, ddof=ddof) | 
|  | 342 | +        result = nanops.nanvar(self._ndarray, axis=axis, skipna=skipna, ddof=ddof) | 
|  | 343 | +        return self._wrap_reduction_result(axis, result) | 
| 335 | 344 | 
 | 
| 336 | 345 |     def sem( | 
| 337 | 346 |         self, *, axis=None, dtype=None, out=None, ddof=1, keepdims=False, skipna=True | 
| 338 | 347 |     ): | 
| 339 | 348 |         nv.validate_stat_ddof_func( | 
| 340 | 349 |             (), dict(dtype=dtype, out=out, keepdims=keepdims), fname="sem" | 
| 341 | 350 |         ) | 
| 342 |  | -        return nanops.nansem(self._ndarray, axis=axis, skipna=skipna, ddof=ddof) | 
|  | 351 | +        result = nanops.nansem(self._ndarray, axis=axis, skipna=skipna, ddof=ddof) | 
|  | 352 | +        return self._wrap_reduction_result(axis, result) | 
| 343 | 353 | 
 | 
| 344 | 354 |     def kurt(self, *, axis=None, dtype=None, out=None, keepdims=False, skipna=True): | 
| 345 | 355 |         nv.validate_stat_ddof_func( | 
| 346 | 356 |             (), dict(dtype=dtype, out=out, keepdims=keepdims), fname="kurt" | 
| 347 | 357 |         ) | 
| 348 |  | -        return nanops.nankurt(self._ndarray, axis=axis, skipna=skipna) | 
|  | 358 | +        result = nanops.nankurt(self._ndarray, axis=axis, skipna=skipna) | 
|  | 359 | +        return self._wrap_reduction_result(axis, result) | 
| 349 | 360 | 
 | 
| 350 | 361 |     def skew(self, *, axis=None, dtype=None, out=None, keepdims=False, skipna=True): | 
| 351 | 362 |         nv.validate_stat_ddof_func( | 
| 352 | 363 |             (), dict(dtype=dtype, out=out, keepdims=keepdims), fname="skew" | 
| 353 | 364 |         ) | 
| 354 |  | -        return nanops.nanskew(self._ndarray, axis=axis, skipna=skipna) | 
|  | 365 | +        result = nanops.nanskew(self._ndarray, axis=axis, skipna=skipna) | 
|  | 366 | +        return self._wrap_reduction_result(axis, result) | 
| 355 | 367 | 
 | 
| 356 | 368 |     # ------------------------------------------------------------------------ | 
| 357 | 369 |     # Additional Methods | 
|  | 
0 commit comments