forked from sympy/sympy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparse_durations_log.py
executable file
·66 lines (56 loc) · 2.06 KB
/
parse_durations_log.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python3
from collections import defaultdict
import os
import json
import time
ci_folder = os.path.dirname(__file__)
def read_log():
start_token = '= slowest test durations ='
start_token_seen = False
for line in open(os.path.join(ci_folder, 'durations.log')):
if start_token_seen:
try:
dur, kind, test_id = line.split()
except:
return
else:
if dur[0] not in '0123456789':
return
if kind != 'call':
continue
if dur[-1] != 's':
raise NotImplementedError("expected seconds")
yield test_id, float(dur[:-1])
elif start_token in line:
start_token_seen = True
def main(ref_timing, limits=(10, .1)):
"""
parses durations.log (made by generate_durations_log.sh)
"""
groupings = [defaultdict(list) for _ in range(len(limits))]
accumul_n = [0 for _ in range(len(limits))]
accumul_t = [0.0 for _ in range(len(limits))]
for test_id, dur in read_log():
if test_id.startswith('sympy/utilities/tests/test_code_quality.py'):
continue # white-listed (worth running since it catches many errors)
for idx, lim in enumerate(limits):
if dur/ref_timing >= lim:
fname, tname = test_id.split('::')
groupings[idx][fname].append(tname)
accumul_t[idx] += dur
accumul_n[idx] += 1
break
json_data = json.dumps([{k: sorted(v) for k, v in gr.items()}
for gr in groupings], indent=4, sort_keys=True)
open(os.path.join(ci_folder, 'durations.json'), 'wt').write(json_data)
print('number in group, accumulated_time: %s' %
str(list(zip(accumul_n, accumul_t))))
def slow_function():
t = time.time()
a = 0
for i in range(5):
a += sum([x**.3 - x**i for x in range(1000000) if x % 3 == 0])
return time.time() - t
if __name__ == '__main__':
ref_time = slow_function()
main(ref_time)