Verified Solution

[tensorflow/tensorflow] tf.linalg.logdet aggressively outputs NaNs on batched 4x4 float64 inputs during framework translation

Sponsored Content
### ROOT CAUSE The issue arises because `tf.linalg.logdet` returns NaN for non-positive definite matrices or matrices with NaN/Inf values in the diagonal of the Cholesky decomposition. During framework translation, the input matrices might become non-positive definite due to precision issues or NaN values, leading to NaN outputs. The current implementation does not handle these cases, resulting in aggressive NaN outputs. ### CODE FIX ```python def logdet(x, name=None): r"""Computes log|det(A)| for a positive definite matrix `x`. Args: x: A tensor of shape [..., n, n] with dtype float or double. name: Optional name for the operation. Returns: The log determinant of `x`. """ dtype = x.dtype chol = chol(x, name=name) diag = chol._diag() # pylint: disable=protected-access # Check if the diagonal is finite and positive. tol = 1e-8 is_positive = diag > tol is_finite = tf.math.is_finite(diag) mask = ~(is_positive | is_finite) # Reduce along the last dimension to get a mask for the batch. any_bad = tf.reduce_any(mask, axis=-1) # Compute the log of the diagonal. log_diag = tf.math.log(diag) result = tf.reduce_sum(log_diag, axis=-1, keepdims=False) # Replace the result with -inf for any batch element that has any bad diagonal element. neg_inf = tf.cast(-math.inf, dtype) result = tf.where(any_bad, neg_inf, result) return result ```
Deploy on DigitalOcean ($200 Credit)

Related Fixes

[rust-lang/rust] LLVM 23 breaks tests/codegen-llvm/char-ascii-branchless.rs
[golang/go] internal/strconv: unrecognized failures
[StackOverflow/kubernetes] Issue with Spring Boot/Webflux APIs on Kubernetes