def test_sampling(self):
        # for all practical purposes the distribution of energies here should
        # guarantee the last sample always wins
        winner = {'a': 1, 'b': 1}
        skewed = dimod.SampleSet.from_samples([{
            'a': 0,
            'b': 0
        }, {
            'a': 0,
            'b': 1
        }, {
            'a': 1,
            'b': 0
        }, winner],
                                              energy=[100, 100, 100, -100],
                                              vartype='BINARY')

        state = hybrid.State(samples=skewed)

        # cold sampling
        res = EnergyWeightedResampler(beta=1, seed=1234).run(state).result()
        samples = res.samples.aggregate()

        self.assertEqual(len(samples), 1)
        self.assertDictEqual(dict(list(samples.samples())[0]), winner)

        # hot sampling
        res = EnergyWeightedResampler(beta=0, seed=1234).run(state).result()
        samples = res.samples.aggregate()

        self.assertGreater(len(samples), 1)
    def test_beta_progressor(self):
        beta_schedule = [1, 2, 3]

        prog = ProgressBetaAlongSchedule(beta_schedule=beta_schedule)

        betas = []
        while True:
            try:
                betas.append(prog.run(hybrid.State()).result().beta)
            except:
                break

        self.assertEqual(betas, beta_schedule)
    def test_beta_use(self):
        ss = dimod.SampleSet.from_samples([{'a': 0}], energy=[0], vartype='SPIN')
        state = hybrid.State(samples=ss)

        # beta not given at all
        with self.assertRaises(ValueError):
            res = EnergyWeightedResampler().run(state).result()

        # beta given on construction
        res = EnergyWeightedResampler(delta_beta=0).run(state).result()
        self.assertEqual(res.samples.info['delta_beta'], 0)

        # beta given on runtime, to run method
        res = EnergyWeightedResampler().run(state, delta_beta=1).result()
        self.assertEqual(res.samples.info['delta_beta'], 1)

        # beta given in state
        state.delta_beta = 2
        res = EnergyWeightedResampler().run(state).result()
        self.assertEqual(res.samples.info['delta_beta'], 2)