Coverage for mlos_bench/mlos_bench/tests/optimizers/mlos_core_opt_smac_test.py: 98%
58 statements
« prev ^ index » next coverage.py v7.5.1, created at 2024-05-06 00:35 +0000
« prev ^ index » next coverage.py v7.5.1, created at 2024-05-06 00:35 +0000
1#
2# Copyright (c) Microsoft Corporation.
3# Licensed under the MIT License.
4#
5"""
6Unit tests for mock mlos_bench optimizer.
7"""
8import os
9import sys
10import shutil
12import pytest
14from mlos_bench.util import path_join
15from mlos_bench.optimizers.mlos_core_optimizer import MlosCoreOptimizer
16from mlos_bench.tunables.tunable_groups import TunableGroups
18from mlos_bench.tests import SEED
20from mlos_core.optimizers.bayesian_optimizers.smac_optimizer import SmacOptimizer
22_OUTPUT_DIR_PATH_BASE = r'c:/temp' if sys.platform == 'win32' else '/tmp/'
23_OUTPUT_DIR = '_test_output_dir' # Will be deleted after the test.
26def test_init_mlos_core_smac_opt_bad_trial_count(tunable_groups: TunableGroups) -> None:
27 """
28 Test invalid max_trials initialization of mlos_core SMAC optimizer.
29 """
30 test_opt_config = {
31 'optimizer_type': 'SMAC',
32 'max_trials': 10,
33 'max_suggestions': 11,
34 'seed': SEED,
35 }
36 with pytest.raises(AssertionError):
37 opt = MlosCoreOptimizer(tunable_groups, test_opt_config)
38 assert opt is None
41def test_init_mlos_core_smac_opt_max_trials(tunable_groups: TunableGroups) -> None:
42 """
43 Test max_trials initialization of mlos_core SMAC optimizer.
44 """
45 test_opt_config = {
46 'optimizer_type': 'SMAC',
47 'max_suggestions': 123,
48 'seed': SEED,
49 }
50 opt = MlosCoreOptimizer(tunable_groups, test_opt_config)
51 # pylint: disable=protected-access
52 assert isinstance(opt._opt, SmacOptimizer)
53 assert opt._opt.base_optimizer.scenario.n_trials == test_opt_config['max_suggestions']
56def test_init_mlos_core_smac_absolute_output_directory(tunable_groups: TunableGroups) -> None:
57 """
58 Test absolute path output directory initialization of mlos_core SMAC optimizer.
59 """
60 output_dir = path_join(_OUTPUT_DIR_PATH_BASE, _OUTPUT_DIR)
61 test_opt_config = {
62 'optimizer_type': 'SMAC',
63 'output_directory': output_dir,
64 'seed': SEED,
65 }
66 opt = MlosCoreOptimizer(tunable_groups, test_opt_config)
67 assert isinstance(opt, MlosCoreOptimizer)
68 # pylint: disable=protected-access
69 assert isinstance(opt._opt, SmacOptimizer)
70 # Final portions of the path are generated by SMAC when run_name is not specified.
71 assert path_join(str(opt._opt.base_optimizer.scenario.output_directory)).startswith(
72 str(test_opt_config['output_directory']))
73 shutil.rmtree(output_dir)
76def test_init_mlos_core_smac_relative_output_directory(tunable_groups: TunableGroups) -> None:
77 """
78 Test relative path output directory initialization of mlos_core SMAC optimizer.
79 """
80 test_opt_config = {
81 'optimizer_type': 'SMAC',
82 'output_directory': _OUTPUT_DIR,
83 'seed': SEED,
84 }
85 opt = MlosCoreOptimizer(tunable_groups, test_opt_config)
86 assert isinstance(opt, MlosCoreOptimizer)
87 # pylint: disable=protected-access
88 assert isinstance(opt._opt, SmacOptimizer)
89 assert path_join(str(opt._opt.base_optimizer.scenario.output_directory)).startswith(
90 path_join(os.getcwd(), str(test_opt_config['output_directory'])))
91 shutil.rmtree(_OUTPUT_DIR)
94def test_init_mlos_core_smac_relative_output_directory_with_run_name(tunable_groups: TunableGroups) -> None:
95 """
96 Test relative path output directory initialization of mlos_core SMAC optimizer.
97 """
98 test_opt_config = {
99 'optimizer_type': 'SMAC',
100 'output_directory': _OUTPUT_DIR,
101 'run_name': 'test_run',
102 'seed': SEED,
103 }
104 opt = MlosCoreOptimizer(tunable_groups, test_opt_config)
105 assert isinstance(opt, MlosCoreOptimizer)
106 # pylint: disable=protected-access
107 assert isinstance(opt._opt, SmacOptimizer)
108 assert path_join(str(opt._opt.base_optimizer.scenario.output_directory)).startswith(
109 path_join(os.getcwd(), str(test_opt_config['output_directory']), str(test_opt_config['run_name'])))
110 shutil.rmtree(_OUTPUT_DIR)
113def test_init_mlos_core_smac_relative_output_directory_with_experiment_id(tunable_groups: TunableGroups) -> None:
114 """
115 Test relative path output directory initialization of mlos_core SMAC optimizer.
116 """
117 test_opt_config = {
118 'optimizer_type': 'SMAC',
119 'output_directory': _OUTPUT_DIR,
120 'seed': SEED,
121 }
122 global_config = {
123 'experiment_id': 'experiment_id',
124 }
125 opt = MlosCoreOptimizer(tunable_groups, test_opt_config, global_config)
126 assert isinstance(opt, MlosCoreOptimizer)
127 # pylint: disable=protected-access
128 assert isinstance(opt._opt, SmacOptimizer)
129 assert path_join(str(opt._opt.base_optimizer.scenario.output_directory)).startswith(
130 path_join(os.getcwd(), str(test_opt_config['output_directory']), global_config['experiment_id']))
131 shutil.rmtree(_OUTPUT_DIR)
134def test_init_mlos_core_smac_temp_output_directory(tunable_groups: TunableGroups) -> None:
135 """
136 Test random output directory initialization of mlos_core SMAC optimizer.
137 """
138 test_opt_config = {
139 'optimizer_type': 'SMAC',
140 'output_directory': None,
141 'seed': SEED,
142 }
143 opt = MlosCoreOptimizer(tunable_groups, test_opt_config)
144 assert isinstance(opt, MlosCoreOptimizer)
145 # pylint: disable=protected-access
146 assert isinstance(opt._opt, SmacOptimizer)
147 assert opt._opt.base_optimizer.scenario.output_directory is not None