Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in
bilby
bilby
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 25
    • Issues 25
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
    • Iterations
  • Merge Requests 12
    • Merge Requests 12
  • Requirements
    • Requirements
    • List
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Security & Compliance
    • Security & Compliance
    • Dependency List
    • License Compliance
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • CI / CD
    • Code Review
    • Insights
    • Issue
    • Repository
    • Value Stream
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • lscsoft
  • bilbybilby
  • Issues
  • #510

Closed
Open
Opened Jul 23, 2020 by Moritz Huebner@moritz.huebnerMaintainer

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.

Edited Jul 23, 2020 by Moritz Huebner
Assignee
Assign to
1.0.2
Milestone
1.0.2
Assign milestone
Time tracking
None
Due date
None
Reference: lscsoft/bilby#510