Skip to content

Commit e497fc2

Browse files
committed
TST: move fixtures to Base_pytest(object) class
1 parent 68f02f7 commit e497fc2

File tree

1 file changed

+40
-18
lines changed

1 file changed

+40
-18
lines changed

pandas/tests/test_resample.py

+40-18
Original file line numberDiff line numberDiff line change
@@ -2697,31 +2697,52 @@ def test_evenly_divisible_with_no_extra_bins(self):
26972697
def assert_series_or_frame_equal(result, expected):
26982698
if isinstance(result, Series):
26992699
return assert_series_equal(result, expected)
2700-
else:
2700+
if isinstance(result, DataFrame):
27012701
return assert_frame_equal(result, expected)
27022702

27032703

2704-
class TestPeriodIndexIdiomaticPytest:
2704+
class Base_pytest(object):
2705+
"""
2706+
base class for resampling testing providing fixtures for each index type
2707+
- index: default index defined by _index_factory in each subclass
2708+
- pandas_obj: default Series and DataFrame objects
2709+
"""
27052710

2706-
@pytest.fixture(scope='class')
2707-
def index(self):
2708-
return period_range(datetime(2005, 1, 1),
2709-
datetime(2005, 1, 10), freq='D')
2711+
_index_fixture_start = datetime(2005, 1, 1)
2712+
_index_fixture_end = datetime(2005, 1, 10)
2713+
_index_fixture_freq = 'D'
27102714

2711-
@pytest.fixture(scope='class')
2712-
def series(self, index):
2713-
return Series(np.arange(len(index)), index=index, name='pi')
2715+
def create_index(self, *args, **kwargs):
2716+
""" return the _index_factory created using the args, kwargs """
2717+
factory = self._index_factory()
2718+
return factory(*args, **kwargs)
27142719

27152720
@pytest.fixture(scope='class')
2716-
def frame(self, index):
2717-
return DataFrame({'value': np.arange(len(index))}, index=index)
2721+
def index(self):
2722+
return self.create_index(self._index_fixture_start,
2723+
self._index_fixture_end,
2724+
freq=self._index_fixture_freq)
27182725

27192726
@pytest.fixture(params=[Series, DataFrame], scope='class')
27202727
def pandas_obj(self, request, index):
27212728
if request.param == Series:
2722-
return self.series(index)
2729+
return Series(np.arange(len(index)), index=index,
2730+
name=self._series_fixture_name)
27232731
if request.param == DataFrame:
2724-
return self.frame(index)
2732+
return DataFrame({'value': np.arange(len(index))}, index=index)
2733+
2734+
2735+
class TestDatetimeIndex_pytest(Base_pytest):
2736+
_index_factory = lambda x: date_range
2737+
_series_fixture_name = 'dti'
2738+
2739+
# stub, put parametrized tests here
2740+
pass
2741+
2742+
2743+
class TestPeriodIndex_pytest(Base_pytest):
2744+
_index_factory = lambda x: period_range
2745+
_series_fixture_name = 'pi'
27252746

27262747
@pytest.mark.parametrize('freq', ['2D'])
27272748
@pytest.mark.parametrize('kind', ['period', None])
@@ -2810,18 +2831,19 @@ def test_resample_5minute(self, freq, kind):
28102831
result = ts.resample(freq, kind=kind).mean()
28112832
assert_series_equal(result, expected)
28122833

2834+
@pytest.mark.parametrize('pandas_obj', [DataFrame], indirect=True)
28132835
@pytest.mark.parametrize('kind', ['period', None, 'timestamp'])
28142836
@pytest.mark.parametrize('agg_arg', ['mean', {'value': 'mean'}, ['mean']])
2815-
def test_loffset_returns_datetimeindex(self, frame, kind, agg_arg):
2837+
def test_loffset_returns_datetimeindex(self, pandas_obj, kind, agg_arg):
28162838
# make sure passing loffset returns DatetimeIndex in all cases
28172839
# basic method taken from Base.test_resample_loffset_arg_type()
28182840
# df = self.create_series().to_frame('value')
2819-
df = frame
2841+
df = pandas_obj
28202842
expected_means = [df.values[i:i + 2].mean()
28212843
for i in range(0, len(df.values), 2)]
2822-
expected_index = period_range(df.index[0], periods=len(df.index) / 2,
2823-
freq='2D')
2824-
2844+
expected_index = self.create_index(df.index[0],
2845+
periods=len(df.index) / 2,
2846+
freq='2D')
28252847
# loffset coreces PeriodIndex to DateTimeIndex
28262848
expected_index = expected_index.to_timestamp()
28272849
expected_index += timedelta(hours=2)

0 commit comments

Comments
 (0)