2
2
masked_reductions.py is for reduction algorithms using a mask-based approach
3
3
for missing values.
4
4
"""
5
+ from __future__ import annotations
5
6
6
- from typing import (
7
- Callable ,
8
- Optional ,
9
- )
7
+ from typing import Callable
10
8
11
9
import numpy as np
12
10
13
11
from pandas ._libs import missing as libmissing
12
+ from pandas ._typing import npt
14
13
15
14
from pandas .core .nanops import check_below_min_count
16
15
17
16
18
17
def _sumprod (
19
18
func : Callable ,
20
19
values : np .ndarray ,
21
- mask : np .ndarray ,
20
+ mask : npt . NDArray [ np .bool_ ] ,
22
21
* ,
23
22
skipna : bool = True ,
24
23
min_count : int = 0 ,
25
- axis : Optional [ int ] = None ,
24
+ axis : int | None = None ,
26
25
):
27
26
"""
28
27
Sum or product for 1D masked array.
@@ -33,7 +32,7 @@ def _sumprod(
33
32
values : np.ndarray
34
33
Numpy array with the values (can be of any dtype that support the
35
34
operation).
36
- mask : np.ndarray
35
+ mask : np.ndarray[bool]
37
36
Boolean numpy array (True values indicate missing values).
38
37
skipna : bool, default True
39
38
Whether to skip NA.
@@ -58,11 +57,11 @@ def _sumprod(
58
57
59
58
def sum (
60
59
values : np .ndarray ,
61
- mask : np .ndarray ,
60
+ mask : npt . NDArray [ np .bool_ ] ,
62
61
* ,
63
62
skipna : bool = True ,
64
63
min_count : int = 0 ,
65
- axis : Optional [ int ] = None ,
64
+ axis : int | None = None ,
66
65
):
67
66
return _sumprod (
68
67
np .sum , values = values , mask = mask , skipna = skipna , min_count = min_count , axis = axis
@@ -71,11 +70,11 @@ def sum(
71
70
72
71
def prod (
73
72
values : np .ndarray ,
74
- mask : np .ndarray ,
73
+ mask : npt . NDArray [ np .bool_ ] ,
75
74
* ,
76
75
skipna : bool = True ,
77
76
min_count : int = 0 ,
78
- axis : Optional [ int ] = None ,
77
+ axis : int | None = None ,
79
78
):
80
79
return _sumprod (
81
80
np .prod , values = values , mask = mask , skipna = skipna , min_count = min_count , axis = axis
@@ -85,10 +84,10 @@ def prod(
85
84
def _minmax (
86
85
func : Callable ,
87
86
values : np .ndarray ,
88
- mask : np .ndarray ,
87
+ mask : npt . NDArray [ np .bool_ ] ,
89
88
* ,
90
89
skipna : bool = True ,
91
- axis : Optional [ int ] = None ,
90
+ axis : int | None = None ,
92
91
):
93
92
"""
94
93
Reduction for 1D masked array.
@@ -99,7 +98,7 @@ def _minmax(
99
98
values : np.ndarray
100
99
Numpy array with the values (can be of any dtype that support the
101
100
operation).
102
- mask : np.ndarray
101
+ mask : np.ndarray[bool]
103
102
Boolean numpy array (True values indicate missing values).
104
103
skipna : bool, default True
105
104
Whether to skip NA.
@@ -122,26 +121,26 @@ def _minmax(
122
121
123
122
def min (
124
123
values : np .ndarray ,
125
- mask : np .ndarray ,
124
+ mask : npt . NDArray [ np .bool_ ] ,
126
125
* ,
127
126
skipna : bool = True ,
128
- axis : Optional [ int ] = None ,
127
+ axis : int | None = None ,
129
128
):
130
129
return _minmax (np .min , values = values , mask = mask , skipna = skipna , axis = axis )
131
130
132
131
133
132
def max (
134
133
values : np .ndarray ,
135
- mask : np .ndarray ,
134
+ mask : npt . NDArray [ np .bool_ ] ,
136
135
* ,
137
136
skipna : bool = True ,
138
- axis : Optional [ int ] = None ,
137
+ axis : int | None = None ,
139
138
):
140
139
return _minmax (np .max , values = values , mask = mask , skipna = skipna , axis = axis )
141
140
142
141
143
142
# TODO: axis kwarg
144
- def mean (values : np .ndarray , mask : np .ndarray , skipna : bool = True ):
143
+ def mean (values : np .ndarray , mask : npt . NDArray [ np .bool_ ] , skipna : bool = True ):
145
144
if not values .size or mask .all ():
146
145
return libmissing .NA
147
146
_sum = _sumprod (np .sum , values = values , mask = mask , skipna = skipna )
0 commit comments