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
« 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
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
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
19__settings: Settings = None
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
30__configuration_scenarios: list[ConfigurationScenario] = None
31__selection_scenarios: list[SelectionScenario] = None
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
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
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")]
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"
78file_storage_data_mapping = {solver_nickname_list_path: {},
79 instances_nickname_path: {},
80 extractor_nickname_list_path: {}}
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())
87solver_nickname_mapping = file_storage_data_mapping[solver_nickname_list_path]
88instance_set_nickname_mapping = file_storage_data_mapping[instances_nickname_path]