class_docstr: Class for Riemannian and pseudo-Riemannian metrics.
  
  The associated Levi-Civita connection on the tangent bundle.
class_docstr_tok: ["Class","for","Riemannian","and","pseudo-Riemannian","metrics",".","The","associated","Levi-Civita","connection","on","the","tangent","bundle","."]
docstr: Compute purely covariant version of Riemannian tensor at base_point.
  
  In the literature the covariant riemannian tensor is noted :math:`R_{ijkl}`.
  
  Convention used in the literature (tensor index notation, ref. Wikipedia) is:
  :math:`R_{ijkl} = <R(x_k, x_l)x_j, x_i>`
  where :math:`x_i` is the i-th basis vector of the tangent space at base point.
  
  In other words:
  [cov_riemann_tensor]_{ijkl} = [metric_matrix]_{im} [riemann_tensor]_{jkl}^m
  
  Parameters
  ----------
  base_point :  array-like, shape=[..., dim]
      Point on the manifold.
  
  Returns
  -------
  covariant_tensor : array-like, shape=[..., dim, dim, dim, dim]
      covariant_riemann_tensor[..., i, j, k, l] = R_{ijkl}
      Covariant version of Riemannian curvature tensor.
docstr_tok: ["Compute","purely","covariant","version","of","Riemannian","tensor","at","base_point",".","In","the","literature","the","covariant","riemannian","tensor","is","noted",":","math",":","`","R_","{","ijkl","}","`",".","Convention","used","in","the","literature","(","tensor","index","notation",",","ref",".","Wikipedia",")","is",":",":","math",":","`","R_","{","ijkl","}","=","<","R","(","x_k",",","x_l",")","x_j",",","x_i",">","`","where",":","math",":","`","x_i","`","is","the","i-th","basis","vector","of","the","tangent","space","at","base","point",".","In","other","words",":","[","cov_riemann_tensor","]","_","{","ijkl","}","=","[","metric_matrix","]","_","{","im","}","[","riemann_tensor","]","_","{","jkl","}","^m","Parameters","--","--","--","--","--","base_point",":","array-like",",","shape=","[","...",",","dim","]","Point","on","the","manifold",".","Returns","--","--","--","-","covariant_tensor",":","array-like",",","shape=","[","...",",","dim",",","dim",",","dim",",","dim","]","covariant_riemann_tensor","[","...",",","i",",","j",",","k",",","l","]","=","R_","{","ijkl","}","Covariant","version","of","Riemannian","curvature","tensor","."]
code: def covariant_riemann_tensor(self, base_point):
      r"""Compute purely covariant version of Riemannian tensor at base_point.
  
      In the literature the covariant riemannian tensor is noted :math:`R_{ijkl}`.
  
      Convention used in the literature (tensor index notation, ref. Wikipedia) is:
      :math:`R_{ijkl} = <R(x_k, x_l)x_j, x_i>`
      where :math:`x_i` is the i-th basis vector of the tangent space at base point.
  
      In other words:
      [cov_riemann_tensor]_{ijkl} = [metric_matrix]_{im} [riemann_tensor]_{jkl}^m
  
      Parameters
      ----------
      base_point :  array-like, shape=[..., dim]
          Point on the manifold.
  
      Returns
      -------
      covariant_tensor : array-like, shape=[..., dim, dim, dim, dim]
          covariant_riemann_tensor[..., i, j, k, l] = R_{ijkl}
          Covariant version of Riemannian curvature tensor.
      """
      riemann_tensor = self.riemann_tensor(base_point)
      metric = self.metric_matrix(base_point)
      return gs.einsum(
          "...ij, ...klmj->...iklm", metric, riemann_tensor
      )
  
imports: from abc import ABC
  import joblib
  import geomstats.backend
  import geomstats.geometry
  from geomstats.geometry.connection import Connection
  from geomstats.vectorization import check_is_batch
label_desc: Use image node_id 22 for calling the RiemannianMetric obj's underlying member method code with example usage: obj.covariant_riemann_tensor(base_point) and returns: gs