class_docstr: Class for Multivariate Normal Distribution
  
  original full version, kept for testing, new version inherits from
  MVElliptical
  
  uses Cholesky decomposition of covariance matrix for the transformation
  of the data
class_docstr_tok: ["Class","for","Multivariate","Normal","Distribution","original","full","version",",","kept","for","testing",",","new","version","inherits","from","MVElliptical","uses","Cholesky","decomposition","of","covariance","matrix","for","the","transformation","of","the","data"]
code: def __init__(self, mean, cov):
      self.mean = mean
      self.cov = cov = np.asarray(cov)
      cov = np.squeeze(cov)
      self.nvars = nvars = len(mean)
  
      # in the following cov is original, self.cov is full matrix
      if cov.shape == ():
          # iid
          self.cov = np.eye(nvars) * cov
          self.covinv = np.eye(nvars) / cov
          self.cholcovinv = np.eye(nvars) / np.sqrt(cov)
      elif (cov.ndim == 1) and (len(cov) == nvars):
          # independent heteroskedastic
          self.cov = np.diag(cov)
          self.covinv = np.diag(1.0 / cov)
          self.cholcovinv = np.diag(1.0 / np.sqrt(cov))
      elif cov.shape == (nvars, nvars):  # python tuple comparison
          # general
          self.covinv = np.linalg.pinv(cov)
          self.cholcovinv = np.linalg.cholesky(self.covinv).T
      else:
          raise ValueError("cov has invalid shape")
  
      # store logdetcov for logpdf
      self.logdetcov = np.log(np.linalg.det(self.cov))
  
imports: import numpy
  from scipy import special
  from statsmodels.sandbox.distributions.multivariate import mvstdtprob
  from .extras import mvnormcdf
label_desc: Use image node_id 1 to create a new MVNormal0 object  with example: obj = MVNormal0(mean, cov)