Generate an initial proposal distribution around the point theta.

def _initial_proposal_distribution(self, parameters, theta, size,
        default_std=1e-4):
        """
        Generate an initial proposal distribution around the point theta.
        """

        missing_parameters = set(parameters).difference(theta)
        if missing_parameters:
            raise ValueError("cannot create initial proposal distribution "\
                "because the following parameters are missing: {}".format(
                    ", ".join(missing_parameters)))

        std = np.ones(len(parameters), dtype=float)
        
        initial_proposal_stds \
            = self._configuration.get("initial_proposal_stds", {})

        p0 = np.array([theta[p] for p in parameters])
        std = np.array(map(float, [initial_proposal_stds.get(p, default_std) \
            for p in parameters]))

        return np.vstack([p0 + std * np.random.normal(size=len(p0)) \
            for i in range(size)])