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

1# 

2# Copyright (c) Microsoft Corporation. 

3# Licensed under the MIT License. 

4# 

5"""Basic initializer module for the mlos_core space adapters.""" 

6 

7from enum import Enum 

8from typing import Optional, TypeVar 

9 

10import ConfigSpace 

11 

12from mlos_core.spaces.adapters.identity_adapter import IdentityAdapter 

13from mlos_core.spaces.adapters.llamatune import LlamaTuneAdapter 

14 

15__all__ = [ 

16 "IdentityAdapter", 

17 "LlamaTuneAdapter", 

18] 

19 

20 

21class SpaceAdapterType(Enum): 

22 """Enumerate supported MlosCore space adapters.""" 

23 

24 IDENTITY = IdentityAdapter 

25 """A no-op adapter will be used.""" 

26 

27 LLAMATUNE = LlamaTuneAdapter 

28 """An instance of LlamaTuneAdapter class will be used.""" 

29 

30 

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) 

43 

44 

45class SpaceAdapterFactory: 

46 """Simple factory class for creating BaseSpaceAdapter-derived objects.""" 

47 

48 # pylint: disable=too-few-public-methods 

49 

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. 

60 

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. 

69 

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 = {} 

79 

80 space_adapter: ConcreteSpaceAdapter = space_adapter_type.value( 

81 orig_parameter_space=parameter_space, 

82 **space_adapter_kwargs, 

83 ) 

84 

85 return space_adapter