33import os
44import datetime
55import re
6+
7+ import numpy as np
68import pandas as pd
79
810BASE_RESULT_DIR = "artifacts/results/"
11+ PROJECTS = ["convex" , "jflex" , "mph-table" ]
912
1013def obtain_stats_directories (results_directory : str ) -> list [str ]:
1114 directory_tree = [x for x in os .walk (results_directory )] # os.walk returns a tuple with structure (directory, subdirectories, files)
@@ -39,7 +42,7 @@ def evaluate_directories(project_name: str, results_directory: str, directories:
3942def retrieve_time_elapsed (directory_path : str , valid_htmls : list [str ]) -> dict [str , str ]:
4043 times_elapsed_dict = {}
4144 for html_file in valid_htmls :
42- property_name = "Property - " + html_file .replace (".html" , "" ).replace ("#" , "" )
45+ property_name = html_file .replace (".html" , "" ).replace ("#" , "- " )
4346 file_path = directory_path + html_file
4447 with open (file_path ) as f :
4548 contents = f .read ()
@@ -49,13 +52,37 @@ def retrieve_time_elapsed(directory_path: str, valid_htmls: list[str]) -> dict[s
4952 times_elapsed_dict [property_name ] = round (float (time_elapsed ), 2 )
5053 return times_elapsed_dict
5154
52- def generate_report (project_name : str , final_stats : dict [str , pd .Series ], final_fixed_stats : dict [str , dict ]):
55+ def generate_report_stats (stat_values : dict [str , dict ]) -> dict [str , str ]:
56+ first_iteration = stat_values [next (iter (stat_values ))]
57+ # stage a dictionary to contain an array of times for ea property
58+ property_dict = {}
59+ for key in first_iteration :
60+ property_dict [key ] = []
61+
62+ # populate the dictionary with our results
63+ for key , val in stat_values .items ():
64+ for prop , time in val .items ():
65+ property_array = property_dict .get (prop )
66+ property_array .append (time )
67+
68+ # generate mean, standard deviation and populate our final object
69+ property_stats_dict = {}
70+ for key , val in property_dict .items ():
71+ np_array = np .array (val )
72+ mean = round (np_array .mean (), 2 )
73+ standard_dev = round (np_array .std (), 2 )
74+ property_stats_dict [key ] = str (mean ) + " \u00B1 " + str (standard_dev )
75+ return property_stats_dict
76+
77+ def generate_report (project_name : str , final_stats : dict [str , str ], final_fixed_stats : dict [str , str ]):
5378 report_name = "artifacts/output/rq4_" + project_name + ".csv"
54- tex_file = report_name .replace (".csv" , ".tex" )
55- final_stats .update (final_fixed_stats )
56- df = pd .DataFrame (final_stats )
79+ final_report_dict = {}
80+ final_report_dict [project_name ] = final_stats
81+ final_report_dict [project_name + "-fixed" ] = final_fixed_stats
82+ df = pd .DataFrame (final_report_dict )
5783 df .to_csv (path_or_buf = report_name )
58- df .style .to_latex (buf = tex_file )
84+
85+
5986
6087def main ():
6188 if not sys .argv [1 ]:
@@ -67,14 +94,16 @@ def main():
6794 # vanilla
6895 stats_directories = obtain_stats_directories (results_directory = results_directory )
6996 evaluated_runs = filter_for_recent_results (project_name = project_name , stats_directories = stats_directories )
70- final_stats = evaluate_directories (project_name = project_name , results_directory = results_directory , directories = evaluated_runs )
97+ raw_stats = evaluate_directories (project_name = project_name , results_directory = results_directory , directories = evaluated_runs )
7198
7299 # fixed
73100 fixed_stats_directories = obtain_stats_directories (results_directory = fixed_results_directory )
74101 evaluated_fixed_runs = filter_for_recent_results (project_name = project_name , stats_directories = fixed_stats_directories )
75- final_fixed_stats = evaluate_directories (project_name = fixed_project_name , results_directory = fixed_results_directory , directories = evaluated_fixed_runs )
102+ fixed_raw_stats = evaluate_directories (project_name = fixed_project_name , results_directory = fixed_results_directory , directories = evaluated_fixed_runs )
76103
77- # final report
104+ # obtain mean/st dev
105+ final_stats = generate_report_stats (stat_values = raw_stats )
106+ final_fixed_stats = generate_report_stats (stat_values = fixed_raw_stats )
78107 generate_report (project_name = project_name , final_stats = final_stats , final_fixed_stats = final_fixed_stats )
79108
80109
0 commit comments