11import argparse
22import csv
3+ import math
34import tabulate as tab
45
56parser = argparse .ArgumentParser ()
7+ parser .add_argument ('-r' , '--runs' , type = int , required = True , help = 'Number of runs' )
68parser .add_argument ('-b' , '--baseline' , required = True , help = 'Baseline CSV file' )
79parser .add_argument ('-c' , '--current' , required = True , help = 'Current CSV file' )
810args = parser .parse_args ()
@@ -16,24 +18,28 @@ def get_2d_list(csv_filename):
1618table_baseline = get_2d_list (args .baseline )
1719table_current = get_2d_list (args .current )
1820
19- def get_emoji (d , stdev ):
20- z = 1.96 # 95% confidence interval
21- if d < - z * stdev :
21+ def student (meanX , stdevX , runsX , meanY , stdevY , runsY ):
22+ s2 = ((runsX - 1 ) * stdevX ** 2 + (runsY - 1 ) * stdevY ** 2 ) / (runsX + runsY - 2 )
23+ return (meanX - meanY ) / math .sqrt (s2 / runsX + s2 / runsY ) if s2 > 0.0 else 0.0
24+
25+ def get_emoji (t ):
26+ quantile = 2.0 # 95% confidence interval
27+ if t < - quantile :
2228 return ':green_circle:'
23- elif d > z * stdev :
29+ elif t > quantile :
2430 return ':red_circle:'
2531 else :
2632 return ':white_circle:'
2733
2834table = []
2935for baseline , current in zip (table_baseline , table_current ):
30- baseline_name , baseline_mean , _ = baseline
36+ baseline_name , baseline_mean , baseline_stdev = baseline
3137 name , mean , stdev = current
3238 assert (baseline_name == name )
3339 diff = baseline_mean - mean
34- impact = 0.0 if stdev == 0.0 else diff / stdev
35- emoji = get_emoji (diff , stdev )
36- table .append ([name , int (mean ), f'{ stdev :.2f} ' , int (diff ), f'{ impact :.2f} ' , emoji ])
40+ t = student ( baseline_mean , baseline_stdev , args . runs , mean , stdev , args . runs ) if args . runs > 2 else 0.0
41+ emoji = get_emoji (t )
42+ table .append ([name , int (mean ), f'{ stdev :.2f} ' , int (diff ), f'{ t :.2f} ' , emoji ])
3743
38- header = ['name' , 'mean (\u03BC s)' , 'stdev \u03C3 ' , 'diff \u0394 ' , '\u0394 / \u03C3 ' , '' ]
44+ header = ['name' , 'mean (\u03BC s)' , 'stdev \u03C3 ' , 'diff \u0394 ' , 't ' , '' ]
3945print (tab .tabulate (table , header , tablefmt = "github" ))
0 commit comments