class_docstr: The [Multivariate Student's t-distribution](
  
  https://en.wikipedia.org/wiki/Multivariate_t-distribution) on `R^k`.
  
  #### Mathematical Details
  
  The probability density function (pdf) is,
  
  ```none
  pdf(x; df, loc, Sigma) = (1 + ||y||**2 / df)**(-0.5 (df + k)) / Z
  where,
  y = inv(Sigma) (x - loc)
  Z = abs(det(Sigma)) sqrt(df pi)**k Gamma(0.5 df) / Gamma(0.5 (df + k))
  ```
  
  where:
  
  * `df` is a positive scalar.
  * `loc` is a vector in `R^k`,
  * `Sigma` is a positive definite `shape' matrix in `R^{k x k}`, parameterized
     as `scale @ scale.T` in this class,
  * `Z` denotes the normalization constant, and,
  * `||y||**2` denotes the squared Euclidean norm of `y`.
  
  The Multivariate Student's t-distribution 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 ~ MultivariateT(loc=0, scale=1)   # Identity scale, zero shift.
  Y = scale @ X + loc
  ```
  
  #### Examples
  
  ```python
  tfd = tfp.distributions
  
  # Initialize a single 3-variate Student's t.
  df = 3.
  loc = [1., 2, 3]
  scale = [[ 0.6,  0. ,  0. ],
           [ 0.2,  0.5,  0. ],
           [ 0.1, -0.3,  0.4]]
  sigma = tf.matmul(scale, scale, adjoint_b=True)
  # ==> [[ 0.36,  0.12,  0.06],
  #      [ 0.12,  0.29, -0.13],
  #      [ 0.06, -0.13,  0.26]]
  
  mvt = tfd.MultivariateStudentTLinearOperator(
      df=df,
      loc=loc,
      scale=tf.linalg.LinearOperatorLowerTriangular(scale))
  
  # Covariance is closely related to the sigma matrix (for df=3, it is 3x of the
  # sigma matrix).
  
  mvt.covariance()
  # ==> [[ 1.08,  0.36,  0.18],
  #      [ 0.36,  0.87, -0.39],
  #      [ 0.18, -0.39,  0.78]]
  
  # Compute the pdf of an`R^3` observation; return a scalar.
  mvt.prob([-1., 0, 1])  # shape: []
  ```
class_docstr_tok: ["The","[","Multivariate","Student","'s","t-distribution","]","(","https",":","\/\/en.wikipedia.org\/wiki\/Multivariate_t-distribution",")","on","`","R^k","`",".","#","#","#","#","Mathematical","Details","The","probability","density","function","(","pdf",")","is",",","``","`","none","pdf","(","x",";","df",",","loc",",","Sigma",")","=","(","1","+","||y||","*","*","2","\/","df",")","*","*","(","-0.5","(","df","+","k",")",")","\/","Z","where",",","y","=","inv","(","Sigma",")","(","x","-","loc",")","Z","=","abs","(","det","(","Sigma",")",")","sqrt","(","df","pi",")","*","*","k","Gamma","(","0.5","df",")","\/","Gamma","(","0.5","(","df","+","k",")",")","``","`","where",":","*","`","df","`","is","a","positive","scalar",".","*","`","loc","`","is","a","vector","in","`","R^k","`",",","*","`","Sigma","`","is","a","positive","definite","`","shape","'","matrix","in","`","R^","{","k","x","k","}","`",",","parameterized","as","`","scale","@","scale.T","`","in","this","class",",","*","`","Z","`","denotes","the","normalization","constant",",","and",",","*","`","||y||","*","*","2","`","denotes","the","squared","Euclidean","norm","of","`","y","`",".","The","Multivariate","Student","'s","t-distribution","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","~","MultivariateT","(","loc=0",",","scale=1",")","#","Identity","scale",",","zero","shift",".","Y","=","scale","@","X","+","loc","``","`","#","#","#","#","Examples","``","`","python","tfd","=","tfp.distributions","#","Initialize","a","single","3-variate","Student","'s","t.","df","=","3.","loc","=","[","1.",",","2",",","3","]","scale","=","[","[","0.6",",","0.",",","0",".","]",",","[","0.2",",","0.5",",","0",".","]",",","[","0.1",",","-0.3",",","0.4","]","]","sigma","=","tf.matmul","(","scale",",","scale",",","adjoint_b=True",")","#","==",">","[","[","0.36",",","0.12",",","0.06","]",",","#","[","0.12",",","0.29",",","-0.13","]",",","#","[","0.06",",","-0.13",",","0.26","]","]","mvt","=","tfd.MultivariateStudentTLinearOperator","(","df=df",",","loc=loc",",","scale=tf.linalg.LinearOperatorLowerTriangular","(","scale",")",")","#","Covariance","is","closely","related","to","the","sigma","matrix","(","for","df=3",",","it","is","3x","of","the","#","sigma","matrix",")",".","mvt.covariance","(",")","#","==",">","[","[","1.08",",","0.36",",","0.18","]",",","#","[","0.36",",","0.87",",","-0.39","]",",","#","[","0.18",",","-0.39",",","0.78","]","]","#","Compute","the","pdf","of","an","`","R^3","`","observation",";","return","a","scalar",".","mvt.prob","(","[","-1.",",","0",",","1","]",")","#","shape",":","[","]","``","`"]
docstr: Construct Multivariate Student's t-distribution on `R^k`.
  
  The `batch_shape` is the broadcast shape between `df`, `loc` and `scale`
  arguments.
  
  The `event_shape` is given by last dimension of the matrix implied by
  `scale`. The last dimension of `loc` must broadcast with this.
  
  Additional leading dimensions (if any) will index batches.
  
  Args:
    df: A positive floating-point `Tensor`. Has shape `[B1, ..., Bb]` where `b
      >= 0`.
    loc: Floating-point `Tensor`. Has shape `[B1, ..., Bb, k]` where `k` is
      the event size.
    scale: Instance of `LinearOperator` with a floating `dtype` and shape
      `[B1, ..., Bb, k, k]`.
    validate_args: Python `bool`, default `False`. Whether to validate input
      with asserts. If `validate_args` is `False`, and the inputs are invalid,
      correct behavior is not guaranteed.
    allow_nan_stats: Python `bool`, default `True`. If `False`, raise an
      exception if a statistic (e.g. mean/variance/etc...) is undefined for
      any batch member If `True`, batch members with valid parameters leading
      to undefined statistics will return NaN for this statistic.
    name: The name to give Ops created by the initializer.
  
  Raises:
    TypeError: if not `scale.dtype.is_floating`.
    ValueError: if not `scale.is_non_singular`.
docstr_tok: ["Construct","Multivariate","Student","'s","t-distribution","on","`","R^k","`",".","The","`","batch_shape","`","is","the","broadcast","shape","between","`","df","`",",","`","loc","`","and","`","scale","`","arguments",".","The","`","event_shape","`","is","given","by","last","dimension","of","the","matrix","implied","by","`","scale","`",".","The","last","dimension","of","`","loc","`","must","broadcast","with","this",".","Additional","leading","dimensions","(","if","any",")","will","index","batches",".","Args",":","df",":","A","positive","floating-point","`","Tensor","`",".","Has","shape","`","[","B1",",","...",",","Bb","]","`","where","`","b",">","=","0","`",".","loc",":","Floating-point","`","Tensor","`",".","Has","shape","`","[","B1",",","...",",","Bb",",","k","]","`","where","`","k","`","is","the","event","size",".","scale",":","Instance","of","`","LinearOperator","`","with","a","floating","`","dtype","`","and","shape","`","[","B1",",","...",",","Bb",",","k",",","k","]","`",".","validate_args",":","Python","`","bool","`",",","default","`","False","`",".","Whether","to","validate","input","with","asserts",".","If","`","validate_args","`","is","`","False","`",",","and","the","inputs","are","invalid",",","correct","behavior","is","not","guaranteed",".","allow_nan_stats",":","Python","`","bool","`",",","default","`","True","`",".","If","`","False","`",",","raise","an","exception","if","a","statistic","(","e.g",".","mean\/variance\/etc","...",")","is","undefined","for","any","batch","member","If","`","True","`",",","batch","members","with","valid","parameters","leading","to","undefined","statistics","will","return","NaN","for","this","statistic",".","name",":","The","name","to","give","Ops","created","by","the","initializer",".","Raises",":","TypeError",":","if","not","`","scale.dtype.is_floating","`",".","ValueError",":","if","not","`","scale.is_non_singular","`","."]
code: def __init__(
      self,
      df,
      loc,
      scale,
      validate_args=False,
      allow_nan_stats=True,
      name="MultivariateStudentTLinearOperator",
  ):
      """Construct Multivariate Student's t-distribution on `R^k`.
  
      The `batch_shape` is the broadcast shape between `df`, `loc` and `scale`
      arguments.
  
      The `event_shape` is given by last dimension of the matrix implied by
      `scale`. The last dimension of `loc` must broadcast with this.
  
      Additional leading dimensions (if any) will index batches.
  
      Args:
        df: A positive floating-point `Tensor`. Has shape `[B1, ..., Bb]` where `b
          >= 0`.
        loc: Floating-point `Tensor`. Has shape `[B1, ..., Bb, k]` where `k` is
          the event size.
        scale: Instance of `LinearOperator` with a floating `dtype` and shape
          `[B1, ..., Bb, k, k]`.
        validate_args: Python `bool`, default `False`. Whether to validate input
          with asserts. If `validate_args` is `False`, and the inputs are invalid,
          correct behavior is not guaranteed.
        allow_nan_stats: Python `bool`, default `True`. If `False`, raise an
          exception if a statistic (e.g. mean/variance/etc...) is undefined for
          any batch member If `True`, batch members with valid parameters leading
          to undefined statistics will return NaN for this statistic.
        name: The name to give Ops created by the initializer.
  
      Raises:
        TypeError: if not `scale.dtype.is_floating`.
        ValueError: if not `scale.is_non_singular`.
      """
      parameters = dict(locals())
      if not dtype_util.is_floating(scale.dtype):
          raise TypeError("`scale` must have floating-point dtype.")
      if validate_args and not scale.is_non_singular:
          raise ValueError("`scale` must be non-singular.")
  
      with tf.name_scope(name) as name:
          dtype = dtype_util.common_dtype(
              [df, loc, scale], dtype_hint=tf.float32
          )
          self._df = tensor_util.convert_nonref_to_tensor(
              df, name="df", dtype=dtype
          )
          self._loc = tensor_util.convert_nonref_to_tensor(
              loc, name="loc", dtype=dtype
          )
          self._scale = scale
  
          super(MultivariateStudentTLinearOperator, self).__init__(
              dtype=dtype,
              reparameterization_type=reparameterization.FULLY_REPARAMETERIZED,
              parameters=parameters,
              name=name,
              validate_args=validate_args,
              allow_nan_stats=allow_nan_stats,
          )
          self._parameters = parameters
  
imports: import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import identity
  from tensorflow_probability.python.bijectors import softplus
  from tensorflow_probability.python.distributions import chi2
  from tensorflow_probability.python.distributions import distribution
  from tensorflow_probability.python.distributions import mvn_linear_operator
  from tensorflow_probability.python.internal import assert_util
  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 reparameterization
  from tensorflow_probability.python.internal import samplers
  from tensorflow_probability.python.internal import tensor_util
  from tensorflow_probability.python.math import numeric
  from tensorflow_probability.python.math import special
label_desc: Use image node_id 1 to create a new MultivariateStudentTLinearOperator object from inherited base classes: distribution with example: obj = MultivariateStudentTLinearOperator(df, loc, scale, validate_args, allow_nan_stats, name)