Plugins

Defining plugins

bilby allows for additional customizations/extra features via plugins. This allows users to add new functionality without the need to modify the main bilby codebase, for example to add a new sampler.

To make your plugins discoverable to bilby, you need to specify a plugin group (which bilby knows to search for), a name for the plugin, and the python path to your function/class within your package metadata, see here for details. For example, if you have a package called mypackage and you wish to add a plugin called my_awesome_plugin within the group bilby.plugin, you would specify the following in your pyproject.toml file:

[project.entry-points."bilby.plugin"]
my_awesome_plugin = "mypackage.plugin"

Currently bilby allows for the following plugin groups:

  • "bilby.samplers": group for adding samplers to bilby. See Sampler plugins for more details.

Sampler plugins

Sampler plugins can specified via the "bilby.samplers" group and these are automatically added to the ‘known’ samplers in bilby. This allows users to add support for new samplers without having to modify the core bilby codebase. Sampler plugins should implement a sampler class that in inherits from one of the following classes:

We provide a template for creating sampler plugins on GitHub.

Note

When implementing a new sampler plugin, please avoid using a generic name for the plugin (e.g. ‘nest’, ‘mcmc’) as this may lead to naming conflicts.

Sampler plugin library

This is a list of known sampler plugins. if you don’t see your plugin listed here, we encourage you to open a merge request to add it.

  • This could be your sampler

Bilby-native samplers

Some samplers are implemented directly in bilby and these are avertised under two possible names:

  • bilby.<sampler name>: always available, indicates the sampler is implemented in bilby,

  • <sampler name>: only refers to the native bilby implementation if an external plugin does not already provide this sampler.

This allows for an external plugin to provide a sampler without introducing namespace conflicts.

Information for bilby developers

Using plugins within bilby

Within bilby, plugins are discovered with the bilby.core.utils.get_entry_points() function, and can be used throughout the bilby infrastructure.

Adding a new plugin group

If you want to add support for a new plugin group, please open an issue to discuss the details with other developers.