code: def lu_matrix_inverse(
      lower_upper, perm, validate_args=False, name=None
  ):
      """Computes a matrix inverse given the matrix's LU decomposition.
  
      This op is conceptually identical to,
  
      ```python
      inv_X = tf.lu_matrix_inverse(*tf.linalg.lu(X))
      tf.assert_near(tf.matrix_inverse(X), inv_X)
      # ==> True
      ```
  
      Note: this function does not verify the implied matrix is actually invertible
      nor is this condition checked even when `validate_args=True`.
  
      Args:
        lower_upper: `lu` as returned by `tf.linalg.lu`, i.e., if
          `matmul(P, matmul(L, U)) = X` then `lower_upper = L + U - eye`.
        perm: `p` as returned by `tf.linag.lu`, i.e., if
          `matmul(P, matmul(L, U)) = X` then `perm = argmax(P)`.
        validate_args: Python `bool` indicating whether arguments should be checked
          for correctness. Note: this function does not verify the implied matrix is
          actually invertible, even when `validate_args=True`.
          Default value: `False` (i.e., don't validate arguments).
        name: Python `str` name given to ops managed by this object.
          Default value: `None` (i.e., 'lu_matrix_inverse').
  
      Returns:
        inv_x: The matrix_inv, i.e.,
          `tf.matrix_inverse(tfp.math.lu_reconstruct(lu, perm))`.
  
      #### Examples
  
      ```python
      import numpy as np
      import tensorflow as tf
      import tensorflow_probability as tfp
  
      x = [[[3., 4], [1, 2]],
           [[7., 8], [3, 4]]]
      inv_x = tfp.math.lu_matrix_inverse(*tf.linalg.lu(x))
      tf.assert_near(tf.matrix_inverse(x), inv_x)
      # ==> True
      ```
  
      """
  
      with tf.name_scope(name or "lu_matrix_inverse"):
          lower_upper = tf.convert_to_tensor(
              lower_upper, dtype_hint=tf.float32, name="lower_upper"
          )
          perm = tf.convert_to_tensor(
              perm, dtype_hint=tf.int32, name="perm"
          )
          assertions = lu_reconstruct_assertions(
              lower_upper, perm, validate_args
          )
          if assertions:
              with tf.control_dependencies(assertions):
                  lower_upper = tf.identity(lower_upper)
                  perm = tf.identity(perm)
          shape = tf.shape(lower_upper)
          return lu_solve(
              lower_upper,
              perm,
              rhs=tf.eye(
                  shape[-1],
                  batch_shape=shape[:-2],
                  dtype=lower_upper.dtype,
              ),
              validate_args=False,
          )
  
imports: import numpy
  import tensorflow.compat.v1
  import tensorflow.compat.v2
  from tensorflow_probability.python.internal import assert_util
  from tensorflow_probability.python.internal import custom_gradient
  from tensorflow_probability.python.internal import distribution_util
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.internal import tensorshape_util
  from tensorflow_probability.python.math import generic
label_desc: Use image node_id 8 for calling a global function with example usage: lu_matrix_inverse(lower_upper, perm, validate_args, name) and returns: lu_solve