class_docstr: The multivariate normal distribution on `R^k`.
  
  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`
  `scale` matrix; `covariance = scale @ scale.T` where `@` denotes
  matrix-multiplication.
  
  #### Mathematical Details
  
  The probability density function (pdf) is,
  
  ```none
  pdf(x; loc, scale) = exp(-0.5 ||y||**2) / Z,
  y = inv(scale) @ (x - loc),
  Z = (2 pi)**(0.5 k) |det(scale)|,
  ```
  
  where:
  
  * `loc` is a vector in `R^k`,
  * `scale` is a linear operator in `R^{k x k}`, `cov = scale @ scale.T`,
  * `Z` denotes the normalization constant, and,
  * `||y||**2` denotes the squared Euclidean norm of `y`.
  
  A (non-batch) `scale` matrix is:
  
  ```none
  scale = diag(scale_diag)
  ```
  
  where:
  
  * `scale_diag.shape = [k]`
  
  Additional leading dimensions (if any) will index batches.
  
  If `scale_diag` is `None`, then `scale` is the Identity matrix.
  
  The MultivariateNormal distribution is a member of the [location-scale
  family](https://en.wikipedia.org/wiki/Location-scale_family), i.e., it can be
  constructed as,
  
  ```none
  X ~ MultivariateNormal(loc=0, scale=1)   # Identity scale, zero shift.
  Y = scale @ X + loc
  ```
  
  #### Examples
  
  ```python
  tfd = tfp.distributions
  
  # Initialize a single 2-variate Gaussian.
  mvn = tfd.MultivariateNormalDiag(
      loc=[1., -1],
      scale_diag=[1, 2.])
  
  mvn.mean()
  # ==> [1., -1]
  
  mvn.stddev()
  # ==> [1., 2]
  
  # Evaluate this on an observation in `R^2`, returning a scalar.
  mvn.prob([-1., 0])  # shape: []
  
  # Initialize a 2-batch of 3-variate Gaussians.
  mvn = tfd.MultivariateNormalDiag(
      loc=[[1., 2, 3],
           [11, 22, 33]],           # shape: [2, 3]
      scale_diag=[[1., 2, 3],
                  [0.5, 1, 1.5]])  # shape: [2, 3]
  
  # Evaluate this on a two observations, each in `R^3`, returning a length-2
  # vector.
  x = [[-1., 0, 1],
       [-11, 0, 11.]]   # shape: [2, 3].
  mvn.prob(x)    # shape: [2]
  ```
class_docstr_tok: ["The","multivariate","normal","distribution","on","`","R^k","`",".","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","`","`","scale","`","matrix",";","`","covariance","=","scale","@","scale.T","`","where","`","@","`","denotes","matrix-multiplication",".","#","#","#","#","Mathematical","Details","The","probability","density","function","(","pdf",")","is",",","``","`","none","pdf","(","x",";","loc",",","scale",")","=","exp","(","-0.5","||y||","*","*","2",")","\/","Z",",","y","=","inv","(","scale",")","@","(","x","-","loc",")",",","Z","=","(","2","pi",")","*","*","(","0.5","k",")","|det","(","scale",")","|",",","``","`","where",":","*","`","loc","`","is","a","vector","in","`","R^k","`",",","*","`","scale","`","is","a","linear","operator","in","`","R^","{","k","x","k","}","`",",","`","cov","=","scale","@","scale.T","`",",","*","`","Z","`","denotes","the","normalization","constant",",","and",",","*","`","||y||","*","*","2","`","denotes","the","squared","Euclidean","norm","of","`","y","`",".","A","(","non-batch",")","`","scale","`","matrix","is",":","``","`","none","scale","=","diag","(","scale_diag",")","``","`","where",":","*","`","scale_diag.shape","=","[","k","]","`","Additional","leading","dimensions","(","if","any",")","will","index","batches",".","If","`","scale_diag","`","is","`","None","`",",","then","`","scale","`","is","the","Identity","matrix",".","The","MultivariateNormal","distribution","is","a","member","of","the","[","location-scale","family","]","(","https",":","\/\/en.wikipedia.org\/wiki\/Location-scale_family",")",",","i.e.",",","it","can","be","constructed","as",",","``","`","none","X","~","MultivariateNormal","(","loc=0",",","scale=1",")","#","Identity","scale",",","zero","shift",".","Y","=","scale","@","X","+","loc","``","`","#","#","#","#","Examples","``","`","python","tfd","=","tfp.distributions","#","Initialize","a","single","2-variate","Gaussian",".","mvn","=","tfd.MultivariateNormalDiag","(","loc=","[","1.",",","-1","]",",","scale_diag=","[","1",",","2",".","]",")","mvn.mean","(",")","#","==",">","[","1.",",","-1","]","mvn.stddev","(",")","#","==",">","[","1.",",","2","]","#","Evaluate","this","on","an","observation","in","`","R^2","`",",","returning","a","scalar",".","mvn.prob","(","[","-1.",",","0","]",")","#","shape",":","[","]","#","Initialize","a","2-batch","of","3-variate","Gaussians",".","mvn","=","tfd.MultivariateNormalDiag","(","loc=","[","[","1.",",","2",",","3","]",",","[","11",",","22",",","33","]","]",",","#","shape",":","[","2",",","3","]","scale_diag=","[","[","1.",",","2",",","3","]",",","[","0.5",",","1",",","1.5","]","]",")","#","shape",":","[","2",",","3","]","#","Evaluate","this","on","a","two","observations",",","each","in","`","R^3","`",",","returning","a","length-2","#","vector",".","x","=","[","[","-1.",",","0",",","1","]",",","[","-11",",","0",",","11",".","]","]","#","shape",":","[","2",",","3","]",".","mvn.prob","(","x",")","#","shape",":","[","2","]","``","`"]
code: def _parameter_properties(cls, dtype, num_classes=None):
      # pylint: disable=g-long-lambda
      return dict(
          loc=parameter_properties.ParameterProperties(event_ndims=1),
          scale_diag=parameter_properties.ParameterProperties(
              event_ndims=1,
              default_constraining_bijector_fn=(
                  lambda: softplus_bijector.Softplus(
                      low=dtype_util.eps(dtype)
                  )
              ),
          ),
      )
  
file_path: probability/tensorflow_probability/python/distributions/mvn_diag.py
imports: import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import softplus
  from tensorflow_probability.python.distributions import mvn_linear_operator
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import parameter_properties
  from tensorflow_probability.python.internal import tensor_util
  from tensorflow_probability.python.math import generic
  from tensorflow.python.ops.linalg import linear_operator
label_desc: Use image node_id 2 for calling the MultivariateNormalDiag obj's underlying member method code with example usage: obj._parameter_properties(cls, dtype, num_classes) and returns: dict