class_docstr: Compute coordinated functions of a symmetric positive semidefinite matrix.
  
  This class addresses two issues.  Firstly it allows the pseudoinverse,
  the logarithm of the pseudo-determinant, and the rank of the matrix
  to be computed using one call to eigh instead of three.
  Secondly it allows these functions to be computed in a way
  that gives mutually compatible results.
  All of the functions are computed with a common understanding as to
  which of the eigenvalues are to be considered negligibly small.
  The functions are designed to coordinate with scipy.linalg.pinvh()
  but not necessarily with np.linalg.det() or with np.linalg.matrix_rank().
  
  Parameters
  ----------
  M : array_like
      Symmetric positive semidefinite matrix (2-D).
  cond, rcond : float, optional
      Cutoff for small eigenvalues.
      Singular values smaller than rcond * largest_eigenvalue are
      considered zero.
      If None or -1, suitable machine precision is used.
  lower : bool, optional
      Whether the pertinent array data is taken from the lower
      or upper triangle of M. (Default: lower)
  check_finite : bool, optional
      Whether to check that the input matrices contain only finite
      numbers. Disabling may give a performance gain, but may result
      in problems (crashes, non-termination) if the inputs do contain
      infinities or NaNs.
  allow_singular : bool, optional
      Whether to allow a singular matrix.  (Default: True)
  
  Notes
  -----
  The arguments are similar to those of scipy.linalg.pinvh().
code: def pinv(self):
      if self._pinv is None:
          self._pinv = np.dot(self.U, self.U.T)
      return self._pinv
  
imports: import numpy
  import scipy.linalg
  from scipy._lib import doccer
  from scipy.special import gammaln
  from scipy._lib._util import check_random_state
  from scipy.stats import mvn
label_desc: Use image node_id 2 for calling the _PSD obj's underlying member method code with example usage: obj.pinv() and returns: self