class_docstr: Class for bi-invariant metrics on compact Lie groups.
  
  Compact Lie groups and direct products of compact Lie groups with vector
  spaces admit bi-invariant metrics [Gallier]_. Products Lie groups are not
  implemented. Other groups such as SE(3) admit bi-invariant pseudo-metrics.
  
  Parameters
  ----------
  space : LieGroup
      The group to equip with the bi-invariant metric
  
  References
  ----------
  .. [Gallier] Gallier, Jean, and Jocelyn Quaintance. Differential Geometry
      and Lie Groups: A Computational Perspective.
      Geonger International Publishing, 2020.
      https://doi.org/10.1007/978-3-030-46040-2.
class_docstr_tok: ["Class","for","bi-invariant","metrics","on","compact","Lie","groups",".","Compact","Lie","groups","and","direct","products","of","compact","Lie","groups","with","vector","spaces","admit","bi-invariant","metrics","[","Gallier","]","_",".","Products","Lie","groups","are","not","implemented",".","Other","groups","such","as","SE","(","3",")","admit","bi-invariant","pseudo-metrics",".","Parameters","--","--","--","--","--","space",":","LieGroup","The","group","to","equip","with","the","bi-invariant","metric","References","--","--","--","--","--","..","[","Gallier","]","Gallier",",","Jean",",","and","Jocelyn","Quaintance",".","Differential","Geometry","and","Lie","Groups",":","A","Computational","Perspective",".","Geonger","International","Publishing",",","2020.","https",":","\/\/doi.org\/10.1007\/978-3-030-46040-2","."]
docstr: Compute the parallel transport of a tangent vec along a geodesic.
  
  Closed-form solution for the parallel transport of a tangent vector a
  along the geodesic between the base point and an end point, or alternatively
  defined by :math:`t \mapsto exp_{(base\_point)}(t*direction)`.
  As a compact Lie group endowed with its canonical bi-invariant metric is a
  symmetric space, parallel transport is achieved by a geodesic symmetry, or
  equivalently, one step of the pole ladder scheme.
  
  Parameters
  ----------
  tangent_vec : array-like, shape=[..., n, n]
      Tangent vector at base point to be transported.
  base_point : array-like, shape=[..., n, n]
      Point on the manifold.
  direction : array-like, shape=[..., n, n]
      Tangent vector at base point, along which the parallel transport
      is computed.
      Optional, default: None.
  end_point : array-like, shape=[..., n, n]
      Point on the manifold. Point to transport to.
      Optional, default: None.
  
  Returns
  -------
  transported_tangent_vec: array-like, shape=[..., n, n]
      Transported tangent vector at
      `end_point=exp_(base_point)(tangent_vec_b)`.
code: def parallel_transport(
      self, tangent_vec, base_point, direction=None, end_point=None
  ):
      r"""Compute the parallel transport of a tangent vec along a geodesic.
  
      Closed-form solution for the parallel transport of a tangent vector a
      along the geodesic between the base point and an end point, or alternatively
      defined by :math:`t \mapsto exp_{(base\_point)}(t*direction)`.
      As a compact Lie group endowed with its canonical bi-invariant metric is a
      symmetric space, parallel transport is achieved by a geodesic symmetry, or
      equivalently, one step of the pole ladder scheme.
  
      Parameters
      ----------
      tangent_vec : array-like, shape=[..., n, n]
          Tangent vector at base point to be transported.
      base_point : array-like, shape=[..., n, n]
          Point on the manifold.
      direction : array-like, shape=[..., n, n]
          Tangent vector at base point, along which the parallel transport
          is computed.
          Optional, default: None.
      end_point : array-like, shape=[..., n, n]
          Point on the manifold. Point to transport to.
          Optional, default: None.
  
      Returns
      -------
      transported_tangent_vec: array-like, shape=[..., n, n]
          Transported tangent vector at
          `end_point=exp_(base_point)(tangent_vec_b)`.
      """
      if direction is None:
          if end_point is not None:
              direction = self.log(end_point, base_point)
          else:
              raise ValueError(
                  "Either an end_point or a tangent_vec_b must be given to define the"
                  " geodesic along which to transport."
              )
      midpoint = self.exp(1.0 / 2.0 * direction, base_point)
      transposed = Matrices.transpose(tangent_vec)
      transported_vec = Matrices.mul(midpoint, transposed, midpoint)
      return (-1.0) * transported_vec
  
imports: import geomstats.backend
  from geomstats.geometry.matrices import Matrices
  from geomstats.geometry.riemannian_metric import RiemannianMetric
  from geomstats.integrator import integrate
  from geomstats.numerics.geodesic import ExpODESolver, LogShootingSolver
  from geomstats.numerics.ivp import GSIVPIntegrator
  from geomstats.vectorization import repeat_out
label_desc: Use image node_id 7 for calling the BiInvariantMetric obj's underlying member method code with example usage: obj.parallel_transport(tangent_vec, base_point, direction, end_point) and returns: unknown