class_docstr: Provides method to compute log for multiples point.
class_docstr_tok: ["Provides","method","to","compute","log","for","multiples","point","."]
docstr: Logarithm map.
  
  Parameters
  ----------
  space : Manifold
      Equipped manifold.
  end_point : array-like, shape=[..., dim]
      Point on the manifold.
  base_point : array-like, shape=[..., dim]
      Point on the manifold.
  
  Returns
  -------
  tangent_vec : array-like, shape=[..., dim]
      Tangent vector at the base point.
code: def log(self, space, point, base_point):
      """Logarithm map.
  
      Parameters
      ----------
      space : Manifold
          Equipped manifold.
      end_point : array-like, shape=[..., dim]
          Point on the manifold.
      base_point : array-like, shape=[..., dim]
          Point on the manifold.
  
      Returns
      -------
      tangent_vec : array-like, shape=[..., dim]
          Tangent vector at the base point.
      """
      # assumes inability to properly vectorize
      if point.ndim != base_point.ndim:
          point, base_point = gs.broadcast_arrays(point, base_point)
  
      is_batch = point.ndim > space.point_ndim
      if not is_batch:
          return self._log_single(space, point, base_point)
  
      return gs.stack(
          [
              self._log_single(space, point_, base_point_)
              for point_, base_point_ in zip(point, base_point)
          ]
      )
  
imports: import math
  from abc import ABC, abstractmethod
  import geomstats.backend
  from geomstats.numerics.bvp import ScipySolveBVP
  from geomstats.numerics.ivp import GSIVPIntegrator
  from geomstats.numerics.optimizers import ScipyMinimize
  from geomstats.vectorization import get_batch_shape
label_desc: Use image node_id 2 for calling the _LogBatchMixins obj's underlying member method code with example usage: obj.log(space, point, base_point) and returns: gs, self