Plugins¶
This is a guide to installing and creating plugins for PyStan.
Installing Plugins¶
In order to use a plugin, you need to install it. Plugins are published on PyPI and can be installed with pip
.
Plugins are automatically enabled as soon as they are installed.
Creating Plugins¶
Plugin developers should create a class which subclasses stan.plugins.PluginBase
. This
class must be referenced in their package’s entry points section.
For example, if the class is mymodule.PrintParameterNames
then the
setuptools configuration would look like the following:
entry_points = {
"stan.plugins": [
"names = mymodule:PrintParameterNames"
]
}
The equivalent configuration in poetry would be:
[tool.poetry.plugins."stan.plugins"]
names = mymodule:PrintParameterNames
You can define multiple plugins in the entry points section. Note that the plugin name (here, names) is required but is unused.
All stan.plugins.PluginBase
subclasses implement methods which define behavior associated with events.
There is only one event supported, post_sample
.
on_post_sample¶
This method defines what happens when sampling has finished and a
stan.fit.Fit
object is about to be returned to the user. The
method takes a stan.fit.Fit
instance as an argument. The method
returns the instance. In a plugin, this method will typically analyze the data contained in
the instance. A plugin might also use this method to modify the instance, adding an
additional method or changing the behavior or an existing method.
Arguments:
fit
:stan.fit.Fit
instance
For example, if you wanted to print the names of parameters you would define a plugin as follows:
class PrintParameterNames(stan.plugins.PluginBase):
def on_post_sample(self, fit, **kwargs):
for key in fit:
print(key)
return fit
Note that on_post_sample accepts additional keyword arguments (**kwargs
). Accepting
keyword arguments like this will allow your plugin to be compatible with future versions of the package.
Future versions of the package could, in principle, add additional arguments to on_post_sample.