def __setstate__(self, payload):
        self.level_sigma_prior = R.SdPrior(1, 1)
        self.slope_sigma_prior = R.SdPrior(1, 1)
        self.slope_ar1_prior = R.Ar1CoefficientPrior()
        self.slope_mean_prior = R.NormalPrior(0, 1)
        self.level_sigma_prior.__setstate__(payload["level_sigma_prior"])
        self.slope_sigma_prior.__setstate__(payload["slope_sigma_prior"])
        self.slope_ar1_prior.__setstate__(payload["slope_ar1_prior"])
        self.slope_mean_prior.__setstate__(payload["slope_mean_prior"])
        self._create_model()

        initial_state_mean = payload["initial_state_mean"]
        initial_state_variance = payload["initial_state_variance"]
        self._set_initial_state_distribution(
            initial_level_prior=R.NormalPrior(
                initial_state_mean[0], np.sqrt(initial_state_variance[0, 0])),
            initial_slope_prior=R.NormalPrior(
                initial_state_mean[0], np.sqrt(initial_state_variance[0, 0]))
        )

        self.level_sigma = payload.get("level_sigma", None)
        self.slope_sigma = payload.get("slope_sigma", None)
        self.slope_ar1 = payload.get("slope_ar1", None)
        self.slope_mean = payload.get("slope_mean", None)
        self._state_contribution = payload.get("state_contribution", None)
 def _validate_initial_level_prior(initial_level_prior, initial_y, sdy):
     if initial_level_prior is None:
         initial_level_prior = R.NormalPrior(initial_y, sdy)
     if not isinstance(initial_level_prior, R.NormalPrior):
         raise Exception("Wrong type for initial_level_prior.  "
                         "Expected an R.NormalPrior.")
     return initial_level_prior
 def _validate_slope_mean_prior(slope_mean_prior, sdy):
     if slope_mean_prior is None:
         slope_mean_prior = R.NormalPrior(0, sdy)
     if not isinstance(slope_mean_prior, R.NormalPrior):
         raise Exception("Wrong type passed for slope_mean_prior.  "
                         "Expected an R.NormalPrior")
     return slope_mean_prior
 def _validate_initial_distributions(self, initial_state_prior, y, sdy):
     if initial_state_prior is None:
         if sdy is None:
             sdy = np.nanstd(y, ddof=1)
         initial_state_prior = R.NormalPrior(0.0, float(sdy))
     if not isinstance(initial_state_prior, R.NormalPrior):
         raise Exception("initial_state_prior should be an R.NormalPrior.")
     self._initial_state_prior = initial_state_prior
    def _validate_initial_distributions(
            self, initial_level_prior, initial_slope_prior,
            y, sdy, initial_y):
        if initial_level_prior is None:
            sdy = self._compute_sdy(sdy, y, "initial_level_prior")
            if initial_y is None:
                if y is None:
                    raise Exception(
                        "One of initial_y, y, or initial_level_prior must be "
                        "specified.")
                else:
                    initial_y = y[0]
            initial_level_prior = R.NormalPrior(initial_y, sdy)
        if not isinstance(initial_level_prior, R.NormalPrior):
            raise Exception("Unexpected type for initial_level_prior.")
        self._initial_level_prior = initial_level_prior

        if initial_slope_prior is None:
            sdy = self._compute_sdy(sdy, y, "initial_slope_prior")
            initial_slope_prior = R.NormalPrior(0, sdy)
        if not isinstance(initial_slope_prior, R.NormalPrior):
            raise Exception("Unexpected type for initial_slope_prior.")
        self._initial_slope_prior = initial_slope_prior
 def _validate_prior(self, prior, sdy):
     if prior is None:
         prior = R.NormalPrior(0, sdy)
     if not isinstance(prior, R.NormalPrior):
         raise Exception("Expected a prior of type R.NormalPrior.")
     return prior