@@ -7287,12 +7287,41 @@ def sample_inputs_linalg_svdvals(op_info, device, dtype, requires_grad=False, **
7287
7287
for batch, m, n in product(batches, ns, ns):
7288
7288
yield SampleInput(make_arg(batch + (m, n)))
7289
7289
7290
+ def error_inputs_softshrink(op, device, **kwargs):
7291
+ yield ErrorInput(SampleInput(make_tensor((1,), dtype=torch.float, device=device), kwargs={"lambd": -0.5}),
7292
+ error_regex="lambda must be greater or equal to 0, but found to be -0.5")
7290
7293
7291
- def sample_inputs_softshrink_hardshrink_hardtanh(op_info, device, dtype, requires_grad=False, **kwargs):
7292
- N = 10
7293
- tensors = [SampleInput(make_tensor((N, N), device=device, dtype=dtype,
7294
- requires_grad=requires_grad)) for _ in range(1, N)]
7295
- return tensors
7294
+ def sample_inputs_softshrink(op_info, device, dtype, requires_grad=False, **kwargs):
7295
+ make_arg = partial(make_tensor, device=device, dtype=dtype, requires_grad=requires_grad)
7296
+
7297
+ # The additional sample is to check additional values of lambd beyond the default
7298
+ # value (what is already checked by sample_inputs_elementwise_unary)
7299
+ for lbda in (0., 0.5):
7300
+ yield SampleInput(make_arg(S, S), kwargs={"lambd": lbda})
7301
+
7302
+ yield from sample_inputs_elementwise_unary(op_info, device, dtype, requires_grad)
7303
+
7304
+ def sample_inputs_hardshrink(op_info, device, dtype, requires_grad=False, **kwargs):
7305
+ make_arg = partial(make_tensor, device=device, dtype=dtype, requires_grad=requires_grad)
7306
+
7307
+ # The additional sample is to check additional values of lambd beyond the default
7308
+ # value (what is already checked by sample_inputs_elementwise_unary)
7309
+ # Note that unlike softshrink, lambd is allowed to be negative for hardshrink
7310
+ for lbda in (-0.5, 0., 0.5):
7311
+ yield SampleInput(make_arg(S, S), kwargs={"lambd": lbda})
7312
+
7313
+ yield from sample_inputs_elementwise_unary(op_info, device, dtype, requires_grad)
7314
+
7315
+
7316
+ def sample_inputs_hardtanh(op_info, device, dtype, requires_grad=False, **kwargs):
7317
+ make_arg = partial(make_tensor, device=device, dtype=dtype, requires_grad=requires_grad)
7318
+
7319
+ # The additional sample is to check additional values of min_val and max_val beyond the default
7320
+ # value (what is already checked by sample_inputs_elementwise_unary)
7321
+ for max_val, min_val in ((-0.5, 0.5), (0.5, -0.5), (0., 0.)):
7322
+ yield SampleInput(make_arg(S, S), kwargs={"min_val": min_val, "max_val": max_val})
7323
+
7324
+ yield from sample_inputs_elementwise_unary(op_info, device, dtype, requires_grad)
7296
7325
7297
7326
def sample_inputs_eig(op_info, device, dtype, requires_grad=False, **kwargs):
7298
7327
eigvecs = make_tensor((S, S), device=device, dtype=dtype,
@@ -14992,46 +15021,43 @@ def error_inputs_mean(op_info, device, **kwargs):
14992
15021
# # TypeError: igammac(): argument 'input' (position 1) must be Tensor, not float
14993
15022
# DecorateInfo(unittest.skip('Skipped!'), 'TestBinaryUfuncs'),
14994
15023
# )),
14995
- OpInfo('nn.functional.softshrink',
14996
- aten_name="softshrink",
14997
- aten_backward_name='softshrink_backward',
14998
- dtypes=floating_types_and(torch.bfloat16),
14999
- dtypesIfCUDA=floating_types_and(torch.float16, torch.bfloat16),
15000
- supports_autograd=True,
15001
- supports_forward_ad=True,
15002
- supports_fwgrad_bwgrad=True,
15003
- assert_autodiffed=False,
15004
- sample_inputs_func=sample_inputs_softshrink_hardshrink_hardtanh,
15005
- supports_gradgrad=True,
15006
- ),
15007
- OpInfo('nn.functional.hardshrink',
15008
- aten_name="hardshrink",
15009
- aten_backward_name='hardshrink_backward',
15010
- dtypes=floating_types_and(torch.bfloat16,),
15011
- dtypesIfCUDA=floating_types_and(torch.float16, torch.bfloat16),
15012
- supports_autograd=True,
15013
- assert_autodiffed=True,
15014
- sample_inputs_func=sample_inputs_softshrink_hardshrink_hardtanh,
15015
- supports_gradgrad=True,
15016
- supports_forward_ad=True,
15017
- supports_fwgrad_bwgrad=True,
15018
- autodiff_nonfusible_nodes=["aten::hardshrink"]),
15019
- OpInfo('nn.functional.hardtanh',
15020
- aten_name="hardtanh",
15021
- aten_backward_name='hardtanh_backward',
15022
- dtypes=floating_types_and(torch.int8, torch.int16, torch.int32, torch.int64, torch.bfloat16),
15023
- backward_dtypes=all_types(),
15024
- dtypesIfCUDA=floating_types_and(torch.int8, torch.int16, torch.int32, torch.int64, torch.float16, torch.bfloat16),
15025
- backward_dtypesIfCUDA=floating_types_and(torch.float16),
15026
- supports_autograd=True,
15027
- assert_autodiffed=True,
15028
- sample_inputs_func=sample_inputs_softshrink_hardshrink_hardtanh,
15029
- supports_gradgrad=True,
15030
- supports_out=False,
15031
- supports_forward_ad=True,
15032
- supports_fwgrad_bwgrad=True,
15033
- autodiff_nonfusible_nodes=["aten::hardtanh"],
15034
- ),
15024
+ UnaryUfuncInfo('nn.functional.softshrink',
15025
+ ref=_NOTHING,
15026
+ aten_name="softshrink",
15027
+ aten_backward_name='softshrink_backward',
15028
+ dtypes=floating_types_and(torch.bfloat16),
15029
+ dtypesIfCUDA=floating_types_and(torch.float16, torch.bfloat16),
15030
+ supports_forward_ad=True,
15031
+ supports_fwgrad_bwgrad=True,
15032
+ assert_autodiffed=False,
15033
+ sample_inputs_func=sample_inputs_softshrink,
15034
+ error_inputs_func=error_inputs_softshrink),
15035
+ UnaryUfuncInfo('nn.functional.hardshrink',
15036
+ ref=_NOTHING,
15037
+ aten_name="hardshrink",
15038
+ aten_backward_name='hardshrink_backward',
15039
+ dtypes=floating_types_and(torch.bfloat16,),
15040
+ dtypesIfCUDA=floating_types_and(torch.float16, torch.bfloat16),
15041
+ assert_autodiffed=True,
15042
+ sample_inputs_func=sample_inputs_hardshrink,
15043
+ supports_forward_ad=True,
15044
+ supports_fwgrad_bwgrad=True,
15045
+ autodiff_nonfusible_nodes=["aten::hardshrink"]),
15046
+ UnaryUfuncInfo('nn.functional.hardtanh',
15047
+ ref=_NOTHING,
15048
+ aten_name="hardtanh",
15049
+ aten_backward_name='hardtanh_backward',
15050
+ dtypes=floating_types_and(torch.int8, torch.int16, torch.int32, torch.int64, torch.bfloat16),
15051
+ backward_dtypes=all_types(),
15052
+ dtypesIfCUDA=floating_types_and(torch.int8, torch.int16, torch.int32, torch.int64, torch.float16,
15053
+ torch.bfloat16),
15054
+ backward_dtypesIfCUDA=floating_types_and(torch.float16),
15055
+ assert_autodiffed=True,
15056
+ sample_inputs_func=sample_inputs_hardtanh,
15057
+ supports_out=False,
15058
+ supports_forward_ad=True,
15059
+ supports_fwgrad_bwgrad=True,
15060
+ autodiff_nonfusible_nodes=["aten::hardtanh"]),
15035
15061
OpInfo('nn.functional.gelu',
15036
15062
aten_name="gelu",
15037
15063
aten_backward_name='gelu_backward',
@@ -15050,20 +15076,18 @@ def error_inputs_mean(op_info, device, **kwargs):
15050
15076
# AssertionError: Tensor-likes are not close!
15051
15077
# May not replicate in CI
15052
15078
DecorateInfo(unittest.skip("Skipped!"), 'TestCommon', 'test_out'),)),
15053
- OpInfo('nn.functional.relu6',
15054
- aten_name="relu6",
15055
- dtypes=all_types_and(torch.bfloat16),
15056
- backward_dtypes=floating_types(),
15057
- dtypesIfCUDA=all_types_and(torch.float16, torch.bfloat16),
15058
- backward_dtypesIfCUDA=floating_types_and(torch.float16),
15059
- supports_autograd=True,
15060
- assert_autodiffed=True,
15061
- sample_inputs_func=sample_inputs_softshrink_hardshrink_hardtanh,
15062
- supports_gradgrad=True,
15063
- supports_out=False,
15064
- supports_forward_ad=True,
15065
- supports_fwgrad_bwgrad=True,
15066
- autodiff_nonfusible_nodes=["aten::relu6"]),
15079
+ UnaryUfuncInfo('nn.functional.relu6',
F42D
tr>
15080
+ ref=_NOTHING,
15081
+ aten_name="relu6",
15082
+ dtypes=all_types_and(torch.bfloat16),
15083
+ backward_dtypes=floating_types(),
15084
+ dtypesIfCUDA=all_types_and(torch.float16, torch.bfloat16),
15085
+ backward_dtypesIfCUDA=floating_types_and(torch.float16),
15086
+ assert_autodiffed=True,
15087
+ supports_out=False,
15088
+ supports_forward_ad=True,
15089
+ supports_fwgrad_bwgrad=True,
15090
+ autodiff_nonfusible_nodes=["aten::relu6"]),
15067
15091
OpInfo('mm',
15068
15092
dtypes=all_types_and_complex_and(torch.bfloat16),
15069
15093
dtypesIfCUDA=floating_and_complex_types_and(torch.float16, *[torch.bfloat16]
@@ -20512,7 +20536,7 @@ def __init__(
20512
20536
"_refs.nn.functional.elu",
20513
20537
torch_opinfo_name="nn.functional.elu",
20514
20538
),
20515
- PythonRefInfo (
20539
+ ElementwiseUnaryPythonRefInfo (
20516
20540
"_refs.nn.functional.hardtanh",
20517
20541
torch_opinfo_name="nn.functional.hardtanh",
20518
20542
supports_nvfuser=False,
@@ -20544,6 +20568,10 @@ def __init__(
20544
20568
torch_opinfo_name="nn.functional.relu",
20545
20569
supports_nvfuser=False,
20546
20570
),
20571
+ ElementwiseUnaryPythonRefInfo(
20572
+ "_refs.nn.functional.relu6",
20573
+ torch_opinfo_name="nn.functional.relu6",
20574
+ ),
20547
20575
ElementwiseUnaryPythonRefInfo(
20548
20576
"_refs.nn.functional.mish",
20549
20577
torch_opinfo_name="nn.functional.mish",
@@ -20580,12 +20608,12 @@ def __init__(
20580
20608
"_refs.nn.functional.tanhshrink",
20581
20609
torch_opinfo_name="nn.functional.tanhshrink",
20582
20610
),
20583
- PythonRefInfo (
20611
+ ElementwiseUnaryPythonRefInfo (
20584
20612
"_refs.nn.functional.hardshrink",
20585
20613
torch_opinfo_name="nn.functional.hardshrink",
20586
20614
supports_nvfuser=False,
20587
20615
),
20588
- PythonRefInfo (
20616
+ ElementwiseUnaryPythonRefInfo (
20589
20617
"_refs.nn.functional.softshrink",
20590
20618
torch_opinfo_name="nn.functional.softshrink",
20591
20619
supports_nvfuser=False,
0 commit comments