class_docstr: Implements of the Sasaki metric on the tangent bundle TM of a Riem. manifold M.
  
  The Sasaki metric is characterized by the following three properties:
  
  * the canonical projection of TM becomes a Riemannian submersion,
  * parallel vector fields along curves are orthogonal to their fibres, and
  * its restriction to any tangent space is Euclidean.
  
  Geodesic computations are realized via a discrete formulation of the
  geodesic equation on TM that involve geodesics, parallel translation, and
  the curvature tensor on the base manifold M (see [1]_ for details).
  However, as the implemented energy in the discrete-geodesics-optimization
  as well as the approximations of its gradient slightly differ from those
  proposed in [1]_, we also refer to [2]_ for additional details.
  
  Parameters
  ----------
  space : Manifold
      Tangent bundle.
  n_jobs: int
      Number of jobs for parallel computing.
      Optional, default: 1.
  n_steps : int
      Number of discrete time steps.
      Optional, default: 3.
  
  References
  ----------
  .. [1] Muralidharan, P., & Fletcher, P. T. "Sasaki metrics for analysis of
      longitudinal data on manifolds", IEEE CVPR 2012, pp. 1027-1034
      https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4270017/
  .. [2] Nava-Yazdani, E., Hanik, M., Ambellan, F., & von Tycowicz, C.
      "On Gradient Formulas in an Algorithm for the Logarithm of the Sasaki
      Metric", Technical Report Zuse-Institut Berlin, 2022
      https://nbn-resolving.org/urn/resolver.pl?urn:nbn:de:0297-zib-87174
class_docstr_tok: ["Implements","of","the","Sasaki","metric","on","the","tangent","bundle","TM","of","a","Riem",".","manifold","M.","The","Sasaki","metric","is","characterized","by","the","following","three","properties",":","*","the","canonical","projection","of","TM","becomes","a","Riemannian","submersion",",","*","parallel","vector","fields","along","curves","are","orthogonal","to","their","fibres",",","and","*","its","restriction","to","any","tangent","space","is","Euclidean",".","Geodesic","computations","are","realized","via","a","discrete","formulation","of","the","geodesic","equation","on","TM","that","involve","geodesics",",","parallel","translation",",","and","the","curvature","tensor","on","the","base","manifold","M","(","see","[","1","]","_","for","details",")",".","However",",","as","the","implemented","energy","in","the","discrete-geodesics-optimization","as","well","as","the","approximations","of","its","gradient","slightly","differ","from","those","proposed","in","[","1","]","_",",","we","also","refer","to","[","2","]","_","for","additional","details",".","Parameters","--","--","--","--","--","space",":","Manifold","Tangent","bundle",".","n_jobs",":","int","Number","of","jobs","for","parallel","computing",".","Optional",",","default",":","1.","n_steps",":","int","Number","of","discrete","time","steps",".","Optional",",","default",":","3",".","References","--","--","--","--","--","..","[","1","]","Muralidharan",",","P.",",","&","Fletcher",",","P.","T.","``","Sasaki","metrics","for","analysis","of","longitudinal","data","on","manifolds","''",",","IEEE","CVPR","2012",",","pp",".","1027-1034","https",":","\/\/www.ncbi.nlm.nih.gov\/pmc\/articles\/PMC4270017\/","..","[","2","]","Nava-Yazdani",",","E.",",","Hanik",",","M.",",","Ambellan",",","F.",",","&","von","Tycowicz",",","C.","``","On","Gradient","Formulas","in","an","Algorithm","for","the","Logarithm","of","the","Sasaki","Metric","''",",","Technical","Report","Zuse-Institut","Berlin",",","2022","https",":","\/\/nbn-resolving.org\/urn\/resolver.pl","?","urn",":","nbn",":","de:0297-zib-87174"]
docstr: Inner product between two tangent vectors at a base point.
  
  Parameters
  ----------
  tangent_vec_a : array-like, shape=[..., 2, M.dim]
      Tangent vector in TTM of the tangent bundle TM.
  tangent_vec_b : array-like, shape=[..., 2, M.dim]
      Tangent vector in TTM of the tangent bundle TM.
  base_point : array-like, shape=[..., 2, M.dim]
      Point in the tangent bundle TM of manifold M.
  
  Returns
  -------
  inner_product : array-like, shape=[..., 1]
      Inner-product.
docstr_tok: ["Inner","product","between","two","tangent","vectors","at","a","base","point",".","Parameters","--","--","--","--","--","tangent_vec_a",":","array-like",",","shape=","[","...",",","2",",","M.dim","]","Tangent","vector","in","TTM","of","the","tangent","bundle","TM",".","tangent_vec_b",":","array-like",",","shape=","[","...",",","2",",","M.dim","]","Tangent","vector","in","TTM","of","the","tangent","bundle","TM",".","base_point",":","array-like",",","shape=","[","...",",","2",",","M.dim","]","Point","in","the","tangent","bundle","TM","of","manifold","M.","Returns","--","--","--","-","inner_product",":","array-like",",","shape=","[","...",",","1","]","Inner-product","."]
code: def inner_product(self, tangent_vec_a, tangent_vec_b, base_point):
      """Inner product between two tangent vectors at a base point.
  
      Parameters
      ----------
      tangent_vec_a : array-like, shape=[..., 2, M.dim]
          Tangent vector in TTM of the tangent bundle TM.
      tangent_vec_b : array-like, shape=[..., 2, M.dim]
          Tangent vector in TTM of the tangent bundle TM.
      base_point : array-like, shape=[..., 2, M.dim]
          Point in the tangent bundle TM of manifold M.
  
      Returns
      -------
      inner_product : array-like, shape=[..., 1]
          Inner-product.
      """
      vec_a_0, vec_a_1 = self._space._unstack(tangent_vec_a)
      vec_b_0, vec_b_1 = self._space._unstack(tangent_vec_b)
      pt, _ = self._space._unstack(base_point)
  
      inner = self._space.space.metric.inner_product
      return inner(vec_a_0, vec_b_0, pt) + inner(vec_a_1, vec_b_1, pt)
  
imports: from joblib import Parallel, delayed
  import geomstats.backend
  from geomstats.geometry.base import Manifold
  from geomstats.geometry.riemannian_metric import RiemannianMetric
  from geomstats.vectorization import check_is_batch
label_desc: Use image node_id 5 for calling the SasakiMetric obj's underlying member method code with example usage: obj.inner_product(tangent_vec_a, tangent_vec_b, base_point) and returns: unknown