Skip to content

Commit c634352

Browse files
jbrockmendeljorisvandenbossche
authored andcommitted
ASV/CLN: cleanup period benchmarks (pandas-dev#18275)
1 parent fedc503 commit c634352

File tree

3 files changed

+100
-106
lines changed

3 files changed

+100
-106
lines changed

asv_bench/benchmarks/period.py

+77-90
Original file line numberDiff line numberDiff line change
@@ -3,141 +3,128 @@
33

44

55
class PeriodProperties(object):
6-
def setup(self):
7-
self.per = Period('2012-06-01', freq='M')
6+
params = ['M', 'min']
7+
param_names = ['freq']
8+
9+
def setup(self, freq):
10+
self.per = Period('2012-06-01', freq=freq)
811

9-
def time_year(self):
12+
def time_year(self, freq):
1013
self.per.year
1114

12-
def time_month(self):
15+
def time_month(self, freq):
1316
self.per.month
1417

15-
def time_quarter(self):
16-
self.per.quarter
17-
18-
def time_day(self):
18+
def time_day(self, freq):
1919
self.per.day
2020

21-
def time_hour(self):
21+
def time_hour(self, freq):
2222
self.per.hour
2323

24-
def time_minute(self):
25-
self.per.second
24+
def time_minute(self, freq):
25+
self.per.minute
2626

27-
def time_second(self):
27+
def time_second(self, freq):
2828
self.per.second
2929

30-
def time_leap_year(self):
31-
self.per.is_leapyear
32-
33-
34-
class Constructor(object):
35-
goal_time = 0.2
36-
37-
def setup(self):
38-
self.rng = date_range('1985', periods=1000)
39-
self.rng2 = date_range('1985', periods=1000).to_pydatetime()
40-
41-
def time_from_date_range(self):
42-
PeriodIndex(self.rng, freq='D')
43-
44-
def time_from_pydatetime(self):
45-
PeriodIndex(self.rng2, freq='D')
30+
def time_is_leap_year(self, freq):
31+
self.per.is_leap_year
4632

33+
def time_quarter(self, freq):
34+
self.per.quarter
4735

48-
class DataFrame(object):
49-
goal_time = 0.2
36+
def time_qyear(self, freq):
37+
self.per.qyear
5038

51-
def setup(self):
52-
self.rng = pd.period_range(start='1/1/1990', freq='S', periods=20000)
53-
self.df = pd.DataFrame(index=range(len(self.rng)))
39+
def time_week(self, freq):
40+
self.per.week
5441

55-
def time_setitem_period_column(self):
56-
self.df['col'] = self.rng
42+
def time_daysinmonth(self, freq):
43+
self.per.daysinmonth
5744

45+
def time_dayofweek(self, freq):
46+
self.per.dayofweek
5847

59-
class Algorithms(object):
60-
goal_time = 0.2
48+
def time_dayofyear(self, freq):
49+
self.per.dayofyear
6150

62-
def setup(self):
63-
data = [Period('2011-01', freq='M'), Period('2011-02', freq='M'),
64-
Period('2011-03', freq='M'), Period('2011-04', freq='M')]
65-
self.s = Series(data * 1000)
66-
self.i = PeriodIndex(data, freq='M')
51+
def time_start_time(self, freq):
52+
self.per.start_time
6753

68-
def time_drop_duplicates_pseries(self):
69-
self.s.drop_duplicates()
54+
def time_end_time(self, freq):
55+
self.per.end_time
7056

71-
def time_drop_duplicates_pindex(self):
72-
self.i.drop_duplicates()
7357

74-
def time_value_counts_pseries(self):
75-
self.s.value_counts()
58+
class PeriodUnaryMethods(object):
59+
params = ['M', 'min']
60+
param_names = ['freq']
7661

77-
def time_value_counts_pindex(self):
78-
self.i.value_counts()
62+
def setup(self, freq):
63+
self.per = Period('2012-06-01', freq=freq)
7964

65+
def time_to_timestamp(self, freq):
66+
self.per.to_timestamp()
8067

81-
class Properties(object):
82-
def setup(self):
83-
self.per = Period('2017-09-06 08:28', freq='min')
68+
def time_now(self, freq):
69+
self.per.now(freq)
8470

85-
def time_year(self):
86-
self.per.year
71+
def time_asfreq(self, freq):
72+
self.per.asfreq('A')
8773

88-
def time_month(self):
89-
self.per.month
9074

91-
def time_day(self):
92-
self.per.day
75+
class PeriodIndexConstructor(object):
76+
goal_time = 0.2
9377

94-
def time_hour(self):
95-
self.per.hour
78+
params = ['D']
79+
param_names = ['freq']
9680

97-
def time_minute(self):
98-
self.per.minute
81+
def setup(self, freq):
82+
self.rng = date_range('1985', periods=1000)
83+
self.rng2 = date_range('1985', periods=1000).to_pydatetime()
9984

100-
def time_second(self):
101-
self.per.second
85+
def time_from_date_range(self, freq):
86+
PeriodIndex(self.rng, freq=freq)
10287

103-
def time_is_leap_year(self):
104-
self.per.is_leap_year
88+
def time_from_pydatetime(self, freq):
89+
PeriodIndex(self.rng2, freq=freq)
10590

106-
def time_quarter(self):
107-
self.per.quarter
10891

109-
def time_qyear(self):
110-
self.per.qyear
92+
class DataFramePeriodColumn(object):
93+
goal_time = 0.2
11194

112-
def time_week(self):
113-
self.per.week
95+
def setup_cache(self):
96+
rng = pd.period_range(start='1/1/1990', freq='S', periods=20000)
97+
df = pd.DataFrame(index=range(len(rng)))
98+
return rng, df
11499

115-
def time_daysinmonth(self):
116-
self.per.daysinmonth
100+
def time_setitem_period_column(self, tup):
101+
rng, df = tup
102+
df['col'] = rng
117103

118-
def time_dayofweek(self):
119-
self.per.dayofweek
120104

121-
def time_dayofyear(self):
122-
self.per.dayofyear
105+
class Algorithms(object):
106+
goal_time = 0.2
123107

124-
def time_start_time(self):
125-
self.per.start_time
108+
params = ['index', 'series']
109+
param_names = ['typ']
126110

127-
def time_end_time(self):
128-
self.per.end_time
111+
def setup(self, typ):
112+
data = [Period('2011-01', freq='M'), Period('2011-02', freq='M'),
113+
Period('2011-03', freq='M'), Period('2011-04', freq='M')]
129114

130-
def time_to_timestamp():
131-
self.per.to_timestamp()
115+
if typ == 'index':
116+
self.vector = PeriodIndex(data * 1000, freq='M')
117+
elif typ == 'series':
118+
self.vector = Series(data * 1000)
132119

133-
def time_now():
134-
self.per.now()
120+
def time_drop_duplicates(self, typ):
121+
self.vector.drop_duplicates()
135122

136-
def time_asfreq():
137-
self.per.asfreq('A')
123+
def time_value_counts(self, typ):
124+
self.vector.value_counts()
138125

139126

140-
class period_standard_indexing(object):
127+
class Indexing(object):
141128
goal_time = 0.2
142129

143130
def setup(self):

asv_bench/benchmarks/timedelta.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ def time_convert_ignore(self):
3131
to_timedelta(self.arr4, errors='ignore')
3232

3333

34-
class Ops(object):
34+
class TimedeltaOps(object):
3535
goal_time = 0.2
3636

3737
def setup(self):
3838
self.td = to_timedelta(np.arange(1000000))
3939
self.ts = Timestamp('2000')
4040

41-
def test_add_td_ts(self):
41+
def time_add_td_ts(self):
4242
self.td + self.ts
4343

4444

asv_bench/benchmarks/timestamp.py

+21-14
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77
class TimestampProperties(object):
88
goal_time = 0.2
99

10-
def setup(self):
11-
self.ts = Timestamp('2017-08-25 08:16:14')
10+
params = [None, pytz.timezone('Europe/Amsterdam')]
11+
param_names = ['tz']
12+
13+
def setup(self, tz):
14+
self.ts = Timestamp('2017-08-25 08:16:14', tzinfo=tz)
1215

1316
def time_tz(self):
1417
self.ts.tz
@@ -65,25 +68,29 @@ def time_microsecond(self):
6568
class TimestampOps(object):
6669
goal_time = 0.2
6770

68-
def setup(self):
69-
self.ts = Timestamp('2017-08-25 08:16:14')
70-
self.ts_tz = Timestamp('2017-08-25 08:16:14', tz='US/Eastern')
71+
params = [None, 'US/Eastern']
72+
param_names = ['tz']
7173

72-
dt = datetime.datetime(2016, 3, 27, 1)
73-
self.tzinfo = pytz.timezone('CET').localize(dt, is_dst=False).tzinfo
74-
self.ts2 = Timestamp(dt)
74+
def setup(self, tz):
75+
self.ts = Timestamp('2017-08-25 08:16:14', tz=tz)
7576

7677
def time_replace_tz(self):
7778
self.ts.replace(tzinfo=pytz.timezone('US/Eastern'))
7879

79-
def time_replace_across_dst(self):
80-
self.ts2.replace(tzinfo=self.tzinfo)
81-
8280
def time_replace_None(self):
83-
self.ts_tz.replace(tzinfo=None)
81+
self.ts.replace(tzinfo=None)
8482

8583
def time_to_pydatetime(self):
8684
self.ts.to_pydatetime()
8785

88-
def time_to_pydatetime_tz(self):
89-
self.ts_tz.to_pydatetime()
86+
87+
class TimestampAcrossDst(object):
88+
goal_time = 0.2
89+
90+
def setup(self):
91+
dt = datetime.datetime(2016, 3, 27, 1)
92+
self.tzinfo = pytz.timezone('CET').localize(dt, is_dst=False).tzinfo
93+
self.ts2 = Timestamp(dt)
94+
95+
def time_replace_across_dst(self):
96+
self.ts2.replace(tzinfo=self.tzinfo)

0 commit comments

Comments
 (0)