mirror of
https://github.com/PiBrewing/craftbeerpi4.git
synced 2024-12-26 07:24:56 +01:00
310 lines
7.2 KiB
Python
310 lines
7.2 KiB
Python
from datetime import datetime, timedelta
|
|
|
|
import numpy as np
|
|
from numpy.random import randn
|
|
import pytest
|
|
|
|
import pandas.util._test_decorators as td
|
|
|
|
from pandas import DataFrame, Series, bdate_range, notna
|
|
|
|
|
|
@pytest.fixture(params=[True, False])
|
|
def raw(request):
|
|
return request.param
|
|
|
|
|
|
@pytest.fixture(
|
|
params=[
|
|
"triang",
|
|
"blackman",
|
|
"hamming",
|
|
"bartlett",
|
|
"bohman",
|
|
"blackmanharris",
|
|
"nuttall",
|
|
"barthann",
|
|
]
|
|
)
|
|
def win_types(request):
|
|
return request.param
|
|
|
|
|
|
@pytest.fixture(params=["kaiser", "gaussian", "general_gaussian", "exponential"])
|
|
def win_types_special(request):
|
|
return request.param
|
|
|
|
|
|
@pytest.fixture(
|
|
params=["sum", "mean", "median", "max", "min", "var", "std", "kurt", "skew"]
|
|
)
|
|
def arithmetic_win_operators(request):
|
|
return request.param
|
|
|
|
|
|
@pytest.fixture(params=["right", "left", "both", "neither"])
|
|
def closed(request):
|
|
return request.param
|
|
|
|
|
|
@pytest.fixture(params=[True, False])
|
|
def center(request):
|
|
return request.param
|
|
|
|
|
|
@pytest.fixture(params=[None, 1])
|
|
def min_periods(request):
|
|
return request.param
|
|
|
|
|
|
@pytest.fixture(params=[True, False])
|
|
def parallel(request):
|
|
"""parallel keyword argument for numba.jit"""
|
|
return request.param
|
|
|
|
|
|
@pytest.fixture(params=[True, False])
|
|
def nogil(request):
|
|
"""nogil keyword argument for numba.jit"""
|
|
return request.param
|
|
|
|
|
|
@pytest.fixture(params=[True, False])
|
|
def nopython(request):
|
|
"""nopython keyword argument for numba.jit"""
|
|
return request.param
|
|
|
|
|
|
@pytest.fixture(
|
|
params=[pytest.param("numba", marks=td.skip_if_no("numba", "0.46.0")), "cython"]
|
|
)
|
|
def engine(request):
|
|
"""engine keyword argument for rolling.apply"""
|
|
return request.param
|
|
|
|
|
|
@pytest.fixture(
|
|
params=[
|
|
pytest.param(("numba", True), marks=td.skip_if_no("numba", "0.46.0")),
|
|
("cython", True),
|
|
("cython", False),
|
|
]
|
|
)
|
|
def engine_and_raw(request):
|
|
"""engine and raw keyword arguments for rolling.apply"""
|
|
return request.param
|
|
|
|
|
|
# create the data only once as we are not setting it
|
|
def _create_consistency_data():
|
|
def create_series():
|
|
return [
|
|
Series(dtype=object),
|
|
Series([np.nan]),
|
|
Series([np.nan, np.nan]),
|
|
Series([3.0]),
|
|
Series([np.nan, 3.0]),
|
|
Series([3.0, np.nan]),
|
|
Series([1.0, 3.0]),
|
|
Series([2.0, 2.0]),
|
|
Series([3.0, 1.0]),
|
|
Series(
|
|
[5.0, 5.0, 5.0, 5.0, np.nan, np.nan, np.nan, 5.0, 5.0, np.nan, np.nan]
|
|
),
|
|
Series(
|
|
[
|
|
np.nan,
|
|
5.0,
|
|
5.0,
|
|
5.0,
|
|
np.nan,
|
|
np.nan,
|
|
np.nan,
|
|
5.0,
|
|
5.0,
|
|
np.nan,
|
|
np.nan,
|
|
]
|
|
),
|
|
Series(
|
|
[
|
|
np.nan,
|
|
np.nan,
|
|
5.0,
|
|
5.0,
|
|
np.nan,
|
|
np.nan,
|
|
np.nan,
|
|
5.0,
|
|
5.0,
|
|
np.nan,
|
|
np.nan,
|
|
]
|
|
),
|
|
Series(
|
|
[
|
|
np.nan,
|
|
3.0,
|
|
np.nan,
|
|
3.0,
|
|
4.0,
|
|
5.0,
|
|
6.0,
|
|
np.nan,
|
|
np.nan,
|
|
7.0,
|
|
12.0,
|
|
13.0,
|
|
14.0,
|
|
15.0,
|
|
]
|
|
),
|
|
Series(
|
|
[
|
|
np.nan,
|
|
5.0,
|
|
np.nan,
|
|
2.0,
|
|
4.0,
|
|
0.0,
|
|
9.0,
|
|
np.nan,
|
|
np.nan,
|
|
3.0,
|
|
12.0,
|
|
13.0,
|
|
14.0,
|
|
15.0,
|
|
]
|
|
),
|
|
Series(
|
|
[
|
|
2.0,
|
|
3.0,
|
|
np.nan,
|
|
3.0,
|
|
4.0,
|
|
5.0,
|
|
6.0,
|
|
np.nan,
|
|
np.nan,
|
|
7.0,
|
|
12.0,
|
|
13.0,
|
|
14.0,
|
|
15.0,
|
|
]
|
|
),
|
|
Series(
|
|
[
|
|
2.0,
|
|
5.0,
|
|
np.nan,
|
|
2.0,
|
|
4.0,
|
|
0.0,
|
|
9.0,
|
|
np.nan,
|
|
np.nan,
|
|
3.0,
|
|
12.0,
|
|
13.0,
|
|
14.0,
|
|
15.0,
|
|
]
|
|
),
|
|
Series(range(10)),
|
|
Series(range(20, 0, -2)),
|
|
]
|
|
|
|
def create_dataframes():
|
|
return [
|
|
DataFrame(),
|
|
DataFrame(columns=["a"]),
|
|
DataFrame(columns=["a", "a"]),
|
|
DataFrame(columns=["a", "b"]),
|
|
DataFrame(np.arange(10).reshape((5, 2))),
|
|
DataFrame(np.arange(25).reshape((5, 5))),
|
|
DataFrame(np.arange(25).reshape((5, 5)), columns=["a", "b", 99, "d", "d"]),
|
|
] + [DataFrame(s) for s in create_series()]
|
|
|
|
def is_constant(x):
|
|
values = x.values.ravel("K")
|
|
return len(set(values[notna(values)])) == 1
|
|
|
|
def no_nans(x):
|
|
return x.notna().all().all()
|
|
|
|
# data is a tuple(object, is_constant, no_nans)
|
|
data = create_series() + create_dataframes()
|
|
|
|
return [(x, is_constant(x), no_nans(x)) for x in data]
|
|
|
|
|
|
@pytest.fixture(params=_create_consistency_data())
|
|
def consistency_data(request):
|
|
"""Create consistency data"""
|
|
return request.param
|
|
|
|
|
|
def _create_arr():
|
|
"""Internal function to mock an array."""
|
|
arr = randn(100)
|
|
locs = np.arange(20, 40)
|
|
arr[locs] = np.NaN
|
|
return arr
|
|
|
|
|
|
def _create_rng():
|
|
"""Internal function to mock date range."""
|
|
rng = bdate_range(datetime(2009, 1, 1), periods=100)
|
|
return rng
|
|
|
|
|
|
def _create_series():
|
|
"""Internal function to mock Series."""
|
|
arr = _create_arr()
|
|
series = Series(arr.copy(), index=_create_rng())
|
|
return series
|
|
|
|
|
|
def _create_frame():
|
|
"""Internal function to mock DataFrame."""
|
|
rng = _create_rng()
|
|
return DataFrame(randn(100, 10), index=rng, columns=np.arange(10))
|
|
|
|
|
|
@pytest.fixture
|
|
def nan_locs():
|
|
"""Make a range as loc fixture."""
|
|
return np.arange(20, 40)
|
|
|
|
|
|
@pytest.fixture
|
|
def arr():
|
|
"""Make an array as fixture."""
|
|
return _create_arr()
|
|
|
|
|
|
@pytest.fixture
|
|
def frame():
|
|
"""Make mocked frame as fixture."""
|
|
return _create_frame()
|
|
|
|
|
|
@pytest.fixture
|
|
def series():
|
|
"""Make mocked series as fixture."""
|
|
return _create_series()
|
|
|
|
|
|
@pytest.fixture(params=[_create_series(), _create_frame()])
|
|
def which(request):
|
|
"""Turn parametrized which as fixture for series and frame"""
|
|
return request.param
|
|
|
|
|
|
@pytest.fixture(params=["1 day", timedelta(days=1)])
|
|
def halflife_with_times(request):
|
|
"""Halflife argument for EWM when times is specified."""
|
|
return request.param
|