class_docstr: Quotient metric.
  
  Given a (principal) fiber bundle, or more generally a manifold with a
  Lie group acting on it by the right, the quotient space is the space of
  orbits under this action. The quotient metric is defined such that the
  canonical projection is a Riemannian submersion, i.e. it is isometric to
  the restriction of the metric of the total space to horizontal subspaces.
  
  Parameters
  ----------
  space : Manifold
      Base.
  fiber_bundle : FiberBundle
      Bundle structure to define the quotient.
class_docstr_tok: ["Quotient","metric",".","Given","a","(","principal",")","fiber","bundle",",","or","more","generally","a","manifold","with","a","Lie","group","acting","on","it","by","the","right",",","the","quotient","space","is","the","space","of","orbits","under","this","action",".","The","quotient","metric","is","defined","such","that","the","canonical","projection","is","a","Riemannian","submersion",",","i.e",".","it","is","isometric","to","the","restriction","of","the","metric","of","the","total","space","to","horizontal","subspaces",".","Parameters","--","--","--","--","--","space",":","Manifold","Base",".","fiber_bundle",":","FiberBundle","Bundle","structure","to","define","the","quotient","."]
docstr: Compute the curvature.
  
  For three vectors fields :math:`X|_P = tangent\_vec\_a,
  Y|_P = tangent\_vec\_b, Z|_P = tangent\_vec\_c` with tangent vector
  specified in argument at the base point :math:`P`,
  the curvature is defined by :math:`R(X,Y)Z = \nabla_{[X,Y]}Z
  - \nabla_X\nabla_Y Z + \nabla_Y\nabla_X Z`.
  
  In the case of quotient metrics, the fundamental equations of a
  Riemannian submersion allow to compute the curvature of the base
  manifold from the one of the total space and a correction term that
  uses the integrability tensor A [ONeill]_.
  
  In more details, let :math:`X, Y, Z` be the horizontal lift of
  vector fields extending the tangent vectors given in argument in a
  neighborhood of the base-point P in the base-space. Then the
  curvature of the base-space at the base-points is
  :math:`R(X,Y) Z = hor( R^T(X,Y) Z) - 2 A_Z A_X Y + A_X A_Y Z - A_Y
  A_X Z`, where :math:`R^T(X,Y)Z` is the curvature tensor of the
  total space.
  
  Parameters
  ----------
  tangent_vec_a : array-like, shape=[..., {dim, [n, n]}]
      Tangent vector at `base_point`.
  tangent_vec_b : array-like, shape=[..., {dim, [n, n]}]
      Tangent vector at `base_point`.
  tangent_vec_c : array-like, shape=[..., {dim, [n, n]}]
      Tangent vector at `base_point`.
  base_point :  array-like, shape=[..., {dim, [n, n]}]
      Point on the base manifold.
  
  Returns
  -------
  curvature : array-like, shape=[..., {dim, [n, n]}]
      Tangent vector at `base_point`.
  
  References
  ----------
  .. [ONeill]  O’Neill, Barrett. The Fundamental Equations of a
      Submersion, Michigan Mathematical Journal 13, no. 4
      (December 1966): 459–69. https://doi.org/10.1307/mmj/1028999604.
docstr_tok: ["Compute","the","curvature",".","For","three","vectors","fields",":","math",":","`","X|_P","=","tangent\\_vec\\_a",",","Y|_P","=","tangent\\_vec\\_b",",","Z|_P","=","tangent\\_vec\\_c","`","with","tangent","vector","specified","in","argument","at","the","base","point",":","math",":","`","P","`",",","the","curvature","is","defined","by",":","math",":","`","R","(","X",",","Y",")","Z","=","\\nabla_","{","[","X",",","Y","]","}","Z","-","\\nabla_X\\nabla_Y","Z","+","\\nabla_Y\\nabla_X","Z","`",".","In","the","case","of","quotient","metrics",",","the","fundamental","equations","of","a","Riemannian","submersion","allow","to","compute","the","curvature","of","the","base","manifold","from","the","one","of","the","total","space","and","a","correction","term","that","uses","the","integrability","tensor","A","[","ONeill","]","_",".","In","more","details",",","let",":","math",":","`","X",",","Y",",","Z","`","be","the","horizontal","lift","of","vector","fields","extending","the","tangent","vectors","given","in","argument","in","a","neighborhood","of","the","base-point","P","in","the","base-space",".","Then","the","curvature","of","the","base-space","at","the","base-points","is",":","math",":","`","R","(","X",",","Y",")","Z","=","hor","(","R^T","(","X",",","Y",")","Z",")","-","2","A_Z","A_X","Y","+","A_X","A_Y","Z","-","A_Y","A_X","Z","`",",","where",":","math",":","`","R^T","(","X",",","Y",")","Z","`","is","the","curvature","tensor","of","the","total","space",".","Parameters","--","--","--","--","--","tangent_vec_a",":","array-like",",","shape=","[","...",",","{","dim",",","[","n",",","n","]","}","]","Tangent","vector","at","`","base_point","`",".","tangent_vec_b",":","array-like",",","shape=","[","...",",","{","dim",",","[","n",",","n","]","}","]","Tangent","vector","at","`","base_point","`",".","tangent_vec_c",":","array-like",",","shape=","[","...",",","{","dim",",","[","n",",","n","]","}","]","Tangent","vector","at","`","base_point","`",".","base_point",":","array-like",",","shape=","[","...",",","{","dim",",","[","n",",","n","]","}","]","Point","on","the","base","manifold",".","Returns","--","--","--","-","curvature",":","array-like",",","shape=","[","...",",","{","dim",",","[","n",",","n","]","}","]","Tangent","vector","at","`","base_point","`",".","References","--","--","--","--","--","..","[","ONeill","]","O","\u2019","Neill",",","Barrett",".","The","Fundamental","Equations","of","a","Submersion",",","Michigan","Mathematical","Journal","13",",","no",".","4","(","December","1966",")",":","459\u201369",".","https",":","\/\/doi.org\/10.1307\/mmj\/1028999604","."]
code: def curvature(
      self, tangent_vec_a, tangent_vec_b, tangent_vec_c, base_point
  ):
      r"""Compute the curvature.
  
      For three vectors fields :math:`X|_P = tangent\_vec\_a,
      Y|_P = tangent\_vec\_b, Z|_P = tangent\_vec\_c` with tangent vector
      specified in argument at the base point :math:`P`,
      the curvature is defined by :math:`R(X,Y)Z = \nabla_{[X,Y]}Z
      - \nabla_X\nabla_Y Z + \nabla_Y\nabla_X Z`.
  
      In the case of quotient metrics, the fundamental equations of a
      Riemannian submersion allow to compute the curvature of the base
      manifold from the one of the total space and a correction term that
      uses the integrability tensor A [ONeill]_.
  
      In more details, let :math:`X, Y, Z` be the horizontal lift of
      vector fields extending the tangent vectors given in argument in a
      neighborhood of the base-point P in the base-space. Then the
      curvature of the base-space at the base-points is
      :math:`R(X,Y) Z = hor( R^T(X,Y) Z) - 2 A_Z A_X Y + A_X A_Y Z - A_Y
      A_X Z`, where :math:`R^T(X,Y)Z` is the curvature tensor of the
      total space.
  
      Parameters
      ----------
      tangent_vec_a : array-like, shape=[..., {dim, [n, n]}]
          Tangent vector at `base_point`.
      tangent_vec_b : array-like, shape=[..., {dim, [n, n]}]
          Tangent vector at `base_point`.
      tangent_vec_c : array-like, shape=[..., {dim, [n, n]}]
          Tangent vector at `base_point`.
      base_point :  array-like, shape=[..., {dim, [n, n]}]
          Point on the base manifold.
  
      Returns
      -------
      curvature : array-like, shape=[..., {dim, [n, n]}]
          Tangent vector at `base_point`.
  
      References
      ----------
      .. [ONeill]  O’Neill, Barrett. The Fundamental Equations of a
          Submersion, Michigan Mathematical Journal 13, no. 4
          (December 1966): 459–69. https://doi.org/10.1307/mmj/1028999604.
      """
      bundle = self.fiber_bundle
      fiber_point = bundle.lift(base_point)
      horizontal_a = bundle.horizontal_lift(tangent_vec_a, base_point)
      horizontal_b = bundle.horizontal_lift(tangent_vec_b, base_point)
      horizontal_c = bundle.horizontal_lift(tangent_vec_c, base_point)
  
      top_curvature = bundle.total_space.metric.curvature(
          horizontal_a, horizontal_b, horizontal_c, fiber_point
      )
      projected_top_curvature = bundle.tangent_riemannian_submersion(
          top_curvature, fiber_point
      )
  
      f_ab = bundle.integrability_tensor(
          horizontal_a, horizontal_b, fiber_point
      )
      f_c_f_ab = bundle.integrability_tensor(
          horizontal_c, f_ab, fiber_point
      )
      f_c_f_ab = bundle.tangent_riemannian_submersion(
          f_c_f_ab, fiber_point
      )
  
      f_ac = bundle.integrability_tensor(
          horizontal_a, horizontal_c, fiber_point
      )
      f_b_f_ac = bundle.integrability_tensor(
          horizontal_b, f_ac, fiber_point
      )
      f_b_f_ac = bundle.tangent_riemannian_submersion(
          f_b_f_ac, fiber_point
      )
  
      f_bc = bundle.integrability_tensor(
          horizontal_b, horizontal_c, fiber_point
      )
      f_a_f_bc = bundle.integrability_tensor(
          horizontal_a, f_bc, fiber_point
      )
      f_a_f_bc = bundle.tangent_riemannian_submersion(
          f_a_f_bc, fiber_point
      )
  
      return (
          projected_top_curvature - 2 * f_c_f_ab + f_a_f_bc - f_b_f_ac
      )
  
file_path: geomstats/geomstats/geometry/quotient_metric.py
imports: import geomstats.backend
  from geomstats.geometry.riemannian_metric import RiemannianMetric
label_desc: Use image node_id 7 for calling the QuotientMetric obj's underlying member method code with example usage: obj.curvature(tangent_vec_a, tangent_vec_b, tangent_vec_c, base_point) and returns: unknown