def test_exponential_map(): p = np.array([ [np.cosh(0.), np.sinh(0.)], [np.cosh(0.), np.sinh(0.)], [np.cosh(0.5*np.pi), np.sinh(0.5*np.pi)], # [np.cosh(np.pi), np.sinh(np.pi)] ]) v = np.array([ [0., 0.], [0., 0.25*np.pi], [0.478393040868114, 0.521606959131886], # [0.499066278634146, 0.500933721365854] ]) expected = np.array([ [1., 0.], [1.324609089252006, 0.86867096148601], [3.04543575, 2.87657416], ]) hyperb = Hyperboloid(1) print("") print(hyperb.exponential_map(p, v)) print(expected) assert_array_almost_equal(hyperb.exponential_map(p, v), expected)
def test_logarithmic_map(): # Leverage trusted exponential map to verify logarithmic map p0 = np.array([ [np.cosh(0.), np.sinh(0.)], [np.cosh(0.), np.sinh(0.)], [np.cosh(1), np.sinh(1)], [np.cosh(1), np.sinh(1)], ]) p1 = np.array([ [np.cosh(0.), np.sinh(0.)], [np.cosh(1.), np.sinh(1.)], [np.cosh(-1.), np.sinh(-1.)], [np.cosh(-np.pi), np.sinh(-np.pi)] ]) hyperb = Hyperboloid(1) vectors = hyperb.logarithmic_map(p0, p1) p1_from_v = hyperb.exponential_map(p0, vectors) assert_array_equal( hyperb.is_on_manifold(p1_from_v), np.ones((p1_from_v.shape[0], 1), dtype=bool) ) assert_array_almost_equal(p1, p1_from_v)