Пример #1
0
    def test_inner_product_vectorization(self):
        n_samples = 3
        one_point_a = gs.array([[-1., 0.]])
        one_point_b = gs.array([[1.0, 0.]])

        n_points_a = gs.array([[-1., 0.], [1., 0.], [2., math.sqrt(3)]])
        n_points_b = gs.array([[2., -math.sqrt(3)], [4.0, math.sqrt(15)],
                               [-4.0, math.sqrt(15)]])

        result = self.metric.inner_product(one_point_a, one_point_b)
        expected = gs.dot(one_point_a, gs.transpose(one_point_b))
        expected -= (2 * one_point_a[:, self.time_like_dim] *
                     one_point_b[:, self.time_like_dim])
        expected = helper.to_scalar(expected)

        result_no = self.metric.inner_product(n_points_a, one_point_b)
        result_on = self.metric.inner_product(one_point_a, n_points_b)

        result_nn = self.metric.inner_product(n_points_a, n_points_b)

        self.assertAllClose(result, expected)
        self.assertAllClose(gs.shape(result_no), (n_samples, 1))
        self.assertAllClose(gs.shape(result_on), (n_samples, 1))
        self.assertAllClose(gs.shape(result_nn), (n_samples, 1))

        with self.session():
            expected = np.zeros(n_samples)
            for i in range(n_samples):
                expected[i] = gs.eval(gs.dot(n_points_a[i], n_points_b[i]))
                expected[i] -= (2 *
                                gs.eval(n_points_a[i, self.time_like_dim]) *
                                gs.eval(n_points_b[i, self.time_like_dim]))
            expected = helper.to_scalar(gs.array(expected))

            self.assertAllClose(result_nn, expected)
Пример #2
0
    def test_dist_vectorization(self):
        n_samples = self.n_samples

        one_point_a = self.space.random_uniform(n_samples=1)
        one_point_b = self.space.random_uniform(n_samples=1)
        n_points_a = self.space.random_uniform(n_samples=n_samples)
        n_points_b = self.space.random_uniform(n_samples=n_samples)

        result = self.metric.dist(one_point_a, one_point_b)
        vec = one_point_a - one_point_b
        expected = gs.sqrt(gs.dot(vec, vec.transpose()))
        expected = helper.to_scalar(expected)
        gs.testing.assert_allclose(result, expected)

        result = self.metric.dist(n_points_a, one_point_b)
        gs.testing.assert_allclose(result.shape, (n_samples, 1))

        result = self.metric.dist(one_point_a, n_points_b)
        gs.testing.assert_allclose(result.shape, (n_samples, 1))

        result = self.metric.dist(n_points_a, n_points_b)
        expected = gs.zeros(n_samples)
        for i in range(n_samples):
            vec = n_points_a[i] - n_points_b[i]
            expected[i] = gs.sqrt(gs.dot(vec, vec.transpose()))
        expected = helper.to_scalar(expected)
        gs.testing.assert_allclose(result.shape, (n_samples, 1))
        gs.testing.assert_allclose(result, expected)
Пример #3
0
    def test_inner_product_vectorization(self):
        n_samples = self.n_samples

        one_point_a = self.space.random_uniform(n_samples=1)
        one_point_b = self.space.random_uniform(n_samples=1)
        n_points_a = self.space.random_uniform(n_samples=n_samples)
        n_points_b = self.space.random_uniform(n_samples=n_samples)

        result = self.metric.inner_product(one_point_a, one_point_b)
        expected = gs.dot(one_point_a, one_point_b.transpose())
        expected = helper.to_scalar(expected)
        gs.testing.assert_allclose(result, expected)

        result = self.metric.inner_product(n_points_a, one_point_b)
        expected = gs.dot(n_points_a, one_point_b.transpose())
        expected = helper.to_scalar(expected)

        gs.testing.assert_allclose(result.shape, (n_samples, 1))
        gs.testing.assert_allclose(result, expected)

        result = self.metric.inner_product(one_point_a, n_points_b)
        expected = gs.dot(one_point_a, n_points_b.transpose()).transpose()
        expected = helper.to_scalar(expected)
        gs.testing.assert_allclose(result.shape, (n_samples, 1))
        gs.testing.assert_allclose(result, expected)

        result = self.metric.inner_product(n_points_a, n_points_b)
        expected = gs.zeros(n_samples)
        for i in range(n_samples):
            expected[i] = gs.dot(n_points_a[i], n_points_b[i])
        expected = helper.to_scalar(expected)
        gs.testing.assert_allclose(result.shape, (n_samples, 1))
        gs.testing.assert_allclose(result, expected)
Пример #4
0
 def test_variance(self):
     points = gs.array([[1., 0.], [2., math.sqrt(3)], [3., math.sqrt(8)],
                        [4., math.sqrt(24)]])
     weights = gs.array([1., 2., 1., 2.])
     base_point = gs.array([-1., 0.])
     variance = self.metric.variance(points, weights, base_point)
     result = helper.to_scalar(variance != 0)
     # we expect the average of the points' Minkowski sq norms.
     expected = helper.to_scalar(gs.array([True]))
     self.assertAllClose(result, expected)
Пример #5
0
    def test_variance(self):
        point = gs.array([2., 1., 1., 1.])
        points = gs.array([point, point])
        result = self.metric.variance(points)
        expected = helper.to_scalar(0.)

        self.assertAllClose(result, expected)
Пример #6
0
    def test_inner_product(self):
        base_point = gs.array([
            [1., 2., 3.],
            [0., 0., 0.],
            [3., 1., 1.]])

        tangent_vector_1 = gs.array([
            [1., 2., 3.],
            [0., -10., 0.],
            [30., 1., 1.]])

        tangent_vector_2 = gs.array([
            [1., 4., 3.],
            [5., 0., 0.],
            [3., 1., 1.]])

        result = self.metric.inner_product(
            tangent_vector_1,
            tangent_vector_2,
            base_point=base_point)

        expected = gs.trace(
            gs.matmul(
                gs.transpose(tangent_vector_1),
                tangent_vector_2))
        expected = helper.to_scalar(expected)

        self.assertAllClose(result, expected)
Пример #7
0
    def test_exp_and_dist_and_projection_to_tangent_space_vec(self):
        base_point = gs.array([
            [16., -2., -2.5, 84., 3.],
            [16., -2., -2.5, 84., 3.]])

        base_single_point = gs.array([16., -2., -2.5, 84., 3.])
        scalar_norm = gs.linalg.norm(base_single_point)

        base_point = base_point / scalar_norm
        vector = gs.array(
                [[9., 0., -1., -2., 1.],
                 [9., 0., -1., -2., 1]])

        tangent_vec = self.space.projection_to_tangent_space(
                vector=vector,
                base_point=base_point)

        exp = self.metric.exp(tangent_vec=tangent_vec,
                              base_point=base_point)

        result = self.metric.dist(base_point, exp)
        expected = gs.linalg.norm(tangent_vec, axis=-1) % (2 * gs.pi)

        expected = helper.to_scalar(expected)
        self.assertAllClose(result, expected)
    def test_inner_product_vectorization(self):
        n_samples = 3

        one_point_a = tf.convert_to_tensor([0., 1.])
        one_point_b = tf.convert_to_tensor([2., 10.])

        n_points_a = tf.convert_to_tensor([[2., 1.], [-2., -4.], [-5., 1.]])
        n_points_b = tf.convert_to_tensor([[2., 10.], [8., -1.], [-3., 6.]])

        result = self.metric.inner_product(one_point_a, one_point_b)
        expected = gs.dot(one_point_a, gs.transpose(one_point_b))
        expected = helper.to_scalar(expected)
        with self.test_session():
            self.assertAllClose(gs.eval(result), gs.eval(expected))

        result = self.metric.inner_product(n_points_a, one_point_b)
        point_numpy = np.random.uniform(size=(n_samples, 1))
        # TODO(nina): Fix this test with assertShapeEqual
        with self.test_session():
            self.assertAllClose(point_numpy.shape, gs.eval(gs.shape(result)))

        result = self.metric.inner_product(one_point_a, n_points_b)
        point_numpy = np.random.uniform(size=(n_samples, 1))
        # TODO(nina): Fix this test with assertShapeEqual
        with self.test_session():
            self.assertAllClose(point_numpy.shape, gs.eval(gs.shape(result)))

        result = self.metric.inner_product(n_points_a, n_points_b)
        point_numpy = np.random.uniform(size=(n_samples, 1))
        # TODO(nina): Fix this test with assertShapeEqual
        with self.test_session():
            self.assertAllClose(point_numpy.shape, gs.eval(gs.shape(result)))
    def test_belongs(self):
        point = self.space.random_uniform()
        bool_belongs = self.space.belongs(point)
        expected = helper.to_scalar(tf.convert_to_tensor([[True]]))

        with self.test_session():
            self.assertAllClose(gs.eval(expected), gs.eval(bool_belongs))
Пример #10
0
    def test_dist_vectorization(self):
        n_samples = self.n_samples

        one_point_a = gs.array([0., 1.])
        one_point_b = gs.array([2., 10.])
        n_points_a = gs.array([[2., 1.], [-2., -4.], [-5., 1.]])
        n_points_b = gs.array([[2., 10.], [8., -1.], [-3., 6.]])

        result = self.metric.dist(one_point_a, one_point_b)
        vec = one_point_a - one_point_b
        expected = gs.sqrt(gs.dot(vec, gs.transpose(vec)))
        expected = helper.to_scalar(expected)
        self.assertAllClose(result, expected)

        result = self.metric.dist(n_points_a, one_point_b)
        self.assertAllClose(gs.shape(result), (n_samples, 1))

        result = self.metric.dist(one_point_a, n_points_b)
        self.assertAllClose(gs.shape(result), (n_samples, 1))

        result = self.metric.dist(n_points_a, n_points_b)
        expected = gs.array([[9.], [gs.sqrt(109.)], [gs.sqrt(29.)]])

        self.assertAllClose(gs.shape(result), (n_samples, 1))
        self.assertAllClose(result, expected)
Пример #11
0
    def test_squared_norm(self):
        point = gs.array([-2, 4])

        result = self.metric.squared_norm(point)
        expected = gs.linalg.norm(point) ** 2
        expected = helper.to_scalar(expected)
        gs.testing.assert_allclose(result, expected)
Пример #12
0
 def foo_optional_input(tangent_vec_a, tangent_vec_b, in_scalar=None):
     if in_scalar is None:
         in_scalar = gs.array([[1]])
     aux = gs.einsum('ni,ni->n', tangent_vec_a, tangent_vec_b)
     result = gs.einsum('n,nk->n', aux, in_scalar)
     result = helper.to_scalar(result)
     return result
Пример #13
0
    def test_dist_orthogonal_points(self):
        # Distance between two orthogonal points is pi / 2.
        point_a = gs.array([10., -2., -.5, 0., 0.])
        point_a = point_a / gs.linalg.norm(point_a)
        point_b = gs.array([2., 10, 0., 0., 0.])
        point_b = point_b / gs.linalg.norm(point_b)
        result = gs.dot(point_a, point_b)
        result = helper.to_scalar(result)
        expected = 0
        expected = helper.to_scalar(expected)
        self.assertAllClose(result, expected)

        result = self.metric.dist(point_a, point_b)
        expected = gs.pi / 2
        expected = helper.to_scalar(expected)

        self.assertAllClose(result, expected)
Пример #14
0
    def test_dist(self):
        point_a = gs.array([0, 1])
        point_b = gs.array([2, 10])

        result = self.metric.dist(point_a, point_b)
        expected = gs.linalg.norm(point_b - point_a)
        expected = helper.to_scalar(expected)
        gs.testing.assert_allclose(result, expected)
Пример #15
0
    def test_squared_dist(self):
        point_a = gs.array([-1, 4])
        point_b = gs.array([1, 1])

        result = self.metric.squared_dist(point_a, point_b)
        vec = point_b - point_a
        expected = gs.dot(vec, vec)
        expected = helper.to_scalar(expected)
        gs.testing.assert_allclose(result, expected)
    def test_norm(self):
        point = tf.convert_to_tensor([-2., 4.])

        result = self.metric.norm(point)
        expected = gs.linalg.norm(point)
        expected = helper.to_scalar(expected)

        with self.test_session():
            self.assertAllClose(gs.eval(result), gs.eval(expected))
Пример #17
0
    def test_inner_product(self):
        point_a = gs.array([0, 1])
        point_b = gs.array([2, 10])

        result = self.metric.inner_product(point_a, point_b)
        expected = gs.dot(point_a, point_b)
        expected = helper.to_scalar(expected)

        gs.testing.assert_allclose(result, expected)
Пример #18
0
 def test_variance(self):
     points = gs.array([[1, 2], [2, 3], [3, 4], [4, 5]])
     weights = gs.array([1, 2, 1, 2])
     base_point = gs.zeros(2)
     result = self.metric.variance(points, weights, base_point)
     # we expect the average of the points' Minkowski sq norms.
     expected = (1 * 3. + 2 * 5. + 1 * 7. + 2 * 9.) / 6.
     expected = helper.to_scalar(expected)
     gs.testing.assert_allclose(result, expected)
Пример #19
0
    def test_norm_vectorization(self):
        n_samples = self.n_samples
        n_points = self.space.random_uniform(n_samples=n_samples)

        result = self.metric.norm(n_points)
        expected = gs.linalg.norm(n_points, axis=1)
        expected = helper.to_scalar(expected)
        gs.testing.assert_allclose(result.shape, (n_samples, 1))
        gs.testing.assert_allclose(result, expected)
Пример #20
0
    def test_variance_hyperbolic(self):
        point = gs.array([2., 1., 1., 1.])
        points = gs.array([point, point])
        result = variance(points,
                          base_point=point,
                          metric=self.hyperbolic.metric)
        expected = helper.to_scalar(0.)

        self.assertAllClose(result, expected)
Пример #21
0
    def test_dist_point_and_itself(self):
        # Distance between a point and itself is 0.
        point_a = gs.array([10., -2., -.5, 2., 3.])
        point_b = point_a
        result = self.metric.dist(point_a, point_b)
        expected = 0.
        expected = helper.to_scalar(expected)

        gs.testing.assert_allclose(result, expected)
Пример #22
0
    def test_variance(self):
        point = gs.array([0., 0., 0., 0., 1.])
        points = gs.zeros((2, point.shape[0]))
        points[0, :] = point
        points[1, :] = point
        result = self.metric.variance(points)
        expected = helper.to_scalar(0.)

        self.assertAllClose(expected, result)
Пример #23
0
    def test_squared_norm(self):
        point = tf.convert_to_tensor([-2., 4.])

        result = self.metric.squared_norm(point)
        expected = gs.dot(point, point)
        expected -= 2 * point[self.time_like_dim] * point[self.time_like_dim]
        expected = helper.to_scalar(expected)
        with self.test_session():
            self.assertAllClose(gs.eval(result), gs.eval(expected))
Пример #24
0
    def test_dist_point_and_itself(self):
        # Distance between a point and itself is 0
        point_a = (1. / gs.sqrt(129.) * gs.array([10., -2., -5., 0., 0.]))
        point_b = point_a
        result = self.metric.dist(point_a, point_b)
        expected = 0.
        expected = helper.to_scalar(expected)

        self.assertAllClose(result, expected)
Пример #25
0
    def test_dist(self):
        point_a = gs.array([0., 1.])
        point_b = gs.array([2., 10.])

        result = self.metric.dist(point_a, point_b)
        expected = gs.linalg.norm(point_b - point_a)
        expected = helper.to_scalar(expected)

        self.assertAllClose(result, expected)
    def test_inner_product(self):
        point_a = tf.convert_to_tensor([0., 1.])
        point_b = tf.convert_to_tensor([2., 10.])

        result = self.metric.inner_product(point_a, point_b)
        expected = gs.dot(point_a, point_b)
        expected = helper.to_scalar(expected)

        with self.test_session():
            self.assertAllClose(gs.eval(result), gs.eval(expected))
Пример #27
0
    def test_variance(self):
        points = gs.array([[1., 2.], [2., 3.], [3., 4.], [4., 5.]])
        weights = gs.array([1., 2., 1., 2.])
        base_point = gs.zeros(2)
        result = self.metric.variance(points, weights, base_point)
        # we expect the average of the points' sq norms.
        expected = (1 * 5. + 2 * 13. + 1 * 25. + 2 * 41.) / 6.
        expected = helper.to_scalar(expected)

        self.assertAllClose(result, expected)
Пример #28
0
    def test_squared_dist(self):
        point_a = gs.array([-1., 4.])
        point_b = gs.array([1., 1.])

        result = self.metric.squared_dist(point_a, point_b)
        vec = point_b - point_a
        expected = gs.dot(vec, vec)
        expected = helper.to_scalar(expected)

        self.assertAllClose(result, expected)
Пример #29
0
    def test_squared_dist(self):
        point_a = gs.array([2., -math.sqrt(3)])
        point_b = gs.array([4.0, math.sqrt(15)])

        result = self.metric.squared_dist(point_a, point_b)
        vec = point_b - point_a
        expected = gs.dot(vec, vec)
        expected -= 2 * vec[self.time_like_dim] * vec[self.time_like_dim]
        expected = helper.to_scalar(expected)
        self.assertAllClose(result, expected)
Пример #30
0
    def test_inner_product(self):
        point_a = gs.array([0., 1.])
        point_b = gs.array([2., 10.])

        result = self.metric.inner_product(point_a, point_b)
        expected = helper.to_scalar(gs.dot(point_a, point_b))
        expected -= (2 * point_a[self.time_like_dim]
                     * point_b[self.time_like_dim])

        self.assertAllClose(result, expected)