import unittest
import numpy as np
import sys
import os
sys.path.append(os.getcwd())
from selector.scenario import Scenario
from selector.pool import ParamType
[docs]class ScenarioTest(unittest.TestCase):
[docs] def setUp(self):
self.scenario_dict = {'ta_cmd': 'echo test',
'paramfile':
'./selector/test/test_data/test_params.pcs',
'execdir': '.',
'deterministic': 0,
'run_obj': 'runtime',
'overall_obj': 'mean10',
'cutoff_time': 300,
'wallclock_limit': 172800,
'instance_file':
'./selector/test/test_data/test_training.txt',
'test_instance_file':
'./selector/test/test_data/test_test.txt',
'feature_file':
'./selector/test/test_data/test_features.txt',
'output_dir':
'placeholder',
'instances_dir':
'./selector/test/test_data/instances'}
[docs] def test_scenario_type(self):
with self.assertRaises(TypeError):
_ = Scenario(scenario=2)
[docs] def test_scenario_from_sting(self):
scenario = Scenario('./selector/test/test_data/test_scenario.txt')
self.assertEqual(scenario.ta_cmd, 'echo test')
self.assertEqual(scenario.execdir, '.')
self.assertEqual(scenario.deterministic, "0")
self.assertEqual(scenario.run_obj, 'runtime')
self.assertEqual(scenario.overall_obj, 'mean10')
self.assertEqual(scenario.cutoff_time, 300.0)
self.assertEqual(scenario.wallclock_limit, 172800)
self.assertEqual(scenario.instance_file, './selector/test/test_data/test_training.txt')
self.assertEqual(scenario.test_instance_file, './selector/test/test_data/test_test.txt')
self.assertEqual(scenario.feature_file, './selector/test/test_data/test_features.txt')
self.assertEqual(scenario.paramfile, './selector/test/test_data/test_params.pcs')
self.assertEqual(scenario.instance_set, ['./selector/test/test_data/instances/test_instance_1.cnf'])
self.assertEqual(scenario.test_instances, ['./selector/test/test_data/instances/test_instance_2.cnf'])
self.assertEqual(scenario.feature_names, ['feature_1', ' feature_2'])
features_1 = scenario.features['./selector/test/test_data/instances/test_instance_1.cnf']
self.assertTrue(np.allclose(features_1, [90., 7650.]))
features_2 = scenario.features['./selector/test/test_data/instances/test_instance_2.cnf']
self.assertTrue(np.allclose(features_2, [30., 8045.1]))
[docs] def test_scenario_from_dic(self):
scenario = Scenario(self.scenario_dict)
self.assertEqual(scenario.ta_cmd, 'echo test')
self.assertEqual(scenario.execdir, '.')
self.assertEqual(scenario.deterministic, 0)
self.assertEqual(scenario.run_obj, 'runtime')
self.assertEqual(scenario.overall_obj, 'mean10')
self.assertEqual(scenario.cutoff_time, 300)
self.assertEqual(scenario.wallclock_limit, 172800)
self.assertEqual(scenario.instance_file, './selector/test/test_data/test_training.txt')
self.assertEqual(scenario.test_instance_file, './selector/test/test_data/test_test.txt')
self.assertEqual(scenario.feature_file, './selector/test/test_data/test_features.txt')
self.assertEqual(scenario.paramfile, './selector/test/test_data/test_params.pcs')
self.assertEqual(scenario.instance_set, ['./selector/test/test_data/instances/test_instance_1.cnf'])
self.assertEqual(scenario.test_instances, ['./selector/test/test_data/instances/test_instance_2.cnf'])
self.assertEqual(scenario.feature_names, ['feature_1', ' feature_2'])
features_1 = scenario.features['./selector/test/test_data/instances/test_instance_1.cnf']
self.assertTrue(np.allclose(features_1, [90., 7650.]))
features_2 = scenario.features['./selector/test/test_data/instances/test_instance_2.cnf']
self.assertTrue(np.allclose(features_2, [30., 8045.1]))
[docs] def test_parameter_from_file(self):
scenario_file = Scenario('./selector/test/test_data/test_scenario.txt')
scenario_dic = Scenario(self.scenario_dict)
for scenario in [scenario_file, scenario_dic]:
test_parameter_list = scenario.parameter
test_no_goods = scenario.no_goods
# test luby
self.assertEqual(test_parameter_list[0].name, 'luby')
self.assertEqual(test_parameter_list[0].type, ParamType.categorical)
self.assertEqual(test_parameter_list[0].bound, [False, True])
self.assertEqual(test_parameter_list[0].default, False)
self.assertEqual(test_parameter_list[0].condition, {})
self.assertEqual(test_parameter_list[0].scale, '')
# test rinc
self.assertEqual(test_parameter_list[1].name, 'rinc')
self.assertEqual(test_parameter_list[1].type, ParamType.continuous)
self.assertEqual(test_parameter_list[1].bound, [1.1, 4.0])
self.assertEqual(test_parameter_list[1].default, 2)
self.assertEqual(test_parameter_list[1].condition, {'luby': [True, False]})
self.assertEqual(test_parameter_list[1].scale, '')
# test cla-decay
self.assertEqual(test_parameter_list[2].name, 'cla-decay')
self.assertEqual(test_parameter_list[2].type, ParamType.continuous)
self.assertEqual(test_parameter_list[2].bound, [0.9, 0.99999])
self.assertEqual(test_parameter_list[2].default, 0.999)
self.assertEqual(test_parameter_list[2].condition, {})
self.assertEqual(test_parameter_list[2].scale, 'l')
# test phase-saving
self.assertEqual(test_parameter_list[3].name, 'phase-saving')
self.assertEqual(test_parameter_list[3].type, ParamType.integer)
self.assertEqual(test_parameter_list[3].bound, [0, 2])
self.assertEqual(test_parameter_list[3].default, 2)
self.assertEqual(test_parameter_list[3].condition, {})
self.assertEqual(test_parameter_list[3].scale, '')
# test strSseconds
self.assertEqual(test_parameter_list[4].name, 'strSseconds')
self.assertEqual(test_parameter_list[4].type, ParamType.categorical)
self.assertEqual(test_parameter_list[4].bound, ['10', '50', '100', '150', '200', '250', '290'])
self.assertEqual(test_parameter_list[4].default, '150')
self.assertEqual(test_parameter_list[4].condition, {'luby': [True], 'cla-decay': [0.92, 0.93]})
self.assertEqual(test_parameter_list[4].scale, '')
# test bce-limit
self.assertEqual(test_parameter_list[5].name, 'bce-limit')
self.assertEqual(test_parameter_list[5].type, ParamType.integer)
self.assertEqual(test_parameter_list[5].bound, [100000, 200000000])
self.assertEqual(test_parameter_list[5].default, 100000000)
self.assertEqual(test_parameter_list[5].condition, {})
self.assertEqual(test_parameter_list[5].scale, 'l')
# test no goods
self.assertEqual(test_no_goods[0], {"luby": True, "rinc": 3})
[docs] def test_instance_file_avail(self):
with self.assertRaises(FileExistsError):
_ = Scenario(self.scenario_dict, cmd={'check_path': True})
if __name__ == "__main__":
unittest.main()