class_docstr: Procrustes metric on the pre-shape space.
class_docstr_tok: ["Procrustes","metric","on","the","pre-shape","space","."]
docstr: Compute the Riemannian logarithm of a point.
  
  Parameters
  ----------
  point : array-like, shape=[..., k_landmarks, m_ambient]
      Point on the pre-shape space.
  base_point : array-like, shape=[..., k_landmarks, m_ambient]
      Point on the pre-shape space.
  
  Returns
  -------
  log : array-like, shape=[..., k_landmarks, m_ambient]
      Tangent vector at the base point equal to the Riemannian logarithm
      of point at the base point.
docstr_tok: ["Compute","the","Riemannian","logarithm","of","a","point",".","Parameters","--","--","--","--","--","point",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Point","on","the","pre-shape","space",".","base_point",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Point","on","the","pre-shape","space",".","Returns","--","--","--","-","log",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Tangent","vector","at","the","base","point","equal","to","the","Riemannian","logarithm","of","point","at","the","base","point","."]
code: def log(self, point, base_point, **kwargs):
      """Compute the Riemannian logarithm of a point.
  
      Parameters
      ----------
      point : array-like, shape=[..., k_landmarks, m_ambient]
          Point on the pre-shape space.
      base_point : array-like, shape=[..., k_landmarks, m_ambient]
          Point on the pre-shape space.
  
      Returns
      -------
      log : array-like, shape=[..., k_landmarks, m_ambient]
          Tangent vector at the base point equal to the Riemannian logarithm
          of point at the base point.
      """
      batch_shape = get_batch_shape(
          self._space.point_ndim, point, base_point
      )
  
      flat_bp = self._flatten_point(base_point)
      flat_pt = self._flatten_point(point)
  
      flat_log = self._space._sphere.metric.log(flat_pt, flat_bp)
  
      return gs.reshape(flat_log, batch_shape + self._space.shape)
  
imports: import geomstats.backend
  from geomstats.geometry.base import LevelSet
  from geomstats.geometry.fiber_bundle import FiberBundle
  from geomstats.geometry.hypersphere import Hypersphere
  from geomstats.geometry.matrices import Matrices
  from geomstats.geometry.quotient_metric import QuotientMetric
  from geomstats.geometry.riemannian_metric import RiemannianMetric
  from geomstats.integrator import integrate
  from geomstats.vectorization import get_batch_shape, repeat_out
label_desc: Use image node_id 4 for calling the PreShapeMetric obj's underlying member method code with example usage: obj.log(point, base_point) and returns: gs