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))
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)
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
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
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
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
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))
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))
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))