class_docstr: Class for affine connections.
  
  Parameters
  ----------
  space : Manifold object
      M in the tuple (M, g).
class_docstr_tok: ["Class","for","affine","connections",".","Parameters","--","--","--","--","--","space",":","Manifold","object","M","in","the","tuple","(","M",",","g",")","."]
docstr: Compute one Pole Ladder step.
  
  One step of pole ladder scheme [LP2013a]_ using the geodesic to
  transport along as main_geodesic of the parallelogram.
  
  Parameters
  ----------
  base_point : array-like, shape=[..., dim]
      Point on the manifold, from which to transport.
  next_point : array-like, shape=[..., dim]
      Point on the manifold, to transport to.
  base_shoot : array-like, shape=[..., dim]
      Point on the manifold, end point of the geodesics starting
      from the base point with initial speed to be transported.
  return_geodesics : bool, optional (defaults to False)
      Whether to return the geodesics of the
      construction.
  
  Returns
  -------
  next_step : dict of array-like and callable with following keys:
      next_tangent_vec : array-like, shape=[..., dim]
          Tangent vector at end point.
      end_point : array-like, shape=[..., dim]
          Point on the manifold, closes the geodesic parallelogram of the
          construction.
      geodesics : list of callable, len=3 (only if
      `return_geodesics=True`)
          Three geodesics of the construction.
  
  References
  ----------
  .. [LP2013a] Marco Lorenzi, Xavier Pennec. Efficient Parallel Transport
      of Deformations in Time Series of Images: from Schild's to
      Pole Ladder. Journal of Mathematical Imaging and Vision, Springer
      Verlag, 2013,50 (1-2), pp.5-17. ⟨10.1007/s10851-013-0470-3⟩
docstr_tok: ["Compute","one","Pole","Ladder","step",".","One","step","of","pole","ladder","scheme","[","LP2013a","]","_","using","the","geodesic","to","transport","along","as","main_geodesic","of","the","parallelogram",".","Parameters","--","--","--","--","--","base_point",":","array-like",",","shape=","[","...",",","dim","]","Point","on","the","manifold",",","from","which","to","transport",".","next_point",":","array-like",",","shape=","[","...",",","dim","]","Point","on","the","manifold",",","to","transport","to",".","base_shoot",":","array-like",",","shape=","[","...",",","dim","]","Point","on","the","manifold",",","end","point","of","the","geodesics","starting","from","the","base","point","with","initial","speed","to","be","transported",".","return_geodesics",":","bool",",","optional","(","defaults","to","False",")","Whether","to","return","the","geodesics","of","the","construction",".","Returns","--","--","--","-","next_step",":","dict","of","array-like","and","callable","with","following","keys",":","next_tangent_vec",":","array-like",",","shape=","[","...",",","dim","]","Tangent","vector","at","end","point",".","end_point",":","array-like",",","shape=","[","...",",","dim","]","Point","on","the","manifold",",","closes","the","geodesic","parallelogram","of","the","construction",".","geodesics",":","list","of","callable",",","len=3","(","only","if","`","return_geodesics=True","`",")","Three","geodesics","of","the","construction",".","References","--","--","--","--","--","..","[","LP2013a","]","Marco","Lorenzi",",","Xavier","Pennec",".","Efficient","Parallel","Transport","of","Deformations","in","Time","Series","of","Images",":","from","Schild","'s","to","Pole","Ladder",".","Journal","of","Mathematical","Imaging","and","Vision",",","Springer","Verlag",",","2013,50","(","1-2",")",",","pp.5-17",".","\u27e810.1007\/s10851-013-0470-3\u27e9"]
code: def _pole_ladder_step(
      self, base_point, next_point, base_shoot, return_geodesics=False
  ):
      """Compute one Pole Ladder step.
  
      One step of pole ladder scheme [LP2013a]_ using the geodesic to
      transport along as main_geodesic of the parallelogram.
  
      Parameters
      ----------
      base_point : array-like, shape=[..., dim]
          Point on the manifold, from which to transport.
      next_point : array-like, shape=[..., dim]
          Point on the manifold, to transport to.
      base_shoot : array-like, shape=[..., dim]
          Point on the manifold, end point of the geodesics starting
          from the base point with initial speed to be transported.
      return_geodesics : bool, optional (defaults to False)
          Whether to return the geodesics of the
          construction.
  
      Returns
      -------
      next_step : dict of array-like and callable with following keys:
          next_tangent_vec : array-like, shape=[..., dim]
              Tangent vector at end point.
          end_point : array-like, shape=[..., dim]
              Point on the manifold, closes the geodesic parallelogram of the
              construction.
          geodesics : list of callable, len=3 (only if
          `return_geodesics=True`)
              Three geodesics of the construction.
  
      References
      ----------
      .. [LP2013a] Marco Lorenzi, Xavier Pennec. Efficient Parallel Transport
          of Deformations in Time Series of Images: from Schild's to
          Pole Ladder. Journal of Mathematical Imaging and Vision, Springer
          Verlag, 2013,50 (1-2), pp.5-17. ⟨10.1007/s10851-013-0470-3⟩
      """
      mid_tangent_vector_to_shoot = (
          1.0 / 2.0 * self.log(base_point=base_point, point=next_point)
      )
  
      mid_point = self.exp(
          base_point=base_point, tangent_vec=mid_tangent_vector_to_shoot
      )
  
      tangent_vector_to_shoot = -self.log(
          base_point=mid_point, point=base_shoot
      )
  
      end_shoot = self.exp(
          base_point=mid_point, tangent_vec=tangent_vector_to_shoot
      )
  
      geodesics = []
      if return_geodesics:
          main_geodesic = self.geodesic(
              initial_point=base_point, end_point=next_point
          )
          diagonal = self.geodesic(
              initial_point=mid_point, end_point=base_shoot
          )
          final_geodesic = self.geodesic(
              initial_point=next_point, end_point=end_shoot
          )
          geodesics = [main_geodesic, diagonal, final_geodesic]
      return {"geodesics": geodesics, "end_point": end_shoot}
  
imports: from abc import ABC
  import geomstats.backend
  import geomstats.errors
label_desc: Use image node_id 6 for calling the Connection obj's underlying member method code with example usage: obj._pole_ladder_step(base_point, next_point, base_shoot, return_geodesics) and returns: dict