Skip to content

Commit 61db4fb

Browse files
author
Brendan Mark Whelan
committed
Revert "use standard library Queue instead of custom class"
This reverts commit 8cc8d9b. Testing as a fix for #370
1 parent fc1b44a commit 61db4fb

File tree

3 files changed

+70
-44
lines changed

3 files changed

+70
-44
lines changed

bayes_opt/bayesian_optimization.py

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import warnings
2-
from queue import Queue, Empty
32

43
from bayes_opt.constraint import ConstraintModel
54

@@ -12,6 +11,32 @@
1211
from sklearn.gaussian_process import GaussianProcessRegressor
1312

1413

14+
class Queue:
15+
def __init__(self):
16+
self._queue = []
17+
18+
@property
19+
def empty(self):
20+
return len(self) == 0
21+
22+
def __len__(self):
23+
return len(self._queue)
24+
25+
def __next__(self):
26+
if self.empty:
27+
raise StopIteration("Queue is empty, no more objects to retrieve.")
28+
obj = self._queue[0]
29+
self._queue = self._queue[1:]
30+
return obj
31+
32+
def next(self):
33+
return self.__next__()
34+
35+
def add(self, obj):
36+
"""Add object to end of queue."""
37+
self._queue.append(obj)
38+
39+
1540
class Observable(object):
1641
"""
1742
@@ -173,7 +198,7 @@ def probe(self, params, lazy=True):
173198
"""
174199

175200
if lazy:
176-
self._queue.put(params)
201+
self._queue.add(params)
177202
else:
178203
self._space.probe(params)
179204
self.dispatch(Events.OPTIMIZATION_STEP)
@@ -204,11 +229,11 @@ def suggest(self, utility_function):
204229

205230
def _prime_queue(self, init_points):
206231
"""Make sure there's something in the queue at the very beginning."""
207-
if self._queue.empty() and self._space.empty:
232+
if self._queue.empty and self._space.empty:
208233
init_points = max(init_points, 1)
209234

210235
for _ in range(init_points):
211-
self._queue.put(self._space.random_sample())
236+
self._queue.add(self._space.random_sample())
212237

213238
def _prime_subscriptions(self):
214239
if not any([len(subs) for subs in self._events.values()]):
@@ -273,10 +298,10 @@ def maximize(self,
273298
kappa_decay=kappa_decay,
274299
kappa_decay_delay=kappa_decay_delay)
275300
iteration = 0
276-
while not self._queue.empty() or iteration < n_iter:
301+
while not self._queue.empty or iteration < n_iter:
277302
try:
278-
x_probe = self._queue.get(block=False)
279-
except Empty:
303+
x_probe = next(self._queue)
304+
except StopIteration:
280305
util.update_params()
281306
x_probe = self.suggest(util)
282307
iteration += 1

tests/test_bayesian_optimization.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,35 +37,35 @@ def test_probe_lazy():
3737

3838
optimizer.probe(params={"p1": 1, "p2": 2}, lazy=True)
3939
assert len(optimizer.space) == 0
40-
assert optimizer._queue.qsize() == 1
40+
assert len(optimizer._queue) == 1
4141

4242
optimizer.probe(params={"p1": 6, "p2": 2}, lazy=True)
4343
assert len(optimizer.space) == 0
44-
assert optimizer._queue.qsize() == 2
44+
assert len(optimizer._queue) == 2
4545

4646
optimizer.probe(params={"p1": 6, "p2": 2}, lazy=True)
4747
assert len(optimizer.space) == 0
48-
assert optimizer._queue.qsize() == 3
48+
assert len(optimizer._queue) == 3
4949

5050

5151
def test_probe_eager():
5252
optimizer = BayesianOptimization(target_func, PBOUNDS, random_state=1)
5353

5454
optimizer.probe(params={"p1": 1, "p2": 2}, lazy=False)
5555
assert len(optimizer.space) == 1
56-
assert optimizer._queue.empty()
56+
assert len(optimizer._queue) == 0
5757
assert optimizer.max["target"] == 3
5858
assert optimizer.max["params"] == {"p1": 1, "p2": 2}
5959

6060
optimizer.probe(params={"p1": 3, "p2": 3}, lazy=False)
6161
assert len(optimizer.space) == 2
62-
assert optimizer._queue.empty()
62+
assert len(optimizer._queue) == 0
6363
assert optimizer.max["target"] == 6
6464
assert optimizer.max["params"] == {"p1": 3, "p2": 3}
6565

6666
optimizer.probe(params={"p1": 3, "p2": 3}, lazy=False)
6767
assert len(optimizer.space) == 2
68-
assert optimizer._queue.empty()
68+
assert len(optimizer._queue) == 0
6969
assert optimizer.max["target"] == 6
7070
assert optimizer.max["params"] == {"p1": 3, "p2": 3}
7171

@@ -101,43 +101,43 @@ def test_suggest_with_one_observation():
101101

102102
def test_prime_queue_all_empty():
103103
optimizer = BayesianOptimization(target_func, PBOUNDS, random_state=1)
104-
assert optimizer._queue.empty()
104+
assert len(optimizer._queue) == 0
105105
assert len(optimizer.space) == 0
106106

107107
optimizer._prime_queue(init_points=0)
108-
assert optimizer._queue.qsize() == 1
108+
assert len(optimizer._queue) == 1
109109
assert len(optimizer.space) == 0
110110

111111

112112
def test_prime_queue_empty_with_init():
113113
optimizer = BayesianOptimization(target_func, PBOUNDS, random_state=1)
114-
assert optimizer._queue.empty()
114+
assert len(optimizer._queue) == 0
115115
assert len(optimizer.space) == 0
116116

117117
optimizer._prime_queue(init_points=5)
118-
assert optimizer._queue.qsize() == 5
118+
assert len(optimizer._queue) == 5
119119
assert len(optimizer.space) == 0
120120

121121

122122
def test_prime_queue_with_register():
123123
optimizer = BayesianOptimization(target_func, PBOUNDS, random_state=1)
124-
assert optimizer._queue.empty()
124+
assert len(optimizer._queue) == 0
125125
assert len(optimizer.space) == 0
126126

127127
optimizer.register(params={"p1": 1, "p2": 2}, target=3)
128128
optimizer._prime_queue(init_points=0)
129-
assert optimizer._queue.empty()
129+
assert len(optimizer._queue) == 0
130130
assert len(optimizer.space) == 1
131131

132132

133133
def test_prime_queue_with_register_and_init():
134134
optimizer = BayesianOptimization(target_func, PBOUNDS, random_state=1)
135-
assert optimizer._queue.empty()
135+
assert len(optimizer._queue) == 0
136136
assert len(optimizer.space) == 0
137137

138138
optimizer.register(params={"p1": 1, "p2": 2}, target=3)
139139
optimizer._prime_queue(init_points=3)
140-
assert optimizer._queue.qsize() == 3
140+
assert len(optimizer._queue) == 3
141141
assert len(optimizer.space) == 1
142142

143143

@@ -270,22 +270,22 @@ def reset(self):
270270
)
271271

272272
optimizer.maximize(init_points=0, n_iter=0)
273-
assert optimizer._queue.empty()
273+
assert optimizer._queue.empty
274274
assert len(optimizer.space) == 1
275275
assert tracker.start_count == 1
276276
assert tracker.step_count == 1
277277
assert tracker.end_count == 1
278278

279279
optimizer.maximize(init_points=2, n_iter=0, alpha=1e-2)
280-
assert optimizer._queue.empty()
280+
assert optimizer._queue.empty
281281
assert len(optimizer.space) == 3
282282
assert optimizer._gp.alpha == 1e-2
283283
assert tracker.start_count == 2
284284
assert tracker.step_count == 3
285285
assert tracker.end_count == 2
286286

287287
optimizer.maximize(init_points=0, n_iter=2)
288-
assert optimizer._queue.empty()
288+
assert optimizer._queue.empty
289289
assert len(optimizer.space) == 5
290290
assert tracker.start_count == 3
291291
assert tracker.step_count == 5

tests/test_queue.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,43 @@
11
import pytest
2-
from queue import Queue, Empty
2+
from bayes_opt.bayesian_optimization import Queue
33

44

55
def test_add():
66
queue = Queue()
77

8-
assert queue.empty()
8+
assert len(queue) == 0
9+
assert queue.empty
910

10-
queue.put(1)
11-
assert queue.qsize() == 1
11+
queue.add(1)
12+
assert len(queue) == 1
1213

13-
queue.put(1)
14-
assert queue.qsize() == 2
14+
queue.add(1)
15+
assert len(queue) == 2
1516

16-
queue.put(2)
17-
assert queue.qsize() == 3
17+
queue.add(2)
18+
assert len(queue) == 3
1819

1920

2021
def test_queue():
2122

2223
queue = Queue()
2324

24-
with pytest.raises(Empty):
25-
queue.get(block=False)
25+
with pytest.raises(StopIteration):
26+
next(queue)
2627

27-
queue.put(1)
28-
queue.put(2)
29-
queue.put(3)
28+
queue.add(1)
29+
queue.add(2)
30+
queue.add(3)
3031

31-
assert queue.qsize() == 3
32-
assert not queue.empty()
32+
assert len(queue) == 3
33+
assert not queue.empty
3334

34-
assert queue.get() == 1
35-
assert queue.qsize() == 2
35+
assert next(queue) == 1
36+
assert len(queue) == 2
3637

37-
assert queue.get() == 2
38-
assert queue.get() == 3
39-
assert queue.empty()
38+
assert next(queue) == 2
39+
assert next(queue) == 3
40+
assert len(queue) == 0
4041

4142

4243

0 commit comments

Comments
 (0)