Skip to content

Commit 2432471

Browse files
authored
Merge pull request #239 from alonfnt/queue
Queue
2 parents dc66d8a + 8cc8d9b commit 2432471

File tree

3 files changed

+44
-70
lines changed

3 files changed

+44
-70
lines changed

bayes_opt/bayesian_optimization.py

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

34
from .target_space import TargetSpace
45
from .event import Events, DEFAULT_EVENTS
@@ -9,32 +10,6 @@
910
from sklearn.gaussian_process import GaussianProcessRegressor
1011

1112

12-
class Queue:
13-
def __init__(self):
14-
self._queue = []
15-
16-
@property
17-
def empty(self):
18-
return len(self) == 0
19-
20-
def __len__(self):
21-
return len(self._queue)
22-
23-
def __next__(self):
24-
if self.empty:
25-
raise StopIteration("Queue is empty, no more objects to retrieve.")
26-
obj = self._queue[0]
27-
self._queue = self._queue[1:]
28-
return obj
29-
30-
def next(self):
31-
return self.__next__()
32-
33-
def add(self, obj):
34-
"""Add object to end of queue."""
35-
self._queue.append(obj)
36-
37-
3813
class Observable(object):
3914
"""
4015
@@ -162,7 +137,7 @@ def probe(self, params, lazy=True):
162137
maximize(). Otherwise it will evaluate it at the moment.
163138
"""
164139
if lazy:
165-
self._queue.add(params)
140+
self._queue.put(params)
166141
else:
167142
self._space.probe(params)
168143
self.dispatch(Events.OPTIMIZATION_STEP)
@@ -191,11 +166,11 @@ def suggest(self, utility_function):
191166

192167
def _prime_queue(self, init_points):
193168
"""Make sure there's something in the queue at the very beginning."""
194-
if self._queue.empty and self._space.empty:
169+
if self._queue.empty() and self._space.empty:
195170
init_points = max(init_points, 1)
196171

197172
for _ in range(init_points):
198-
self._queue.add(self._space.random_sample())
173+
self._queue.put(self._space.random_sample())
199174

200175
def _prime_subscriptions(self):
201176
if not any([len(subs) for subs in self._events.values()]):
@@ -260,10 +235,10 @@ def maximize(self,
260235
kappa_decay=kappa_decay,
261236
kappa_decay_delay=kappa_decay_delay)
262237
iteration = 0
263-
while not self._queue.empty or iteration < n_iter:
238+
while not self._queue.empty() or iteration < n_iter:
264239
try:
265-
x_probe = next(self._queue)
266-
except StopIteration:
240+
x_probe = self._queue.get(block=False)
241+
except Empty:
267242
util.update_params()
268243
x_probe = self.suggest(util)
269244
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 len(optimizer._queue) == 1
40+
assert optimizer._queue.qsize() == 1
4141

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

4646
optimizer.probe(params={"p1": 6, "p2": 2}, lazy=True)
4747
assert len(optimizer.space) == 0
48-
assert len(optimizer._queue) == 3
48+
assert optimizer._queue.qsize() == 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 len(optimizer._queue) == 0
56+
assert optimizer._queue.empty()
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 len(optimizer._queue) == 0
62+
assert optimizer._queue.empty()
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 len(optimizer._queue) == 0
68+
assert optimizer._queue.empty()
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 len(optimizer._queue) == 0
104+
assert optimizer._queue.empty()
105105
assert len(optimizer.space) == 0
106106

107107
optimizer._prime_queue(init_points=0)
108-
assert len(optimizer._queue) == 1
108+
assert optimizer._queue.qsize() == 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 len(optimizer._queue) == 0
114+
assert optimizer._queue.empty()
115115
assert len(optimizer.space) == 0
116116

117117
optimizer._prime_queue(init_points=5)
118-
assert len(optimizer._queue) == 5
118+
assert optimizer._queue.qsize() == 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 len(optimizer._queue) == 0
124+
assert optimizer._queue.empty()
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 len(optimizer._queue) == 0
129+
assert optimizer._queue.empty()
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 len(optimizer._queue) == 0
135+
assert optimizer._queue.empty()
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 len(optimizer._queue) == 3
140+
assert optimizer._queue.qsize() == 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: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,42 @@
11
import pytest
2-
from bayes_opt.bayesian_optimization import Queue
2+
from queue import Queue, Empty
33

44

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

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

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

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

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

2019

2120
def test_queue():
2221

2322
queue = Queue()
2423

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

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

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

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

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

4241

4342

0 commit comments

Comments
 (0)