def coerce_to_array(values, dtype, mask=None, copy=False):
    """
    Coerce the input values array to numpy arrays with a mask

    Parameters
    ----------
    values : 1D list-like
    dtype : integer dtype
    mask : boolean 1D array, optional
    copy : boolean, default False
        if True, copy the input

    Returns
    -------
    tuple of (values, mask)
    """
    # if values is integer numpy array, preserve it's dtype
    if dtype is None and hasattr(values, 'dtype'):
        if is_integer_dtype(values.dtype):
            dtype = values.dtype

    if dtype is not None:
        if (isinstance(dtype, str) and
                (dtype.startswith("Int") or dtype.startswith("UInt"))):
            # Avoid DeprecationWarning from NumPy about np.dtype("Int64")
            # https://github.com/numpy/numpy/pull/7476
            dtype = dtype.lower()

        if not issubclass(type(dtype), _IntegerDtype):
            try:
                dtype = _dtypes[str(np.dtype(dtype))]
            except KeyError:
                raise ValueError("invalid dtype specified {}".format(dtype))

    if isinstance(values, IntegerArray):
        values, mask = values._data, values._mask
        if dtype is not None:
            values = values.astype(dtype.numpy_dtype, copy=False)

        if copy:
            values = values.copy()
            mask = mask.copy()
        return values, mask

    values = np.array(values, copy=copy)
    if is_object_dtype(values):
        inferred_type = lib.infer_dtype(values, skipna=True)
        if inferred_type == 'empty':
            values = np.empty(len(values))
            values.fill(np.nan)
        elif inferred_type not in ['floating', 'integer',
                                   'mixed-integer', 'mixed-integer-float']:
            raise TypeError("{} cannot be converted to an IntegerDtype".format(
                values.dtype))

    elif not (is_integer_dtype(values) or is_float_dtype(values)):
        raise TypeError("{} cannot be converted to an IntegerDtype".format(
            values.dtype))

    if mask is None:
        mask = isna(values)
    else:
        assert len(mask) == len(values)

    if not values.ndim == 1:
        raise TypeError("values must be a 1D list-like")
    if not mask.ndim == 1:
        raise TypeError("mask must be a 1D list-like")

    # infer dtype if needed
    if dtype is None:
        dtype = np.dtype('int64')
    else:
        dtype = dtype.type

    # if we are float, let's make sure that we can
    # safely cast

    # we copy as need to coerce here
    if mask.any():
        values = values.copy()
        values[mask] = 1
        values = safe_cast(values, dtype, copy=False)
    else:
        values = safe_cast(values, dtype, copy=False)

    return values, mask
def coerce_to_array ( values , dtype , mask = None , copy = False ) : if dtype is None and hasattr ( values , 'dtype' ) : if is_integer_dtype ( values . dtype ) : dtype = values . dtype if dtype is not None : if ( isinstance ( dtype , str ) and ( dtype . startswith ( "Int" ) or dtype . startswith ( "UInt" ) ) ) : dtype = dtype . lower ( ) if not issubclass ( type ( dtype ) , _IntegerDtype ) : try : dtype = _dtypes [ str ( np . dtype ( dtype ) ) ] except KeyError : raise ValueError ( "invalid dtype specified {}" . format ( dtype ) ) if isinstance ( values , IntegerArray ) : values , mask = values . _data , values . _mask if dtype is not None : values = values . astype ( dtype . numpy_dtype , copy = False ) if copy : values = values . copy ( ) mask = mask . copy ( ) return values , mask values = np . array ( values , copy = copy ) if is_object_dtype ( values ) : inferred_type = lib . infer_dtype ( values , skipna = True ) if inferred_type == 'empty' : values = np . empty ( len ( values ) ) values . fill ( np . nan ) elif inferred_type not in [ 'floating' , 'integer' , 'mixed-integer' , 'mixed-integer-float' ] : raise TypeError ( "{} cannot be converted to an IntegerDtype" . format ( values . dtype ) ) elif not ( is_integer_dtype ( values ) or is_float_dtype ( values ) ) : raise TypeError ( "{} cannot be converted to an IntegerDtype" . format ( values . dtype ) ) if mask is None : mask = isna ( values ) else : assert len ( mask ) == len ( values ) if not values . ndim == 1 : raise TypeError ( "values must be a 1D list-like" ) if not mask . ndim == 1 : raise TypeError ( "mask must be a 1D list-like" ) if dtype is None : dtype = np . dtype ( 'int64' ) else : dtype = dtype . type if mask . any ( ) : values = values . copy ( ) values [ mask ] = 1 values = safe_cast ( values , dtype , copy = False ) else : values = safe_cast ( values , dtype , copy = False ) return values , mask
Coerce the input values array to numpy arrays with a mask

    Parameters
    ----------
    values : 1D list-like
    dtype : integer dtype
    mask : boolean 1D array, optional
    copy : boolean, default False
        if True, copy the input

    Returns
    -------
    tuple of (values, mask)