Unpickling fit without Model instance (experimental)

This feature is experimental and nothing is guaranteed.

In PyStan it is needed to import model instance before unpickling the fit object. This is commonly done by pickling model instance and fit object together in an object that keeps the order (list, tuple, OrderedDict, dict with python 3.6+).

Sometimes mistakes are done, and fit objects are pickled without the model instance, and there is no way to reload the model from other pickled files. Rebuilding the model from Stan-code does not work in this case, because the module name contains random parts that are decided at the runtime. To still get data and samples saved to fit object, PyStan has unpickle_fit -function in its experimental submodule. The function will create a fake StanModel instance with the correct module name, which enables one to unpickle fit object without the original model instance. This means, that the model object should not be used to anything which includes the functionality wrapped in the fit object.

The suggested use of this feature is to enable users to extract samples with .extract() method (and access other information stored to fit.sim object). After extraction it is recommended to save samples in another format, such as dict , netCDF4 (arviz.InferenceData) or tabular format (pandas.DataFrame).


Following example will show how to unpickle fit object without model instance and save the resulting samples in other formats.

import pystan
import pystan.experimental

path = "path/to/fit.pickle"
fit = pystan.experimental.unpickle_fit(path)

Example on how to save extracted samples to with pickle

import pickle
with open("path/to/fit_dict.pickle", "wb") as f:
    pickle.dump(fit.extract(), protocol=pickle.HIGHEST_PROTOCOL)

Example on how to save extracted samples + other information with ArviZ to netCDF4.

import arviz as az
# for more advanced function use, see https://arviz-devs.github.io/arviz/generated/arviz.from_pystan.html
idata = az.from_pystan(fit)

Example on how to save extracted samples to csv with pandas

# using pystan.misc.to_dataframe -function works also with the older fit objects
df = pystan.misc.to_dataframe(fit)
df.to_csv("path/to/fit.csv", index=False)