Coverage for mlos_bench/mlos_bench/tests/config/optimizers/test_load_optimizer_config_examples.py: 100%
27 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"""
6Tests for loading optimizer config examples.
7"""
8import logging
9from typing import List
11import pytest
13from mlos_bench.tests.config import locate_config_examples
15from mlos_bench.config.schemas import ConfigSchema
16from mlos_bench.services.config_persistence import ConfigPersistenceService
17from mlos_bench.optimizers.base_optimizer import Optimizer
18from mlos_bench.tunables.tunable_groups import TunableGroups
19from mlos_bench.util import get_class_from_name
22_LOG = logging.getLogger(__name__)
23_LOG.setLevel(logging.DEBUG)
26# Get the set of configs to test.
27CONFIG_TYPE = "optimizers"
30def filter_configs(configs_to_filter: List[str]) -> List[str]:
31 """If necessary, filter out json files that aren't for the module we're testing."""
32 return configs_to_filter
35configs = locate_config_examples(ConfigPersistenceService.BUILTIN_CONFIG_PATH, CONFIG_TYPE, filter_configs)
36assert configs
39@pytest.mark.parametrize("config_path", configs)
40def test_load_optimizer_config_examples(config_loader_service: ConfigPersistenceService, config_path: str) -> None:
41 """Tests loading a config example."""
42 config = config_loader_service.load_config(config_path, ConfigSchema.OPTIMIZER)
43 assert isinstance(config, dict)
44 cls = get_class_from_name(config["class"])
45 assert issubclass(cls, Optimizer)
46 # Make an instance of the class based on the config.
47 tunable_groups = TunableGroups()
48 optimizer_inst = config_loader_service.build_optimizer(
49 tunables=tunable_groups,
50 config=config,
51 service=config_loader_service,
52 )
53 assert optimizer_inst is not None
54 assert isinstance(optimizer_inst, cls)