def METHOD_NAME(
    self, model: Callable, num_samples: int, stable: bool = True
) -> Dict[str, torch.Tensor]:
    """Draws a set of at most ``num_samples`` many model samples,
    optionally extended by the ``simulator``.
    Internally this importance resamples the samples generated by the
    ``guide`` in ``.__init__()``, and does not rerun the ``guide`` or
    ``simulator``. If the original guide samples poorly cover the model
    distribution, samples will show low diversity.
    :param callable model: A model with the same latent variables as the
        original ``guide``. Must be vectorizable via ``pyro.plate``.
    :param int num_samples: The number of samples to draw.
    :param bool stable: Whether to use piecewise-constant multinomial
        sampling. Set to True for visualization, False for Monte Carlo
        integration. Defaults to True.
    :returns: A dictionary of stacked samples.
    :rtype: Dict[str, torch.Tensor]
    """
    num_guide_samples = len(self._old_logp)
    with pyro.plate("particles", num_guide_samples, dim=self._particle_dim):
        trace = poutine.trace(poutine.condition(model, self._samples)).get_trace()
    new_logp = _log_prob_sum(trace, num_guide_samples)
    logits = new_logp - self._old_logp
    i = self._categorical_sample(logits, num_samples, stable)
    samples = {k: v[i] for k, v in self._samples.items()}
    return samples