|
5 | 5 | from bayes_opt.logger import ScreenLogger |
6 | 6 | from bayes_opt.event import Events, DEFAULT_EVENTS |
7 | 7 | from bayes_opt.util import NotUniqueError |
| 8 | +import pickle |
| 9 | +import os |
8 | 10 |
|
9 | 11 |
|
10 | 12 | def target_func(**kwargs): |
@@ -38,35 +40,35 @@ def test_probe_lazy(): |
38 | 40 |
|
39 | 41 | optimizer.probe(params={"p1": 1, "p2": 2}, lazy=True) |
40 | 42 | assert len(optimizer.space) == 0 |
41 | | - assert optimizer._queue.qsize() == 1 |
| 43 | + assert len(optimizer._queue) == 1 |
42 | 44 |
|
43 | 45 | optimizer.probe(params={"p1": 6, "p2": 2}, lazy=True) |
44 | 46 | assert len(optimizer.space) == 0 |
45 | | - assert optimizer._queue.qsize() == 2 |
| 47 | + assert len(optimizer._queue) == 2 |
46 | 48 |
|
47 | 49 | optimizer.probe(params={"p1": 6, "p2": 2}, lazy=True) |
48 | 50 | assert len(optimizer.space) == 0 |
49 | | - assert optimizer._queue.qsize() == 3 |
| 51 | + assert len(optimizer._queue) == 3 |
50 | 52 |
|
51 | 53 |
|
52 | 54 | def test_probe_eager(): |
53 | 55 | optimizer = BayesianOptimization(target_func, PBOUNDS, random_state=1) |
54 | 56 |
|
55 | 57 | optimizer.probe(params={"p1": 1, "p2": 2}, lazy=False) |
56 | 58 | assert len(optimizer.space) == 1 |
57 | | - assert optimizer._queue.empty() |
| 59 | + assert len(optimizer._queue) == 0 |
58 | 60 | assert optimizer.max["target"] == 3 |
59 | 61 | assert optimizer.max["params"] == {"p1": 1, "p2": 2} |
60 | 62 |
|
61 | 63 | optimizer.probe(params={"p1": 3, "p2": 3}, lazy=False) |
62 | 64 | assert len(optimizer.space) == 2 |
63 | | - assert optimizer._queue.empty() |
| 65 | + assert len(optimizer._queue) == 0 |
64 | 66 | assert optimizer.max["target"] == 6 |
65 | 67 | assert optimizer.max["params"] == {"p1": 3, "p2": 3} |
66 | 68 |
|
67 | 69 | optimizer.probe(params={"p1": 3, "p2": 3}, lazy=False) |
68 | 70 | assert len(optimizer.space) == 2 |
69 | | - assert optimizer._queue.empty() |
| 71 | + assert len(optimizer._queue) == 0 |
70 | 72 | assert optimizer.max["target"] == 6 |
71 | 73 | assert optimizer.max["params"] == {"p1": 3, "p2": 3} |
72 | 74 |
|
@@ -102,43 +104,43 @@ def test_suggest_with_one_observation(): |
102 | 104 |
|
103 | 105 | def test_prime_queue_all_empty(): |
104 | 106 | optimizer = BayesianOptimization(target_func, PBOUNDS, random_state=1) |
105 | | - assert optimizer._queue.empty() |
| 107 | + assert len(optimizer._queue) == 0 |
106 | 108 | assert len(optimizer.space) == 0 |
107 | 109 |
|
108 | 110 | optimizer._prime_queue(init_points=0) |
109 | | - assert optimizer._queue.qsize() == 1 |
| 111 | + assert len(optimizer._queue) == 1 |
110 | 112 | assert len(optimizer.space) == 0 |
111 | 113 |
|
112 | 114 |
|
113 | 115 | def test_prime_queue_empty_with_init(): |
114 | 116 | optimizer = BayesianOptimization(target_func, PBOUNDS, random_state=1) |
115 | | - assert optimizer._queue.empty() |
| 117 | + assert len(optimizer._queue) == 0 |
116 | 118 | assert len(optimizer.space) == 0 |
117 | 119 |
|
118 | 120 | optimizer._prime_queue(init_points=5) |
119 | | - assert optimizer._queue.qsize() == 5 |
| 121 | + assert len(optimizer._queue) == 5 |
120 | 122 | assert len(optimizer.space) == 0 |
121 | 123 |
|
122 | 124 |
|
123 | 125 | def test_prime_queue_with_register(): |
124 | 126 | optimizer = BayesianOptimization(target_func, PBOUNDS, random_state=1) |
125 | | - assert optimizer._queue.empty() |
| 127 | + assert len(optimizer._queue) == 0 |
126 | 128 | assert len(optimizer.space) == 0 |
127 | 129 |
|
128 | 130 | optimizer.register(params={"p1": 1, "p2": 2}, target=3) |
129 | 131 | optimizer._prime_queue(init_points=0) |
130 | | - assert optimizer._queue.empty() |
| 132 | + assert len(optimizer._queue) == 0 |
131 | 133 | assert len(optimizer.space) == 1 |
132 | 134 |
|
133 | 135 |
|
134 | 136 | def test_prime_queue_with_register_and_init(): |
135 | 137 | optimizer = BayesianOptimization(target_func, PBOUNDS, random_state=1) |
136 | | - assert optimizer._queue.empty() |
| 138 | + assert len(optimizer._queue) == 0 |
137 | 139 | assert len(optimizer.space) == 0 |
138 | 140 |
|
139 | 141 | optimizer.register(params={"p1": 1, "p2": 2}, target=3) |
140 | 142 | optimizer._prime_queue(init_points=3) |
141 | | - assert optimizer._queue.qsize() == 3 |
| 143 | + assert len(optimizer._queue) == 3 |
142 | 144 | assert len(optimizer.space) == 1 |
143 | 145 |
|
144 | 146 |
|
@@ -271,22 +273,22 @@ def reset(self): |
271 | 273 | ) |
272 | 274 |
|
273 | 275 | optimizer.maximize(init_points=0, n_iter=0) |
274 | | - assert optimizer._queue.empty() |
| 276 | + assert optimizer._queue.empty |
275 | 277 | assert len(optimizer.space) == 1 |
276 | 278 | assert tracker.start_count == 1 |
277 | 279 | assert tracker.step_count == 1 |
278 | 280 | assert tracker.end_count == 1 |
279 | 281 |
|
280 | 282 | optimizer.maximize(init_points=2, n_iter=0, alpha=1e-2) |
281 | | - assert optimizer._queue.empty() |
| 283 | + assert optimizer._queue.empty |
282 | 284 | assert len(optimizer.space) == 3 |
283 | 285 | assert optimizer._gp.alpha == 1e-2 |
284 | 286 | assert tracker.start_count == 2 |
285 | 287 | assert tracker.step_count == 3 |
286 | 288 | assert tracker.end_count == 2 |
287 | 289 |
|
288 | 290 | optimizer.maximize(init_points=0, n_iter=2) |
289 | | - assert optimizer._queue.empty() |
| 291 | + assert optimizer._queue.empty |
290 | 292 | assert len(optimizer.space) == 5 |
291 | 293 | assert tracker.start_count == 3 |
292 | 294 | assert tracker.step_count == 5 |
@@ -321,6 +323,21 @@ def test_single_value_objective(): |
321 | 323 | ) |
322 | 324 |
|
323 | 325 |
|
| 326 | +def test_pickle(): |
| 327 | + """ |
| 328 | + several users have asked that the BO object be 'pickalable' |
| 329 | + This tests that this is the case |
| 330 | + """ |
| 331 | + optimizer = BayesianOptimization( |
| 332 | + f=None, |
| 333 | + pbounds={'x': (-10, 10)}, |
| 334 | + verbose=2, |
| 335 | + random_state=1, |
| 336 | + ) |
| 337 | + with open("test_dump.obj", "wb") as filehandler: |
| 338 | + pickle.dump(optimizer, filehandler) |
| 339 | + os.remove('test_dump.obj') |
| 340 | + |
324 | 341 | if __name__ == '__main__': |
325 | 342 | r""" |
326 | 343 | CommandLine: |
|
0 commit comments