Ejemplo n.º 1
0
    def setUp(self):
        self.n_samples = 10
        self.SO3_GROUP = SpecialOrthogonal(n=3, point_type='vector')
        self.SE3_GROUP = SpecialEuclidean(n=3, point_type='vector')
        self.S1 = Hypersphere(dim=1)
        self.S2 = Hypersphere(dim=2)
        self.H2 = Hyperbolic(dim=2)
        self.H2_half_plane = PoincareHalfSpace(dim=2)
        self.M32 = Matrices(m=3, n=2)
        self.S32 = PreShapeSpace(k_landmarks=3, m_ambient=2)
        self.KS = visualization.KendallSphere()
        self.M33 = Matrices(m=3, n=3)
        self.S33 = PreShapeSpace(k_landmarks=3, m_ambient=3)
        self.KD = visualization.KendallDisk()

        plt.figure()
Ejemplo n.º 2
0
    def setup_method(self):
        gs.random.seed(1234)

        self.k_landmarks = 4
        self.m_ambient = 3
        self.space = PreShapeSpace(self.k_landmarks, self.m_ambient)
        self.matrices = self.space.embedding_space
        self.n_samples = 10
        self.shape_metric = KendallShapeMetric(self.k_landmarks,
                                               self.m_ambient)

        self.base_point = self.space.random_point()
        vector = gs.random.rand(11, self.k_landmarks, self.m_ambient)
        tg_vec_0 = self.space.to_tangent(vector[0], self.base_point)
        self.hor_x = self.space.horizontal_projection(tg_vec_0,
                                                      self.base_point)
        tg_vec_1 = self.space.to_tangent(vector[1], self.base_point)
        self.hor_y = self.space.horizontal_projection(tg_vec_1,
                                                      self.base_point)
        tg_vec_2 = self.space.to_tangent(vector[2], self.base_point)
        self.hor_z = self.space.horizontal_projection(tg_vec_2,
                                                      self.base_point)
        tg_vec_3 = self.space.to_tangent(vector[3], self.base_point)
        self.hor_h = self.space.horizontal_projection(tg_vec_3,
                                                      self.base_point)
        tg_vec_4 = self.space.to_tangent(vector[4], self.base_point)
        self.ver_v = self.space.vertical_projection(tg_vec_4, self.base_point)
        tg_vec_5 = self.space.to_tangent(vector[5], self.base_point)
        self.ver_w = self.space.vertical_projection(tg_vec_5, self.base_point)
        tg_vec_6 = self.space.to_tangent(vector[6], self.base_point)
        hor_dy = self.space.horizontal_projection(tg_vec_6, self.base_point)
        tg_vec_7 = self.space.to_tangent(vector[7], self.base_point)
        hor_dz = self.space.horizontal_projection(tg_vec_7, self.base_point)
        tg_vec_8 = self.space.to_tangent(vector[8], self.base_point)
        ver_dv = self.space.vertical_projection(tg_vec_8, self.base_point)
        tg_vec_9 = self.space.to_tangent(vector[9], self.base_point)
        ver_dw = self.space.vertical_projection(tg_vec_9, self.base_point)
        tg_vec_10 = self.space.to_tangent(vector[10], self.base_point)
        hor_dh = self.space.horizontal_projection(tg_vec_10, self.base_point)

        # generate valid derivatives of horizontal / vertical vector fields.
        a_x_y = self.space.integrability_tensor(self.hor_x, self.hor_y,
                                                self.base_point)
        self.nabla_x_y = hor_dy + a_x_y
        a_x_z = self.space.integrability_tensor(self.hor_x, self.hor_z,
                                                self.base_point)
        self.nabla_x_z = hor_dz + a_x_z
        a_x_v = self.space.integrability_tensor(self.hor_x, self.ver_v,
                                                self.base_point)
        self.nabla_x_v = ver_dv + a_x_v
        a_x_w = self.space.integrability_tensor(self.hor_x, self.ver_w,
                                                self.base_point)
        self.nabla_x_w = ver_dw + a_x_w
        a_x_h = self.space.integrability_tensor(self.hor_x, self.hor_h,
                                                self.base_point)
        self.nabla_x_h = hor_dh + a_x_h
Ejemplo n.º 3
0
    def setUp(self):
        gs.random.seed(1234)

        self.k_landmarks = 4
        self.m_ambient = 3
        self.space = PreShapeSpace(self.k_landmarks, self.m_ambient)
        self.matrices = self.space.embedding_manifold
        self.n_samples = 10
        self.shape_metric = KendallShapeMetric(self.k_landmarks,
                                               self.m_ambient)
Ejemplo n.º 4
0
    def fit(self):
        """
        This is the main entry of fitting PNS to data

        """
        ## 0. make sure the data are distributed on a unit sphere
        d, n = self.data.shape
        if not is_on_unit_sphere(self.data):
            print("Mapping data to preshape space")
            data_in_3d = np.reshape(self.data, (-1, 3, n))
            _, k_landmarks, _ = data_in_3d.shape
            from geomstats.geometry.pre_shape import PreShapeSpace

            preshape = PreShapeSpace(m_ambient=3, k_landmarks=k_landmarks)
            data_preshape = preshape.projection(data_in_3d)
            base_point = data_preshape[0]

            data_shape = preshape.align(point=data_preshape,
                                        base_point=base_point)

            self.data = np.reshape(data_shape, (d, n))
        ## 1. rotate data to get a tight space, excluding the null space
        eps = 1e-15

        u, s, _ = np.linalg.svd(self.data, full_matrices=False)
        small_singular_val = np.where(s < eps)[0]
        maxd = len(small_singular_val)
        if maxd == 0:
            maxd = np.min([d, n]) + 1

        ## the dimension of null space
        nullspdim = d - maxd + 1

        ## 2. intrinsic dimension of sphere is 1 dimension lower than extrinsic_dim
        dm = maxd - 2

        basisu = []
        if nullspdim > 0:
            basisu = u[:, :dm + 1]
            ## extract the signal by projecting to the kernel space (complementary of the null space)
            currentSphere = np.matmul(u[:, :dm + 1].T, self.data)

        else:
            currentSphere = self.data

        if self.itype == 9:
            ## Use hypothesis testing (Kurtosis test) to decide whether great or small circle for EACH subsphere
            self.output = self.automatic_fit_subspheres(
                currentSphere, dm, nullspdim, basisu)
        else:
            ## Otherwise, always fit data with one particular circle type (great or small)
            self.output = self.fit_with_subspheres(currentSphere, dm,
                                                   nullspdim, basisu)
Ejemplo n.º 5
0
 def integrability_tensor_test_data(self):
     space = PreShapeSpace(4, 3)
     vector = gs.random.rand(2, 4, 3)
     base_point = space.random_point()
     random_data = [
         dict(
             k_landmarks=4,
             m_ambient=3,
             tangent_vec_a=space.to_tangent(vector[0], base_point),
             tangent_vec_b=space.to_tangent(vector[1], base_point),
             base_point=base_point,
         )
     ]
     return self.generate_tests(random_data)
Ejemplo n.º 6
0
 def vertical_projection_test_data(self):
     vector = gs.random.rand(10, 4, 3)
     space = PreShapeSpace(4, 3)
     point = space.random_point()
     smoke_data = [
         dict(
             k_landmarks=4,
             m_ambient=3,
             tangent_vec=space.to_tangent(vector[0], point),
             point=point,
         ),
         dict(
             k_landmarks=4,
             m_ambient=3,
             tangent_vec=space.to_tangent(vector, point),
             point=point,
         ),
     ]
     return self.generate_tests(smoke_data)
Ejemplo n.º 7
0
    def parallel_transport_test_data(self):
        k_landmarks = 4
        m_ambient = 3
        n_samples = 10
        space = PreShapeSpace(4, 3)
        base_point = space.projection(gs.eye(4)[:, :3])
        vec_a = gs.random.rand(n_samples, k_landmarks, m_ambient)
        tangent_vec_a = space.to_tangent(space.center(vec_a), base_point)

        vec_b = gs.random.rand(n_samples, k_landmarks, m_ambient)
        tangent_vec_b = space.to_tangent(space.center(vec_b), base_point)
        smoke_data = [
            dict(
                k_landmarks=k_landmarks,
                m_ambient=m_ambient,
                tangent_vec_a=tangent_vec_a,
                tangent_vec_b=tangent_vec_b,
                base_point=base_point,
            )
        ]
        return self.generate_tests(smoke_data)
Ejemplo n.º 8
0
 def alignment_is_symmetric_test_data(self):
     space = PreShapeSpace(4, 3)
     random_data = [
         dict(
             k_landmarks=4,
             m_ambient=3,
             point=space.random_point(),
             base_point=space.random_point(),
         ),
         dict(
             k_landmarks=4,
             m_ambient=3,
             point=space.random_point(),
             base_point=space.random_point(2),
         ),
         dict(
             k_landmarks=4,
             m_ambient=3,
             point=space.random_point(2),
             base_point=space.random_point(2),
         ),
     ]
     return self.generate_tests([], random_data)
Ejemplo n.º 9
0
from geomstats.geometry.poincare_half_space import PoincareHalfSpace
from geomstats.geometry.pre_shape import KendallShapeMetric, PreShapeSpace
from geomstats.geometry.special_euclidean import SpecialEuclidean
from geomstats.geometry.special_orthogonal import SpecialOrthogonal
from mpl_toolkits.mplot3d import Axes3D  # NOQA

SE3_GROUP = SpecialEuclidean(n=3, point_type='vector')
SE2_GROUP = SpecialEuclidean(n=2, point_type='matrix')
SE2_VECT = SpecialEuclidean(n=2, point_type='vector')
SO3_GROUP = SpecialOrthogonal(n=3, point_type='vector')
S1 = Hypersphere(dim=1)
S2 = Hypersphere(dim=2)
H2 = Hyperboloid(dim=2)
POINCARE_HALF_PLANE = PoincareHalfSpace(dim=2)
M32 = Matrices(m=3, n=2)
S32 = PreShapeSpace(k_landmarks=3, m_ambient=2)
METRIC_S32 = KendallShapeMetric(k_landmarks=3, m_ambient=2)
M33 = Matrices(m=3, n=3)
S33 = PreShapeSpace(k_landmarks=3, m_ambient=3)
METRIC_S33 = KendallShapeMetric(k_landmarks=3, m_ambient=3)

AX_SCALE = 1.2

IMPLEMENTED = [
    'SO3_GROUP', 'SE3_GROUP', 'SE2_GROUP', 'S1', 'S2', 'H2_poincare_disk',
    'H2_poincare_half_plane', 'H2_klein_disk', 'poincare_polydisk', 'S32',
    'M32', 'S33', 'M33'
]


def tutorial_matplotlib():
Ejemplo n.º 10
0
class PreShapeMetricTestData(_RiemannianMetricTestData):
    k_landmarks_list = random.sample(range(3, 6), 2)
    m_ambient_list = [random.sample(range(2, n), 1)[0] for n in k_landmarks_list]
    metric_args_list = list(zip(k_landmarks_list, m_ambient_list))

    shape_list = metric_args_list
    space_list = [PreShapeSpace(k, m) for k, m in metric_args_list]
    n_points_list = random.sample(range(1, 7), 2)
    n_samples_list = random.sample(range(1, 7), 2)
    n_points_a_list = random.sample(range(1, 7), 2)
    n_points_b_list = [1]
    batch_size_list = random.sample(range(2, 7), 2)
    n_tangent_vecs_list = random.sample(range(2, 7), 2)
    alpha_list = [1] * 2
    n_rungs_list = [1] * 2
    scheme_list = ["pole"] * 2

    def exp_shape_test_data(self):
        return self._exp_shape_test_data(
            self.metric_args_list, self.space_list, self.shape_list
        )

    def log_shape_test_data(self):
        return self._log_shape_test_data(self.metric_args_list, self.space_list)

    def squared_dist_is_symmetric_test_data(self):
        return self._squared_dist_is_symmetric_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_points_a_list,
            self.n_points_b_list,
            atol=gs.atol * 1000,
        )

    def exp_belongs_test_data(self):
        return self._exp_belongs_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_samples_list,
            belongs_atol=gs.atol * 1000,
        )

    def log_is_tangent_test_data(self):
        return self._log_is_tangent_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_samples_list,
            is_tangent_atol=gs.atol * 1000,
        )

    def geodesic_ivp_belongs_test_data(self):
        return self._geodesic_ivp_belongs_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_points_list,
            belongs_atol=gs.atol * 1000,
        )

    def geodesic_bvp_belongs_test_data(self):
        return self._geodesic_bvp_belongs_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_points_list,
            belongs_atol=gs.atol * 1000,
        )

    def exp_after_log_test_data(self):
        return self._exp_after_log_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_samples_list,
            rtol=gs.rtol * 100,
            atol=1e-4,
        )

    def log_after_exp_test_data(self):
        return self._log_after_exp_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_samples_list,
            rtol=gs.rtol * 100,
            atol=1e-2,
        )

    def exp_ladder_parallel_transport_test_data(self):
        return self._exp_ladder_parallel_transport_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_samples_list,
            self.n_rungs_list,
            self.alpha_list,
            self.scheme_list,
        )

    def exp_geodesic_ivp_test_data(self):
        return self._exp_geodesic_ivp_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_samples_list,
            self.n_points_list,
            rtol=gs.rtol * 10000,
            atol=gs.atol * 10000,
        )

    def parallel_transport_ivp_is_isometry_test_data(self):
        return self._parallel_transport_ivp_is_isometry_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_samples_list,
            is_tangent_atol=gs.atol * 1000,
            atol=gs.atol * 1000,
        )

    def parallel_transport_bvp_is_isometry_test_data(self):
        return self._parallel_transport_bvp_is_isometry_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_samples_list,
            is_tangent_atol=gs.atol * 1000,
            atol=gs.atol * 1000,
        )

    def dist_is_symmetric_test_data(self):
        return self._dist_is_symmetric_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_points_a_list,
            self.n_points_b_list,
        )

    def dist_is_positive_test_data(self):
        return self._dist_is_positive_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_points_a_list,
            self.n_points_b_list,
        )

    def squared_dist_is_positive_test_data(self):
        return self._squared_dist_is_positive_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_points_a_list,
            self.n_points_b_list,
        )

    def dist_is_norm_of_log_test_data(self):
        return self._dist_is_norm_of_log_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_points_a_list,
            self.n_points_b_list,
        )

    def dist_point_to_itself_is_zero_test_data(self):
        return self._dist_point_to_itself_is_zero_test_data(
            self.metric_args_list, self.space_list, self.n_points_list
        )

    def inner_product_is_symmetric_test_data(self):
        return self._inner_product_is_symmetric_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_tangent_vecs_list,
        )

    def triangle_inequality_of_dist_test_data(self):
        return self._triangle_inequality_of_dist_test_data(
            self.metric_args_list, self.space_list, self.n_points_list
        )
Ejemplo n.º 11
0
class KendallShapeMetricTestData(_RiemannianMetricTestData):
    k_landmarks_list = random.sample(range(3, 6), 2)
    m_ambient_list = [random.sample(range(2, n), 1)[0] for n in k_landmarks_list]
    metric_args_list = list(zip(k_landmarks_list, m_ambient_list))

    shape_list = metric_args_list
    space_list = [PreShapeSpace(k, m) for k, m in metric_args_list]
    n_points_list = random.sample(range(1, 4), 2)
    n_samples_list = random.sample(range(1, 4), 2)
    n_points_a_list = random.sample(range(1, 4), 2)
    n_points_b_list = [1]
    n_tangent_vecs_list = random.sample(range(1, 4), 2)
    batch_size_list = random.sample(range(2, 4), 2)
    alpha_list = [1] * 2
    n_rungs_list = [1] * 2
    scheme_list = ["pole"] * 2

    def curvature_is_skew_operator_test_data(self):
        base_point = smoke_space.random_point(2)
        vec = gs.random.rand(4, 4, 3)
        smoke_data = [dict(k_landmarks=4, m_ambient=3, vec=vec, base_point=base_point)]
        return self.generate_tests(smoke_data)

    def curvature_bianchi_identity_test_data(self):
        smoke_data = [
            dict(
                k_landmarks=4,
                m_ambient=3,
                tangent_vec_a=tg_vec_0,
                tangent_vec_b=tg_vec_1,
                tangent_vec_cs=tg_vec_2,
                base_point=base_point,
            )
        ]
        return self.generate_tests(smoke_data)

    def kendall_sectional_curvature_test_data(self):
        k_landmarks = 4
        m_ambient = 3
        space = smoke_space
        n_samples = 4 * k_landmarks * m_ambient
        base_point = space.random_point(1)

        vec_a = gs.random.rand(n_samples, k_landmarks, m_ambient)
        tg_vec_a = space.to_tangent(space.center(vec_a), base_point)

        vec_b = gs.random.rand(n_samples, k_landmarks, m_ambient)
        tg_vec_b = space.to_tangent(space.center(vec_b), base_point)

        smoke_data = [
            dict(
                k_landmarks=4,
                m_ambient=3,
                tangent_vec_a=tg_vec_a,
                tangent_vec_b=tg_vec_b,
                base_point=base_point,
            )
        ]
        return self.generate_tests(smoke_data)

    def kendall_curvature_derivative_bianchi_identity_test_data(self):
        smoke_data = [
            dict(
                k_landmarks=4,
                m_ambient=3,
                hor_x=hor_x,
                hor_y=hor_y,
                hor_z=hor_z,
                hor_h=hor_h,
                base_point=base_point,
            )
        ]
        return self.generate_tests(smoke_data)

    def curvature_derivative_is_skew_operator_test_data(self):
        smoke_data = [
            dict(
                k_landmarks=4,
                m_ambient=3,
                hor_x=hor_x,
                hor_y=hor_y,
                hor_z=hor_z,
                base_point=base_point,
            )
        ]
        return self.generate_tests(smoke_data)

    def directional_curvature_derivative_test_data(self):
        smoke_data = [
            dict(
                k_landmarks=4,
                m_ambient=3,
                hor_x=hor_x,
                hor_y=hor_y,
                base_point=base_point,
            )
        ]
        return self.generate_tests(smoke_data)

    def directional_curvature_derivative_is_quadratic_test_data(self):
        coef_x = -2.5
        coef_y = 1.5
        smoke_data = [
            dict(
                k_landmarks=4,
                m_ambient=3,
                coef_x=coef_x,
                coef_y=coef_y,
                hor_x=hor_x,
                hor_y=hor_y,
                base_point=base_point,
            )
        ]
        return self.generate_tests(smoke_data)

    def parallel_transport_test_data(self):
        k_landmarks = 4
        m_ambient = 3
        n_samples = 10
        space = PreShapeSpace(4, 3)
        base_point = space.projection(gs.eye(4)[:, :3])
        vec_a = gs.random.rand(n_samples, k_landmarks, m_ambient)
        tangent_vec_a = space.to_tangent(space.center(vec_a), base_point)

        vec_b = gs.random.rand(n_samples, k_landmarks, m_ambient)
        tangent_vec_b = space.to_tangent(space.center(vec_b), base_point)
        smoke_data = [
            dict(
                k_landmarks=k_landmarks,
                m_ambient=m_ambient,
                tangent_vec_a=tangent_vec_a,
                tangent_vec_b=tangent_vec_b,
                base_point=base_point,
            )
        ]
        return self.generate_tests(smoke_data)

    def exp_shape_test_data(self):
        return self._exp_shape_test_data(
            self.metric_args_list, self.space_list, self.shape_list
        )

    def log_shape_test_data(self):
        return self._log_shape_test_data(self.metric_args_list, self.space_list)

    def squared_dist_is_symmetric_test_data(self):
        return self._squared_dist_is_symmetric_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_points_a_list,
            self.n_points_b_list,
            atol=gs.atol * 1000,
        )

    def exp_belongs_test_data(self):
        return self._exp_belongs_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_samples_list,
            belongs_atol=gs.atol * 1000,
        )

    def log_is_tangent_test_data(self):
        return self._log_is_tangent_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_samples_list,
            is_tangent_atol=gs.atol * 1000,
        )

    def geodesic_ivp_belongs_test_data(self):
        return self._geodesic_ivp_belongs_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_points_list,
            belongs_atol=gs.atol * 1000,
        )

    def geodesic_bvp_belongs_test_data(self):
        return self._geodesic_bvp_belongs_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_points_list,
            belongs_atol=gs.atol * 1000,
        )

    def exp_after_log_test_data(self):
        return self._exp_after_log_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_samples_list,
            rtol=gs.rtol * 100,
            atol=gs.atol * 10000,
        )

    def log_after_exp_test_data(self):
        return self._log_after_exp_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_samples_list,
            rtol=gs.rtol * 100,
            atol=gs.atol * 10000,
        )

    def exp_ladder_parallel_transport_test_data(self):
        return self._exp_ladder_parallel_transport_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_samples_list,
            self.n_rungs_list,
            self.alpha_list,
            self.scheme_list,
        )

    def exp_geodesic_ivp_test_data(self):
        return self._exp_geodesic_ivp_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_samples_list,
            self.n_points_list,
            rtol=gs.rtol * 10000,
            atol=gs.atol * 10000,
        )

    def parallel_transport_ivp_is_isometry_test_data(self):
        return self._parallel_transport_ivp_is_isometry_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_samples_list,
            is_tangent_atol=gs.atol * 1000,
            atol=gs.atol * 1000,
        )

    def parallel_transport_bvp_is_isometry_test_data(self):
        return self._parallel_transport_bvp_is_isometry_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_samples_list,
            is_tangent_atol=gs.atol * 1000,
            atol=gs.atol * 1000,
        )

    def dist_is_symmetric_test_data(self):
        return self._dist_is_symmetric_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_points_a_list,
            self.n_points_b_list,
        )

    def dist_is_positive_test_data(self):
        return self._dist_is_positive_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_points_a_list,
            self.n_points_b_list,
        )

    def squared_dist_is_positive_test_data(self):
        return self._squared_dist_is_positive_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_points_a_list,
            self.n_points_b_list,
        )

    def dist_is_norm_of_log_test_data(self):
        return self._dist_is_norm_of_log_test_data(
            self.metric_args_list,
            self.space_list,
            self.n_points_a_list,
            self.n_points_b_list,
        )

    def dist_point_to_itself_is_zero_test_data(self):
        return self._dist_point_to_itself_is_zero_test_data(
            self.metric_args_list, self.space_list, self.n_points_list
        )

    def inner_product_is_symmetric_test_data(self):
        return self._inner_product_is_symmetric_test_data(
            self.metric_args_list,
            self.space_list,
            self.shape_list,
            self.n_tangent_vecs_list,
        )

    def triangle_inequality_of_dist_test_data(self):
        return self._triangle_inequality_of_dist_test_data(
            self.metric_args_list, self.space_list, self.n_points_list
        )
Ejemplo n.º 12
0
import random

import geomstats.backend as gs
from geomstats.geometry.pre_shape import PreShapeSpace
from tests.data_generation import _LevelSetTestData, _RiemannianMetricTestData

smoke_space = PreShapeSpace(4, 3)
vector = gs.random.rand(11, 4, 3)
base_point = smoke_space.random_point()
tg_vec_0 = smoke_space.to_tangent(vector[0], base_point)
hor_x = smoke_space.horizontal_projection(tg_vec_0, base_point)
tg_vec_1 = smoke_space.to_tangent(vector[1], base_point)
hor_y = smoke_space.horizontal_projection(tg_vec_1, base_point)
tg_vec_2 = smoke_space.to_tangent(vector[2], base_point)
hor_z = smoke_space.horizontal_projection(tg_vec_2, base_point)
tg_vec_3 = smoke_space.to_tangent(vector[3], base_point)
hor_h = smoke_space.horizontal_projection(tg_vec_3, base_point)
tg_vec_4 = smoke_space.to_tangent(vector[4], base_point)
ver_v = smoke_space.vertical_projection(tg_vec_4, base_point)
tg_vec_5 = smoke_space.to_tangent(vector[5], base_point)
ver_w = smoke_space.vertical_projection(tg_vec_5, base_point)
tg_vec_6 = smoke_space.to_tangent(vector[6], base_point)
hor_dy = smoke_space.horizontal_projection(tg_vec_6, base_point)
tg_vec_7 = smoke_space.to_tangent(vector[7], base_point)
hor_dz = smoke_space.horizontal_projection(tg_vec_7, base_point)
tg_vec_8 = smoke_space.to_tangent(vector[8], base_point)
ver_dv = smoke_space.vertical_projection(tg_vec_8, base_point)
tg_vec_9 = smoke_space.to_tangent(vector[9], base_point)
ver_dw = smoke_space.vertical_projection(tg_vec_9, base_point)
tg_vec_10 = smoke_space.to_tangent(vector[10], base_point)
hor_dh = smoke_space.horizontal_projection(tg_vec_10, base_point)