class_docstr: Canonical metric of the Grassmann manifold.
  
  Coincides with the Frobenius metric.
docstr: Compute the Riemannian logarithm of point w.r.t. base_point.
  
  Given :math:`P, P'` in :math:`Gr(n, p)` the logarithm from :math:`P`
  to :math:`P` is induced by the infinitesimal rotation [Batzies2015]_:
  
  .. math::
  
      Y = \frac 1 2 \log \big((2 P' - 1)(2 P - 1)\big)
  
  The tangent vector :math:`X` at :math:`P`
  is then recovered by :math:`X = [Y, P]`.
  
  Parameters
  ----------
  point : array-like, shape=[..., n, n]
      Point.
  base_point : array-like, shape=[..., n, n]
      Base point.
  
  Returns
  -------
  tangent_vec : array-like, shape=[..., n, n]
      Riemannian logarithm, a tangent vector at `base_point`.
  
  References
  ----------
  .. [Batzies2015] Batzies, Hüper, Machado, Leite.
      "Geometric Mean and Geodesic Regression on Grassmannians"
      Linear Algebra and its Applications, 466, 83-101, 2015.
docstr_tok: ["Compute","the","Riemannian","logarithm","of","point","w.r.t",".","base_point",".","Given",":","math",":","`","P",",","P","'","`","in",":","math",":","`","Gr","(","n",",","p",")","`","the","logarithm","from",":","math",":","`","P","`","to",":","math",":","`","P","`","is","induced","by","the","infinitesimal","rotation","[","Batzies2015","]","_",":","..","math",":",":","Y","=","\\frac","1","2","\\log","\\big","(","(","2","P","'","-","1",")","(","2","P","-","1",")","\\big",")","The","tangent","vector",":","math",":","`","X","`","at",":","math",":","`","P","`","is","then","recovered","by",":","math",":","`","X","=","[","Y",",","P","]","`",".","Parameters","--","--","--","--","--","point",":","array-like",",","shape=","[","...",",","n",",","n","]","Point",".","base_point",":","array-like",",","shape=","[","...",",","n",",","n","]","Base","point",".","Returns","--","--","--","-","tangent_vec",":","array-like",",","shape=","[","...",",","n",",","n","]","Riemannian","logarithm",",","a","tangent","vector","at","`","base_point","`",".","References","--","--","--","--","--","..","[","Batzies2015","]","Batzies",",","H\u00fcper",",","Machado",",","Leite",".","``","Geometric","Mean","and","Geodesic","Regression","on","Grassmannians","''","Linear","Algebra","and","its","Applications",",","466",",","83-101",",","2015","."]
code: def log(self, point, base_point, **kwargs):
      r"""Compute the Riemannian logarithm of point w.r.t. base_point.
  
      Given :math:`P, P'` in :math:`Gr(n, p)` the logarithm from :math:`P`
      to :math:`P` is induced by the infinitesimal rotation [Batzies2015]_:
  
      .. math::
  
          Y = \frac 1 2 \log \big((2 P' - 1)(2 P - 1)\big)
  
      The tangent vector :math:`X` at :math:`P`
      is then recovered by :math:`X = [Y, P]`.
  
      Parameters
      ----------
      point : array-like, shape=[..., n, n]
          Point.
      base_point : array-like, shape=[..., n, n]
          Base point.
  
      Returns
      -------
      tangent_vec : array-like, shape=[..., n, n]
          Riemannian logarithm, a tangent vector at `base_point`.
  
      References
      ----------
      .. [Batzies2015] Batzies, Hüper, Machado, Leite.
          "Geometric Mean and Geodesic Regression on Grassmannians"
          Linear Algebra and its Applications, 466, 83-101, 2015.
      """
      id_n = self._general_linear.identity
      id_n, point, base_point = gs.convert_to_wider_dtype(
          [id_n, point, base_point]
      )
      sym2 = 2 * point - id_n
      sym1 = 2 * base_point - id_n
      rot = self._general_linear.compose(sym2, sym1)
      return Matrices.bracket(
          self._general_linear.log(rot) / 2, base_point
      )
  
imports: import geomstats.backend
  import geomstats.errors
  from geomstats.geometry.base import LevelSet
  from geomstats.geometry.general_linear import GeneralLinear
  from geomstats.geometry.matrices import Matrices, MatricesMetric
  from geomstats.geometry.symmetric_matrices import SymmetricMatrices
  from geomstats.vectorization import repeat_out
label_desc: Use image node_id 3 for calling the GrassmannianCanonicalMetric obj's underlying member method code with example usage: obj.log(point, base_point) and returns: Matrices