Further details

Using live points

Live points in nessai are stored in numpy structured arrays. These are array have fields which can be accessed like the values of dictionaries but they can also be indexed. nessai include various functions for constructing live point arrays and also converting these arrays to other common python formats, see mod:nessai.livepoint

Here’s an example of constructing a live point:

>>> from nessai.livepoint import parameters_to_live_point
>>> x = parameters_to_live_point([1, 2], ['a', 'b'])
>>> print(x)    # the live point
(1., 2., 0., 0.)
>>> print(x.dtype.names)
('a', 'b', 'logP', 'logL')
>>> print(x['a'])    # the value of parameter 'a'
1.0

Importantly the structured arrays used for live points can also contain multiple live points:

>>> from nessai.livepoint import numpy_array_to_live_points
>>> x = np.random.rand(10, 2)    # 10 live points with 2 parameters
>>> print(x)
[[0.72451217 0.1788154 ]
 [0.31549832 0.55898106]
 [0.74000576 0.73103116]
 [0.37362176 0.25791271]
 [0.61056168 0.05940721]
 [0.33988486 0.54106604]
 [0.82653691 0.14523437]
 [0.62390321 0.32606928]
 [0.21743918 0.23915047]
 [0.45478996 0.09699358]]
>>> y = numpy_array_to_live_points(x, ['a', 'b'])    # call the parameters a and b
>>> print(y)
array([(0.72451217, 0.1788154 , 0., 0.), (0.31549832, 0.55898106, 0., 0.),
       (0.74000576, 0.73103116, 0., 0.), (0.37362176, 0.25791271, 0., 0.),
       (0.61056168, 0.05940721, 0., 0.), (0.33988486, 0.54106604, 0., 0.),
       (0.82653691, 0.14523437, 0., 0.), (0.62390321, 0.32606928, 0., 0.),
       (0.21743918, 0.23915047, 0., 0.), (0.45478996, 0.09699358, 0., 0.)],
      dtype=[('a', '<f8'), ('b', '<f8'), ('logP', '<f8'), ('logL', '<f8')])
>>> y['a']    # all the values of a
array([0.72451217, 0.31549832, 0.74000576, 0.37362176, 0.61056168,
       0.33988486, 0.82653691, 0.62390321, 0.21743918, 0.45478996])
>>> y[0]      # the first live point
(0.72451217, 0.1788154, 0., 0.)

Using analytic priors

nessai includes the option for sampling from analytic priors. This should be enabled when the method nessai.model.Model.new_point() draws directly from the priors. This eliminates the need for additional rejection sampling to ensure new points are correctly distributed.

To use this setting, the user must re-define new_point when defining the model as described in running the sampler. This method must return samples as live points, see using live points. Once the method is redefined, set analytic_priors=True when calling FlowSampler.

Detailed explanation of outputs

Note

This section has not been completed yet