Coverage for mlos_bench/mlos_bench/tests/optimizers/mlos_core_opt_df_test.py: 100%

17 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""" 

6Unit tests for internal methods of the `MlosCoreOptimizer`. 

7""" 

8 

9from typing import List 

10 

11import pandas 

12import pytest 

13 

14from mlos_bench.optimizers.mlos_core_optimizer import MlosCoreOptimizer 

15from mlos_bench.tunables.tunable_groups import TunableGroups 

16 

17from mlos_bench.tests import SEED 

18 

19# pylint: disable=redefined-outer-name, protected-access 

20 

21 

22@pytest.fixture 

23def mlos_core_optimizer(tunable_groups: TunableGroups) -> MlosCoreOptimizer: 

24 """ 

25 An instance of a mlos_core optimizer (FLAML-based). 

26 """ 

27 test_opt_config = { 

28 'optimizer_type': 'FLAML', 

29 'max_suggestions': 10, 

30 'seed': SEED, 

31 } 

32 return MlosCoreOptimizer(tunable_groups, test_opt_config) 

33 

34 

35def test_df(mlos_core_optimizer: MlosCoreOptimizer, mock_configs: List[dict]) -> None: 

36 """ 

37 Test `MlosCoreOptimizer._to_df()` method on tunables that have special values. 

38 """ 

39 df_config = mlos_core_optimizer._to_df(mock_configs) 

40 assert isinstance(df_config, pandas.DataFrame) 

41 assert df_config.shape == (4, 6) 

42 assert set(df_config.columns) == { 

43 'kernel_sched_latency_ns', 

44 'kernel_sched_migration_cost_ns', 

45 'kernel_sched_migration_cost_ns!type', 

46 'kernel_sched_migration_cost_ns!special', 

47 'idle', 

48 'vmSize', 

49 } 

50 assert df_config.to_dict(orient='records') == [ 

51 { 

52 'idle': 'halt', 

53 'kernel_sched_latency_ns': 1000000, 

54 'kernel_sched_migration_cost_ns': 50000, 

55 'kernel_sched_migration_cost_ns!special': None, 

56 'kernel_sched_migration_cost_ns!type': 'range', 

57 'vmSize': 'Standard_B4ms', 

58 }, 

59 { 

60 'idle': 'halt', 

61 'kernel_sched_latency_ns': 2000000, 

62 'kernel_sched_migration_cost_ns': 40000, 

63 'kernel_sched_migration_cost_ns!special': None, 

64 'kernel_sched_migration_cost_ns!type': 'range', 

65 'vmSize': 'Standard_B4ms', 

66 }, 

67 { 

68 'idle': 'mwait', 

69 'kernel_sched_latency_ns': 3000000, 

70 'kernel_sched_migration_cost_ns': None, # The value is special! 

71 'kernel_sched_migration_cost_ns!special': -1, 

72 'kernel_sched_migration_cost_ns!type': 'special', 

73 'vmSize': 'Standard_B4ms', 

74 }, 

75 { 

76 'idle': 'mwait', 

77 'kernel_sched_latency_ns': 4000000, 

78 'kernel_sched_migration_cost_ns': 200000, 

79 'kernel_sched_migration_cost_ns!special': None, 

80 'kernel_sched_migration_cost_ns!type': 'range', 

81 'vmSize': 'Standard_B2s', 

82 }, 

83 ]