import config import pandas as pd from datetime import datetime as dt from gedi.generator import GenerateEventLogs from gedi.features import EventLogFeatures from gedi.analyser import FeatureAnalyser from gedi.augmentation import InstanceAugmentator from gedi.benchmark import BenchmarkTest from gedi.plotter import BenchmarkPlotter, FeaturesPlotter, AugmentationPlotter, GenerationPlotter from utils.default_argparse import ArgParser from utils.param_keys import * from utils.param_keys.run_options import * def run(kwargs:dict, model_paramas_list: list, filename_list:list): """ This function chooses the running option for the program. @param kwargs: dict contains the running parameters and the event-log file information @param model_params_list: list contains a list of model parameters, which are used to analyse this different models. @param filename_list: list contains the list of the filenames to load multiple event-logs @return: """ params = kwargs[PARAMS] run_option = params[RUN_OPTION] ft = EventLogFeatures(None) augmented_ft = InstanceAugmentator() gen = pd.DataFrame(columns=['log']) if run_option == BASELINE: for model_params in model_params_list: if model_params.get(PIPELINE_STEP) == 'instance_augmentation': augmented_ft = InstanceAugmentator(aug_params=model_params, samples=ft.feat) AugmentationPlotter(augmented_ft, model_params) elif model_params.get(PIPELINE_STEP) == 'event_logs_generation': gen = pd.DataFrame(GenerateEventLogs(model_params).log_config) #gen = pd.read_csv("output/features/generated/grid_2objectives_enseef_enve/2_enseef_enve_feat.csv") GenerationPlotter(gen, model_params, output_path="output/plots") elif model_params.get(PIPELINE_STEP) == 'benchmark_test': benchmark = BenchmarkTest(model_params, event_logs=gen['log']) # BenchmarkPlotter(benchmark.features, output_path="output/plots") elif model_params.get(PIPELINE_STEP) == 'feature_extraction': ft = EventLogFeatures(**kwargs, logs=gen['log'], ft_params=model_params) FeaturesPlotter(ft.feat, model_params) elif model_params.get(PIPELINE_STEP) == "evaluation_plotter": GenerationPlotter(gen, model_params, output_path=model_params['output_path'], input_path=model_params['input_path']) elif run_option == COMPARE: if params[N_COMPONENTS] != 2: raise ValueError(f'The parameter `{N_COMPONENTS}` has to be 2, but it\'s {params[N_COMPONENTS]}.') ft = EventLogFeatures(**kwargs) FeatureAnalyser(ft, params).compare(model_params_list) else: raise InvalidRunningOptionError(f'The run_option: `{run_option}` in the (json) configuration ' f'does not exists or it is not a loading option.\n') if __name__=='__main__': start_gedi = dt.now() print(f'INFO: GEDI starting {start_gedi}') args = ArgParser().parse('GEDI main') run_params = config.get_run_params(args.run_params_json) filename_list, kwargs = config.get_files_and_kwargs(run_params) if args.result_load_files is None: model_params_list = config.get_model_params_list(args.alg_params_json) run(kwargs, model_params_list, filename_list) else: load(args.result_load_files, kwargs) print(f'SUCCESS: GEDI took {dt.now()-start_gedi} sec.')