Skip to content

Commit 201760e

Browse files
committed
PERF: add initial asv config and vbench->asv conversion script
1 parent 703f418 commit 201760e

35 files changed

+10798
-0
lines changed

asv_bench/asv.conf.json

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
{
2+
// The version of the config file format. Do not change, unless
3+
// you know what you are doing.
4+
"version": 1,
5+
6+
// The name of the project being benchmarked
7+
"project": "pandas",
8+
9+
// The project's homepage
10+
"project_url": "http://pandas.pydata.org/",
11+
12+
// The URL of the source code repository for the project being
13+
// benchmarked
14+
"repo": "..",
15+
16+
// The tool to use to create environments. May be "conda",
17+
// "virtualenv" or other value depending on the plugins in use.
18+
// If missing or the empty string, the tool will be automatically
19+
// determined by looking for tools on the PATH environment
20+
// variable.
21+
"environment_type": "conda",
22+
23+
// the base URL to show a commit for the project.
24+
"show_commit_url": "https://github.com/pydata/pandas/commit/",
25+
26+
// The Pythons you'd like to test against. If not provided, defaults
27+
// to the current version of Python used to run `asv`.
28+
"pythons": ["2.7", "3.4"],
29+
30+
// The matrix of dependencies to test. Each key is the name of a
31+
// package (in PyPI) and the values are version numbers. An empty
32+
// list indicates to just test against the default (latest)
33+
// version.
34+
"matrix": {
35+
// To run against multiple versions, replace with
36+
// "numpy": ["1.7", "1.9"],
37+
"numpy": [],
38+
"Cython": [],
39+
"matplotlib": [],
40+
"sqlalchemy": [],
41+
"scipy": [],
42+
"pytables": [],
43+
},
44+
45+
// The directory (relative to the current directory) that benchmarks are
46+
// stored in. If not provided, defaults to "benchmarks"
47+
// "benchmark_dir": "benchmarks",
48+
49+
// The directory (relative to the current directory) to cache the Python
50+
// environments in. If not provided, defaults to "env"
51+
// "env_dir": "env",
52+
53+
54+
// The directory (relative to the current directory) that raw benchmark
55+
// results are stored in. If not provided, defaults to "results".
56+
// "results_dir": "results",
57+
58+
// The directory (relative to the current directory) that the html tree
59+
// should be written to. If not provided, defaults to "html".
60+
// "html_dir": "html",
61+
62+
// The number of characters to retain in the commit hashes.
63+
// "hash_length": 8
64+
}

asv_bench/benchmarks/__init__.py

Whitespace-only changes.

asv_bench/benchmarks/attrs_caching.py

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from pandas_vb_common import *
2+
3+
4+
class getattr_dataframe_index(object):
5+
goal_time = 0.2
6+
7+
def setup(self):
8+
self.df = DataFrame(np.random.randn(10, 6))
9+
self.cur_index = self.df.index
10+
11+
def time_getattr_dataframe_index(self):
12+
self.foo = self.df.index
13+
14+
15+
class setattr_dataframe_index(object):
16+
goal_time = 0.2
17+
18+
def setup(self):
19+
self.df = DataFrame(np.random.randn(10, 6))
20+
self.cur_index = self.df.index
21+
22+
def time_setattr_dataframe_index(self):
23+
self.df.index = self.cur_index

asv_bench/benchmarks/binary_ops.py

+236
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
from pandas_vb_common import *
2+
import pandas.computation.expressions as expr
3+
4+
5+
class frame_add(object):
6+
goal_time = 0.2
7+
8+
def setup(self):
9+
self.df = DataFrame(np.random.randn(20000, 100))
10+
self.df2 = DataFrame(np.random.randn(20000, 100))
11+
12+
def time_frame_add(self):
13+
(self.df + self.df2)
14+
15+
16+
class frame_add_no_ne(object):
17+
goal_time = 0.2
18+
19+
def setup(self):
20+
self.df = DataFrame(np.random.randn(20000, 100))
21+
self.df2 = DataFrame(np.random.randn(20000, 100))
22+
expr.set_use_numexpr(False)
23+
24+
def time_frame_add_no_ne(self):
25+
(self.df + self.df2)
26+
27+
def teardown(self):
28+
expr.set_use_numexpr(True)
29+
30+
31+
class frame_add_st(object):
32+
goal_time = 0.2
33+
34+
def setup(self):
35+
self.df = DataFrame(np.random.randn(20000, 100))
36+
self.df2 = DataFrame(np.random.randn(20000, 100))
37+
expr.set_numexpr_threads(1)
38+
39+
def time_frame_add_st(self):
40+
(self.df + self.df2)
41+
42+
def teardown(self):
43+
expr.set_numexpr_threads()
44+
45+
46+
class frame_float_div(object):
47+
goal_time = 0.2
48+
49+
def setup(self):
50+
self.df = DataFrame(np.random.randn(1000, 1000))
51+
self.df2 = DataFrame(np.random.randn(1000, 1000))
52+
53+
def time_frame_float_div(self):
54+
(self.df // self.df2)
55+
56+
57+
class frame_float_div_by_zero(object):
58+
goal_time = 0.2
59+
60+
def setup(self):
61+
self.df = DataFrame(np.random.randn(1000, 1000))
62+
63+
def time_frame_float_div_by_zero(self):
64+
(self.df / 0)
65+
66+
67+
class frame_float_floor_by_zero(object):
68+
goal_time = 0.2
69+
70+
def setup(self):
71+
self.df = DataFrame(np.random.randn(1000, 1000))
72+
73+
def time_frame_float_floor_by_zero(self):
74+
(self.df // 0)
75+
76+
77+
class frame_float_mod(object):
78+
goal_time = 0.2
79+
80+
def setup(self):
81+
self.df = DataFrame(np.random.randn(1000, 1000))
82+
self.df2 = DataFrame(np.random.randn(1000, 1000))
83+
84+
def time_frame_float_mod(self):
85+
(self.df / self.df2)
86+
87+
88+
class frame_int_div_by_zero(object):
89+
goal_time = 0.2
90+
91+
def setup(self):
92+
self.df = DataFrame(np.random.random_integers(np.iinfo(np.int16).min, np.iinfo(np.int16).max, size=(1000, 1000)))
93+
94+
def time_frame_int_div_by_zero(self):
95+
(self.df / 0)
96+
97+
98+
class frame_int_mod(object):
99+
goal_time = 0.2
100+
101+
def setup(self):
102+
self.df = DataFrame(np.random.random_integers(np.iinfo(np.int16).min, np.iinfo(np.int16).max, size=(1000, 1000)))
103+
self.df2 = DataFrame(np.random.random_integers(np.iinfo(np.int16).min, np.iinfo(np.int16).max, size=(1000, 1000)))
104+
105+
def time_frame_int_mod(self):
106+
(self.df / self.df2)
107+
108+
109+
class frame_mult(object):
110+
goal_time = 0.2
111+
112+
def setup(self):
113+
self.df = DataFrame(np.random.randn(20000, 100))
114+
self.df2 = DataFrame(np.random.randn(20000, 100))
115+
116+
def time_frame_mult(self):
117+
(self.df * self.df2)
118+
119+
120+
class frame_mult_no_ne(object):
121+
goal_time = 0.2
122+
123+
def setup(self):
124+
self.df = DataFrame(np.random.randn(20000, 100))
125+
self.df2 = DataFrame(np.random.randn(20000, 100))
126+
expr.set_use_numexpr(False)
127+
128+
def time_frame_mult_no_ne(self):
129+
(self.df * self.df2)
130+
131+
def teardown(self):
132+
expr.set_use_numexpr(True)
133+
134+
135+
class frame_mult_st(object):
136+
goal_time = 0.2
137+
138+
def setup(self):
139+
self.df = DataFrame(np.random.randn(20000, 100))
140+
self.df2 = DataFrame(np.random.randn(20000, 100))
141+
expr.set_numexpr_threads(1)
142+
143+
def time_frame_mult_st(self):
144+
(self.df * self.df2)
145+
146+
def teardown(self):
147+
expr.set_numexpr_threads()
148+
149+
150+
class frame_multi_and(object):
151+
goal_time = 0.2
152+
153+
def setup(self):
154+
self.df = DataFrame(np.random.randn(20000, 100))
155+
self.df2 = DataFrame(np.random.randn(20000, 100))
156+
157+
def time_frame_multi_and(self):
158+
self.df[((self.df > 0) & (self.df2 > 0))]
159+
160+
161+
class frame_multi_and_no_ne(object):
162+
goal_time = 0.2
163+
164+
def setup(self):
165+
self.df = DataFrame(np.random.randn(20000, 100))
166+
self.df2 = DataFrame(np.random.randn(20000, 100))
167+
expr.set_use_numexpr(False)
168+
169+
def time_frame_multi_and_no_ne(self):
170+
self.df[((self.df > 0) & (self.df2 > 0))]
171+
172+
def teardown(self):
173+
expr.set_use_numexpr(True)
174+
175+
176+
class frame_multi_and_st(object):
177+
goal_time = 0.2
178+
179+
def setup(self):
180+
self.df = DataFrame(np.random.randn(20000, 100))
181+
self.df2 = DataFrame(np.random.randn(20000, 100))
182+
expr.set_numexpr_threads(1)
183+
184+
def time_frame_multi_and_st(self):
185+
self.df[((self.df > 0) & (self.df2 > 0))]
186+
187+
def teardown(self):
188+
expr.set_numexpr_threads()
189+
190+
191+
class series_timestamp_compare(object):
192+
goal_time = 0.2
193+
194+
def setup(self):
195+
self.N = 1000000
196+
self.halfway = ((self.N // 2) - 1)
197+
self.s = Series(date_range('20010101', periods=self.N, freq='T'))
198+
self.ts = self.s[self.halfway]
199+
200+
def time_series_timestamp_compare(self):
201+
(self.s <= self.ts)
202+
203+
204+
class timestamp_ops_diff1(object):
205+
goal_time = 0.2
206+
207+
def setup(self):
208+
self.N = 1000000
209+
self.s = Series(date_range('20010101', periods=self.N, freq='s'))
210+
211+
def time_timestamp_ops_diff1(self):
212+
self.s.diff()
213+
214+
215+
class timestamp_ops_diff2(object):
216+
goal_time = 0.2
217+
218+
def setup(self):
219+
self.N = 1000000
220+
self.s = Series(date_range('20010101', periods=self.N, freq='s'))
221+
222+
def time_timestamp_ops_diff2(self):
223+
(self.s - self.s.shift())
224+
225+
226+
class timestamp_series_compare(object):
227+
goal_time = 0.2
228+
229+
def setup(self):
230+
self.N = 1000000
231+
self.halfway = ((self.N // 2) - 1)
232+
self.s = Series(date_range('20010101', periods=self.N, freq='T'))
233+
self.ts = self.s[self.halfway]
234+
235+
def time_timestamp_series_compare(self):
236+
(self.ts >= self.s)

asv_bench/benchmarks/categoricals.py

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from pandas_vb_common import *
2+
3+
4+
class concat_categorical(object):
5+
goal_time = 0.2
6+
7+
def setup(self):
8+
self.s = pd.Series((list('aabbcd') * 1000000)).astype('category')
9+
10+
def time_concat_categorical(self):
11+
concat([self.s, self.s])

asv_bench/benchmarks/ctors.py

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
from pandas_vb_common import *
2+
3+
4+
class frame_constructor_ndarray(object):
5+
goal_time = 0.2
6+
7+
def setup(self):
8+
self.arr = np.random.randn(100, 100)
9+
10+
def time_frame_constructor_ndarray(self):
11+
DataFrame(self.arr)
12+
13+
14+
class ctor_index_array_string(object):
15+
goal_time = 0.2
16+
17+
def setup(self):
18+
self.data = np.array(['foo', 'bar', 'baz'], dtype=object)
19+
20+
def time_ctor_index_array_string(self):
21+
Index(self.data)
22+
23+
24+
class series_constructor_ndarray(object):
25+
goal_time = 0.2
26+
27+
def setup(self):
28+
self.data = np.random.randn(100)
29+
self.index = Index(np.arange(100))
30+
31+
def time_series_constructor_ndarray(self):
32+
Series(self.data, index=self.index)
33+
34+
35+
class dtindex_from_series_ctor(object):
36+
goal_time = 0.2
37+
38+
def setup(self):
39+
self.s = Series(([Timestamp('20110101'), Timestamp('20120101'), Timestamp('20130101')] * 1000))
40+
41+
def time_dtindex_from_series_ctor(self):
42+
DatetimeIndex(self.s)
43+
44+
45+
class index_from_series_ctor(object):
46+
goal_time = 0.2
47+
48+
def setup(self):
49+
self.s = Series(([Timestamp('20110101'), Timestamp('20120101'), Timestamp('20130101')] * 1000))
50+
51+
def time_index_from_series_ctor(self):
52+
Index(self.s)

0 commit comments

Comments
 (0)