Skip to main content
`Ctrl`+`K`

# scipy.special.loggamma

scipy.special.loggamma(z, out=None) = <ufunc 'loggamma'>

  Principal branch of the logarithm of the gamma function.

  Defined to be \(\log(\Gamma(x))\) for \(x > 0\) and extended to the complex plane by analytic continuation. The function has a single branch cut on the negative real axis.

  Added in version 0.18.0.

  Parameters:
    z array_like

      Values in the complex plane at which to compute `loggamma`

    out ndarray, optional

      Output array for computed values of `loggamma`

  Returns:
    loggamma scalar or ndarray

      Values of `loggamma` at z.

  See also

  `gammaln`

    logarithm of the absolute value of the gamma function

  `gammasgn`

    sign of the gamma function

  Notes

  It is not generally true that \(\log\Gamma(z) = \log(\Gamma(z))\), though the real parts of the functions do agree. The benefit of not defining `loggamma` as \(\log(\Gamma(z))\) is that the latter function has a complicated branch cut structure whereas `loggamma` is analytic except for on the negative real axis.

  The identities

  \[\begin{split}\exp(\log\Gamma(z)) &= \Gamma(z) \\ \log\Gamma(z + 1) &= \log(z) + \log\Gamma(z)\end{split}\]

  make `loggamma` useful for working in complex logspace.

  On the real line `loggamma` is related to `gammaln` via `exp(loggamma(x + 0j)) = gammasgn(x)*exp(gammaln(x))`, up to rounding error.

  The implementation here is based on [hare1997].

  Array API Standard Support

  `loggamma` has experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variable `SCIPY_ARRAY_API=1` and providing CuPy, PyTorch, JAX, or Dask arrays as array arguments. The following combinations of backend and device (or other capability) are supported.

  Library | CPU | GPU
  --- | --- | ---
  NumPy | ✅ | n/a
  CuPy | n/a | ✅
  PyTorch | ✅ | ⛔
  JAX | ⚠️ no JIT | ⛔
  Dask | ✅ | n/a

  > See Support for the array API standard for more information.

  References

  [hare1997]

  D.E.G. Hare, Computing the Principal Branch of log-Gamma, Journal of Algorithms, Volume 25, Issue 2, November 1997, pages 221-236.

  Examples

      >>> import numpy as np
      >>> from scipy.special import loggamma, gamma

      >>> z = 1.5 + 2j
      >>> loggamma(z)
      np.complex128(-1.4991963725850939+0.7332806816909994j)

  Verify \(\exp(\log \Gamma(z)) = \Gamma(z)\):

      >>> np.exp(loggamma(z))
      np.complex128(0.165915108938991+0.14946347326641998j)
      >>> gamma(z)
      np.complex128(0.165915108938991+0.14946347326641998j)

  Verify the recurrence \(\log \Gamma(z+1) = \log(z) + \log \Gamma(z)\):

      >>> loggamma(z + 1)
      np.complex128(-0.5829056407109388+1.6605758996926108j)
      >>> np.log(z) + loggamma(z)
      np.complex128(-0.5829056407109388+1.6605758996926117j)