def test_failure(): #XXX also test the Bandit.exceptions mechanism that actually catches them class BanditE(Exception): pass class DummyBandit(Bandit): param_gen = {"loss": 10} def __init__(self): super(DummyBandit, self).__init__(self.param_gen) def evaluate(self, config, ctrl): raise BanditE() trials = Trials() bandit_algo = Random(DummyBandit()) exp = Experiment(trials, bandit_algo, async=False) exp.run(1) trials.refresh() assert len(trials) == 0 assert len(trials._dynamic_trials) == 1 assert trials._dynamic_trials[0]['state'] == JOB_STATE_ERROR assert trials._dynamic_trials[0]['misc']['error'] != None exp.catch_bandit_exceptions = False nose.tools.assert_raises(BanditE, exp.run, 1) trials.refresh() assert len(trials) == 0 assert len(trials._dynamic_trials) == 2 assert trials._dynamic_trials[1]['state'] == JOB_STATE_ERROR assert trials._dynamic_trials[1]['misc']['error'] != None