class_docstr: Create a multivaraite Normal distribution object.
  
  Parameters
  ----------
  loc : Tensor
      mean of the distribution.
  cov : Tensor
      covariance matrix of the distribution
  precision : Tensor
      precision matrix of the distribution
  scale_tril : Tensor
      lower-triangular factor of the covariance
class_docstr_tok: ["Create","a","multivaraite","Normal","distribution","object",".","Parameters","--","--","--","--","--","loc",":","Tensor","mean","of","the","distribution",".","cov",":","Tensor","covariance","matrix","of","the","distribution","precision",":","Tensor","precision","matrix","of","the","distribution","scale_tril",":","Tensor","lower-triangular","factor","of","the","covariance"]
code: def log_prob(self, value):
      if self._validate_args:
          self._validate_samples(value)
      diff = value - self.loc
      # diff.T * inv(\Sigma) * diff
      M = (
          np.einsum(
              "...i,...i->...",
              diff,
              np.einsum(
                  "...jk,...j->...k", self.precision, diff
              ),  # Batch matrix vector multiply
          )
          * -0.5
      )
      #   (2 * \pi)^{-k/2} * det(\Sigma)^{-1/2}
      # = det(2 * \pi * L * L.T)^{-1/2}
      # = det(\sqrt(2 * \pi) * L)^{-1}
      half_log_det = np.log(
          np.diagonal(
              np.sqrt(2 * math.pi) * self.scale_tril, axis1=-2, axis2=-1
          )
      ).sum(-1)
      return M - half_log_det
  
file_path: mxnet/python/mxnet/gluon/probability/distributions/multivariate_normal.py
imports: import math
  from .distribution import Distribution
  from .constraint import Real, PositiveDefinite, LowerCholesky
  from .utils import cached_property
  from ....None import np
label_desc: Use image node_id 10 for calling the MultivariateNormal obj's underlying member method code with example usage: obj.log_prob(value) and returns: unknown