def powerm(cls, mat, power): """ Compute the matrix power. Parameters ---------- mat : array_like, shape=[..., n, n] Symmetric matrix with non-negative eigenvalues. power : float, list Power at which mat will be raised. If a list of powers is passed, a list of results will be returned. Returns ------- powerm : array_like or list of arrays, shape=[..., n, n] Matrix power of mat. """ if isinstance(power, list): power_ = [lambda ev, p=p: gs.power(ev, p) for p in power] else: def power_(ev): return gs.power(ev, power) return cls.apply_func_to_eigvals(mat, power_, check_positive=True)
def diag_inner_product(tangent_vec_a, tangent_vec_b, base_point): """Compute the inner product using only diagonal elements. Parameters ---------- tangent_vec_a : array-like, shape=[..., n, n] Tangent vector at base point. tangent_vec_b : array-like, shape=[..., n, n] Tangent vector at base point. base_point : array-like, shape=[..., n, n] Base point. Returns ------- ip_diagonal : array-like, shape=[...] Inner-product. """ inv_sqrt_diagonal = gs.power(Matrices.diagonal(base_point), -2) tangent_vec_a_diagonal = Matrices.diagonal(tangent_vec_a) tangent_vec_b_diagonal = Matrices.diagonal(tangent_vec_b) prod = tangent_vec_a_diagonal * tangent_vec_b_diagonal * inv_sqrt_diagonal ip_diagonal = gs.sum(prod, axis=-1) return ip_diagonal
def _power(eigvals): return gs.power(eigvals, power)
The n-dimensional hyperbolic space with Poincare ball model. Lead author: Hadi Zaatiti. """ import geomstats.algebra_utils as utils import geomstats.backend as gs from geomstats.geometry._hyperbolic import _Hyperbolic from geomstats.geometry.base import OpenSet from geomstats.geometry.euclidean import Euclidean from geomstats.geometry.riemannian_metric import RiemannianMetric EPSILON = 1e-6 NORMALIZATION_FACTOR_CST = gs.sqrt(gs.pi / 2) PI_2_3 = gs.power(gs.array([2.0 * gs.pi]), gs.array([2 / 3])) SQRT_2 = gs.sqrt(2.0) class PoincareBall(_Hyperbolic, OpenSet): """Class for the n-dimensional Poincare ball. Class for the n-dimensional Poincaré ball model. For other representations of hyperbolic spaces see the `Hyperbolic` class. Parameters ---------- dim : int Dimension of the hyperbolic space. scale : int Scale of the hyperbolic space, defined as the set of points
def test_inner_product_norm(self, m, n, mat): self.assertAllClose( self.metric(m, n).inner_product(mat, mat), gs.power(self.metric(m, n).norm(mat), 2), )
def power_(ev): return gs.power(ev, power)