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

1# 

2# Copyright (c) Microsoft Corporation. 

3# Licensed under the MIT License. 

4# 

5""" 

6Basic initializer module for the mlos_core space adapters. 

7""" 

8 

9from enum import Enum 

10from typing import Optional, TypeVar 

11 

12import ConfigSpace 

13 

14from mlos_core.spaces.adapters.identity_adapter import IdentityAdapter 

15from mlos_core.spaces.adapters.llamatune import LlamaTuneAdapter 

16 

17__all__ = [ 

18 'IdentityAdapter', 

19 'LlamaTuneAdapter', 

20] 

21 

22 

23class SpaceAdapterType(Enum): 

24 """Enumerate supported MlosCore space adapters.""" 

25 

26 IDENTITY = IdentityAdapter 

27 """A no-op adapter will be used""" 

28 

29 LLAMATUNE = LlamaTuneAdapter 

30 """An instance of LlamaTuneAdapter class will be used""" 

31 

32 

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) 

42 

43 

44class SpaceAdapterFactory: 

45 """Simple factory class for creating BaseSpaceAdapter-derived objects""" 

46 

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

48 

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. 

57 

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. 

66 

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

76 

77 space_adapter: ConcreteSpaceAdapter = space_adapter_type.value( 

78 orig_parameter_space=parameter_space, 

79 **space_adapter_kwargs 

80 ) 

81 

82 return space_adapter