Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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])
Ejemplo n.º 3
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))
Ejemplo n.º 4
0
    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)