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 inner-product of two tangent vectors at a base point.
  
  Parameters
  ----------
  tangent_vec_a : array-like, shape=[..., {dim, [n, n]}]
      Tangent vector to the quotient manifold.
  tangent_vec_b : array-like, shape=[..., {dim, [n, n]}]
      Tangent vector to the quotient manifold.
  base_point : array-like, shape=[..., {dim, [n, n]}]
      Point on the quotient manifold.
      Optional, default: None.
  fiber_point : array-like, shape=[..., {dim, [n, n]}]
      Point on the total space, lift of `base_point`, i.e. such that
      `submersion` applied to `point` results in `base_point`.
      Optional, default: None. In this case, it is computed using the
      method lift.
  
  Returns
  -------
  inner_product : float, shape=[...]
      Inner products
docstr_tok: ["Compute","the","inner-product","of","two","tangent","vectors","at","a","base","point",".","Parameters","--","--","--","--","--","tangent_vec_a",":","array-like",",","shape=","[","...",",","{","dim",",","[","n",",","n","]","}","]","Tangent","vector","to","the","quotient","manifold",".","tangent_vec_b",":","array-like",",","shape=","[","...",",","{","dim",",","[","n",",","n","]","}","]","Tangent","vector","to","the","quotient","manifold",".","base_point",":","array-like",",","shape=","[","...",",","{","dim",",","[","n",",","n","]","}","]","Point","on","the","quotient","manifold",".","Optional",",","default",":","None",".","fiber_point",":","array-like",",","shape=","[","...",",","{","dim",",","[","n",",","n","]","}","]","Point","on","the","total","space",",","lift","of","`","base_point","`",",","i.e",".","such","that","`","submersion","`","applied","to","`","point","`","results","in","`","base_point","`",".","Optional",",","default",":","None",".","In","this","case",",","it","is","computed","using","the","method","lift",".","Returns","--","--","--","-","inner_product",":","float",",","shape=","[","...","]","Inner","products"]
code: def inner_product(
      self,
      tangent_vec_a,
      tangent_vec_b,
      base_point=None,
      fiber_point=None,
  ):
      """Compute the inner-product of two tangent vectors at a base point.
  
      Parameters
      ----------
      tangent_vec_a : array-like, shape=[..., {dim, [n, n]}]
          Tangent vector to the quotient manifold.
      tangent_vec_b : array-like, shape=[..., {dim, [n, n]}]
          Tangent vector to the quotient manifold.
      base_point : array-like, shape=[..., {dim, [n, n]}]
          Point on the quotient manifold.
          Optional, default: None.
      fiber_point : array-like, shape=[..., {dim, [n, n]}]
          Point on the total space, lift of `base_point`, i.e. such that
          `submersion` applied to `point` results in `base_point`.
          Optional, default: None. In this case, it is computed using the
          method lift.
  
      Returns
      -------
      inner_product : float, shape=[...]
          Inner products
      """
      if base_point is None and fiber_point is None:
          raise ValueError(
              "Either a point (of the total space) or a "
              "base point (of the base manifold) must be "
              "given."
          )
      if fiber_point is None:
          fiber_point = self.fiber_bundle.lift(base_point)
  
      horizontal_a = self.fiber_bundle.horizontal_lift(
          tangent_vec_a, base_point=base_point, fiber_point=fiber_point
      )
      horizontal_b = self.fiber_bundle.horizontal_lift(
          tangent_vec_b, base_point=base_point, fiber_point=fiber_point
      )
      return self.fiber_bundle.total_space.metric.inner_product(
          horizontal_a, horizontal_b, fiber_point
      )
  
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 2 for calling the QuotientMetric obj's underlying member method code with example usage: obj.inner_product(tangent_vec_a, tangent_vec_b, base_point, fiber_point) and returns: self