def test_cauchy_prior(self): # Test two specific function values p1 = pints.CauchyLogPrior(0, 10) self.assertEqual(p1([0]), -3.447314978843446) p2 = pints.CauchyLogPrior(10, 5) self.assertTrue(np.abs(p2([10]) + 2.7541677982835) < 0.001) p3 = pints.CauchyLogPrior(-3, 3.5) self.assertAlmostEqual(p3([1.4]), -3.3454404435815586) # Test exceptions self.assertRaises(ValueError, pints.CauchyLogPrior, 0, 0) self.assertRaises(ValueError, pints.CauchyLogPrior, 10, -1) # Test means self.assertTrue(np.isnan(p1.mean())) self.assertTrue(np.isnan(p2.mean())) # Test other function calls self.assertEqual(p1.n_parameters(), 1) self.assertEqual(p2.n_parameters(), 1) # Test sensitivities p = pints.CauchyLogPrior(10, 5) val = p([-3.3]) val1, dp = p.evaluateS1([-3.3]) self.assertEqual(val, val1) self.assertAlmostEqual(dp[0], 0.13175491604338996, places=6)
def test_cauchy_prior_sampling(self): p1 = pints.CauchyLogPrior(0, 1000) self.assertEqual(len(p1.sample()), 1) self.assertEqual(len(p1.sample(100)), 100) p1 = pints.CauchyLogPrior(-4.7, 10) n = 1000000 v_samples = p1.sample(n) self.assertTrue(np.abs(np.median(v_samples) - -4.695) < 0.1)
def test_cauchy_prior(self): # Test two specific function values p1 = pints.CauchyLogPrior(0, 10) self.assertEqual(p1([0]), -3.447314978843446) p2 = pints.CauchyLogPrior(10, 5) self.assertTrue(np.abs(p2([10]) + 2.7541677982835) < 0.001) # Test exceptions self.assertRaises(ValueError, pints.CauchyLogPrior, 0, 0) self.assertRaises(ValueError, pints.CauchyLogPrior, 10, -1) # Test means self.assertTrue(np.isnan(p1.mean())) self.assertTrue(np.isnan(p2.mean())) # Test other function calls self.assertEqual(p1.n_parameters(), 1) self.assertEqual(p2.n_parameters(), 1)
def __init__(self, location, scale): # Test inputs if float(scale) <= 0: raise ValueError('Scale must be positive') self._location = location self._scale = scale self._cauchy = pints.CauchyLogPrior(location=self._location, scale=self._scale) # Cache constants self._norm_factor = -np.log(np.arctan(location / scale) / np.pi + 0.5)
def test_cauchy_cdf_icdf(self): p = pints.CauchyLogPrior(-3, 2) self.assertAlmostEqual(p.cdf(5.5), 0.92644155602673783) self.assertAlmostEqual(p.icdf(0.1), -9.1553670743505062)
def test_cauchy_prior_sampling(self): # Aren't many tests for Cauchy distributions # because they have no mean or variance! p1 = pints.CauchyLogPrior(0, 1000) self.assertEqual(len(p1.sample()), 1) self.assertEqual(len(p1.sample(100)), 100)