77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
import numpy as np
|
|
import pytest
|
|
|
|
from pandas.errors import UnsupportedFunctionCall
|
|
import pandas.util._test_decorators as td
|
|
|
|
import pandas as pd
|
|
from pandas import Series
|
|
from pandas.core.window import Window
|
|
from pandas.tests.window.common import Base
|
|
|
|
|
|
@pytest.mark.filterwarnings("ignore:can't resolve package:ImportWarning")
|
|
class TestWindow(Base):
|
|
def setup_method(self, method):
|
|
self._create_data()
|
|
|
|
@td.skip_if_no_scipy
|
|
@pytest.mark.parametrize("which", ["series", "frame"])
|
|
def test_constructor(self, which):
|
|
# GH 12669
|
|
|
|
o = getattr(self, which)
|
|
c = o.rolling
|
|
|
|
# valid
|
|
c(win_type="boxcar", window=2, min_periods=1)
|
|
c(win_type="boxcar", window=2, min_periods=1, center=True)
|
|
c(win_type="boxcar", window=2, min_periods=1, center=False)
|
|
|
|
# not valid
|
|
for w in [2.0, "foo", np.array([2])]:
|
|
with pytest.raises(ValueError):
|
|
c(win_type="boxcar", window=2, min_periods=w)
|
|
with pytest.raises(ValueError):
|
|
c(win_type="boxcar", window=2, min_periods=1, center=w)
|
|
|
|
for wt in ["foobar", 1]:
|
|
with pytest.raises(ValueError):
|
|
c(win_type=wt, window=2)
|
|
|
|
@td.skip_if_no_scipy
|
|
@pytest.mark.parametrize("which", ["series", "frame"])
|
|
def test_constructor_with_win_type(self, which, win_types):
|
|
# GH 12669
|
|
o = getattr(self, which)
|
|
c = o.rolling
|
|
c(win_type=win_types, window=2)
|
|
|
|
@pytest.mark.parametrize("method", ["sum", "mean"])
|
|
def test_numpy_compat(self, method):
|
|
# see gh-12811
|
|
w = Window(Series([2, 4, 6]), window=[0, 2])
|
|
|
|
msg = "numpy operations are not valid with window objects"
|
|
|
|
with pytest.raises(UnsupportedFunctionCall, match=msg):
|
|
getattr(w, method)(1, 2, 3)
|
|
with pytest.raises(UnsupportedFunctionCall, match=msg):
|
|
getattr(w, method)(dtype=np.float64)
|
|
|
|
@td.skip_if_no_scipy
|
|
@pytest.mark.parametrize("arg", ["median", "kurt", "skew"])
|
|
def test_agg_function_support(self, arg):
|
|
df = pd.DataFrame({"A": np.arange(5)})
|
|
roll = df.rolling(2, win_type="triang")
|
|
|
|
msg = f"'{arg}' is not a valid function for 'Window' object"
|
|
with pytest.raises(AttributeError, match=msg):
|
|
roll.agg(arg)
|
|
|
|
with pytest.raises(AttributeError, match=msg):
|
|
roll.agg([arg])
|
|
|
|
with pytest.raises(AttributeError, match=msg):
|
|
roll.agg({"A": arg})
|