def make_tril_scale(loc=None,<EOL>scale_tril=None,<EOL>scale_diag=None,<EOL>scale_identity_multiplier=None,<EOL>shape_hint=None,<EOL>validate_args=False,<EOL>assert_positive=False,<EOL>name=None):
def _maybe_attach_assertion(x):<EOL><INDENT>if not validate_args:<EOL><INDENT>return x<EOL><DEDENT>if assert_positive:<EOL><INDENT>return with_dependencies([<EOL>assert_util.assert_positive(<EOL>tf.linalg.diag_part(x), message="<STR_LIT>"),<EOL>], x)<EOL><DEDENT>return with_dependencies([<EOL>assert_util.assert_none_equal(<EOL>tf.linalg.diag_part(x),<EOL>tf.zeros([], x.dtype),<EOL>message="<STR_LIT>"),<EOL>], x)<EOL><DEDENT>with tf.name_scope(name or "<STR_LIT>"):<EOL><INDENT>dtype = dtype_util.common_dtype(<EOL>[loc, scale_tril, scale_diag, scale_identity_multiplier],<EOL>preferred_dtype=tf.float32)<EOL>loc = _convert_to_tensor(loc, name="<STR_LIT>", dtype=dtype)<EOL>scale_tril = _convert_to_tensor(scale_tril, name="<STR_LIT>", dtype=dtype)<EOL>scale_diag = _convert_to_tensor(scale_diag, name="<STR_LIT>", dtype=dtype)<EOL>scale_identity_multiplier = _convert_to_tensor(<EOL>scale_identity_multiplier,<EOL>name="<STR_LIT>",<EOL>dtype=dtype)<EOL><DEDENT>if scale_tril is not None:<EOL><INDENT>scale_tril = tf.linalg.band_part(scale_tril, -<NUM_LIT:1>, <NUM_LIT:0>)  <EOL>tril_diag = tf.linalg.diag_part(scale_tril)<EOL>if scale_diag is not None:<EOL><INDENT>tril_diag += scale_diag<EOL><DEDENT>if scale_identity_multiplier is not None:<EOL><INDENT>tril_diag += scale_identity_multiplier[..., tf.newaxis]<EOL><DEDENT>scale_tril = tf.linalg.set_diag(scale_tril, tril_diag)<EOL>return tf.linalg.LinearOperatorLowerTriangular(<EOL>tril=_maybe_attach_assertion(scale_tril),<EOL>is_non_singular=True,<EOL>is_self_adjoint=False,<EOL>is_positive_definite=assert_positive)<EOL><DEDENT>return make_diag_scale(<EOL>loc=loc,<EOL>scale_diag=scale_diag,<EOL>scale_identity_multiplier=scale_identity_multiplier,<EOL>shape_hint=shape_hint,<EOL>validate_args=validate_args,<EOL>assert_positive=assert_positive,<EOL>name=name)<EOL>
Creates a LinearOperator representing a lower triangular matrix.

    Args:
      loc: Floating-point `Tensor`. This is used for inferring shape in the case
        where only `scale_identity_multiplier` is set.
      scale_tril: Floating-point `Tensor` representing the diagonal matrix.
        `scale_diag` has shape [N1, N2, ...  k, k], which represents a k x k lower
        triangular matrix. When `None` no `scale_tril` term is added to the
        LinearOperator. The upper triangular elements above the diagonal are
        ignored.
      scale_diag: Floating-point `Tensor` representing the diagonal matrix.
        `scale_diag` has shape [N1, N2, ...  k], which represents a k x k diagonal
        matrix. When `None` no diagonal term is added to the LinearOperator.
      scale_identity_multiplier: floating point rank 0 `Tensor` representing a
        scaling done to the identity matrix. When `scale_identity_multiplier =
        scale_diag = scale_tril = None` then `scale += IdentityMatrix`. Otherwise
        no scaled-identity-matrix is added to `scale`.
      shape_hint: scalar integer `Tensor` representing a hint at the dimension of
        the identity matrix when only `scale_identity_multiplier` is set.
      validate_args: Python `bool` indicating whether arguments should be checked
        for correctness.
      assert_positive: Python `bool` indicating whether LinearOperator should be
        checked for being positive definite.
      name: Python `str` name given to ops managed by this object.

    Returns:
      `LinearOperator` representing a lower triangular matrix.

    Raises:
      ValueError:  If only `scale_identity_multiplier` is set and `loc` and
        `shape_hint` are both None.