66import pandas as pd
77
88BASE_RESULT_DIR = "artifacts/results/"
9- PROJECTS = ["jflex " , "convex " , "mph-table" ]
9+ PROJECTS = ["convex " , "jflex " , "mph-table" , "rpki-commons " ]
1010REPORT_NAME = "artifacts/output/rq4.csv"
1111TEX_REPORT_NAME = "artifacts/output/rq4.tex"
1212
13- CALC_NAMES = ['Vanilla' , 'Improved' ]
13+ RAW_NAMES = ['Vanilla' , 'Improved' ]
14+ CALC_NAMES = ['Vanilla' , 'Improved' , 'Overhead' ]
1415
1516propertyShortNames = {
1617 "TestSmartByteSerializer#canRoundTripBytes" : 'byte' ,
3132 "CharClassesQuickcheck#addString" : 'addString' ,
3233 "StateSetQuickcheck#addStateDoesNotRemove" : 'add' ,
3334 "StateSetQuickcheck#containsElements" : 'contains' ,
34- "StateSetQuickcheck#removeAdd" : 'remove'
35+ "StateSetQuickcheck#removeAdd" : 'remove' ,
36+ "RoaCMSBuilderPropertyTest#buildEncodedParseCheck" : 'roa' ,
37+ "ManifestCMSBuilderPropertyTest#buildEncodedParseCheck" : 'manifest' ,
38+ "AspaCmsTest#should_generate_aspa" : 'aspa' ,
39+ "X509ResourceCertificateParentChildValidatorTest#validParentChildSubResources" : 'resources' ,
40+ "X509ResourceCertificateParentChildValidatorTest#validParentChildOverClaiming" : 'claiming' ,
41+ "X509ResourceCertificateParentChildValidatorTest#validParentChildOverClaimingLooseValidation" : 'loose'
3542}
3643
3744row_count = 1
@@ -45,6 +52,8 @@ def filter_for_recent_results(project_name: str, stats_directories: list[str]) -
4552 project_string = project_name if project_name != "convex" else project_name + "-core" # edge case
4653 if "mph-table-fixed" in stats_directories [0 ]: # edge case
4754 project_string = "mph-table-fixed"
55+ elif "rpki-commons-fixed" in stats_directories [0 ]:
56+ project_string = "rpki-commons-fixed"
4857 time_stamps = [datetime .datetime .strptime (x .replace (project_string , "" ).replace ("_" , ":" ).replace ("T" , " " ), "%Y-%m-%d %H:%M:%S.%f" )
4958 for x in stats_directories ]
5059 time_stamps .sort ()
@@ -88,11 +97,14 @@ def generate_report_stats(stat_values: dict[str, dict]) -> dict[str, str]:
8897 property_dict = {}
8998 for key in first_iteration :
9099 property_dict [key ] = []
91-
100+
92101 # populate the dictionary with our results
93102 for key , val in stat_values .items ():
94103 for prop , time in val .items ():
95104 property_array = property_dict .get (prop )
105+ if property_array is None :
106+ property_dict [prop ] = []
107+ property_array = property_dict .get (prop )
96108 property_array .append (time )
97109
98110 # generate mean, standard deviation and populate our final object
@@ -141,7 +153,7 @@ def main():
141153 fixed_stats_directories = obtain_stats_directories (results_directory = fixed_results_directory )
142154 evaluated_fixed_runs = filter_for_recent_results (project_name = project_name , stats_directories = fixed_stats_directories )
143155 fixed_raw_stats = evaluate_directories (project_name = fixed_project_name , results_directory = fixed_results_directory , directories = evaluated_fixed_runs )
144-
156+
145157 # obtain mean/st dev
146158 final_stats = generate_report_stats (stat_values = raw_stats )
147159 final_fixed_stats = generate_report_stats (stat_values = fixed_raw_stats )
@@ -153,21 +165,24 @@ def main():
153165 df = pd .DataFrame ()
154166 for project in PROJECTS :
155167 final_dataset [project ]['_style' ] = ''
156- proj_mean_and_std = final_dataset [project ][CALC_NAMES ].copy ()
168+ proj_mean_and_std = final_dataset [project ][RAW_NAMES ].copy ()
157169 vanilla_mean = pd .DataFrame (proj_mean_and_std ['Vanilla' ].apply (lambda v : float (v .split (" \u00B1 " )[0 ]) if
158170 " \u00B1 " in str (v ) else np .nan )).reset_index ()
159171 improved_mean = pd .DataFrame (proj_mean_and_std ['Improved' ].apply (lambda v : float (v .split (" \u00B1 " )[0 ]) if
160172 " \u00B1 " in str (v ) else np .nan )).reset_index ()
161173
162- proj_stats = pd .merge (vanilla_mean .copy (), improved_mean .copy (), how = 'outer' , on = 'index' )[CALC_NAMES ]
163- final_dataset [project ]['Difference' ] = proj_stats [['Vanilla' , 'Improved' ]].pct_change (axis = 'columns' )['Improved' ]
164- proj_mean = pd .merge (vanilla_mean , improved_mean , how = 'outer' , on = 'index' )[CALC_NAMES ].mean ()
174+ proj_stats = pd .merge (vanilla_mean , improved_mean , how = 'outer' , on = 'index' )[RAW_NAMES ].reset_index ()
175+
176+ final_dataset [project ]['Overhead' ] = proj_stats [['Improved' ]].values / proj_stats [['Vanilla' ]].values
177+ overhead_stats = final_dataset [project ]['Overhead' ].copy ().reset_index ()
178+
179+ proj_mean = pd .merge (proj_stats , overhead_stats , how = 'outer' , on = 'index' )[CALC_NAMES ].mean ()
165180 proj_mean ['_style' ] = 'BOLD'
166181 proj_mean ['N' ] = ''
167182 proj_mean ['Property' ] = 'Average'
168183 final_dataset [project ].loc ['mean' ] = proj_mean
169184
170- header = dict (zip (['N' , 'Property' , 'Vanilla' , 'Improved' , 'Difference ' ], ['' , '' , '' , '' , '' ]))
185+ header = dict (zip (['N' , 'Property' , 'Vanilla' , 'Improved' , 'Overhead ' ], ['' , '' , '' , '' , '' ]))
171186 df = pd .concat ([
172187 df ,
173188 pd .DataFrame (header | {'_style' : 'HEADER' , 'Property' : project }, index = [0 ]),
@@ -203,6 +218,5 @@ def main():
203218 tf .write (outTable )
204219
205220
206-
207221if __name__ == "__main__" :
208222 main ()
0 commit comments