def __init__(self, df, scale, cholesky_input_output_matrices=False, validate_args=False, allow_nan_stats=True, name="WishartFull"): """Construct Wishart distributions. Args: df: `float` or `double` `Tensor`. Degrees of freedom, must be greater than or equal to dimension of the scale matrix. scale: `float` or `double` `Tensor`. The symmetric positive definite scale matrix of the distribution. cholesky_input_output_matrices: Python `bool`. Any function which whose input or output is a matrix assumes the input is Cholesky and returns a Cholesky factored matrix. Example `log_prob` input takes a Cholesky and `sample_n` returns a Cholesky when `cholesky_input_output_matrices=True`. validate_args: Python `bool`, default `False`. When `True` distribution parameters are checked for validity despite possibly degrading runtime performance. When `False` invalid inputs may silently render incorrect outputs. allow_nan_stats: Python `bool`, default `True`. When `True`, statistics (e.g., mean, mode, variance) use the value "`NaN`" to indicate the result is undefined. When `False`, an exception is raised if one or more of the statistic's batch members are undefined. name: Python `str` name prefixed to Ops created by this class. """ parameters = dict(locals()) with ops.name_scope(name) as name: with ops.name_scope("init", values=[scale]): scale = ops.convert_to_tensor(scale) if validate_args: scale = distribution_util.assert_symmetric(scale) chol = linalg_ops.cholesky(scale) chol = control_flow_ops.with_dependencies([ check_ops.assert_positive(array_ops.matrix_diag_part(chol)) ] if validate_args else [], chol) super(WishartFull, self).__init__( df=df, scale_operator=linalg.LinearOperatorLowerTriangular( tril=chol, is_non_singular=True, is_positive_definite=True, is_square=True), cholesky_input_output_matrices=cholesky_input_output_matrices, validate_args=validate_args, allow_nan_stats=allow_nan_stats, name=name) self._parameters = parameters
def __init__(self, matrix, verify_pd=True, name="OperatorPDFull"): """Initialize an OperatorPDFull. Args: matrix: Shape `[N1,...,Nb, k, k]` tensor with `b >= 0`, `k >= 1`. The last two dimensions should be `k x k` symmetric positive definite matrices. verify_pd: Whether to check that `matrix` is symmetric positive definite. If `verify_pd` is `False`, correct behavior is not guaranteed. name: A name to prepend to all ops created by this class. """ with ops.name_scope(name): with ops.name_scope("init", values=[matrix]): matrix = ops.convert_to_tensor(matrix) # Check symmetric here. Positivity will be verified by checking the # diagonal of the Cholesky factor inside the parent class. The Cholesky # factorization linalg_ops.cholesky() does not always fail for non PSD # matrices, so don't rely on that. if verify_pd: matrix = distribution_util.assert_symmetric(matrix) chol = linalg_ops.cholesky(matrix) super(OperatorPDFull, self).__init__(chol, verify_pd=verify_pd)
def __init__(self, matrix, verify_pd=True, name="OperatorPDFull"): """Initialize an OperatorPDFull. Args: matrix: Shape `[N1,...,Nb, k, k]` tensor with `b >= 0`, `k >= 1`. The last two dimensions should be `k x k` symmetric positive definite matrices. verify_pd: Whether to check that `matrix` is symmetric positive definite. If `verify_pd` is `False`, correct behavior is not guaranteed. name: A name to prepend to all ops created by this class. """ with ops.name_scope(name): with ops.name_scope("init", values=[matrix]): matrix = ops.convert_to_tensor(matrix) # Check symmetric here. Positivity will be verified by checking the # diagonal of the Cholesky factor inside the parent class. The Cholesky # factorization .batch_cholesky() does not always fail for non PSD # matrices, so don't rely on that. if verify_pd: matrix = distribution_util.assert_symmetric(matrix) chol = linalg_ops.batch_cholesky(matrix) super(OperatorPDFull, self).__init__(chol, verify_pd=verify_pd)