def test_sample_posterior_predictive_w(self): data0 = np.random.normal(0, 1, size=50) warning_msg = "The number of samples is too small to check convergence reliably" with pm.Model() as model_0: mu = pm.Normal("mu", mu=0, sigma=1) y = pm.Normal("y", mu=mu, sigma=1, observed=data0) with pytest.warns(UserWarning, match=warning_msg): trace_0 = pm.sample(10, tune=0, chains=2, return_inferencedata=False) idata_0 = pm.to_inference_data(trace_0, log_likelihood=False) with pm.Model() as model_1: mu = pm.Normal("mu", mu=0, sigma=1, size=len(data0)) y = pm.Normal("y", mu=mu, sigma=1, observed=data0) with pytest.warns(UserWarning, match=warning_msg): trace_1 = pm.sample(10, tune=0, chains=2, return_inferencedata=False) idata_1 = pm.to_inference_data(trace_1, log_likelihood=False) with pm.Model() as model_2: # Model with no observed RVs. mu = pm.Normal("mu", mu=0, sigma=1) with pytest.warns(UserWarning, match=warning_msg): trace_2 = pm.sample(10, tune=0, return_inferencedata=False) traces = [trace_0, trace_1] idatas = [idata_0, idata_1] models = [model_0, model_1] ppc = pm.sample_posterior_predictive_w(traces, 100, models) assert ppc["y"].shape == (100, 50) ppc = pm.sample_posterior_predictive_w(idatas, 100, models) assert ppc["y"].shape == (100, 50) with model_0: ppc = pm.sample_posterior_predictive_w([idata_0.posterior], None) assert ppc["y"].shape == (20, 50) with pytest.raises(ValueError, match="The number of traces and weights should be the same"): pm.sample_posterior_predictive_w([idata_0.posterior], 100, models, weights=[0.5, 0.5]) with pytest.raises(ValueError, match="The number of models and weights should be the same"): pm.sample_posterior_predictive_w([idata_0.posterior], 100, models) with pytest.raises( ValueError, match="The number of observed RVs should be the same for all models" ): pm.sample_posterior_predictive_w([trace_0, trace_2], 100, [model_0, model_2])
def test_sample_from_xarray_prior(self, point_list_arg_bug_fixture): pmodel, trace = point_list_arg_bug_fixture with pmodel: prior = pm.sample_prior_predictive( samples=20, return_inferencedata=False, ) idat = pm.to_inference_data(trace, prior=prior) with pmodel: pp = pm.sample_posterior_predictive( idat.prior, return_inferencedata=False, var_names=["d"] )
def test_normal_vector_idata(self, caplog): with pm.Model() as model: mu = pm.Normal("mu", 0.0, 1.0) a = pm.Normal("a", mu=mu, sigma=1, observed=np.array([0.5, 0.2])) trace = pm.sample(return_inferencedata=False) assert not isinstance(trace, InferenceData) with model: # test keep_size parameter with inference data as input... idata = pm.to_inference_data(trace) assert isinstance(idata, InferenceData) ppc = pm.sample_posterior_predictive(idata, return_inferencedata=False, keep_size=True) assert ppc["a"].shape == (trace.nchains, len(trace), 2)
def test_normal_scalar_idata(self): nchains = 2 ndraws = 500 with pm.Model() as model: mu = pm.Normal("mu", 0.0, 1.0) a = pm.Normal("a", mu=mu, sigma=1, observed=0.0) trace = pm.sample( draws=ndraws, chains=nchains, return_inferencedata=False, discard_tuned_samples=False, ) assert not isinstance(trace, InferenceData) with model: # test keep_size parameter and idata input idata = pm.to_inference_data(trace) assert isinstance(idata, InferenceData) ppc = pm.sample_posterior_predictive(idata, keep_size=True, return_inferencedata=False) assert ppc["a"].shape == (nchains, ndraws)
def test_sample_from_xarray_posterior(self, point_list_arg_bug_fixture): pmodel, trace = point_list_arg_bug_fixture with pmodel: idat = pm.to_inference_data(trace) pp = pm.sample_posterior_predictive(idat.posterior, var_names=["d"])