Coverage for mlos_core/mlos_core/spaces/adapters/__init__.py: 100%
22 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"""
6Basic initializer module for the mlos_core space adapters.
7"""
9from enum import Enum
10from typing import Optional, TypeVar
12import ConfigSpace
14from mlos_core.spaces.adapters.identity_adapter import IdentityAdapter
15from mlos_core.spaces.adapters.llamatune import LlamaTuneAdapter
17__all__ = [
18 'IdentityAdapter',
19 'LlamaTuneAdapter',
20]
23class SpaceAdapterType(Enum):
24 """Enumerate supported MlosCore space adapters."""
26 IDENTITY = IdentityAdapter
27 """A no-op adapter will be used"""
29 LLAMATUNE = LlamaTuneAdapter
30 """An instance of LlamaTuneAdapter class will be used"""
33# To make mypy happy, we need to define a type variable for each optimizer type.
34# https://github.com/python/mypy/issues/12952
35# ConcreteSpaceAdapter = TypeVar('ConcreteSpaceAdapter', *[member.value for member in SpaceAdapterType])
36# To address this, we add a test for complete coverage of the enum.
37ConcreteSpaceAdapter = TypeVar(
38 'ConcreteSpaceAdapter',
39 IdentityAdapter,
40 LlamaTuneAdapter,
41)
44class SpaceAdapterFactory:
45 """Simple factory class for creating BaseSpaceAdapter-derived objects"""
47 # pylint: disable=too-few-public-methods
49 @staticmethod
50 def create(*,
51 parameter_space: ConfigSpace.ConfigurationSpace,
52 space_adapter_type: SpaceAdapterType = SpaceAdapterType.IDENTITY,
53 space_adapter_kwargs: Optional[dict] = None) -> ConcreteSpaceAdapter: # type: ignore[type-var]
54 """
55 Create a new space adapter instance, given the parameter space and potential
56 space adapter options.
58 Parameters
59 ----------
60 parameter_space : ConfigSpace.ConfigurationSpace
61 Input configuration space.
62 space_adapter_type : Optional[SpaceAdapterType]
63 Space adapter class to be used alongside the optimizer.
64 space_adapter_kwargs : Optional[dict]
65 Optional arguments passed in SpaceAdapter class constructor.
67 Returns
68 -------
69 space_adapter : ConcreteSpaceAdapter
70 Instance of concrete space adapter (e.g., None, LlamaTuneAdapter, etc.)
71 """
72 if space_adapter_type is None:
73 space_adapter_type = SpaceAdapterType.IDENTITY
74 if space_adapter_kwargs is None:
75 space_adapter_kwargs = {}
77 space_adapter: ConcreteSpaceAdapter = space_adapter_type.value(
78 orig_parameter_space=parameter_space,
79 **space_adapter_kwargs
80 )
82 return space_adapter