class_docstr: The Matrix T distribution on `n x p` matrices.
  
  The Matrix T distribution is defined over `n x p` matrices and
  parameterized by a (batch of) `n x p` `loc` matrices, a (batch of) `n x n`
  `scale_row` matrix and a (batch of) `p x p` `scale_column` matrix.
  
  #### Mathematical Details
  
  The probability density function (pdf) is,
  
  ```none
  pdf(x; df, loc, scale_row, scale_column) =
     mvt_pdf(vec(x); df, vec(loc), scale_column (x) scale_row)
  ```
  
  where:
  
  * `df` is the degrees of freedom parameter.
  * `loc` is a `n x p` matrix,
  * `scale_row` is a linear operator in `R^{n x n}`, such that the covariance
    between rows can be expressed as `row_cov = scale_row @ scale_row.T`,
  * `scale_column` is a linear operator in `R^{p x p}`, such that the covariance
    between columns can be expressed as
    `col_cov = scale_column @ scale_column.T`,
  * `mvt_pdf` is the Multivariate T probability density function.
  * `vec` is the operation that converts a matrix to a column vector (
    in numpy terms this is `X.T.flatten()`)
  * `(x)` is the Kronecker product.
  
  #### Examples
  
  ```python
  tfd = tfp.distributions
  
  # Initialize a single 2 x 3 Matrix T.
  mu = [[1., 2, 3], [3., 4, 5]]
  col_cov = [[ 0.36,  0.12,  0.06],
             [ 0.12,  0.29, -0.13],
             [ 0.06, -0.13,  0.26]]
  scale_column = tf.linalg.LinearOperatorTriL(tf.cholesky(col_cov))
  # ==> [[ 0.6,  0. ,  0. ],
  #      [ 0.2,  0.5,  0. ],
  #      [ 0.1, -0.3,  0.4]])
  scale_row = tf.linalg.LinearOperatorDiag([0.9, 0.8])
  
  mvn = tfd.MatrixTLinearOperator(
      df=2.,
      loc=mu,
      scale_row=scale_row,
      scale_column=scale_column)
  
  # Initialize a 4-batch of 2 x 5-variate Matrix Ts.
  mu = tf.ones([2, 3, 5])
  scale_column_diag = [1., 2., 3., 4., 5.]
  scale_row_diag = [[0.3, 0.4, 0.6], [1., 2., 3.]]
  
  mvn = tfd.MatrixTLinearOperator(
      df=[1., 2., 3., 4.],
      loc=mu,
      scale_row=tf.linalg.LinearOperatorDiag(scale_row_diag),
      scale_column=tf.linalg.LinearOperatorDiag(scale_column_diag))
  ```
  
  NOTE: This Matrix-T distribution is parameterized slightly differently than
  the literature. Specifically, the parameterization is such that it is
  consistent with the vector case of a Multivariate Student-T.
  This also ensures that in the limit as `df` goes to infinity, we recover the
  Matrix-Normal distribution.
  
  The usual parameterization can be recovered by multiplying a scale factor
  by `sqrt(1. / df)` (which will in turn scale the `variance` and `covariance`
  by `1. / df`.
  
  
  #### References
  
  [1] G. Arjun, N. Daya, "Matrix Variate Distributions",
      Vol. 104. CRC Press.
class_docstr_tok: ["The","Matrix","T","distribution","on","`","n","x","p","`","matrices",".","The","Matrix","T","distribution","is","defined","over","`","n","x","p","`","matrices","and","parameterized","by","a","(","batch","of",")","`","n","x","p","`","`","loc","`","matrices",",","a","(","batch","of",")","`","n","x","n","`","`","scale_row","`","matrix","and","a","(","batch","of",")","`","p","x","p","`","`","scale_column","`","matrix",".","#","#","#","#","Mathematical","Details","The","probability","density","function","(","pdf",")","is",",","``","`","none","pdf","(","x",";","df",",","loc",",","scale_row",",","scale_column",")","=","mvt_pdf","(","vec","(","x",")",";","df",",","vec","(","loc",")",",","scale_column","(","x",")","scale_row",")","``","`","where",":","*","`","df","`","is","the","degrees","of","freedom","parameter",".","*","`","loc","`","is","a","`","n","x","p","`","matrix",",","*","`","scale_row","`","is","a","linear","operator","in","`","R^","{","n","x","n","}","`",",","such","that","the","covariance","between","rows","can","be","expressed","as","`","row_cov","=","scale_row","@","scale_row.T","`",",","*","`","scale_column","`","is","a","linear","operator","in","`","R^","{","p","x","p","}","`",",","such","that","the","covariance","between","columns","can","be","expressed","as","`","col_cov","=","scale_column","@","scale_column.T","`",",","*","`","mvt_pdf","`","is","the","Multivariate","T","probability","density","function",".","*","`","vec","`","is","the","operation","that","converts","a","matrix","to","a","column","vector","(","in","numpy","terms","this","is","`","X.T.flatten","(",")","`",")","*","`","(","x",")","`","is","the","Kronecker","product",".","#","#","#","#","Examples","``","`","python","tfd","=","tfp.distributions","#","Initialize","a","single","2","x","3","Matrix","T.","mu","=","[","[","1.",",","2",",","3","]",",","[","3.",",","4",",","5","]","]","col_cov","=","[","[","0.36",",","0.12",",","0.06","]",",","[","0.12",",","0.29",",","-0.13","]",",","[","0.06",",","-0.13",",","0.26","]","]","scale_column","=","tf.linalg.LinearOperatorTriL","(","tf.cholesky","(","col_cov",")",")","#","==",">","[","[","0.6",",","0.",",","0",".","]",",","#","[","0.2",",","0.5",",","0",".","]",",","#","[","0.1",",","-0.3",",","0.4","]","]",")","scale_row","=","tf.linalg.LinearOperatorDiag","(","[","0.9",",","0.8","]",")","mvn","=","tfd.MatrixTLinearOperator","(","df=2.",",","loc=mu",",","scale_row=scale_row",",","scale_column=scale_column",")","#","Initialize","a","4-batch","of","2","x","5-variate","Matrix","Ts",".","mu","=","tf.ones","(","[","2",",","3",",","5","]",")","scale_column_diag","=","[","1.",",","2.",",","3.",",","4.",",","5",".","]","scale_row_diag","=","[","[","0.3",",","0.4",",","0.6","]",",","[","1.",",","2.",",","3",".","]","]","mvn","=","tfd.MatrixTLinearOperator","(","df=","[","1.",",","2.",",","3.",",","4",".","]",",","loc=mu",",","scale_row=tf.linalg.LinearOperatorDiag","(","scale_row_diag",")",",","scale_column=tf.linalg.LinearOperatorDiag","(","scale_column_diag",")",")","``","`","NOTE",":","This","Matrix-T","distribution","is","parameterized","slightly","differently","than","the","literature",".","Specifically",",","the","parameterization","is","such","that","it","is","consistent","with","the","vector","case","of","a","Multivariate","Student-T",".","This","also","ensures","that","in","the","limit","as","`","df","`","goes","to","infinity",",","we","recover","the","Matrix-Normal","distribution",".","The","usual","parameterization","can","be","recovered","by","multiplying","a","scale","factor","by","`","sqrt","(","1",".","\/","df",")","`","(","which","will","in","turn","scale","the","`","variance","`","and","`","covariance","`","by","`","1",".","\/","df","`",".","#","#","#","#","References","[","1","]","G.","Arjun",",","N.","Daya",",","``","Matrix","Variate","Distributions","''",",","Vol",".","104",".","CRC","Press","."]
code: def _parameter_properties(cls, dtype, num_classes=None):
      return dict(
          df=parameter_properties.ParameterProperties(
              default_constraining_bijector_fn=(
                  lambda: softplus_bijector.Softplus(
                      low=dtype_util.eps(dtype)
                  )
              )
          ),
          loc=parameter_properties.ParameterProperties(event_ndims=2),
          scale_row=parameter_properties.BatchedComponentProperties(),
          scale_column=parameter_properties.BatchedComponentProperties(),
      )
  
imports: import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import identity
  from tensorflow_probability.python.bijectors import softplus
  from tensorflow_probability.python.distributions import distribution
  from tensorflow_probability.python.distributions import multivariate_student_t
  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 tensor_util
label_desc: Use image node_id 2 for calling the MatrixTLinearOperator obj's underlying member method code with example usage: obj._parameter_properties(cls, dtype, num_classes) and returns: dict