'Retrieve a simulation smoother for the statespace model.
Parameters
simulation_output : int, optional
Determines which simulation smoother output is calculated.
Default is all (including state and disturbances).
simulation_smooth_results_class : class, optional
Default results class to use to save output of simulation
smoothing. Default is `SimulationSmoothResults`. If specified,
class must extend from `SimulationSmoothResults`.
prefix : string
The prefix of the datatype. Usually only used internally.
**kwargs
Additional keyword arguments, used to set the simulation output.
See `set_simulation_output` for more details.
Returns
SimulationSmoothResults'

def simulation_smoother(self, simulation_output=None, results_class=None, prefix=None, **kwargs):

    if self._compatibility_mode:
        raise NotImplementedError('Simulation    smoothing    is    not    available.    Consider    updating    dependencies    for    more    options.')
    if (results_class is None):
        results_class = self.simulation_smooth_results_class
    if (not issubclass(results_class, SimulationSmoothResults)):
        raise ValueError('Invalid    results    class    provided.')
    if (prefix is None):
        prefix = self.prefix
    (prefix, dtype, create_statespace) = self._initialize_representation(prefix)
    simulation_output = self.get_simulation_output(simulation_output, **kwargs)
    smoother_output = kwargs.get('smoother_output', simulation_output)
    filter_method = kwargs.get('filter_method', self.filter_method)
    inversion_method = kwargs.get('inversion_method', self.inversion_method)
    stability_method = kwargs.get('stability_method', self.stability_method)
    conserve_memory = kwargs.get('conserve_memory', self.conserve_memory)
    filter_timing = kwargs.get('filter_timing', self.filter_timing)
    loglikelihood_burn = kwargs.get('loglikelihood_burn', self.loglikelihood_burn)
    tolerance = kwargs.get('tolerance', self.tolerance)
    cls = self.prefix_simulation_smoother_map[prefix]
    simulation_smoother = cls(self._statespaces[prefix], filter_method, inversion_method, stability_method, conserve_memory, filter_timing, tolerance, loglikelihood_burn, smoother_output, simulation_output)
    results = results_class(self, simulation_smoother)
    return results
