def test_choice(weights, rng): n = 1000 choices = [[1, 1], [1, -1], [-1, 1], [-1, -1]] N = len(choices) dist = Choice(choices, weights=weights) # If d is passed, it has to match with pytest.raises(ValueError): dist.sample(n, d=4, rng=rng) sample = dist.sample(n, rng=rng) tsample, tchoices = list(map(tuple, sample)), list(map(tuple, choices)) # check that frequency of choices matches weights inds = [tchoices.index(s) for s in tsample] hist, bins = np.histogram(inds, bins=np.linspace(-0.5, N - 0.5, N + 1)) p_empirical = hist / float(hist.sum()) p = np.ones(N) / N if dist.p is None else dist.p sterr = 1. / np.sqrt(n) # expected maximum standard error assert np.allclose(p, p_empirical, atol=2 * sterr)
def test_choice(weights, rng, allclose): """Tests the choice function with weights""" n = 1000 choices = [[1, 1], [1, -1], [-1, 1], [-1, -1]] N = len(choices) dist = Choice(choices, weights=weights) # If d is passed, it has to match with pytest.raises(ValueError): dist.sample(n, d=4, rng=rng) sample = dist.sample(n, rng=rng) tsample = [tuple(point) for point in sample] tchoices = [tuple(choice) for choice in choices] # check that frequency of choices matches weights inds = [tchoices.index(s) for s in tsample] histogram, _ = np.histogram(inds, bins=np.linspace(-0.5, N - 0.5, N + 1)) p_empirical = histogram / float(histogram.sum()) p = np.ones(N) / N if dist.p is None else dist.p sterr = 1.0 / np.sqrt(n) # expected maximum standard error assert allclose(p, p_empirical, atol=2 * sterr)