@@ -2697,31 +2697,52 @@ def test_evenly_divisible_with_no_extra_bins(self):
2697
2697
def assert_series_or_frame_equal (result , expected ):
2698
2698
if isinstance (result , Series ):
2699
2699
return assert_series_equal (result , expected )
2700
- else :
2700
+ if isinstance ( result , DataFrame ) :
2701
2701
return assert_frame_equal (result , expected )
2702
2702
2703
2703
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
+ """
2705
2710
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'
2710
2714
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 )
2714
2719
2715
2720
@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 )
2718
2725
2719
2726
@pytest .fixture (params = [Series , DataFrame ], scope = 'class' )
2720
2727
def pandas_obj (self , request , index ):
2721
2728
if request .param == Series :
2722
- return self .series (index )
2729
+ return Series (np .arange (len (index )), index = index ,
2730
+ name = self ._series_fixture_name )
2723
2731
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'
2725
2746
2726
2747
@pytest .mark .parametrize ('freq' , ['2D' ])
2727
2748
@pytest .mark .parametrize ('kind' , ['period' , None ])
@@ -2810,18 +2831,19 @@ def test_resample_5minute(self, freq, kind):
2810
2831
result = ts .resample (freq , kind = kind ).mean ()
2811
2832
assert_series_equal (result , expected )
2812
2833
2834
+ @pytest .mark .parametrize ('pandas_obj' , [DataFrame ], indirect = True )
2813
2835
@pytest .mark .parametrize ('kind' , ['period' , None , 'timestamp' ])
2814
2836
@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 ):
2816
2838
# make sure passing loffset returns DatetimeIndex in all cases
2817
2839
# basic method taken from Base.test_resample_loffset_arg_type()
2818
2840
# df = self.create_series().to_frame('value')
2819
- df = frame
2841
+ df = pandas_obj
2820
2842
expected_means = [df .values [i :i + 2 ].mean ()
2821
2843
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' )
2825
2847
# loffset coreces PeriodIndex to DateTimeIndex
2826
2848
expected_index = expected_index .to_timestamp ()
2827
2849
expected_index += timedelta (hours = 2 )
0 commit comments