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"]
docstr: P = inv(L * L.T) = inv(L.T) * inv(L)
  flip(P) = flip(inv(L.T)) * flip(inv(L))
  flip(inv(L.T)) = Cholesky(flip(P))
  L = flip(Cholesky(flip(P))).T
docstr_tok: ["P","=","inv","(","L","*","L.T",")","=","inv","(","L.T",")","*","inv","(","L",")","flip","(","P",")","=","flip","(","inv","(","L.T",")",")","*","flip","(","inv","(","L",")",")","flip","(","inv","(","L.T",")",")","=","Cholesky","(","flip","(","P",")",")","L","=","flip","(","Cholesky","(","flip","(","P",")",")",")",".T"]
code: def _precision_to_scale_tril(self, P):
      """
      P = inv(L * L.T) = inv(L.T) * inv(L)
      flip(P) = flip(inv(L.T)) * flip(inv(L))
      flip(inv(L.T)) = Cholesky(flip(P))
      L = flip(Cholesky(flip(P))).T
      """
      L_flip_inv_T = np.linalg.cholesky(np.flip(P, (-1, -2)))
      L = np.linalg.inv(np.flip(L_flip_inv_T, (-1, -2)).mT)
      return L
  
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 2 for calling the MultivariateNormal obj's underlying member method code with example usage: obj._precision_to_scale_tril(P) and returns: L