class_docstr: A multivariate normal on `R^k`, parametrized by a precision factor.
  
  The multivariate normal distribution is defined over `R^k` and parameterized
  by a (batch of) length-`k` `loc` vector (aka "mu") and a (batch of) `k x k`
  `precision_factor` `LinearOperator`, and optionally a `precision`.
  
  The precision of this distribution is the inverse of its covariance matrix.
  The `precision_factor` is a matrix such that,
  
  ```
  precision = precision_factor @ precision_factor.T,
  ```
  
  where `@` denotes matrix-multiplication and `.T` transposition.
  
  Providing `precision` may improve efficiency in computation of the log
  probability density. This will be the case if matrix-vector products with
  the `precision` linear operator are more efficient than with
  `precision_factor`. For example, if `precision` has a sparse structure
  `D + X @ X.T`, where `D` is diagonal and `X` is low rank, then one may use a
  `LinearOperatorLowRankUpdate` for the `precision` arg.
  
  #### Mathematical Details
  
  The probability density function (pdf) is,
  
  ```none
  pdf(x; loc, precision_factor) = exp(-0.5 ||y||**2) / Z,
  y = precision_factor @ (x - loc),
  Z = (2 pi)**(0.5 k) / |det(precision_factor)|,
  ```
  
  where:
  
  * `loc` is a vector in `R^k`,
  * `Z` denotes the normalization constant, and,
  * `||y||**2` denotes the squared Euclidean norm of `y`.
  
  
  #### Examples
  
  ```python
  tfd_e = tfp.experimental.distributions
  
  # Initialize a single 3-variate Gaussian.
  mu = [1., 2, 3]
  cov = [[ 0.36,  0.12,  0.06],
         [ 0.12,  0.29, -0.13],
         [ 0.06, -0.13,  0.26]]
  precision = tf.linalg.inv(cov)
  precision_factor = tf.linalg.cholesky(precision)
  
  mvn = tfd_e.MultivariateNormalPrecisionFactorLinearOperator(
      loc=mu,
      precision_factor=tf.linalg.LinearOperatorFullmatrix(precision_factor),
  )
  
  # Covariance is equal to `cov`.
  mvn.covariance()
  # ==> [[ 0.36,  0.12,  0.06],
  #      [ 0.12,  0.29, -0.13],
  #      [ 0.06, -0.13,  0.26]]
  
  # Compute the pdf of an`R^3` observation; return a scalar.
  mvn.prob([-1., 0, 1])  # shape: []
  
  # Initialize a 2-batch of 3-variate Gaussians.
  mu = [[1., 2, 3],
        [11, 22, 33]]              # shape: [2, 3]
  variance = [[1., 2, 3],
              [0.5, 1, 1.5]]     # shape: [2, 3]
  inverse_variance = 1. / tf.constant(variance)
  diagonal_precision_factors = tf.sqrt(inverse_variance)
  
  mvn = tfd_e.MultivariateNormalPrecisionFactorLinearOperator(
      loc=mu,
      precision_factor=tf.linalg.LinearOperatorDiag(diagonal_precision_factors),
  )
  
  # Compute the pdf of two `R^3` observations; return a length-2 vector.
  x = [[-0.9, 0, 0.1],
       [-10, 0, 9]]     # shape: [2, 3]
  mvn.prob(x)           # shape: [2]
  ```
class_docstr_tok: ["A","multivariate","normal","on","`","R^k","`",",","parametrized","by","a","precision","factor",".","The","multivariate","normal","distribution","is","defined","over","`","R^k","`","and","parameterized","by","a","(","batch","of",")","length-","`","k","`","`","loc","`","vector","(","aka","``","mu","''",")","and","a","(","batch","of",")","`","k","x","k","`","`","precision_factor","`","`","LinearOperator","`",",","and","optionally","a","`","precision","`",".","The","precision","of","this","distribution","is","the","inverse","of","its","covariance","matrix",".","The","`","precision_factor","`","is","a","matrix","such","that",",","``","`","precision","=","precision_factor","@","precision_factor.T",",","``","`","where","`","@","`","denotes","matrix-multiplication","and","`",".T","`","transposition",".","Providing","`","precision","`","may","improve","efficiency","in","computation","of","the","log","probability","density",".","This","will","be","the","case","if","matrix-vector","products","with","the","`","precision","`","linear","operator","are","more","efficient","than","with","`","precision_factor","`",".","For","example",",","if","`","precision","`","has","a","sparse","structure","`","D","+","X","@","X.T","`",",","where","`","D","`","is","diagonal","and","`","X","`","is","low","rank",",","then","one","may","use","a","`","LinearOperatorLowRankUpdate","`","for","the","`","precision","`","arg",".","#","#","#","#","Mathematical","Details","The","probability","density","function","(","pdf",")","is",",","``","`","none","pdf","(","x",";","loc",",","precision_factor",")","=","exp","(","-0.5","||y||","*","*","2",")","\/","Z",",","y","=","precision_factor","@","(","x","-","loc",")",",","Z","=","(","2","pi",")","*","*","(","0.5","k",")","\/","|det","(","precision_factor",")","|",",","``","`","where",":","*","`","loc","`","is","a","vector","in","`","R^k","`",",","*","`","Z","`","denotes","the","normalization","constant",",","and",",","*","`","||y||","*","*","2","`","denotes","the","squared","Euclidean","norm","of","`","y","`",".","#","#","#","#","Examples","``","`","python","tfd_e","=","tfp.experimental.distributions","#","Initialize","a","single","3-variate","Gaussian",".","mu","=","[","1.",",","2",",","3","]","cov","=","[","[","0.36",",","0.12",",","0.06","]",",","[","0.12",",","0.29",",","-0.13","]",",","[","0.06",",","-0.13",",","0.26","]","]","precision","=","tf.linalg.inv","(","cov",")","precision_factor","=","tf.linalg.cholesky","(","precision",")","mvn","=","tfd_e.MultivariateNormalPrecisionFactorLinearOperator","(","loc=mu",",","precision_factor=tf.linalg.LinearOperatorFullmatrix","(","precision_factor",")",",",")","#","Covariance","is","equal","to","`","cov","`",".","mvn.covariance","(",")","#","==",">","[","[","0.36",",","0.12",",","0.06","]",",","#","[","0.12",",","0.29",",","-0.13","]",",","#","[","0.06",",","-0.13",",","0.26","]","]","#","Compute","the","pdf","of","an","`","R^3","`","observation",";","return","a","scalar",".","mvn.prob","(","[","-1.",",","0",",","1","]",")","#","shape",":","[","]","#","Initialize","a","2-batch","of","3-variate","Gaussians",".","mu","=","[","[","1.",",","2",",","3","]",",","[","11",",","22",",","33","]","]","#","shape",":","[","2",",","3","]","variance","=","[","[","1.",",","2",",","3","]",",","[","0.5",",","1",",","1.5","]","]","#","shape",":","[","2",",","3","]","inverse_variance","=","1",".","\/","tf.constant","(","variance",")","diagonal_precision_factors","=","tf.sqrt","(","inverse_variance",")","mvn","=","tfd_e.MultivariateNormalPrecisionFactorLinearOperator","(","loc=mu",",","precision_factor=tf.linalg.LinearOperatorDiag","(","diagonal_precision_factors",")",",",")","#","Compute","the","pdf","of","two","`","R^3","`","observations",";","return","a","length-2","vector",".","x","=","[","[","-0.9",",","0",",","0.1","]",",","[","-10",",","0",",","9","]","]","#","shape",":","[","2",",","3","]","mvn.prob","(","x",")","#","shape",":","[","2","]","``","`"]
code: def _stddev(self):
      return tf.sqrt(self._variance())
  
imports: import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import invert
  from tensorflow_probability.python.bijectors import scale_matvec_linear_operator
  from tensorflow_probability.python.bijectors import shift
  from tensorflow_probability.python.distributions import mvn_diag
  from tensorflow_probability.python.distributions import transformed_distribution
  from tensorflow_probability.python.internal import distribution_util
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import parameter_properties
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.internal import tensor_util
  from tensorflow_probability.python.internal import tensorshape_util
label_desc: Use image node_id 9 for calling the MultivariateNormalPrecisionFactorLinearOperator obj's underlying member method code with example usage: obj._stddev() and returns: tf