예제 #1
0
 def test_inner_product(self, n, tangent_vec_a, tangent_vec_b, base_point,
                        expected):
     metric = SPDMetricLogEuclidean(n)
     result = metric.inner_product(gs.array(tangent_vec_a),
                                   gs.array(tangent_vec_b),
                                   gs.array(base_point))
     self.assertAllClose(result, gs.array(expected))
예제 #2
0
 def setup_method(self):
     """Set up  the test"""
     self.n = 3
     self.spd_cov_n = (self.n * (self.n + 1)) // 2
     self.samples = 5
     self.spd = SPDMatrices(self.n)
     self.log_euclidean = SPDMetricLogEuclidean(self.n)
     self.affine_invariant = SPDMetricAffine(self.n)
     self.euclidean = Euclidean(self.n)
예제 #3
0
    def setUp(self):
        warnings.simplefilter('ignore', category=ImportWarning)

        gs.random.seed(1234)

        self.n = 3
        self.space = SPDMatrices(n=self.n)
        self.metric_affine = SPDMetricAffine(n=self.n)
        self.metric_procrustes = SPDMetricProcrustes(n=self.n)
        self.metric_euclidean = SPDMetricEuclidean(n=self.n)
        self.metric_logeuclidean = SPDMetricLogEuclidean(n=self.n)
        self.n_samples = 4
예제 #4
0
    def setUp(self):
        """Set up the test."""
        warnings.simplefilter('ignore', category=ImportWarning)

        gs.random.seed(1234)

        self.n = 3
        self.space = SPDMatrices(n=self.n)
        self.metric_affine = SPDMetricAffine(n=self.n)
        self.metric_bureswasserstein = SPDMetricBuresWasserstein(n=self.n)
        self.metric_euclidean = SPDMetricEuclidean(n=self.n)
        self.metric_logeuclidean = SPDMetricLogEuclidean(n=self.n)
        self.n_samples = 4
예제 #5
0
    def setUp_alt(self, n=3, n_samples=4):
        """Set up the test, flexible parameters."""
        warnings.simplefilter('ignore', category=ImportWarning)

        gs.random.seed(1234)

        self.n = n
        self.space = SPDMatrices(n=self.n)
        self.metric_affine = SPDMetricAffine(n=self.n)
        self.metric_procrustes = SPDMetricProcrustes(n=self.n)
        self.metric_euclidean = SPDMetricEuclidean(n=self.n)
        self.metric_logeuclidean = SPDMetricLogEuclidean(n=self.n)
        self.n_samples = n_samples
예제 #6
0
    def __init__(self, manifold, mean, cov):
        n = mean.shape[-1]
        metric = manifold.metric
        if metric is None:
            manifold.metric = SPDMetricLogEuclidean(n)
        else:
            if not isinstance(metric,
                              SPDMetricLogEuclidean) and not isinstance(
                                  metric, SPDMetricAffine):
                raise ValueError("Invalid Metric, "
                                 "Should be of type SPDMetricLogEuclidean"
                                 "or SPDMetricAffine")

        self.manifold = manifold
        self.mean = mean
        self.cov = cov
예제 #7
0
 def test_log(self, n, point, base_point, expected):
     metric = SPDMetricLogEuclidean(n)
     result = metric.log(gs.array(point), gs.array(base_point))
     self.assertAllClose(result, gs.array(expected))
예제 #8
0
 def test_exp(self, n, tangent_vec, base_point, expected):
     metric = SPDMetricLogEuclidean(n)
     result = metric.exp(gs.array(tangent_vec), gs.array(base_point))
     self.assertAllClose(result, gs.array(expected))
예제 #9
0
 def test_dist(self, n, point_a, point_b, expected):
     metric = SPDMetricLogEuclidean(n)
     result = metric.dist(gs.array(point_a), gs.array(point_b))
     self.assertAllClose(result, gs.array(expected))