cogwheel.prior.CombinedPrior

class cogwheel.prior.CombinedPrior(**kwargs)

Bases: Prior

Make a new Prior subclass combining other Prior subclasses.

Schematically, combine priors like [P(x), P(y|x)] → P(x, y). This class has a single abstract method prior_classes which is a list of Prior subclasses that we want to combine. Arguments to the __init__ of the classes in .prior_classes are passed by keyword, so it is important that those arguments have repeated names if and only if they are intended to have the same value. Also, the __init__ of all classes in .prior_classes need to accept **kwargs and forward them to super().__init__().

Parameters:
**kwargs

The list of parameters to pass to a subclass cls of CombinedPrior can be found using cls.init_parameters().

Methods

generate_random_samples

Sample the prior using rejection sampling.

get_fast_sampled_params

Return a list of parameter names that map to given "fast" standard parameters.

get_init_dict

Return keyword arguments to reproduce the class instance.

get_module_name

Name of the module that defines the instance's class.

init_parameters

Return parameters accepted by the class constructor.

inverse_transform

Transform standard parameter values to sampled parameter values.

inverse_transform_samples

Add columns in-place for self.sampled_params to samples.

ln_jacobian_determinant

Natural log Jacobian determinant of the inverse transform.

lnprior

Natural logarithm of the prior probability density.

lnprior_and_transform

Return log prior and standard parameters.

reinstantiate

Return a new instance of the class, possibly updating init_kwargs.

standard_lnprior

Log prior density in standard coordinates.

to_json

Write class instance to json file.

transform

Transform sampled parameter values to standard parameter values.

transform_samples

Add columns in-place for self.standard_params to samples.

unfold_apply

Return a function that unfolds its parameters and applies func to each unfolding.

Attributes

conditioned_on

folded_params

folded_reflected_params

folded_shifted_params

max_lnprior

Maximum log prior density, useful for rejection sampling.

periodic_params

prior_classes

List of Prior subclasses with the priors to combine.

range_dic

reflective_params

sampled_params

standard_params

subclass_registry

generate_random_samples(n_samples, seed=None, return_lnz=False)

Sample the prior using rejection sampling.

This is more efficient for more uniform priors.

Parameters:
n_samplesint

How many samples to generate.

seed

Passed to numpy.default_rng, for reproducibility.

Returns:
samplespd.DataFrame

Columns are .sampled_params + .standard_params, and rows are samples distributed according to the prior.

lnz, dlnzfloat, float

Log of the integral of the prior over the bounds, and estimate of the 1-sigma uncertainty. Only returned if return_lnz is set to True. Useful for estimating the normalization constant of the prior. Note: This differs from the lnz that nested samplers (e.g. PyMultiNest or Nautilus) would compute, in that it has the phase-space volume differential applied. I.e. if lnprior == 0, lnz == log(prod(self.cubesize)) while nested samplers would return lnz == 0.

classmethod get_fast_sampled_params(fast_standard_params)

Return a list of parameter names that map to given “fast” standard parameters.

Useful for sampling fast-slow parameters. Updating fast sampling parameters is guaranteed to only change fast standard parameters.

get_init_dict(**kwargs)

Return keyword arguments to reproduce the class instance.

get_module_name()

Name of the module that defines the instance’s class.

classmethod init_parameters(include_optional=True)

Return parameters accepted by the class constructor.

The parameters are sorted by parameter kind (i.e. positional arguments first, keyword arguments last). The self parameter is excluded.

Parameters:
include_optionalbool

Whether to include parameters with defaults in the returned list.

Returns:
list of inspect.Parameter objects
abstractmethod inverse_transform(*par_vals, **par_dic) dict

Transform standard parameter values to sampled parameter values.

Take self.standard_params + self.conditioned_on parameters and return a dictionary with self.sampled_params parameters.

inverse_transform_samples(samples: DataFrame)

Add columns in-place for self.sampled_params to samples.

Parameters:
samplespandas.Dataframe

Must include columns for .standard_params and .conditioned_on.

Raises:
ValueError

If samples.index is not a simple range.

ln_jacobian_determinant(*par_vals, **par_dic) float

Natural log Jacobian determinant of the inverse transform.

Take .standard_params + .conditioned_on parameters and return a float representing

log|∂{sampled_params} / ∂{standard_params}|

Parameters:
*par_vals, **par_dic

.standard_params + .conditioned_on parameter values.

abstractmethod lnprior(*par_vals, **par_dic) float

Natural logarithm of the prior probability density.

Take .sampled_params + .conditioned_on parameters and return a float.

lnprior_and_transform(*par_vals, **par_dic)

Return log prior and standard parameters.

The reason for this function is that for CombinedPrior it is already necessary to evaluate self.transform() in order to evaluate self.lnprior(). CombinedPrior overwrites this function so the user can get both lnprior and transform without evaluating transform twice.

Returns:
float

Log prior, output of .lnprior.

dict

Standard parameters, output of .transform.

property max_lnprior

Maximum log prior density, useful for rejection sampling.

abstract property prior_classes

List of Prior subclasses with the priors to combine.

reinstantiate(**new_init_kwargs)

Return a new instance of the class, possibly updating init_kwargs.

Values not passed will be taken from the current instance.

standard_lnprior(**parameters)

Log prior density in standard coordinates.

Parameters:
**parameters

Values for .standard_params and .conditioned_on parameters.

to_json(dirname, basename=None, *, dir_permissions=493, file_permissions=420, overwrite=False)

Write class instance to json file.

It can then be loaded with read_json.

abstractmethod transform(*par_vals, **par_dic) dict

Transform sampled parameter values to standard parameter values.

Take .sampled_params + .conditioned_on parameters and return a dictionary with .standard_params parameters.

transform_samples(samples: DataFrame)

Add columns in-place for self.standard_params to samples.

Parameters:
samplespandas.Dataframe

Must include columns for .sampled_params and .conditioned_on.

Raises:
ValueError

If samples.index is not a simple range.

unfold_apply(func, otypes=(<class 'float'>, ))

Return a function that unfolds its parameters and applies func to each unfolding.

The returned function returns a list of length 2**n_folds.

Parameters:
funccallable

A python function or method.

otypesstr or list of dtypes

Output type, passed to np.vectorize. You can pass None to decide automatically, but then an extra function call will be made.

Returns:
callable

Unfolding function.