Coverage for sparkle/CLI/help/global_variables.py: 77%
65 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-09-29 10:17 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-09-29 10:17 +0000
1#!/usr/bin/env python3
2"""Definitions of constants broadly used in Sparkle."""
4import ast
5from argparse import Namespace
6import random
7import numpy as np
9from sparkle.platform.settings_objects import Settings
10from sparkle.structures import PerformanceDataFrame
11from sparkle.configurator.configurator import ConfigurationScenario
12from sparkle.configurator.implementations import (
13 SMAC2Scenario,
14 SMAC3Scenario,
15 ParamILSScenario,
16 IRACEScenario,
17)
18from sparkle.selector import SelectionScenario
21__settings: Settings = None
24def settings(argsv: Namespace = None) -> Settings:
25 """Function to get the global settings object."""
26 global __settings
27 if __settings is None:
28 __settings = Settings(Settings.DEFAULT_settings_path, argsv=argsv)
29 # Set global random state
30 max_seed = 2**32 - 1
31 latest_ini = Settings(Settings.DEFAULT_previous_settings_path)
32 # Determine seed priority: latest.ini > __settings > random
33 seed = latest_ini.seed or __settings.seed or random.randint(0, max_seed)
34 # Set global RNG states
35 np.random.seed(seed)
36 random.seed(seed)
37 __settings.random_state = seed
38 # Next seed will be saved in latest.ini when the cli script calls 'write_used_settings()'
39 next_seed = random.randint(0, max_seed)
40 __settings.seed = next_seed
42 elif argsv is not None:
43 __settings.apply_arguments(argsv)
45 return __settings
48__configuration_scenarios: list[ConfigurationScenario] = None
49__selection_scenarios: list[SelectionScenario] = None
52def configuration_scenarios(refresh: bool = False) -> list[ConfigurationScenario]:
53 """Fetch all known configuration scenarios."""
54 global __configuration_scenarios
55 config_path = Settings.DEFAULT_configuration_output
56 if __configuration_scenarios is None or refresh:
57 __configuration_scenarios = []
58 for f in config_path.glob("*/*/*.*"): # We look for files at depth three
59 if "scenario" not in f.name:
60 continue
61 if "SMAC2" in str(f):
62 __configuration_scenarios.append(SMAC2Scenario.from_file(f))
63 elif "SMAC3" in str(f):
64 __configuration_scenarios.append(SMAC3Scenario.from_file(f))
65 elif "ParamILS" in str(f):
66 __configuration_scenarios.append(ParamILSScenario.from_file(f))
67 elif "IRACE" in str(f):
68 __configuration_scenarios.append(IRACEScenario.from_file(f))
69 return __configuration_scenarios
72def selection_scenarios(refresh: bool = False) -> list[SelectionScenario]:
73 """Fetch all known selection scenarios."""
74 global __selection_scenarios
75 selection_path = Settings.DEFAULT_selection_output
76 if __selection_scenarios is None or refresh:
77 __selection_scenarios = []
78 for f in selection_path.glob("*/*/*.txt"): # We look for files at depth three
79 if "scenario" not in f.name:
80 continue
81 __selection_scenarios.append(SelectionScenario.from_file(f))
82 return __selection_scenarios
85def parallel_portfolio_scenarios() -> list[PerformanceDataFrame]:
86 """Fetch all known parallel portfolio scenarios."""
87 parallel_portfolio_path = Settings.DEFAULT_parallel_portfolio_output
88 return [PerformanceDataFrame(f) for f in parallel_portfolio_path.glob("*/*.csv")]
91reference_list_dir = Settings.DEFAULT_reference_dir
92extractor_nickname_list_path = reference_list_dir / "sparkle_extractor_nickname_list.txt"
93solver_nickname_list_path = reference_list_dir / "sparkle_solver_nickname_list.txt"
94instances_nickname_path = reference_list_dir / "sparkle_instance_nickname_list.txt"
96file_storage_data_mapping = {
97 solver_nickname_list_path: {},
98 instances_nickname_path: {},
99 extractor_nickname_list_path: {},
100}
102for data_path in file_storage_data_mapping.keys():
103 if data_path.exists():
104 with data_path.open("r+") as fo:
105 file_storage_data_mapping[data_path] = ast.literal_eval(fo.read())
107solver_nickname_mapping = file_storage_data_mapping[solver_nickname_list_path]
108instance_set_nickname_mapping = file_storage_data_mapping[instances_nickname_path]