Skip to content

Commit d8b697f

Browse files
author
Zonglin Peng
committed
jarvis-nightly-operators-test-aten-clamp-out
Pull Request resolved: #15501 ghstack-source-id: 320280760 @exported-using-ghexport Differential Revision: [D85364552](https://our.internmc.facebook.com/intern/diff/D85364552/)
1 parent 00f2646 commit d8b697f

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

backends/cadence/utils/facto_util.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,9 @@ def random_size_constraint(deps: object, r: int, d: int) -> int:
266266
tensor_constraints.extend(
267267
[
268268
cp.Dtype.In(lambda deps: [torch.float32, torch.int32]),
269+
# Avoid NaN/Inf values that expose clamp NaN handling bugs
270+
cp.Value.Ge(lambda deps, dtype, struct: -(2**4)),
271+
cp.Value.Le(lambda deps, dtype, struct: 2**4),
269272
]
270273
)
271274
case "rsqrt.default":
@@ -456,6 +459,7 @@ def apply_scalar_contraints(op_name: str) -> list[ScalarDtype]:
456459
| "mul.Scalar"
457460
| "div.Scalar"
458461
| "constant_pad_nd.default"
462+
| "clamp.default"
459463
):
460464
return [ScalarDtype.int]
461465
case "full.default":
@@ -483,7 +487,32 @@ def facto_testcase_gen( # noqa: C901
483487
cp.Size.Le(lambda deps, r, d: 2**2),
484488
]
485489
)
486-
if in_spec.name == "max_val": # hardtanh
490+
# Special handling for clamp.default to ensure min < max with sufficient gap (at least 2) and never None
491+
if op_name == "clamp.default":
492+
if in_spec.name == "min":
493+
# min must always be provided (not None) and bounded, leave room for max
494+
spec.inspec[index].constraints.extend(
495+
[
496+
cp.Optional.Eq(lambda deps: False), # Never None
497+
cp.Value.Ge(lambda deps, dtype: -(2**4)),
498+
cp.Value.Le(
499+
lambda deps, dtype: 2**4 - 2
500+
), # Leave room for max (at least 2 units)
501+
]
502+
)
503+
elif in_spec.name == "max":
504+
# max must always be provided (not None), be >= min + 2 (sufficient gap), and bounded
505+
spec.inspec[index].deps = [0, 1] # deps on input tensor and min
506+
spec.inspec[index].constraints.extend(
507+
[
508+
cp.Optional.Eq(lambda deps: False), # Never None
509+
cp.Value.Ge(
510+
lambda deps, dtype: deps[1] + 2
511+
), # max >= min + 2 (sufficient gap)
512+
cp.Value.Le(lambda deps, dtype: 2**4),
513+
]
514+
)
515+
elif in_spec.name == "max_val": # hardtanh
487516
spec.inspec[index].deps = [0, 1]
488517
spec.inspec[index].constraints.extend(
489518
[cp.Value.Ge(lambda deps, _: deps[1])]

0 commit comments

Comments
 (0)