from datetime import datetime, timedelta import numpy as np 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): """raw keyword argument for rolling.apply""" 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", "count", ] ) 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=[True, False]) def adjust(request): """adjust keyword argument for ewm""" return request.param @pytest.fixture(params=[True, False]) def ignore_na(request): """ignore_na keyword argument for ewm""" 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 @pytest.fixture def frame(): """Make mocked frame as fixture.""" return DataFrame( np.random.randn(100, 10), index=bdate_range(datetime(2009, 1, 1), periods=100), columns=np.arange(10), ) @pytest.fixture def series(): """Make mocked series as fixture.""" arr = np.random.randn(100) locs = np.arange(20, 40) arr[locs] = np.NaN series = Series(arr, index=bdate_range(datetime(2009, 1, 1), periods=100)) return series @pytest.fixture(params=["1 day", timedelta(days=1)]) def halflife_with_times(request): """Halflife argument for EWM when times is specified.""" return request.param @pytest.fixture( params=[ "object", "category", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "m8[ns]", "M8[ns]", pytest.param( "datetime64[ns, UTC]", marks=pytest.mark.skip( "direct creation of extension dtype datetime64[ns, UTC] " "is not supported ATM" ), ), ] ) def dtypes(request): """Dtypes for window tests""" return request.param @pytest.fixture( params=[ DataFrame([[2, 4], [1, 2], [5, 2], [8, 1]], columns=[1, 0]), DataFrame([[2, 4], [1, 2], [5, 2], [8, 1]], columns=[1, 1]), DataFrame([[2, 4], [1, 2], [5, 2], [8, 1]], columns=["C", "C"]), DataFrame([[2, 4], [1, 2], [5, 2], [8, 1]], columns=[1.0, 0]), DataFrame([[2, 4], [1, 2], [5, 2], [8, 1]], columns=[0.0, 1]), DataFrame([[2, 4], [1, 2], [5, 2], [8, 1]], columns=["C", 1]), DataFrame([[2.0, 4.0], [1.0, 2.0], [5.0, 2.0], [8.0, 1.0]], columns=[1, 0.0]), DataFrame([[2, 4.0], [1, 2.0], [5, 2.0], [8, 1.0]], columns=[0, 1.0]), DataFrame([[2, 4], [1, 2], [5, 2], [8, 1.0]], columns=[1.0, "X"]), ] ) def pairwise_frames(request): """Pairwise frames test_pairwise""" return request.param @pytest.fixture def pairwise_target_frame(): """Pairwise target frame for test_pairwise""" return DataFrame([[2, 4], [1, 2], [5, 2], [8, 1]], columns=[0, 1]) @pytest.fixture def pairwise_other_frame(): """Pairwise other frame for test_pairwise""" return DataFrame( [[None, 1, 1], [None, 1, 2], [None, 3, 2], [None, 8, 1]], columns=["Y", "Z", "X"], )