class_docstr: Class to solve the initial value problem (IVP) for exp.
class_docstr_tok: ["Class","to","solve","the","initial","value","problem","(","IVP",")","for","exp","."]
docstr: Compute exponential map associated to the Riemmannian metric.
  
  Exponential map at base_point of tangent_vec computed
  by discrete geodesic calculus methods.
  
  Parameters
  ----------
  tangent_vec : array-like, shape=[..., n_vertices, 3]
      Tangent vector at the base point.
  base_point : array-like, shape=[..., n_vertices, 3]
      Point on the manifold, i.e.
  n_steps : int
      Number of time steps on the geodesic.
  
  Returns
  -------
  exp : array-like, shape=[n_vertices, 3]
      Point on the manifold.
docstr_tok: ["Compute","exponential","map","associated","to","the","Riemmannian","metric",".","Exponential","map","at","base_point","of","tangent_vec","computed","by","discrete","geodesic","calculus","methods",".","Parameters","--","--","--","--","--","tangent_vec",":","array-like",",","shape=","[","...",",","n_vertices",",","3","]","Tangent","vector","at","the","base","point",".","base_point",":","array-like",",","shape=","[","...",",","n_vertices",",","3","]","Point","on","the","manifold",",","i.e",".","n_steps",":","int","Number","of","time","steps","on","the","geodesic",".","Returns","--","--","--","-","exp",":","array-like",",","shape=","[","n_vertices",",","3","]","Point","on","the","manifold","."]
code: def exp(self, space, tangent_vec, base_point):
      """Compute exponential map associated to the Riemmannian metric.
  
      Exponential map at base_point of tangent_vec computed
      by discrete geodesic calculus methods.
  
      Parameters
      ----------
      tangent_vec : array-like, shape=[..., n_vertices, 3]
          Tangent vector at the base point.
      base_point : array-like, shape=[..., n_vertices, 3]
          Point on the manifold, i.e.
      n_steps : int
          Number of time steps on the geodesic.
  
      Returns
      -------
      exp : array-like, shape=[n_vertices, 3]
          Point on the manifold.
      """
      if gs.__name__.endswith("autograd"):
          return (
              "This ExpSolver works for the pytorch backend."
              "Change backend via the command "
              "export GEOMSTATS_BACKEND=pytorch in a terminal"
          )
  
      exps = []
      need_squeeze = False
      if tangent_vec.ndim == 2:
          tangent_vec = gs.expand_dims(tangent_vec, axis=0)
          need_squeeze = True
      if base_point.ndim == 2:
          base_point = gs.expand_dims(base_point, axis=0)
          need_squeeze = True
      n_exps = gs.maximum(tangent_vec.shape[0], base_point.shape[0])
      tangent_vec = gs.broadcast_to(
          tangent_vec, (n_exps,) + tangent_vec.shape[1:]
      )
      base_point = gs.broadcast_to(
          base_point, (n_exps,) + base_point.shape[1:]
      )
      for one_tangent_vec, one_base_point in zip(
          tangent_vec, base_point
      ):
          geod = self._ivp(space, one_base_point, one_tangent_vec)
          exps.append(geod[-1])
  
      exps = gs.array(exps)
      if need_squeeze:
          exps = gs.squeeze(exps, axis=0)
      return exps
  
imports: import math
  import geomstats.backend
  from geomstats.geometry.euclidean import Euclidean
  from geomstats.geometry.manifold import Manifold
  from geomstats.geometry.riemannian_metric import RiemannianMetric
  from geomstats.numerics.optimizers import ScipyMinimize
label_desc: Use image node_id 2 for calling the _ExpSolver obj's underlying member method code with example usage: obj.exp(space, tangent_vec, base_point) and returns: exps, str