Skip to content

Commit

Permalink
Update ppc test (#4246)
Browse files Browse the repository at this point in the history
  • Loading branch information
ColCarroll authored Nov 23, 2020
1 parent b990e49 commit 68d5201
Showing 1 changed file with 21 additions and 22 deletions.
43 changes: 21 additions & 22 deletions pymc3/tests/test_sampling.py
Original file line number Diff line number Diff line change
Expand Up @@ -587,7 +587,7 @@ def test_model_shared_variable(self):

expected_p = np.array([logistic.eval({coeff: val}) for val in trace["x"][:samples]])
assert post_pred["obs"].shape == (samples, 3)
assert np.allclose(post_pred["p"], expected_p)
npt.assert_allclose(post_pred["p"], expected_p)

# fast version
samples = 100
Expand All @@ -598,11 +598,12 @@ def test_model_shared_variable(self):

expected_p = np.array([logistic.eval({coeff: val}) for val in trace["x"][:samples]])
assert post_pred["obs"].shape == (samples, 3)
assert np.allclose(post_pred["p"], expected_p)
npt.assert_allclose(post_pred["p"], expected_p)

def test_deterministic_of_observed(self):
meas_in_1 = pm.theanof.floatX(2 + 4 * np.random.randn(100))
meas_in_2 = pm.theanof.floatX(5 + 4 * np.random.randn(100))
meas_in_1 = pm.theanof.floatX(2 + 4 * np.random.randn(10))
meas_in_2 = pm.theanof.floatX(5 + 4 * np.random.randn(10))
nchains = 2
with pm.Model() as model:
mu_in_1 = pm.Normal("mu_in_1", 0, 1)
sigma_in_1 = pm.HalfNormal("sd_in_1", 1)
Expand All @@ -614,40 +615,38 @@ def test_deterministic_of_observed(self):
out_diff = in_1 + in_2
pm.Deterministic("out", out_diff)

trace = pm.sample(100)
ppc_trace = pm.trace_to_dataframe(
trace, varnames=[n for n in trace.varnames if n != "out"]
).to_dict("records")
trace = pm.sample(100, chains=nchains)
np.random.seed(0)
with pytest.warns(DeprecationWarning):
ppc = pm.sample_posterior_predictive(
model=model,
trace=ppc_trace,
samples=len(ppc_trace),
trace=trace,
samples=len(trace) * nchains,
vars=(model.deterministics + model.basic_RVs),
)

rtol = 1e-5 if theano.config.floatX == "float64" else 1e-3
assert np.allclose(ppc["in_1"] + ppc["in_2"], ppc["out"], rtol=rtol)
rtol = 1e-5 if theano.config.floatX == "float64" else 1e-4
npt.assert_allclose(ppc["in_1"] + ppc["in_2"], ppc["out"], rtol=rtol)

np.random.seed(0)
ppc = pm.sample_posterior_predictive(
model=model,
trace=ppc_trace,
samples=len(ppc_trace),
trace=trace,
samples=len(trace) * nchains,
var_names=[var.name for var in (model.deterministics + model.basic_RVs)],
)

rtol = 1e-5 if theano.config.floatX == "float64" else 1e-3
assert np.allclose(ppc["in_1"] + ppc["in_2"], ppc["out"], rtol=rtol)
npt.assert_allclose(ppc["in_1"] + ppc["in_2"], ppc["out"], rtol=rtol)

np.random.seed(0)
ppc = pm.fast_sample_posterior_predictive(
model=model,
trace=ppc_trace,
samples=len(ppc_trace),
trace=trace,
samples=len(trace) * nchains,
var_names=[var.name for var in (model.deterministics + model.basic_RVs)],
)

rtol = 1e-5 if theano.config.floatX == "float64" else 1e-3
assert np.allclose(ppc["in_1"] + ppc["in_2"], ppc["out"], rtol=rtol)
npt.assert_allclose(ppc["in_1"] + ppc["in_2"], ppc["out"], rtol=rtol)

def test_deterministic_of_observed_modified_interface(self):
meas_in_1 = pm.theanof.floatX(2 + 4 * np.random.randn(100))
Expand Down Expand Up @@ -675,7 +674,7 @@ def test_deterministic_of_observed_modified_interface(self):
)

rtol = 1e-5 if theano.config.floatX == "float64" else 1e-3
assert np.allclose(ppc["in_1"] + ppc["in_2"], ppc["out"], rtol=rtol)
npt.assert_allclose(ppc["in_1"] + ppc["in_2"], ppc["out"], rtol=rtol)

ppc = pm.fast_sample_posterior_predictive(
model=model,
Expand All @@ -685,7 +684,7 @@ def test_deterministic_of_observed_modified_interface(self):
)

rtol = 1e-5 if theano.config.floatX == "float64" else 1e-3
assert np.allclose(ppc["in_1"] + ppc["in_2"], ppc["out"], rtol=rtol)
npt.assert_allclose(ppc["in_1"] + ppc["in_2"], ppc["out"], rtol=rtol)

def test_variable_type(self):
with pm.Model() as model:
Expand Down

0 comments on commit 68d5201

Please sign in to comment.