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 Christoffel symbols of the Levi-Civita connection.
  
  The Koszul formula defining the Levi-Civita connection gives the
  expression of the Christoffel symbols with respect to the metric:
  :math:`\Gamma^k_{ij}(p) = \frac{1}{2} g^{lk}(
  \partial_i g_{jl} + \partial_j g_{li} - \partial_l g_{ij})`,
  where:
  
  - :math:`p` represents the base point, and
  - :math:`g` represents the Riemannian metric tensor.
  
  Note that the function computing the derivative of the metric matrix
  puts the index of the derivation last.
  
  Parameters
  ----------
  base_point: array-like, shape=[..., dim]
      Base point.
  
  Returns
  -------
  christoffels: array-like, shape=[..., dim, dim, dim]
      Christoffel symbols, where the contravariant index is first.
docstr_tok: ["Compute","Christoffel","symbols","of","the","Levi-Civita","connection",".","The","Koszul","formula","defining","the","Levi-Civita","connection","gives","the","expression","of","the","Christoffel","symbols","with","respect","to","the","metric",":",":","math",":","`","\\Gamma^k_","{","ij","}","(","p",")","=","\\frac","{","1","}","{","2","}","g^","{","lk","}","(","\\partial_i","g_","{","jl","}","+","\\partial_j","g_","{","li","}","-","\\partial_l","g_","{","ij","}",")","`",",","where",":","-",":","math",":","`","p","`","represents","the","base","point",",","and","-",":","math",":","`","g","`","represents","the","Riemannian","metric","tensor",".","Note","that","the","function","computing","the","derivative","of","the","metric","matrix","puts","the","index","of","the","derivation","last",".","Parameters","--","--","--","--","--","base_point",":","array-like",",","shape=","[","...",",","dim","]","Base","point",".","Returns","--","--","--","-","christoffels",":","array-like",",","shape=","[","...",",","dim",",","dim",",","dim","]","Christoffel","symbols",",","where","the","contravariant","index","is","first","."]
code: def christoffels(self, base_point):
      r"""Compute Christoffel symbols of the Levi-Civita connection.
  
      The Koszul formula defining the Levi-Civita connection gives the
      expression of the Christoffel symbols with respect to the metric:
      :math:`\Gamma^k_{ij}(p) = \frac{1}{2} g^{lk}(
      \partial_i g_{jl} + \partial_j g_{li} - \partial_l g_{ij})`,
      where:
  
      - :math:`p` represents the base point, and
      - :math:`g` represents the Riemannian metric tensor.
  
      Note that the function computing the derivative of the metric matrix
      puts the index of the derivation last.
  
      Parameters
      ----------
      base_point: array-like, shape=[..., dim]
          Base point.
  
      Returns
      -------
      christoffels: array-like, shape=[..., dim, dim, dim]
          Christoffel symbols, where the contravariant index is first.
      """
      cometric_mat_at_point = self.cometric_matrix(base_point)
      metric_derivative_at_point = self.inner_product_derivative_matrix(
          base_point
      )
  
      term_1 = gs.einsum(
          "...lk,...jli->...kij",
          cometric_mat_at_point,
          metric_derivative_at_point,
      )
      term_2 = gs.einsum(
          "...lk,...lij->...kij",
          cometric_mat_at_point,
          metric_derivative_at_point,
      )
      term_3 = -gs.einsum(
          "...lk,...ijl->...kij",
          cometric_mat_at_point,
          metric_derivative_at_point,
      )
  
      return 0.5 * (term_1 + term_2 + term_3)
  
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 7 for calling the RiemannianMetric obj's underlying member method code with example usage: obj.christoffels(base_point) and returns: unknown