def test_observed(self): """ Test observation of Bernoulli node """ Z = Binomial(10, 0.3) Z.observe(10) u = Z._message_to_child() self.assertAllClose(u[0], 10) Z = Binomial(10, 0.9) Z.observe(2) u = Z._message_to_child() self.assertAllClose(u[0], 2) pass
def test_moments(self): """ Test the moments of binomial nodes. """ # Simple test X = Binomial(1, 0.7) u = X._message_to_child() self.assertEqual(len(u), 1) self.assertAllClose(u[0], 0.7) # Test n X = Binomial(10, 0.7) u = X._message_to_child() self.assertAllClose(u[0], 10*0.7) # Test plates in p n = np.random.randint(1, 10) p = np.random.rand(3) X = Binomial(n, p) u = X._message_to_child() self.assertAllClose(u[0], p*n) # Test plates in n n = np.random.randint(1, 10, size=(3,)) p = np.random.rand() X = Binomial(n, p) u = X._message_to_child() self.assertAllClose(u[0], p*n) # Test plates in p and n n = np.random.randint(1, 10, size=(4,1)) p = np.random.rand(3) X = Binomial(n, p) u = X._message_to_child() self.assertAllClose(u[0], p*n) # Test with beta prior P = Beta([7, 3]) logp = P._message_to_child()[0] p0 = np.exp(logp[0]) / (np.exp(logp[0]) + np.exp(logp[1])) X = Binomial(1, P) u = X._message_to_child() self.assertAllClose(u[0], p0) # Test with broadcasted plates P = Beta([7, 3], plates=(10,)) X = Binomial(5, P) u = X._message_to_child() self.assertAllClose(u[0] * np.ones(X.get_shape(0)), 5*p0*np.ones(10)) pass
def test_moments(self): """ Test the moments of binomial nodes. """ # Simple test X = Binomial(1, 0.7) u = X._message_to_child() self.assertEqual(len(u), 1) self.assertAllClose(u[0], 0.7) # Test n X = Binomial(10, 0.7) u = X._message_to_child() self.assertAllClose(u[0], 10 * 0.7) # Test plates in p n = np.random.randint(1, 10) p = np.random.rand(3) X = Binomial(n, p) u = X._message_to_child() self.assertAllClose(u[0], p * n) # Test plates in n n = np.random.randint(1, 10, size=(3, )) p = np.random.rand() X = Binomial(n, p) u = X._message_to_child() self.assertAllClose(u[0], p * n) # Test plates in p and n n = np.random.randint(1, 10, size=(4, 1)) p = np.random.rand(3) X = Binomial(n, p) u = X._message_to_child() self.assertAllClose(u[0], p * n) # Test with beta prior P = Beta([7, 3]) logp = P._message_to_child()[0] p0 = np.exp(logp[0]) / (np.exp(logp[0]) + np.exp(logp[1])) X = Binomial(1, P) u = X._message_to_child() self.assertAllClose(u[0], p0) # Test with broadcasted plates P = Beta([7, 3], plates=(10, )) X = Binomial(5, P) u = X._message_to_child() self.assertAllClose(u[0] * np.ones(X.get_shape(0)), 5 * p0 * np.ones(10)) pass