-
Notifications
You must be signed in to change notification settings - Fork 241
Expand file tree
/
Copy pathsummarize-time-trials
More file actions
executable file
·73 lines (60 loc) · 2.2 KB
/
summarize-time-trials
File metadata and controls
executable file
·73 lines (60 loc) · 2.2 KB
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
67
68
69
70
71
72
73
#!/usr/bin/env python3
from argparse import ArgumentParser, FileType
import numpy
import pandas
def main():
# process command-line options
parser = ArgumentParser()
parser.add_argument(
"--csv",
help="CSV file with raw results from time trials (default: %(default)s)",
type=FileType(),
default="build/time-trials.csv",
)
raw_results_csv = parser.parse_args().csv
# load results, then identify successful and skipped tests
frame = pandas.read_csv(raw_results_csv)
results = frame["resultType"]
successes = results == "SUCCESS"
skips = results == "SKIPPED"
# report failed tests, if any
failures = frame[~(successes | skips)]
if not failures.empty:
print("failed tests:")
print(failures)
return
# aggregate multiple trials of each individual test method
frame["elapsedTime"] = frame["endTime"] - frame["startTime"]
grouped = frame[successes].groupby(["className", "name"])["elapsedTime"]
# print very wide tables in full; assume user can scroll horizontally
pandas.set_option("display.width", None)
pandas.set_option("display.max_colwidth", None)
# summarize distribution of elapsed times, including fine-grained
# percentiles at the upper (slowest) end
times = grouped.mean()
times.sort_values(inplace=True)
print("Overall distribution and percentiles of elapsed times:\n")
print(
times.describe(
percentiles=numpy.arange(0.8, 1, 0.01),
)
)
print("\n")
# print slowest individual tests, showing only those in the 95% percentile
# or higher (slower)
ranked_times = pandas.DataFrame(times)
ranked_times["percentRank"] = times.rank(pct=True)
elapsed_times = ranked_times["elapsedTime"]
ranked_times["percentOfTotal"] = elapsed_times / elapsed_times.sum()
is_slow = ranked_times["percentRank"] >= 0.95
slowest_tests = ranked_times[is_slow][::-1]
print("Slowest individual tests:")
format_as_percent = "{:.1%}".format
print(
slowest_tests.to_string(
float_format=format_as_percent,
formatters={"elapsedTime": "{:,.0f}".format},
)
)
if __name__ == "__main__":
main()