def test_automatic_use_of_sort(self): with pm.Model() as model: s_g = pm.Simulator( "s_g", None, params=None, distance="gaussian_kernel", sum_stat="mean", observed=self.data, ) s_w = pm.Simulator( "s_w", None, params=None, distance="wasserstein", sum_stat="identity", observed=self.data, ) s_e = pm.Simulator( "s_e", None, params=None, distance="energy", sum_stat="identity", observed=self.data, ) assert s_g.distribution.sum_stat is np.mean assert s_w.distribution.sum_stat is np.sort assert s_e.distribution.sum_stat is np.sort
def setup_class(self): super().setup_class() self.data = np.random.normal(loc=0, scale=1, size=1000) def normal_sim(a, b): return np.random.normal(a, b, 1000) with pm.Model() as self.SMABC_test: a = pm.Normal("a", mu=0, sigma=1) b = pm.HalfNormal("b", sigma=1) s = pm.Simulator( "s", normal_sim, params=(a, b), sum_stat="sort", epsilon=1, observed=self.data ) self.s = s def quantiles(x): return np.quantile(x, [0.25, 0.5, 0.75]) def abs_diff(eps, obs_data, sim_data): return np.mean(np.abs((obs_data - sim_data) / eps)) with pm.Model() as self.SMABC_test2: a = pm.Normal("a", mu=0, sigma=1) b = pm.HalfNormal("b", sigma=1) s = pm.Simulator( "s", normal_sim, params=(a, b), distance=abs_diff, sum_stat=quantiles, epsilon=1, observed=self.data, )
def setup_class(self): super().setup_class() self.data = np.sort(np.random.normal(loc=0, scale=1, size=1000)) def normal_sim(a, b): return np.sort(np.random.normal(a, b, 1000)) with pm.Model() as self.SMABC_test: a = pm.Normal("a", mu=0, sd=5) b = pm.HalfNormal("b", sd=2) s = pm.Simulator("s", normal_sim, observed=self.data)
def test_automatic_use_of_sort(self): with pm.Model() as model: s_k = pm.Simulator( "s_k", None, params=None, distance="kullback_leibler", sum_stat="sort", observed=self.data, ) assert s_k.distribution.sum_stat is pm.distributions.simulator.identity
def test_named_models_are_unsupported(self): def normal_sim(a, b): return np.random.normal(a, b, 1000) with pm.Model(name="NamedModel"): a = pm.Normal("a", mu=0, sigma=1) b = pm.HalfNormal("b", sigma=1) c = pm.Potential("c", pm.math.switch(a > 0, 0, -np.inf)) s = pm.Simulator( "s", normal_sim, params=(a, b), sum_stat="sort", epsilon=1, observed=self.data ) with pytest.raises(NotImplementedError, match="named models"): pm.sample_smc(draws=10, kernel="ABC")