Skip to content

Commit 2944ce2

Browse files
committed
Fix: Restrict ray in asking for cpu cores and infinite looping in unittest.
1 parent 4d37e1c commit 2944ce2

File tree

5 files changed

+70
-49
lines changed

5 files changed

+70
-49
lines changed

.github/workflows/python-unittest.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,4 @@ jobs:
2525
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
2626
- name: Test with unittest
2727
run: |
28-
pwd
29-
ls
30-
python -m unittest discover selector/test
28+
taskset -c 0,1 python -m unittest discover selector/test

conf.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def decorator(func):
5656
'_autosummary/selector.wrapper.rst',
5757
'_autosummary/selector.test_ray.rst',
5858
'_autosummary/selector.main.rst',
59+
'_autosummary/selector.test.rst',
5960
]
6061
autodoc_mock_imports = ["json", "json.JSONEncoder"]
6162

rtd_requirements.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,12 @@ swig
33
mock
44
sphinx-rtd-theme==1.3.0
55
sphinx==7.1.2
6+
sphinxcontrib-applehelp==1.0.4
7+
sphinxcontrib-bibtex==2.6.3
8+
sphinxcontrib-devhelp==1.0.2
9+
sphinxcontrib-htmlhelp==2.0.1
10+
sphinxcontrib-jquery==4.1
11+
sphinxcontrib-jsmath==1.0.1
12+
sphinxcontrib-qthelp==1.0.3
13+
sphinxcontrib-serializinghtml==1.1.5
14+
sphinx-autobuild==2021.3.14

selector/test/test_scenario.py

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,24 @@ class ScenarioTest(unittest.TestCase):
1111

1212
def setUp(self):
1313
self.scenario_dict = {'ta_cmd': 'echo test',
14-
'paramfile': './selector/test/test_data/test_params.pcs',
15-
'execdir': '.',
16-
'deterministic': 0,
17-
'run_obj': 'runtime',
18-
'overall_obj': 'mean10',
19-
'cutoff_time': 300,
20-
'wallclock_limit': 172800,
21-
'instance_file':
22-
'./selector/test/test_data/test_training.txt',
23-
'test_instance_file':
24-
'./selector/test/test_data/test_test.txt',
25-
'feature_file':
26-
'./selector/test/test_data/test_features.txt',
27-
'output_dir':
28-
'placeholder',
29-
'instances_dir': './selector/test/test_data/instances'}
14+
'paramfile':
15+
'./selector/test/test_data/test_params.pcs',
16+
'execdir': '.',
17+
'deterministic': 0,
18+
'run_obj': 'runtime',
19+
'overall_obj': 'mean10',
20+
'cutoff_time': 300,
21+
'wallclock_limit': 172800,
22+
'instance_file':
23+
'./selector/test/test_data/test_training.txt',
24+
'test_instance_file':
25+
'./selector/test/test_data/test_test.txt',
26+
'feature_file':
27+
'./selector/test/test_data/test_features.txt',
28+
'output_dir':
29+
'placeholder',
30+
'instances_dir':
31+
'./selector/test/test_data/instances'}
3032

3133
def test_scenario_type(self):
3234
with self.assertRaises(TypeError):
@@ -45,8 +47,8 @@ def test_scenario_from_sting(self):
4547
self.assertEqual(scenario.instance_file, './selector/test/test_data/test_training.txt')
4648
self.assertEqual(scenario.test_instance_file, './selector/test/test_data/test_test.txt')
4749
self.assertEqual(scenario.feature_file, './selector/test/test_data/test_features.txt')
48-
self.assertEqual(scenario.paramfile,'./selector/test/test_data/test_params.pcs')
49-
self.assertEqual(scenario.instance_set,['./selector/test/test_data/instances/test_instance_1.cnf'])
50+
self.assertEqual(scenario.paramfile, './selector/test/test_data/test_params.pcs')
51+
self.assertEqual(scenario.instance_set, ['./selector/test/test_data/instances/test_instance_1.cnf'])
5052
self.assertEqual(scenario.test_instances, ['./selector/test/test_data/instances/test_instance_2.cnf'])
5153
self.assertEqual(scenario.feature_names, ['feature_1', ' feature_2'])
5254

@@ -66,25 +68,25 @@ def test_scenario_from_dic(self):
6668
self.assertEqual(scenario.overall_obj, 'mean10')
6769
self.assertEqual(scenario.cutoff_time, 300)
6870
self.assertEqual(scenario.wallclock_limit, 172800)
69-
self.assertEqual(scenario.instance_file,'./selector/test/test_data/test_training.txt')
70-
self.assertEqual(scenario.test_instance_file,'./selector/test/test_data/test_test.txt')
71-
self.assertEqual(scenario.feature_file,'./selector/test/test_data/test_features.txt')
72-
self.assertEqual(scenario.paramfile,'./selector/test/test_data/test_params.pcs')
73-
self.assertEqual(scenario.instance_set,['./selector/test/test_data/instances/test_instance_1.cnf'])
71+
self.assertEqual(scenario.instance_file, './selector/test/test_data/test_training.txt')
72+
self.assertEqual(scenario.test_instance_file, './selector/test/test_data/test_test.txt')
73+
self.assertEqual(scenario.feature_file, './selector/test/test_data/test_features.txt')
74+
self.assertEqual(scenario.paramfile, './selector/test/test_data/test_params.pcs')
75+
self.assertEqual(scenario.instance_set, ['./selector/test/test_data/instances/test_instance_1.cnf'])
7476
self.assertEqual(scenario.test_instances, ['./selector/test/test_data/instances/test_instance_2.cnf'])
7577
self.assertEqual(scenario.feature_names, ['feature_1', ' feature_2'])
7678

7779
features_1 = scenario.features['./selector/test/test_data/instances/test_instance_1.cnf']
78-
self.assertTrue(np.allclose(features_1, [ 90., 7650.]))
80+
self.assertTrue(np.allclose(features_1, [90., 7650.]))
7981

8082
features_2 = scenario.features['./selector/test/test_data/instances/test_instance_2.cnf']
81-
self.assertTrue(np.allclose(features_2, [ 30., 8045.1]))
83+
self.assertTrue(np.allclose(features_2, [30., 8045.1]))
8284

8385
def test_parameter_from_file(self):
8486
scenario_file = Scenario('./selector/test/test_data/test_scenario.txt')
8587
scenario_dic = Scenario(self.scenario_dict)
8688

87-
for scenario in [scenario_file,scenario_dic ]:
89+
for scenario in [scenario_file, scenario_dic]:
8890
test_parameter_list = scenario.parameter
8991

9092
test_no_goods = scenario.no_goods
@@ -132,13 +134,13 @@ def test_parameter_from_file(self):
132134
# test bce-limit
133135
self.assertEqual(test_parameter_list[5].name, 'bce-limit')
134136
self.assertEqual(test_parameter_list[5].type, ParamType.integer)
135-
self.assertEqual(test_parameter_list[5].bound,[100000,200000000])
137+
self.assertEqual(test_parameter_list[5].bound, [100000, 200000000])
136138
self.assertEqual(test_parameter_list[5].default, 100000000)
137139
self.assertEqual(test_parameter_list[5].condition, {})
138140
self.assertEqual(test_parameter_list[5].scale, 'l')
139141

140142
# test no goods
141-
self.assertEqual(test_no_goods[0], {"luby": True , "rinc": 3})
143+
self.assertEqual(test_no_goods[0], {"luby": True, "rinc": 3})
142144

143145
def test_instance_file_avail(self):
144146
with self.assertRaises(FileExistsError):
@@ -147,4 +149,3 @@ def test_instance_file_avail(self):
147149

148150
if __name__ == "__main__":
149151
unittest.main()
150-

selector/test/test_tournament_bookkeeping.py

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,26 @@ class TestTournamentBookkeeping(unittest.TestCase):
2222

2323
def setUp(self):
2424
script_location = os.path.dirname(__file__)
25-
self.parser = {"check_path": False, "seed": 42, "ta_run_type": "import_wrapper", "winners_per_tournament": 1,
26-
# import_wrapper
27-
"initial_instance_set_sideterministicze": 2, "tournament_size": 3, "number_tournaments": 3,
28-
"total_tournament_number": 2, "cpu_binding": False, 'instances_dir': './test/test_data/instances',
29-
"total_runtime": 1200, "generator_multiple": 3, "set_size": 50, "solve_match": [],
30-
"termination_criterion": "total_runtime", "par": 1, "ta_pid_name": "glucose-simp",
31-
"memory_limit": 1023 * 3, "log_folder": "/run_1", "initial_instance_set_size": 5, "runtime_feedback": "",
32-
"log_location": script_location + '/selector/logs'}
25+
self.parser = {
26+
"check_path": False, "seed": 42, "ta_run_type": "import_wrapper",
27+
"winners_per_tournament": 1,
28+
"initial_instance_set_sideterministicze": 2, "tournament_size": 3,
29+
"number_tournaments": 3, "total_tournament_number": 2,
30+
"cpu_binding": False, 'instances_dir': './test/test_data/instances',
31+
"total_runtime": 1200, "generator_multiple": 3, "set_size": 50,
32+
"solve_match": [], "termination_criterion": "total_runtime",
33+
"par": 1, "ta_pid_name": "glucose-simp", "memory_limit": 1023 * 3,
34+
"log_folder": "/run_1", "initial_instance_set_size": 5,
35+
"runtime_feedback": "", "log_location": script_location + '/selector/logs'}
3336
self.scenario = Scenario("./selector/test/test_data/test_example.txt", self.parser)
3437
self.ta_wrapper = TAP_Work_Wrapper()
3538
self.global_cache = TargetAlgorithmObserver.remote(self.scenario)
3639
self.random_generator = PointGen(self.scenario, random_point)
3740
self.point_selector = RandomSelector()
38-
self.instance_selector = InstanceSet(self.scenario.instance_set, self.scenario.initial_instance_set_size,
39-
self.scenario.set_size)
41+
self.instance_selector = \
42+
InstanceSet(self.scenario.instance_set,
43+
self.scenario.initial_instance_set_size,
44+
self.scenario.set_size)
4045
self.tournament_dispatcher = MiniTournamentDispatcher()
4146
self.tournament_counter = 0
4247
self.tasks = []
@@ -46,20 +51,27 @@ def setUp(self):
4651
self.initial_assignments = []
4752

4853
for _ in range(self.scenario.number_tournaments):
49-
generated_points = [self.random_generator.point_generator() for _ in range(self.scenario.tournament_size *
50-
self.scenario.generator_multiple)]
54+
generated_points = \
55+
[self.random_generator.point_generator()
56+
for _ in range(
57+
self.scenario.tournament_size * self.scenario.generator_multiple)]
5158

52-
points_to_run = self.point_selector.select_points(generated_points, self.scenario.tournament_size,
53-
self.tournament_counter)
59+
points_to_run = \
60+
self.point_selector.select_points(
61+
generated_points, self.scenario.tournament_size,
62+
self.tournament_counter)
5463

5564
instance_id, instances = self.instance_selector.get_subset(0)
56-
tournament, initial_assignments = self.tournament_dispatcher.init_tournament(self.results, points_to_run,
57-
instances, instance_id)
65+
tournament, initial_assignments = \
66+
self.tournament_dispatcher.init_tournament(
67+
self.results, points_to_run,
68+
instances, instance_id)
5869
self.initial_assignments.append(initial_assignments)
5970
self.tournaments.append(tournament)
6071
self.global_cache.put_tournament_history.remote(tournament)
6172
self.global_cache.put_tournament_update.remote(tournament)
62-
self.tasks = tb.update_tasks(self.tasks, initial_assignments, tournament, self.global_cache,
73+
self.tasks = tb.update_tasks(self.tasks, initial_assignments,
74+
tournament, self.global_cache,
6375
self.ta_wrapper, self.scenario)
6476

6577
def test_get_tournament_membership(self):

0 commit comments

Comments
 (0)