@@ -260,6 +260,9 @@ def random_size_constraint(deps: object, r: int, d: int) -> int:
260260 tensor_constraints .extend (
261261 [
262262 cp .Dtype .In (lambda deps : [torch .float32 , torch .int32 ]),
263+ # Avoid NaN/Inf values that expose clamp NaN handling bugs
264+ cp .Value .Ge (lambda deps , dtype , struct : - (2 ** 4 )),
265+ cp .Value .Le (lambda deps , dtype , struct : 2 ** 4 ),
263266 ]
264267 )
265268 case "rsqrt.default" :
@@ -446,6 +449,7 @@ def apply_scalar_contraints(op_name: str) -> list[ScalarDtype]:
446449 | "mul.Scalar"
447450 | "div.Scalar"
448451 | "constant_pad_nd.default"
452+ | "clamp.default"
449453 ):
450454 return [ScalarDtype .int ]
451455 case "full.default" :
@@ -473,7 +477,28 @@ def facto_testcase_gen( # noqa: C901
473477 cp .Size .Le (lambda deps , r , d : 2 ** 2 ),
474478 ]
475479 )
476- if in_spec .name == "max_val" : # hardtanh
480+ # Special handling for clamp.default to ensure min < max with sufficient gap (at least 2) and never None
481+ if op_name == "clamp.default" :
482+ if in_spec .name == "min" :
483+ # min must always be provided (not None) and bounded, leave room for max
484+ spec .inspec [index ].constraints .extend (
485+ [
486+ cp .Optional .Eq (lambda deps : False ), # Never None
487+ cp .Value .Ge (lambda deps , dtype : - (2 ** 4 )),
488+ cp .Value .Le (lambda deps , dtype : 2 ** 4 - 2 ), # Leave room for max (at least 2 units)
489+ ]
490+ )
491+ elif in_spec .name == "max" :
492+ # max must always be provided (not None), be >= min + 2 (sufficient gap), and bounded
493+ spec .inspec [index ].deps = [0 , 1 ] # deps on input tensor and min
494+ spec .inspec [index ].constraints .extend (
495+ [
496+ cp .Optional .Eq (lambda deps : False ), # Never None
497+ cp .Value .Ge (lambda deps , dtype : deps [1 ] + 2 ), # max >= min + 2 (sufficient gap)
498+ cp .Value .Le (lambda deps , dtype : 2 ** 4 ),
499+ ]
500+ )
501+ elif in_spec .name == "max_val" : # hardtanh
477502 spec .inspec [index ].deps = [0 , 1 ]
478503 spec .inspec [index ].constraints .extend (
479504 [cp .Value .Ge (lambda deps , _ : deps [1 ])]
0 commit comments