Test constraint prior integrating to one is not written correctly
Solved by !834 (merged)
See https://git.ligo.org/lscsoft/bilby/-/blob/master/test/prior_test.py#L1215
While the constraint is defined, there is no conversion function in there, thus the constraint doesn't actually do anything. I have rewritten the test in a more generic form as part of !834 (merged)
class TestConstraintPriorNormalisation(unittest.TestCase):
def setUp(self):
self.priors = dict(
a=bilby.core.prior.Uniform(name="a", minimum=5, maximum=10),
b=bilby.core.prior.Uniform(name="b", minimum=5, maximum=10),
c=bilby.core.prior.Constraint(name="c", minimum=0, maximum=1),
)
def conversion_func(parameters):
return dict(a=parameters["a"], b=parameters["b"], c=parameters["a"] / parameters["b"])
self.priors = bilby.core.prior.PriorDict(self.priors)#, conversion_function=conversion_func)
def test_prob_integrate_to_one(self):
keys = ["a", "b", "c"]
n = 5000
samples = self.priors.sample_subset(keys=keys, size=n)
prob = self.priors.prob(samples, axis=0)
dm1 = self.priors["a"].maximum - self.priors["a"].minimum
dm2 = self.priors["b"].maximum - self.priors["b"].minimum
integral = np.sum(prob * (dm1 * dm2)) / len(samples["a"])
self.assertAlmostEqual(1, integral, 5)
Which causes the test to fail:
AssertionError: 1 != 0.9650294695481337 within 5 places (0.034970530451866266 difference
This sort of makes sense, because previously all samples were accepted, so the result was always close to 1. Now it is more random as some samples actually get rejected.