Coverage for mlos_core/mlos_core/spaces/adapters/__init__.py: 100%
21 statements
« prev ^ index » next coverage.py v7.6.1, created at 2024-10-07 01:52 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2024-10-07 01:52 +0000
1#
2# Copyright (c) Microsoft Corporation.
3# Licensed under the MIT License.
4#
5"""Basic initializer module for the mlos_core space adapters."""
7from enum import Enum
8from typing import Optional, TypeVar
10import ConfigSpace
12from mlos_core.spaces.adapters.identity_adapter import IdentityAdapter
13from mlos_core.spaces.adapters.llamatune import LlamaTuneAdapter
15__all__ = [
16 "IdentityAdapter",
17 "LlamaTuneAdapter",
18]
21class SpaceAdapterType(Enum):
22 """Enumerate supported MlosCore space adapters."""
24 IDENTITY = IdentityAdapter
25 """A no-op adapter will be used."""
27 LLAMATUNE = LlamaTuneAdapter
28 """An instance of LlamaTuneAdapter class will be used."""
31# To make mypy happy, we need to define a type variable for each optimizer type.
32# https://github.com/python/mypy/issues/12952
33# ConcreteSpaceAdapter = TypeVar(
34# "ConcreteSpaceAdapter",
35# *[member.value for member in SpaceAdapterType],
36# )
37# To address this, we add a test for complete coverage of the enum.
38ConcreteSpaceAdapter = TypeVar(
39 "ConcreteSpaceAdapter",
40 IdentityAdapter,
41 LlamaTuneAdapter,
42)
45class SpaceAdapterFactory:
46 """Simple factory class for creating BaseSpaceAdapter-derived objects."""
48 # pylint: disable=too-few-public-methods
50 @staticmethod
51 def create(
52 *,
53 parameter_space: ConfigSpace.ConfigurationSpace,
54 space_adapter_type: SpaceAdapterType = SpaceAdapterType.IDENTITY,
55 space_adapter_kwargs: Optional[dict] = None,
56 ) -> ConcreteSpaceAdapter: # type: ignore[type-var]
57 """
58 Create a new space adapter instance, given the parameter space and potential
59 space adapter options.
61 Parameters
62 ----------
63 parameter_space : ConfigSpace.ConfigurationSpace
64 Input configuration space.
65 space_adapter_type : Optional[SpaceAdapterType]
66 Space adapter class to be used alongside the optimizer.
67 space_adapter_kwargs : Optional[dict]
68 Optional arguments passed in SpaceAdapter class constructor.
70 Returns
71 -------
72 space_adapter : ConcreteSpaceAdapter
73 Instance of concrete space adapter (e.g., None, LlamaTuneAdapter, etc.)
74 """
75 if space_adapter_type is None:
76 space_adapter_type = SpaceAdapterType.IDENTITY
77 if space_adapter_kwargs is None:
78 space_adapter_kwargs = {}
80 space_adapter: ConcreteSpaceAdapter = space_adapter_type.value(
81 orig_parameter_space=parameter_space,
82 **space_adapter_kwargs,
83 )
85 return space_adapter