def test_trunc_log_density(self): mu = 0 sigma = 1 a = -1 b = 1 data = np.array([-0.5, 0, 0.5]) expected_dist = s.truncnorm(loc=mu, scale=sigma, a=a, b=b) actual_dist = TruncatedNormalDistribution(mu=mu, sigma=sigma, lower=a, upper=b) expected = expected_dist.logpdf(data) actual = actual_dist.log_density(data) assert (actual == expected).all()
def test_trunc_log_density_shifted(self): mu = 3 sigma = 2 a = 0 b = 4 data = np.array([0.5, 1, 2, 3, 3.9]) expected_dist = s.truncnorm(loc=mu, scale=sigma, a=(a - mu) / sigma, b=(b - mu) / sigma) actual_dist = TruncatedNormalDistribution(mu=mu, sigma=sigma, lower=a, upper=b) expected = expected_dist.logpdf(data) actual = actual_dist.log_density(data) for i in range(len(expected)): assert isclose(actual[i], expected[i], abs_tol=1e-10)
def test_trunc_log_density_shifted_small_sig_outside_range(self): mu = 3 sigma = 0.5 a = 1 b = 4 data = np.array([-1, 0, 0.5, 5]) expected_dist = s.truncnorm(loc=mu, scale=sigma, a=(a - mu) / sigma, b=(b - mu) / sigma) actual_dist = TruncatedNormalDistribution(mu=mu, sigma=sigma, lower=a, upper=b) expected = expected_dist.logpdf(data) expected = np.where(expected == np.inf, -9999, expected) expected = np.where(expected == -np.inf, -9999, expected) actual = actual_dist.log_density(data) for i in range(len(expected)): assert isclose(actual[i], expected[i], abs_tol=1e-10)