Coverage for sparkle/CLI/help/global_variables.py: 70%

54 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-07-01 13:21 +0000

1#!/usr/bin/env python3 

2"""Definitions of constants broadly used in Sparkle.""" 

3import ast 

4 

5from sparkle.platform.settings_objects import Settings 

6from sparkle.structures import PerformanceDataFrame 

7from sparkle.configurator.configurator import ConfigurationScenario 

8from sparkle.configurator.implementations import (SMAC2Scenario, SMAC3Scenario, 

9 ParamILSScenario, IRACEScenario) 

10from sparkle.selector import SelectionScenario 

11 

12 

13# TODO: Handle different seed requirements; for the moment this is a dummy function 

14def get_seed() -> int: 

15 """Return a seed.""" 

16 return 1 

17 

18 

19__settings: Settings = None 

20 

21 

22def settings() -> Settings: 

23 """Function to get the global settings object.""" 

24 global __settings 

25 if __settings is None: 

26 __settings = Settings() 

27 return __settings 

28 

29 

30__configuration_scenarios: list[ConfigurationScenario] = None 

31__selection_scenarios: list[SelectionScenario] = None 

32 

33 

34def configuration_scenarios(refresh: bool = False) -> list[ConfigurationScenario]: 

35 """Fetch all known configuration scenarios.""" 

36 global __configuration_scenarios 

37 config_path = settings().DEFAULT_configuration_output 

38 if __configuration_scenarios is None or refresh: 

39 __configuration_scenarios = [] 

40 for f in config_path.glob("*/*/*.*"): # We look for files at depth three 

41 if "scenario" not in f.name: 

42 continue 

43 if "SMAC2" in str(f): 

44 __configuration_scenarios.append(SMAC2Scenario.from_file(f)) 

45 elif "SMAC3" in str(f): 

46 __configuration_scenarios.append(SMAC3Scenario.from_file(f)) 

47 elif "ParamILS" in str(f): 

48 __configuration_scenarios.append(ParamILSScenario.from_file(f)) 

49 elif "IRACE" in str(f): 

50 __configuration_scenarios.append(IRACEScenario.from_file(f)) 

51 return __configuration_scenarios 

52 

53 

54def selection_scenarios(refresh: bool = False) -> list[SelectionScenario]: 

55 """Fetch all known selection scenarios.""" 

56 global __selection_scenarios 

57 selection_path = settings().DEFAULT_selection_output 

58 if __selection_scenarios is None or refresh: 

59 __selection_scenarios = [] 

60 for f in selection_path.glob("*/*/*.txt"): # We look for files at depth three 

61 if "scenario" not in f.name: 

62 continue 

63 __selection_scenarios.append(SelectionScenario.from_file(f)) 

64 return __selection_scenarios 

65 

66 

67def parallel_portfolio_scenarios() -> list[PerformanceDataFrame]: 

68 """Fetch all known parallel portfolio scenarios.""" 

69 parallel_portfolio_path = settings().DEFAULT_parallel_portfolio_output 

70 return [PerformanceDataFrame(f) for f in parallel_portfolio_path.glob("*/*.csv")] 

71 

72 

73reference_list_dir = Settings.DEFAULT_reference_dir 

74extractor_nickname_list_path = reference_list_dir / "sparkle_extractor_nickname_list.txt" 

75solver_nickname_list_path = reference_list_dir / "sparkle_solver_nickname_list.txt" 

76instances_nickname_path = reference_list_dir / "sparkle_instance_nickname_list.txt" 

77 

78file_storage_data_mapping = {solver_nickname_list_path: {}, 

79 instances_nickname_path: {}, 

80 extractor_nickname_list_path: {}} 

81 

82for data_path in file_storage_data_mapping.keys(): 

83 if data_path.exists(): 

84 with data_path.open("r+") as fo: 

85 file_storage_data_mapping[data_path] = ast.literal_eval(fo.read()) 

86 

87solver_nickname_mapping = file_storage_data_mapping[solver_nickname_list_path] 

88instance_set_nickname_mapping = file_storage_data_mapping[instances_nickname_path]