docstr: logarithm of probability density function
  
  Parameters
  ----------
  x : array_like
      can be 1d or 2d, if 2d, then each row is taken as independent
      multivariate random vector
  
  Returns
  -------
  logpdf : float or array
      probability density value of each random vector
code: def logpdf(self, x):
      """logarithm of probability density function
  
      Parameters
      ----------
      x : array_like
          can be 1d or 2d, if 2d, then each row is taken as independent
          multivariate random vector
  
      Returns
      -------
      logpdf : float or array
          probability density value of each random vector
  
      """
  
      x = np.asarray(x)
  
      df = self.df
      nvars = self.nvars
  
      x_whitened = self.whiten(x - self.mean)  # should be float
  
      llf = -nvars * np_log(df * np_pi)
      llf -= self.logdetsigma
      llf -= (df + nvars) * np_log(1 + np.sum(x_whitened**2, -1) / df)
      llf *= 0.5
      llf += sps_gamln((df + nvars) / 2.0) - sps_gamln(df / 2.0)
  
      return llf
  
imports: import numpy
  from scipy import special
  from statsmodels.sandbox.distributions.multivariate import mvstdtprob
  from .extras import mvnormcdf
label_desc: Use image node_id 3 for calling the MVT obj's underlying member method code with example usage: obj.logpdf(x) and returns: llf