class_docstr: Procrustes metric on the pre-shape space.
class_docstr_tok: ["Procrustes","metric","on","the","pre-shape","space","."]
docstr: Compute the curvature.
  
  For three tangent vectors at a base point :math:`x,y,z`,
  the curvature is defined by
  :math:`R(X, Y)Z = \nabla_{[X,Y]}Z
  - \nabla_X\nabla_Y Z + - \nabla_Y\nabla_X Z`, where :math:`\nabla`
  is the Levi-Civita connection. In the case of the hypersphere,
  we have the closed formula
  :math:`R(X,Y)Z = \langle X, Z \rangle Y - \langle Y,Z \rangle X`.
  
  Parameters
  ----------
  tangent_vec_a : array-like, shape=[..., k_landmarks, m_ambient]
      Tangent vector at `base_point`.
  tangent_vec_b : array-like, shape=[..., k_landmarks, m_ambient]
      Tangent vector at `base_point`.
  tangent_vec_c : array-like, shape=[..., k_landmarks, m_ambient]
      Tangent vector at `base_point`.
  base_point :  array-like, shape=[..., k_landmarks, m_ambient]
      Point on the group. Optional, default is the identity.
  
  Returns
  -------
  curvature : array-like, shape=[..., k_landmarks, m_ambient]
      Tangent vector at `base_point`.
docstr_tok: ["Compute","the","curvature",".","For","three","tangent","vectors","at","a","base","point",":","math",":","`","x",",","y",",","z","`",",","the","curvature","is","defined","by",":","math",":","`","R","(","X",",","Y",")","Z","=","\\nabla_","{","[","X",",","Y","]","}","Z","-","\\nabla_X\\nabla_Y","Z","+","-","\\nabla_Y\\nabla_X","Z","`",",","where",":","math",":","`","\\nabla","`","is","the","Levi-Civita","connection",".","In","the","case","of","the","hypersphere",",","we","have","the","closed","formula",":","math",":","`","R","(","X",",","Y",")","Z","=","\\langle","X",",","Z","\\rangle","Y","-","\\langle","Y",",","Z","\\rangle","X","`",".","Parameters","--","--","--","--","--","tangent_vec_a",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Tangent","vector","at","`","base_point","`",".","tangent_vec_b",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Tangent","vector","at","`","base_point","`",".","tangent_vec_c",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Tangent","vector","at","`","base_point","`",".","base_point",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Point","on","the","group",".","Optional",",","default","is","the","identity",".","Returns","--","--","--","-","curvature",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Tangent","vector","at","`","base_point","`","."]
code: def curvature(
      self, tangent_vec_a, tangent_vec_b, tangent_vec_c, base_point
  ):
      r"""Compute the curvature.
  
      For three tangent vectors at a base point :math:`x,y,z`,
      the curvature is defined by
      :math:`R(X, Y)Z = \nabla_{[X,Y]}Z
      - \nabla_X\nabla_Y Z + - \nabla_Y\nabla_X Z`, where :math:`\nabla`
      is the Levi-Civita connection. In the case of the hypersphere,
      we have the closed formula
      :math:`R(X,Y)Z = \langle X, Z \rangle Y - \langle Y,Z \rangle X`.
  
      Parameters
      ----------
      tangent_vec_a : array-like, shape=[..., k_landmarks, m_ambient]
          Tangent vector at `base_point`.
      tangent_vec_b : array-like, shape=[..., k_landmarks, m_ambient]
          Tangent vector at `base_point`.
      tangent_vec_c : array-like, shape=[..., k_landmarks, m_ambient]
          Tangent vector at `base_point`.
      base_point :  array-like, shape=[..., k_landmarks, m_ambient]
          Point on the group. Optional, default is the identity.
  
      Returns
      -------
      curvature : array-like, shape=[..., k_landmarks, m_ambient]
          Tangent vector at `base_point`.
      """
      batch_shape = get_batch_shape(
          self._space.point_ndim,
          base_point,
          tangent_vec_a,
          tangent_vec_b,
          tangent_vec_c,
      )
      flat_a = self._flatten_point(tangent_vec_a)
      flat_b = self._flatten_point(tangent_vec_b)
      flat_c = self._flatten_point(tangent_vec_c)
      flat_bp = self._flatten_point(base_point)
  
      curvature = self._space._sphere.metric.curvature(
          flat_a, flat_b, flat_c, flat_bp
      )
      return gs.reshape(curvature, 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 5 for calling the PreShapeMetric obj's underlying member method code with example usage: obj.curvature(tangent_vec_a, tangent_vec_b, tangent_vec_c, base_point) and returns: gs