class_docstr: The matrix Wishart distribution parameterized with Cholesky factors.
  
  This distribution is defined by a scalar degrees of freedom `df` and a scale
  matrix, expressed as a lower triangular Cholesky factor.
  
  #### Mathematical Details
  
  The probability density function (pdf) is,
  
  ```none
  pdf(X; df, scale) = det(X)**(0.5 (df-k-1)) exp(-0.5 tr[inv(scale) X]) / Z
  Z = 2**(0.5 df k) |det(scale)|**(0.5 df) Gamma_k(0.5 df)
  ```
  
  where:
  * `df >= k` denotes the degrees of freedom,
  * `scale` is a symmetric, positive definite, `k x k` matrix equivalent to
    `scale_tril * scale_tril.T`,
  * `Z` is the normalizing constant, and,
  * `Gamma_k` is the [multivariate Gamma function](
    https://en.wikipedia.org/wiki/Multivariate_gamma_function).
  
  
  #### Examples
  
  ```python
  # Initialize a single 3x3 Wishart with Cholesky factored scale matrix and 5
  # degrees-of-freedom.(*)
  df = 5
  chol_scale = tf.linalg.cholesky(...)  # Shape is [3, 3].
  dist = tfd.WishartTriL(df=df, scale_tril=chol_scale)
  
  # Evaluate this on an observation in R^3, returning a scalar.
  x = ...  # A 3x3 positive definite matrix.
  dist.prob(x)  # Shape is [], a scalar.
  
  # Evaluate this on a two observations, each in R^{3x3}, returning a length two
  # Tensor.
  x = [x0, x1]  # Shape is [2, 3, 3].
  dist.prob(x)  # Shape is [2].
  
  # (*) - To efficiently create a trainable covariance matrix, see the example
  #   in tfp.distributions.matrix_diag_transform.
  ```
class_docstr_tok: ["The","matrix","Wishart","distribution","parameterized","with","Cholesky","factors",".","This","distribution","is","defined","by","a","scalar","degrees","of","freedom","`","df","`","and","a","scale","matrix",",","expressed","as","a","lower","triangular","Cholesky","factor",".","#","#","#","#","Mathematical","Details","The","probability","density","function","(","pdf",")","is",",","``","`","none","pdf","(","X",";","df",",","scale",")","=","det","(","X",")","*","*","(","0.5","(","df-k-1",")",")","exp","(","-0.5","tr","[","inv","(","scale",")","X","]",")","\/","Z","Z","=","2","*","*","(","0.5","df","k",")","|det","(","scale",")","|","*","*","(","0.5","df",")","Gamma_k","(","0.5","df",")","``","`","where",":","*","`","df",">","=","k","`","denotes","the","degrees","of","freedom",",","*","`","scale","`","is","a","symmetric",",","positive","definite",",","`","k","x","k","`","matrix","equivalent","to","`","scale_tril","*","scale_tril.T","`",",","*","`","Z","`","is","the","normalizing","constant",",","and",",","*","`","Gamma_k","`","is","the","[","multivariate","Gamma","function","]","(","https",":","\/\/en.wikipedia.org\/wiki\/Multivariate_gamma_function",")",".","#","#","#","#","Examples","``","`","python","#","Initialize","a","single","3x3","Wishart","with","Cholesky","factored","scale","matrix","and","5","#","degrees-of-freedom",".","(","*",")","df","=","5","chol_scale","=","tf.linalg.cholesky","(","...",")","#","Shape","is","[","3",",","3","]",".","dist","=","tfd.WishartTriL","(","df=df",",","scale_tril=chol_scale",")","#","Evaluate","this","on","an","observation","in","R^3",",","returning","a","scalar",".","x","=","...","#","A","3x3","positive","definite","matrix",".","dist.prob","(","x",")","#","Shape","is","[","]",",","a","scalar",".","#","Evaluate","this","on","a","two","observations",",","each","in","R^","{","3x3","}",",","returning","a","length","two","#","Tensor",".","x","=","[","x0",",","x1","]","#","Shape","is","[","2",",","3",",","3","]",".","dist.prob","(","x",")","#","Shape","is","[","2","]",".","#","(","*",")","-","To","efficiently","create","a","trainable","covariance","matrix",",","see","the","example","#","in","tfp.distributions.matrix_diag_transform",".","``","`"]
code: def _parameter_control_dependencies(self, is_init):
      assertions = super(
          WishartTriL, self
      )._parameter_control_dependencies(is_init)
  
      if not self.validate_args:
          assert not assertions
          return []
  
      if is_init != tensor_util.is_ref(self._scale_tril):
          shape = ps.shape(self._scale_tril)
          assertions.extend(
              [
                  assert_util.assert_positive(
                      tf.linalg.diag_part(self._scale_tril),
                      message="`scale_tril` must be positive definite.",
                  ),
                  assert_util.assert_equal(
                      shape[-1],
                      shape[-2],
                      message="`scale_tril` must be square.",
                  ),
              ]
          )
      return assertions
  
imports: import math
  import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import chain
  from tensorflow_probability.python.bijectors import cholesky_outer_product
  from tensorflow_probability.python.bijectors import fill_scale_tril
  from tensorflow_probability.python.bijectors import softplus
  from tensorflow_probability.python.bijectors import transform_diagonal
  from tensorflow_probability.python.distributions import distribution
  from tensorflow_probability.python.distributions import gamma
  from tensorflow_probability.python.internal import assert_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.internal import tensorshape_util
label_desc: Use image node_id 4 for calling the WishartTriL obj's underlying member method code with example usage: obj._parameter_control_dependencies(is_init) and returns: assertions, list