@@ -65,9 +65,16 @@ def plain_text_comparison(data, metric, baseline_name=None, candidate_name=None)
6565 """
6666 data = data .replace (numpy .nan , None ) # avoid NaNs in tabulate output
6767 headers = ['Benchmark' , baseline_name , candidate_name , 'Difference' , '% Difference' ]
68- fmt = (None , '.2f' , '.2f' , '.2f' , '.2f' )
69- table = data [['benchmark' , f'{ metric } _0' , f'{ metric } _1' , 'difference' , 'percent' ]].set_index ('benchmark' )
70- return tabulate .tabulate (table , headers = headers , floatfmt = fmt , numalign = 'right' )
68+ fmt = (None , '.2f' , '.2f' , '.2f' , '.2%' )
69+ table = data [['benchmark' , f'{ metric } _0' , f'{ metric } _1' , 'difference' , 'percent' ]]
70+
71+ # Compute the geomean and report on their difference
72+ geomean_0 = statistics .geometric_mean (data [f'{ metric } _0' ])
73+ geomean_1 = statistics .geometric_mean (data [f'{ metric } _1' ])
74+ geomean_row = ['Geomean' , geomean_0 , geomean_1 , (geomean_1 - geomean_0 ), (geomean_1 - geomean_0 ) / geomean_0 ]
75+ table .loc [len (table )] = geomean_row
76+
77+ return tabulate .tabulate (table .set_index ('benchmark' ), headers = headers , floatfmt = fmt , numalign = 'right' )
7178
7279def create_chart (data , metric , subtitle = None , series_names = None ):
7380 """
@@ -154,7 +161,7 @@ def main(argv):
154161 # If we have exactly two data sets, compute additional info in new columns
155162 if len (lnt_inputs ) == 2 :
156163 data ['difference' ] = data [f'{ args .metric } _1' ] - data [f'{ args .metric } _0' ]
157- data ['percent' ] = 100 * ( data ['difference' ] / data [f'{ args .metric } _0' ])
164+ data ['percent' ] = data ['difference' ] / data [f'{ args .metric } _0' ]
158165
159166 if args .filter is not None :
160167 keeplist = [b for b in data ['benchmark' ] if re .search (args .filter , b ) is not None ]
0 commit comments