TF 2.0 is out! Get hands-on practice at TF World, Oct 28-31. Use code TF20 for 20% off select passes.

# tfp.experimental.substrates.jax.math.linalg.lu_reconstruct

The inverse LU decomposition, `X == lu_reconstruct(*tf.linalg.lu(X))`.

``````tfp.experimental.substrates.jax.math.linalg.lu_reconstruct(
lower_upper,
perm,
validate_args=False,
name=None
)
``````

#### 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. 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_reconstruct').

#### Returns:

• `x`: The original input to `tf.linalg.lu`, i.e., `x` as in, `lu_reconstruct(*tf.linalg.lu(x))`.

#### Examples

``````import numpy as np
from tensorflow_probability.python.internal.backend import jax as tf
import tensorflow_probability as tfp; tfp = tfp.experimental.substrates.jax

x = [[[3., 4], [1, 2]],
[[7., 8], [3, 4]]]
x_reconstructed = tfp.math.lu_reconstruct(*tf.linalg.lu(x))
tf.assert_near(x, x_reconstructed)
# ==> True
``````