22masked_reductions.py is for reduction algorithms using a mask-based approach
33for missing values.
44"""
5+ from __future__ import annotations
56
6- from typing import (
7- Callable ,
8- Optional ,
9- )
7+ from typing import Callable
108
119import numpy as np
1210
1311from pandas ._libs import missing as libmissing
12+ from pandas ._typing import npt
1413
1514from pandas .core .nanops import check_below_min_count
1615
1716
1817def _sumprod (
1918 func : Callable ,
2019 values : np .ndarray ,
21- mask : np .ndarray ,
20+ mask : npt . NDArray [ np .bool_ ] ,
2221 * ,
2322 skipna : bool = True ,
2423 min_count : int = 0 ,
25- axis : Optional [ int ] = None ,
24+ axis : int | None = None ,
2625):
2726 """
2827 Sum or product for 1D masked array.
@@ -33,7 +32,7 @@ def _sumprod(
3332 values : np.ndarray
3433 Numpy array with the values (can be of any dtype that support the
3534 operation).
36- mask : np.ndarray
35+ mask : np.ndarray[bool]
3736 Boolean numpy array (True values indicate missing values).
3837 skipna : bool, default True
3938 Whether to skip NA.
@@ -58,11 +57,11 @@ def _sumprod(
5857
5958def sum (
6059 values : np .ndarray ,
61- mask : np .ndarray ,
60+ mask : npt . NDArray [ np .bool_ ] ,
6261 * ,
6362 skipna : bool = True ,
6463 min_count : int = 0 ,
65- axis : Optional [ int ] = None ,
64+ axis : int | None = None ,
6665):
6766 return _sumprod (
6867 np .sum , values = values , mask = mask , skipna = skipna , min_count = min_count , axis = axis
@@ -71,11 +70,11 @@ def sum(
7170
7271def prod (
7372 values : np .ndarray ,
74- mask : np .ndarray ,
73+ mask : npt . NDArray [ np .bool_ ] ,
7574 * ,
7675 skipna : bool = True ,
7776 min_count : int = 0 ,
78- axis : Optional [ int ] = None ,
77+ axis : int | None = None ,
7978):
8079 return _sumprod (
8180 np .prod , values = values , mask = mask , skipna = skipna , min_count = min_count , axis = axis
@@ -85,10 +84,10 @@ def prod(
8584def _minmax (
8685 func : Callable ,
8786 values : np .ndarray ,
88- mask : np .ndarray ,
87+ mask : npt . NDArray [ np .bool_ ] ,
8988 * ,
9089 skipna : bool = True ,
91- axis : Optional [ int ] = None ,
90+ axis : int | None = None ,
9291):
9392 """
9493 Reduction for 1D masked array.
@@ -99,7 +98,7 @@ def _minmax(
9998 values : np.ndarray
10099 Numpy array with the values (can be of any dtype that support the
101100 operation).
102- mask : np.ndarray
101+ mask : np.ndarray[bool]
103102 Boolean numpy array (True values indicate missing values).
104103 skipna : bool, default True
105104 Whether to skip NA.
@@ -122,26 +121,26 @@ def _minmax(
122121
123122def min (
124123 values : np .ndarray ,
125- mask : np .ndarray ,
124+ mask : npt . NDArray [ np .bool_ ] ,
126125 * ,
127126 skipna : bool = True ,
128- axis : Optional [ int ] = None ,
127+ axis : int | None = None ,
129128):
130129 return _minmax (np .min , values = values , mask = mask , skipna = skipna , axis = axis )
131130
132131
133132def max (
134133 values : np .ndarray ,
135- mask : np .ndarray ,
134+ mask : npt . NDArray [ np .bool_ ] ,
136135 * ,
137136 skipna : bool = True ,
138- axis : Optional [ int ] = None ,
137+ axis : int | None = None ,
139138):
140139 return _minmax (np .max , values = values , mask = mask , skipna = skipna , axis = axis )
141140
142141
143142# 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 ):
145144 if not values .size or mask .all ():
146145 return libmissing .NA
147146 _sum = _sumprod (np .sum , values = values , mask = mask , skipna = skipna )
0 commit comments