def test_raises(self): space = self.space point = space.random_uniform() with pytest.raises(NotImplementedError): space.extrinsic_to_spherical(point) with pytest.raises(NotImplementedError): space.tangent_extrinsic_to_spherical(point, point) sphere = Hypersphere(2) with pytest.raises(ValueError): sphere.tangent_extrinsic_to_spherical(point)
def test_tangent_extrinsic_to_spherical(self): """ Check vectorization of conversion from spherical to extrinsic coordinates for tangent vectors to the 2-sphere. """ dim = 2 sphere = Hypersphere(dim) base_points_spherical = gs.array([[gs.pi / 2, 0], [gs.pi / 2, 0]]) expected = gs.array([[0.25, 0.5], [0.3, 0.2]]) tangent_vecs = gs.array([[0, 0.5, -0.25], [0, 0.2, -0.3]]) result = sphere.tangent_extrinsic_to_spherical( tangent_vecs, base_point_spherical=base_points_spherical) self.assertAllClose(result, expected) result = sphere.tangent_extrinsic_to_spherical(tangent_vecs[0], base_point=gs.array( [1., 0., 0.])) self.assertAllClose(result, expected[0])
def test_raises(self): space = self.space point = space.random_uniform() self.assertRaises(NotImplementedError, lambda: space.extrinsic_to_spherical(point)) self.assertRaises( NotImplementedError, lambda: space.tangent_extrinsic_to_spherical(point, point)) sphere = Hypersphere(2) self.assertRaises(ValueError, lambda: sphere.tangent_extrinsic_to_spherical(point))
def test_tangent_spherical_and_extrinsic_inverse(self): dim = 2 n_samples = 5 sphere = Hypersphere(dim) points = gs.random.rand(n_samples, 2) * gs.pi * gs.array([1., 2. ])[None, :] tangent_spherical = gs.random.rand(n_samples, 2) tangent_extrinsic = sphere.tangent_spherical_to_extrinsic( tangent_spherical, points) result = sphere.tangent_extrinsic_to_spherical( tangent_extrinsic, base_point_spherical=points) self.assertAllClose(result, tangent_spherical) points_extrinsic = sphere.random_uniform(n_samples) vector = gs.random.rand(n_samples, dim + 1) tangent_extrinsic = sphere.to_tangent(vector, points_extrinsic) tangent_spherical = sphere.tangent_extrinsic_to_spherical( tangent_extrinsic, base_point=points_extrinsic) spherical = sphere.extrinsic_to_spherical(points_extrinsic) result = sphere.tangent_spherical_to_extrinsic(tangent_spherical, spherical) self.assertAllClose(result, tangent_extrinsic)