52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
|
import numpy as np
|
||
|
import pytest
|
||
|
|
||
|
from pandas.core.dtypes.common import is_integer_dtype
|
||
|
|
||
|
import pandas as pd
|
||
|
import pandas._testing as tm
|
||
|
|
||
|
arrays = [pd.array([1, 2, 3, None], dtype=dtype) for dtype in tm.ALL_INT_EA_DTYPES]
|
||
|
arrays += [
|
||
|
pd.array([0.141, -0.268, 5.895, None], dtype=dtype) for dtype in tm.FLOAT_EA_DTYPES
|
||
|
]
|
||
|
|
||
|
|
||
|
@pytest.fixture(params=arrays, ids=[a.dtype.name for a in arrays])
|
||
|
def data(request):
|
||
|
"""
|
||
|
Fixture returning parametrized 'data' array with different integer and
|
||
|
floating point types
|
||
|
"""
|
||
|
return request.param
|
||
|
|
||
|
|
||
|
@pytest.fixture()
|
||
|
def numpy_dtype(data):
|
||
|
"""
|
||
|
Fixture returning numpy dtype from 'data' input array.
|
||
|
"""
|
||
|
# For integer dtype, the numpy conversion must be done to float
|
||
|
if is_integer_dtype(data):
|
||
|
numpy_dtype = float
|
||
|
else:
|
||
|
numpy_dtype = data.dtype.type
|
||
|
return numpy_dtype
|
||
|
|
||
|
|
||
|
def test_round(data, numpy_dtype):
|
||
|
# No arguments
|
||
|
result = data.round()
|
||
|
expected = pd.array(
|
||
|
np.round(data.to_numpy(dtype=numpy_dtype, na_value=None)), dtype=data.dtype
|
||
|
)
|
||
|
tm.assert_extension_array_equal(result, expected)
|
||
|
|
||
|
# Decimals argument
|
||
|
result = data.round(decimals=2)
|
||
|
expected = pd.array(
|
||
|
np.round(data.to_numpy(dtype=numpy_dtype, na_value=None), decimals=2),
|
||
|
dtype=data.dtype,
|
||
|
)
|
||
|
tm.assert_extension_array_equal(result, expected)
|