Fix rel_diff being nan for bitwise-identical tensors (#30655)
This commit is contained in:
@@ -165,8 +165,10 @@ def compute_diff(
|
|||||||
raw_abs_diff = (x_target - x_baseline).abs()
|
raw_abs_diff = (x_target - x_baseline).abs()
|
||||||
max_diff_coord = argmax_coord(raw_abs_diff)
|
max_diff_coord = argmax_coord(raw_abs_diff)
|
||||||
|
|
||||||
rel_diff = calc_rel_diff(x_target, x_baseline).item()
|
|
||||||
max_abs_diff = raw_abs_diff.max().item()
|
max_abs_diff = raw_abs_diff.max().item()
|
||||||
|
rel_diff = (
|
||||||
|
0.0 if max_abs_diff == 0.0 else calc_rel_diff(x_target, x_baseline).item()
|
||||||
|
)
|
||||||
mean_abs_diff = raw_abs_diff.mean().item()
|
mean_abs_diff = raw_abs_diff.mean().item()
|
||||||
|
|
||||||
include_quantiles: bool = raw_abs_diff.numel() < QUANTILE_NUMEL_THRESHOLD
|
include_quantiles: bool = raw_abs_diff.numel() < QUANTILE_NUMEL_THRESHOLD
|
||||||
|
|||||||
@@ -458,6 +458,20 @@ class TestComputeDiffPredicate:
|
|||||||
is False
|
is False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_bitwise_predicate(self) -> None:
|
||||||
|
"""'rel <= 0' passes only for bitwise-identical tensors."""
|
||||||
|
ident = torch.randn(5, 5)
|
||||||
|
assert (
|
||||||
|
compute_diff(
|
||||||
|
x_baseline=ident, x_target=ident.clone(), predicate="rel <= 0"
|
||||||
|
).passed
|
||||||
|
is True
|
||||||
|
)
|
||||||
|
x, y = self._near_zero_pair()
|
||||||
|
assert (
|
||||||
|
compute_diff(x_baseline=x, x_target=y, predicate="rel <= 0").passed is False
|
||||||
|
)
|
||||||
|
|
||||||
def test_predicate_recorded_for_empty_tensor(self) -> None:
|
def test_predicate_recorded_for_empty_tensor(self) -> None:
|
||||||
"""Empty tensors short-circuit to passed=True and still record the predicate."""
|
"""Empty tensors short-circuit to passed=True and still record the predicate."""
|
||||||
empty = torch.empty(0)
|
empty = torch.empty(0)
|
||||||
|
|||||||
Reference in New Issue
Block a user