def test_log_2d_radial_symmetry(self): mu_angle = np.random.uniform(0, RIGHT_ANGLE) mu = angle_to_vector(mu_angle) kappa = 0.5 max_angle = min(acos(mu[0]), RIGHT_ANGLE - acos(mu[0])) angle_perturb = np.random.uniform(0, max_angle) angle_1 = max_angle + angle_perturb angle_2 = max_angle - angle_perturb x1 = np.array([cos(angle_1), sin(angle_1)]) x2 = np.array([cos(angle_2), sin(angle_2)]) print(mu_angle, max_angle, angle_perturb, angle_1, angle_2) self.assertAlmostEqual(vmf_log_pdf(x1, mu, kappa), vmf_log_pdf(x2, mu, kappa), delta=0.1) # There can be a high delta here due to numerical error
def test_log_2d_radial_symmetry(self): mu_angle = np.random.uniform(0, RIGHT_ANGLE) mu = angle_to_vector(mu_angle) kappa = 0.5 max_angle = min(acos(mu[0]), RIGHT_ANGLE - acos(mu[0])) angle_perturb = np.random.uniform(0, max_angle) angle_1 = max_angle + angle_perturb angle_2 = max_angle - angle_perturb x1 = np.array([cos(angle_1), sin(angle_1)]) x2 = np.array([cos(angle_2), sin(angle_2)]) print(mu_angle, max_angle, angle_perturb, angle_1, angle_2) self.assertAlmostEqual( vmf_log_pdf(x1, mu, kappa), vmf_log_pdf(x2, mu, kappa), delta=0.1) # There can be a high delta here due to numerical error
def test_3d_log_radial_symmetry(self): kappa = 0.5 mu = np.array([1, 0, 0]) x1 = np.array([0, 1, 0]) x2 = np.array([0, 0, 1]) self.assertAlmostEqual(vmf_log_pdf(x1, mu, kappa), vmf_log_pdf(x2, mu, kappa), delta=0.01) self.assertAlmostEqual(vmf_log_pdf(-x1, mu, kappa), vmf_log_pdf(-x2, mu, kappa), delta=0.01) self.assertAlmostEqual(vmf_log_pdf(-x1, mu, kappa), vmf_log_pdf(x2, mu, kappa), delta=0.01)