parameters: (a)
return_statement: return sign, logdet
docstring: Compute the sign and (natural) logarithm of the determinant of an array.
  
      If an array has a very small or very large determinant, then a call to
      `det` may overflow or underflow. This routine is more robust against such
      issues, because it computes the logarithm of the determinant rather than
      the determinant itself.
  
      Parameters
      ----------
      a : (..., M, M) array_like
          Input array, has to be a square 2-D array.
  
      Returns
      -------
      sign : (...) array_like
          A number representing the sign of the determinant. For a real matrix,
          this is 1, 0, or -1. For a complex matrix, this is a complex number
          with absolute value 1 (i.e., it is on the unit circle), or else 0.
      logdet : (...) array_like
          The natural log of the absolute value of the determinant.
  
      If the determinant is zero, then `sign` will be 0 and `logdet` will be
      -Inf. In all cases, the determinant is equal to ``sign * np.exp(logdet)``.
  
      See Also
      --------
      det
  
      Notes
      -----
  
      .. versionadded:: 1.8.0
  
      Broadcasting rules apply, see the `numpy.linalg` documentation for
      details.
  
      .. versionadded:: 1.6.0
  
      The determinant is computed via LU factorization using the LAPACK
      routine ``z/dgetrf``.
  
  
      Examples
      --------
      The determinant of a 2-D array ``[[a, b], [c, d]]`` is ``ad - bc``:
  
      >>> a = np.array([[1, 2], [3, 4]])
      >>> (sign, logdet) = np.linalg.slogdet(a)
      >>> (sign, logdet)
      (-1, 0.69314718055994529) # may vary
      >>> sign * np.exp(logdet)
      -2.0
  
      Computing log-determinants for a stack of matrices:
  
      >>> a = np.array([ [[1, 2], [3, 4]], [[1, 2], [2, 1]], [[1, 3], [3, 1]] ])
      >>> a.shape
      (3, 2, 2)
      >>> sign, logdet = np.linalg.slogdet(a)
      >>> (sign, logdet)
      (array([-1., -1., -1.]), array([ 0.69314718,  1.09861229,  2.07944154]))
      >>> sign * np.exp(logdet)
      array([-2., -3., -8.])
  
      This routine succeeds where ordinary `det` does not:
  
      >>> np.linalg.det(np.eye(500) * 0.1)
      0.0
      >>> np.linalg.slogdet(np.eye(500) * 0.1)
      (1, -1151.2925464970228)
docstring_summary: Compute the sign and (natural) logarithm of the determinant of an array.
docstring_tokens: Compute the sign and ( natural ) logarithm of the determinant of an array .
function: def slogdet(a):
      """
      Compute the sign and (natural) logarithm of the determinant of an array.
  
      If an array has a very small or very large determinant, then a call to
      `det` may overflow or underflow. This routine is more robust against such
      issues, because it computes the logarithm of the determinant rather than
      the determinant itself.
  
      Parameters
      ----------
      a : (..., M, M) array_like
          Input array, has to be a square 2-D array.
  
      Returns
      -------
      sign : (...) array_like
          A number representing the sign of the determinant. For a real matrix,
          this is 1, 0, or -1. For a complex matrix, this is a complex number
          with absolute value 1 (i.e., it is on the unit circle), or else 0.
      logdet : (...) array_like
          The natural log of the absolute value of the determinant.
  
      If the determinant is zero, then `sign` will be 0 and `logdet` will be
      -Inf. In all cases, the determinant is equal to ``sign * np.exp(logdet)``.
  
      See Also
      --------
      det
  
      Notes
      -----
  
      .. versionadded:: 1.8.0
  
      Broadcasting rules apply, see the `numpy.linalg` documentation for
      details.
  
      .. versionadded:: 1.6.0
  
      The determinant is computed via LU factorization using the LAPACK
      routine ``z/dgetrf``.
  
  
      Examples
      --------
      The determinant of a 2-D array ``[[a, b], [c, d]]`` is ``ad - bc``:
  
      >>> a = np.array([[1, 2], [3, 4]])
      >>> (sign, logdet) = np.linalg.slogdet(a)
      >>> (sign, logdet)
      (-1, 0.69314718055994529) # may vary
      >>> sign * np.exp(logdet)
      -2.0
  
      Computing log-determinants for a stack of matrices:
  
      >>> a = np.array([ [[1, 2], [3, 4]], [[1, 2], [2, 1]], [[1, 3], [3, 1]] ])
      >>> a.shape
      (3, 2, 2)
      >>> sign, logdet = np.linalg.slogdet(a)
      >>> (sign, logdet)
      (array([-1., -1., -1.]), array([ 0.69314718,  1.09861229,  2.07944154]))
      >>> sign * np.exp(logdet)
      array([-2., -3., -8.])
  
      This routine succeeds where ordinary `det` does not:
  
      >>> np.linalg.det(np.eye(500) * 0.1)
      0.0
      >>> np.linalg.slogdet(np.eye(500) * 0.1)
      (1, -1151.2925464970228)
  
      """
      a = asarray(a)
      _assert_stacked_2d(a)
      _assert_stacked_square(a)
      t, result_t = _commonType(a)
      real_t = _realType(result_t)
      signature = 'D->Dd' if isComplexType(t) else 'd->dd'
      sign, logdet = _umath_linalg.slogdet(a, signature=signature)
      sign = sign.astype(result_t, copy=False)
      logdet = logdet.astype(real_t, copy=False)
      return sign, logdet
function_tokens: def slogdet ( a ) : a = asarray ( a ) _assert_stacked_2d ( a ) _assert_stacked_square ( a ) t , result_t = _commonType ( a ) real_t = _realType ( result_t ) signature = 'D->Dd' if isComplexType ( t ) else 'd->dd' sign , logdet = _umath_linalg . slogdet ( a , signature = signature ) sign = sign . astype ( result_t , copy = False ) logdet = logdet . astype ( real_t , copy = False ) return sign , logdet