def test_get_density(self): """Test FStudentT.get_density""" n = 10 for i in range(10): m, s, v = uniform(-10, 10), uniform(1, 10), uniform(1, 60) x = np.random.uniform(-100, 100, n) jx = np.ones_like(x) f = FStudentT(x, jx, m, s, v, "test") exp_dens = np.exp(-evaluate_studentt(x, m, s, v)) self.assertAlmostEqual(f.get_density(), exp_dens, delta=1e-6)
def test_evaluate_Dnu(self): """Test FStudentT.evaluate_derivative_nu""" n = 10 for i in range(10): m, s, v = uniform(-10, 10), uniform(1, 10), uniform(1, 60) x = np.random.uniform(-100, 100, n) jx = np.ones_like(x) f = FStudentT(x, jx, m, s, v, "test") f.update_cached_values() exp_derv = evaluate_derivative_v(x, m, s, v) self.assertAlmostEqual(f.evaluate_derivative_nu(), exp_derv, delta=1e-6)
def test_update_sufficient_statistics(self): """Test sufficient statistics correctly updated.""" n = 10 for i in range(10): x = np.random.uniform(-100, 100, n) jx = 2 * np.ones_like(x) sumx = x.sum() sumx2 = (x**2).sum() logJX = np.log(jx).sum() f = FStudentT(x, jx, 1., 10., 10., "test") stats = f.get_sufficient_statistics() self.assertAlmostEqual(stats[0], sumx, delta=1e-4) self.assertAlmostEqual(stats[1], sumx2, delta=1e-2) self.assertAlmostEqual(stats[2], n, delta=1e-6) self.assertAlmostEqual(f.get_LogJX(), logJX, delta=1e-6) x = np.random.uniform(-100, 100, n) jx = 3 * np.ones_like(x) sumx = x.sum() sumx2 = (x**2).sum() logJX = np.log(jx).sum() f.update_sufficient_statistics(x, jx) stats = f.get_sufficient_statistics() self.assertAlmostEqual(stats[0], sumx, delta=1e-4) self.assertAlmostEqual(stats[1], sumx2, delta=1e-2) self.assertAlmostEqual(stats[2], n, delta=1e-6) self.assertAlmostEqual(f.get_LogJX(), logJX, delta=1e-6)
def test_create_from_sufficient_statistics(self): """Test constructor with sufficient stats.""" n = 10 for i in range(10): x = np.random.uniform(-100, 100, n) jx = 2 * np.ones_like(x) sumx = x.sum() sumx2 = (x**2).sum() logJX = np.log(jx).sum() f = FStudentT(sumx, sumx2, n, logJX, 1., 10., 10., "test") stats = f.get_sufficient_statistics() self.assertAlmostEqual(stats[0], sumx, delta=1e-4) self.assertAlmostEqual(stats[1], sumx2, delta=1e-2) self.assertAlmostEqual(stats[2], n, delta=1e-6) self.assertAlmostEqual(f.get_LogJX(), logJX, delta=1e-6)
def test_evaluate_DFX(self): """Test FStudentT.evaluate_derivative_FX""" n = 10 for i in range(10): m, s, v = uniform(-10, 10), uniform(1, 10), uniform(1, 60) x = np.random.uniform(-100, 100, n) jx = np.ones_like(x) f = FStudentT(x, jx, m, s, v, "test") f.update_cached_values() exp_dervs = evaluate_derivative_fx(x, m, s, v) batch_dervs = f.evaluate_derivative_FX(x) for i in range(n): single_derv = f.evaluate_derivative_Fx(x[i]) self.assertAlmostEqual(single_derv, exp_dervs[i], delta=1e-6) self.assertAlmostEqual(batch_dervs[i], exp_dervs[i], delta=1e-6)
def test_evaluate(self): """Test FStudentT.evaluate""" n = 10 for i in range(10): # Test Student-t m, s, v = uniform(-10, 10), uniform(1, 10), uniform(1, 60) x = np.random.uniform(-100, 100, n) jx = np.ones_like(x) f = FStudentT(x, jx, m, s, v, "test") exp_score = evaluate_studentt(x, m, s, v) self.assertAlmostEqual(f.evaluate(), exp_score, delta=1e-6) # Test Log-Student-t m, s, v = uniform(.1, 10), uniform(1, 10), uniform(1, 60) x = np.random.uniform(.1, 100, n) jx = 1. / x logx = np.log(x) logm = np.log(m) f = FStudentT(logx, jx, logm, s, v, "test") exp_score = evaluate_logstudentt(logx, logm, s, v) self.assertAlmostEqual(f.evaluate(), exp_score, delta=1e-6)
def test_setters_getters(self): f = FStudentT(*get_random_attributes()) for i in range(10): vs = get_random_attributes() f.set_sumFX(vs[0]) f.set_sumFX2(vs[1]) f.set_N(vs[2]) f.set_LogJX(vs[3]) f.set_FM(vs[4]) f.set_sigma(vs[5]) f.set_nu(vs[6]) self.assertAlmostEqual(f.get_sumFX(), vs[0], delta=1e-6) self.assertAlmostEqual(f.get_sumFX2(), vs[1], delta=1e-6) self.assertAlmostEqual(f.get_N(), vs[2], delta=1e-6) self.assertAlmostEqual(f.get_LogJX(), vs[3], delta=1e-6) self.assertAlmostEqual(f.get_FM(), vs[4], delta=1e-6) self.assertAlmostEqual(f.get_sigma(), vs[5], delta=1e-6) self.assertAlmostEqual(f.get_nu(), vs[6], delta=1e-6)