11import numbers
2- from typing import TYPE_CHECKING , Any , List , Tuple , Type , Union
2+ from typing import TYPE_CHECKING , List , Tuple , Type , Union
33import warnings
44
55import numpy as np
66
77from pandas ._libs import lib , missing as libmissing
8+ from pandas ._typing import ArrayLike
89from pandas .compat import set_function_name
910from pandas .compat .numpy import function as nv
1011
@@ -281,20 +282,15 @@ def __init__(self, values: np.ndarray, mask: np.ndarray, copy: bool = False):
281282 if not mask .ndim == 1 :
282283 raise ValueError ("mask must be a 1D array" )
283284
284- if copy :
285- values = values .copy ()
286- mask = mask .copy ()
287-
288- self ._data = values
289- self ._mask = mask
290285 self ._dtype = BooleanDtype ()
286+ super ().__init__ (values , mask , copy = copy )
291287
292288 @property
293- def dtype (self ):
289+ def dtype (self ) -> BooleanDtype :
294290 return self ._dtype
295291
296292 @classmethod
297- def _from_sequence (cls , scalars , dtype = None , copy : bool = False ):
293+ def _from_sequence (cls , scalars , dtype = None , copy : bool = False ) -> "BooleanArray" :
298294 if dtype :
299295 assert dtype == "boolean"
300296 values , mask = coerce_to_array (scalars , copy = copy )
@@ -303,7 +299,7 @@ def _from_sequence(cls, scalars, dtype=None, copy: bool = False):
303299 @classmethod
304300 def _from_sequence_of_strings (
305301 cls , strings : List [str ], dtype = None , copy : bool = False
306- ):
302+ ) -> "BooleanArray" :
307303 def map_string (s ):
308304 if isna (s ):
309305 return s
@@ -317,18 +313,18 @@ def map_string(s):
317313 scalars = [map_string (x ) for x in strings ]
318314 return cls ._from_sequence (scalars , dtype , copy )
319315
320- def _values_for_factorize (self ) -> Tuple [np .ndarray , Any ]:
316+ def _values_for_factorize (self ) -> Tuple [np .ndarray , int ]:
321317 data = self ._data .astype ("int8" )
322318 data [self ._mask ] = - 1
323319 return data , - 1
324320
325321 @classmethod
326- def _from_factorized (cls , values , original : "BooleanArray" ):
322+ def _from_factorized (cls , values , original : "BooleanArray" ) -> "BooleanArray" :
327323 return cls ._from_sequence (values , dtype = original .dtype )
328324
329325 _HANDLED_TYPES = (np .ndarray , numbers .Number , bool , np .bool_ )
330326
331- def __array_ufunc__ (self , ufunc , method , * inputs , ** kwargs ):
327+ def __array_ufunc__ (self , ufunc , method : str , * inputs , ** kwargs ):
332328 # For BooleanArray inputs, we apply the ufunc to ._data
333329 # and mask the result.
334330 if method == "reduce" :
@@ -373,7 +369,7 @@ def reconstruct(x):
373369 else :
374370 return reconstruct (result )
375371
376- def __setitem__ (self , key , value ):
372+ def __setitem__ (self , key , value ) -> None :
377373 _is_scalar = is_scalar (value )
378374 if _is_scalar :
379375 value = [value ]
@@ -387,7 +383,7 @@ def __setitem__(self, key, value):
387383 self ._data [key ] = value
388384 self ._mask [key ] = mask
389385
390- def astype (self , dtype , copy = True ):
386+ def astype (self , dtype , copy : bool = True ) -> ArrayLike :
391387 """
392388 Cast to a NumPy array or ExtensionArray with 'dtype'.
393389
@@ -402,8 +398,8 @@ def astype(self, dtype, copy=True):
402398
403399 Returns
404400 -------
405- array : ndarray or ExtensionArray
406- NumPy ndarray, BooleanArray or IntergerArray with 'dtype' for its dtype.
401+ ndarray or ExtensionArray
402+ NumPy ndarray, BooleanArray or IntegerArray with 'dtype' for its dtype.
407403
408404 Raises
409405 ------
@@ -693,7 +689,7 @@ def cmp_method(self, other):
693689 name = f"__{ op .__name__ } "
694690 return set_function_name (cmp_method , name , cls )
695691
696- def _reduce (self , name , skipna = True , ** kwargs ):
692+ def _reduce (self , name : str , skipna : bool = True , ** kwargs ):
697693
698694 if name in {"any" , "all" }:
699695 return getattr (self , name )(skipna = skipna , ** kwargs )
@@ -722,7 +718,7 @@ def _reduce(self, name, skipna=True, **kwargs):
722718
723719 return result
724720
725- def _maybe_mask_result (self , result , mask , other , op_name ):
721+ def _maybe_mask_result (self , result , mask , other , op_name : str ):
726722 """
727723 Parameters
728724 ----------
0 commit comments