def test_random(self): def ref_rand(size, w, mu, sigma): component = np.random.choice(w.size, size=size, p=w) return np.random.normal(mu[component], sigma[component], size=size) pymc_random( NormalMixture, { "w": Simplex(2), "mu": Domain([[0.05, 2.5], [-5.0, 1.0]], edges=(None, None)), "sigma": Domain([[1, 1], [1.5, 2.0]], edges=(None, None)), }, extra_args={"comp_shape": 2}, size=1000, ref_rand=ref_rand, change_rv_size_fn=Mixture.change_size, ) pymc_random( NormalMixture, { "w": Simplex(3), "mu": Domain([[-5.0, 1.0, 2.5]], edges=(None, None)), "sigma": Domain([[1.5, 2.0, 3.0]], edges=(None, None)), }, extra_args={"comp_shape": 3}, size=1000, ref_rand=ref_rand, change_rv_size_fn=Mixture.change_size, )
def test_simplex(): check_vector_transform(tr.simplex, Simplex(2)) check_vector_transform(tr.simplex, Simplex(4)) check_transform(tr.simplex, MultiSimplex(3, 2), constructor=at.dmatrix, test=np.zeros((2, 2)))
def test_sum_to_1(): check_vector_transform(tr.sum_to_1, Simplex(2)) check_vector_transform(tr.sum_to_1, Simplex(4)) check_jacobian_det(tr.sum_to_1, Vector(Unit, 2), at.dvector, np.array([0, 0]), lambda x: x[:-1])