class_docstr: Quotient metric on the shape space.
  
  The Kendall shape space is obtained by taking the quotient of the
  pre-shape space by the space of rotations of the ambient space.
class_docstr_tok: ["Quotient","metric","on","the","shape","space",".","The","Kendall","shape","space","is","obtained","by","taking","the","quotient","of","the","pre-shape","space","by","the","space","of","rotations","of","the","ambient","space","."]
docstr: Compute the parallel transport of a tangent vec along a geodesic.
  
  Approximation of the solution of the parallel transport of a tangent
  vector a along the geodesic between two points `base_point` and
  `end_point` or alternatively defined by
  :math:`t\mapsto exp_{(base\_point)}(t*direction)`
  
  Parameters
  ----------
  tangent_vec : array-like, shape=[..., k_landmarks, m_ambient]
      Tangent vector at `base_point` to transport.
  base_point : array-like, shape=[..., k_landmarks, m_ambient]
      Initial point of the geodesic to transport along.
  direction : array-like, shape=[..., k_landmarks, m_ambient]
      Tangent vector ar `base_point`, initial velocity of the geodesic to
      transport  along.
      Optional, default: None.
  end_point : array-like, shape=[..., k_landmarks, m_ambient]
      Point to transport to. Unused if `tangent_vec_b` is given.
      Optional, default: None.
  n_steps : int
      Number of steps to use to approximate the solution of the
      ordinary differential equation.
      Optional, default: 100.
  step : str, {'euler', 'rk2', 'rk4'}
      Scheme to use in the integration scheme.
      Optional, default: 'rk4'.
  
  Returns
  -------
  transported :  array-like, shape=[..., k_landmarks, m_ambient]
      Transported tangent vector at `exp_(base_point)(tangent_vec_b)`.
  
  References
  ----------
  .. [GMTP21] Guigui, Nicolas, Elodie Maignant, Alain Trouvé, and Xavier
      Pennec. “Parallel Transport on Kendall Shape Spaces.”
      5th conference on Geometric Science of Information,
      Paris 2021. Lecture Notes in Computer Science.
      Springer, 2021. https://hal.inria.fr/hal-03160677.
  
  See Also
  --------
  Integration module: geomstats.integrator
docstr_tok: ["Compute","the","parallel","transport","of","a","tangent","vec","along","a","geodesic",".","Approximation","of","the","solution","of","the","parallel","transport","of","a","tangent","vector","a","along","the","geodesic","between","two","points","`","base_point","`","and","`","end_point","`","or","alternatively","defined","by",":","math",":","`","t\\mapsto","exp_","{","(","base\\_point",")","}","(","t","*","direction",")","`","Parameters","--","--","--","--","--","tangent_vec",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Tangent","vector","at","`","base_point","`","to","transport",".","base_point",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Initial","point","of","the","geodesic","to","transport","along",".","direction",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Tangent","vector","ar","`","base_point","`",",","initial","velocity","of","the","geodesic","to","transport","along",".","Optional",",","default",":","None",".","end_point",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Point","to","transport","to",".","Unused","if","`","tangent_vec_b","`","is","given",".","Optional",",","default",":","None",".","n_steps",":","int","Number","of","steps","to","use","to","approximate","the","solution","of","the","ordinary","differential","equation",".","Optional",",","default",":","100.","step",":","str",",","{","'euler","'",",","'rk2","'",",","'rk4","'","}","Scheme","to","use","in","the","integration","scheme",".","Optional",",","default",":","'rk4","'",".","Returns","--","--","--","-","transported",":","array-like",",","shape=","[","...",",","k_landmarks",",","m_ambient","]","Transported","tangent","vector","at","`","exp_","(","base_point",")","(","tangent_vec_b",")","`",".","References","--","--","--","--","--","..","[","GMTP21","]","Guigui",",","Nicolas",",","Elodie","Maignant",",","Alain","Trouv\u00e9",",","and","Xavier","Pennec",".","\u201c","Parallel","Transport","on","Kendall","Shape","Spaces.","\u201d","5th","conference","on","Geometric","Science","of","Information",",","Paris","2021",".","Lecture","Notes","in","Computer","Science",".","Springer",",","2021.","https",":","\/\/hal.inria.fr\/hal-03160677",".","See","Also","--","--","--","--","Integration","module",":","geomstats.integrator"]
code: def parallel_transport(
      self,
      tangent_vec,
      base_point,
      direction=None,
      end_point=None,
      n_steps=100,
      step="rk4",
  ):
      r"""Compute the parallel transport of a tangent vec along a geodesic.
  
      Approximation of the solution of the parallel transport of a tangent
      vector a along the geodesic between two points `base_point` and
      `end_point` or alternatively defined by
      :math:`t\mapsto exp_{(base\_point)}(t*direction)`
  
      Parameters
      ----------
      tangent_vec : array-like, shape=[..., k_landmarks, m_ambient]
          Tangent vector at `base_point` to transport.
      base_point : array-like, shape=[..., k_landmarks, m_ambient]
          Initial point of the geodesic to transport along.
      direction : array-like, shape=[..., k_landmarks, m_ambient]
          Tangent vector ar `base_point`, initial velocity of the geodesic to
          transport  along.
          Optional, default: None.
      end_point : array-like, shape=[..., k_landmarks, m_ambient]
          Point to transport to. Unused if `tangent_vec_b` is given.
          Optional, default: None.
      n_steps : int
          Number of steps to use to approximate the solution of the
          ordinary differential equation.
          Optional, default: 100.
      step : str, {'euler', 'rk2', 'rk4'}
          Scheme to use in the integration scheme.
          Optional, default: 'rk4'.
  
      Returns
      -------
      transported :  array-like, shape=[..., k_landmarks, m_ambient]
          Transported tangent vector at `exp_(base_point)(tangent_vec_b)`.
  
      References
      ----------
      .. [GMTP21] Guigui, Nicolas, Elodie Maignant, Alain Trouvé, and Xavier
          Pennec. “Parallel Transport on Kendall Shape Spaces.”
          5th conference on Geometric Science of Information,
          Paris 2021. Lecture Notes in Computer Science.
          Springer, 2021. https://hal.inria.fr/hal-03160677.
  
      See Also
      --------
      Integration module: geomstats.integrator
      """
      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."
              )
      horizontal_a = self.fiber_bundle.horizontal_projection(
          tangent_vec, base_point
      )
      horizontal_b = self.fiber_bundle.horizontal_projection(
          direction, base_point
      )
  
      def force(state, time):
          gamma_t = self.fiber_bundle.total_space.metric.exp(
              time * horizontal_b, base_point
          )
          speed = (
              self.fiber_bundle.total_space.metric.parallel_transport(
                  horizontal_b, base_point, time * horizontal_b
              )
          )
          coef = self.inner_product(speed, state, gamma_t)
          normal = gs.einsum("...,...ij->...ij", coef, gamma_t)
  
          align = gs.matmul(Matrices.transpose(speed), state)
          right = align - Matrices.transpose(align)
          left = gs.matmul(Matrices.transpose(gamma_t), gamma_t)
          skew_ = gs.linalg.solve_sylvester(left, left, right)
          vertical_ = -gs.matmul(gamma_t, skew_)
          return vertical_ - normal
  
      flow = integrate(force, horizontal_a, n_steps=n_steps, step=step)
      return flow[-1]
  
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 2 for calling the KendallShapeMetric obj's underlying member method code with example usage: obj.parallel_transport(tangent_vec, base_point, direction, end_point, n_steps, step) and returns: flow, unknown