Commit a3abd1d6 authored by Gregory Ashton's avatar Gregory Ashton

Merge branch '367-generate-initial-live-points-in-dynesty' into 'master'

Resolve "Generate initial live points in dynesty"

Closes #367

See merge request !488
parents f7ac2a19 4a571e71
Pipeline #63966 passed with stages
in 6 minutes and 21 seconds
......@@ -388,12 +388,62 @@ class Sampler(object):
return draw
def check_draw(self, draw):
""" Checks if the draw will generate an infinite prior or likelihood """
if np.isinf(self.log_likelihood(draw)):
logger.warning('Prior draw {} has inf likelihood'.format(draw))
if np.isinf(self.log_prior(draw)):
logger.warning('Prior draw {} has inf prior'.format(draw))
def get_initial_points_from_prior(self, npoints=1):
""" Method to draw a set of live points from the prior
This iterates over draws from the prior until all the samples have a
finite prior and likelihood (relevant for constrained priors).
npoints: int
The number of values to return
unit_cube, parameters, likelihood: tuple of array_like
unit_cube (nlive, ndim) is an array of the prior samples from the
unit cube, parameters (nlive, ndim) is the unit_cube array
transformed to the target space, while likelihood (nlive) are the
likelihood evaluations.
unit_cube = []
parameters = []
likelihood = []
while len(unit_cube) < npoints:
unit = np.random.rand(self.ndim)
theta = self.prior_transform(unit)
if self.check_draw(theta, warning=False):
return np.array(unit_cube), np.array(parameters), np.array(likelihood)
def check_draw(self, theta, warning=True):
""" Checks if the draw will generate an infinite prior or likelihood
theta: array_like
Parameter values at which to evaluate likelihood
bool, cube (nlive,
True if the likelihood and prior are finite, false otherwise
if np.isinf(self.log_prior(theta)):
if warning:
logger.warning('Prior draw {} has inf prior'.format(theta))
return False
if np.isinf(self.log_likelihood(theta)):
if warning:
logger.warning('Prior draw {} has inf likelihood'.format(theta))
return False
return True
def run_sampler(self):
"""A template method to run in subclasses"""
......@@ -202,6 +202,10 @@ class Dynesty(NestedSampler):
def run_sampler(self):
import dynesty
if self.kwargs['live_points'] is None:
self.kwargs['live_points'] = (
self.sampler = dynesty.NestedSampler(
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment