class_docstr: Class for the Fisher information metric on Gamma distributions.
  
  References
  ----------
  .. [AD2008] Arwini, K. A., & Dodson, C. T. (2008).
      Information geometry (pp. 31-54). Springer Berlin Heidelberg.
class_docstr_tok: ["Class","for","the","Fisher","information","metric","on","Gamma","distributions",".","References","--","--","--","--","--","..","[","AD2008","]","Arwini",",","K.","A.",",","&","Dodson",",","C.","T.","(","2008",")",".","Information","geometry","(","pp",".","31-54",")",".","Springer","Berlin","Heidelberg","."]
docstr: Compute the Christoffel symbols.
  
  Compute the Christoffel symbols of the Fisher information metric.
  For computation purposes, we replace the value of
  (gs.polygamma(1, x) - 1/x) by an equivalent (close lower-bound) when it becomes
  too difficult to compute, as per in the second reference.
  
  References
  ----------
  .. [AD2008] Arwini, K. A., & Dodson, C. T. (2008).
      Information geometry (pp. 31-54). Springer Berlin Heidelberg.
  
  .. [GQ2015] Guo, B. N., Qi, F., Zhao, J. L., & Luo, Q. M. (2015).
      Sharp inequalities for polygamma functions.
      Mathematica Slovaca, 65(1), 103-120.
  
  Parameters
  ----------
  base_point : array-like, shape=[..., 2]
      Base point.
  
  Returns
  -------
  christoffels : array-like, shape=[..., 2, 2, 2]
      Christoffel symbols, with the contravariant index on
      the first dimension.
      :math:`christoffels[..., i, j, k] = Gamma^i_{jk}`
docstr_tok: ["Compute","the","Christoffel","symbols",".","Compute","the","Christoffel","symbols","of","the","Fisher","information","metric",".","For","computation","purposes",",","we","replace","the","value","of","(","gs.polygamma","(","1",",","x",")","-","1\/x",")","by","an","equivalent","(","close","lower-bound",")","when","it","becomes","too","difficult","to","compute",",","as","per","in","the","second","reference",".","References","--","--","--","--","--","..","[","AD2008","]","Arwini",",","K.","A.",",","&","Dodson",",","C.","T.","(","2008",")",".","Information","geometry","(","pp",".","31-54",")",".","Springer","Berlin","Heidelberg",".","..","[","GQ2015","]","Guo",",","B.","N.",",","Qi",",","F.",",","Zhao",",","J.","L.",",","&","Luo",",","Q.","M.","(","2015",")",".","Sharp","inequalities","for","polygamma","functions",".","Mathematica","Slovaca",",","65","(","1",")",",","103-120",".","Parameters","--","--","--","--","--","base_point",":","array-like",",","shape=","[","...",",","2","]","Base","point",".","Returns","--","--","--","-","christoffels",":","array-like",",","shape=","[","...",",","2",",","2",",","2","]","Christoffel","symbols",",","with","the","contravariant","index","on","the","first","dimension",".",":","math",":","`","christoffels","[","...",",","i",",","j",",","k","]","=","Gamma^i_","{","jk","}","`"]
code: def christoffels(self, base_point):
      """Compute the Christoffel symbols.
  
      Compute the Christoffel symbols of the Fisher information metric.
      For computation purposes, we replace the value of
      (gs.polygamma(1, x) - 1/x) by an equivalent (close lower-bound) when it becomes
      too difficult to compute, as per in the second reference.
  
      References
      ----------
      .. [AD2008] Arwini, K. A., & Dodson, C. T. (2008).
          Information geometry (pp. 31-54). Springer Berlin Heidelberg.
  
      .. [GQ2015] Guo, B. N., Qi, F., Zhao, J. L., & Luo, Q. M. (2015).
          Sharp inequalities for polygamma functions.
          Mathematica Slovaca, 65(1), 103-120.
  
      Parameters
      ----------
      base_point : array-like, shape=[..., 2]
          Base point.
  
      Returns
      -------
      christoffels : array-like, shape=[..., 2, 2, 2]
          Christoffel symbols, with the contravariant index on
          the first dimension.
          :math:`christoffels[..., i, j, k] = Gamma^i_{jk}`
      """
      base_point = gs.to_ndarray(base_point, to_ndim=2)
  
      kappa, gamma = base_point[:, 0], base_point[:, 1]
  
      if gs.any(kappa > 4e15):
          raise ValueError(
              "Christoffels computation overflows with values of kappa. "
              "All values of kappa < 4e15 work."
          )
  
      shape = kappa.shape
  
      c111 = gs.where(
          gs.polygamma(1, kappa) - 1 / kappa > gs.atol,
          (gs.polygamma(2, kappa) + gs.array(kappa) ** -2)
          / (2 * (gs.polygamma(1, kappa) - 1 / kappa)),
          0.25 * (kappa**2 * gs.polygamma(2, kappa) + 1),
      )
  
      c122 = gs.where(
          gs.polygamma(1, kappa) - 1 / kappa > gs.atol,
          -1 / (2 * gamma**2 * (gs.polygamma(1, kappa) - 1 / kappa)),
          -(kappa**2) / (4 * gamma**2),
      )
  
      c1 = gs.squeeze(
          from_vector_to_diagonal_matrix(
              gs.transpose(gs.array([c111, c122]))
          )
      )
  
      c2 = gs.squeeze(
          gs.transpose(
              gs.array(
                  [
                      [gs.zeros(shape), 1 / (2 * kappa)],
                      [1 / (2 * kappa), -1 / gamma],
                  ]
              )
          )
      )
  
      christoffels = gs.array([c1, c2])
  
      if len(christoffels.shape) == 4:
          christoffels = gs.transpose(christoffels, [1, 0, 2, 3])
  
      return gs.squeeze(christoffels)
  
imports: from scipy.stats import gamma
  import geomstats.backend
  from geomstats.algebra_utils import from_vector_to_diagonal_matrix
  from geomstats.geometry.base import VectorSpaceOpenSet
  from geomstats.geometry.euclidean import Euclidean
  from geomstats.geometry.riemannian_metric import RiemannianMetric
  from geomstats.information_geometry.base import InformationManifoldMixin, ScipyUnivariateRandomVariable
  from geomstats.numerics.bvp import ScipySolveBVP
  from geomstats.numerics.geodesic import ExpODESolver, LogODESolver
  from geomstats.numerics.ivp import ScipySolveIVP
  from geomstats.vectorization import check_is_batch
label_desc: Use image node_id 3 for calling the GammaMetric obj's underlying member method code with example usage: obj.christoffels(base_point) and returns: gs