From 26bdea0fd12ce2f3b2ed8c0f104c1d8621eeda4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=98=A5=E4=B9=94?= <83450930+Liyulingyue@users.noreply.github.com> Date: Tue, 31 Jan 2023 14:40:01 +0800 Subject: [PATCH] fix div 0 error in floormod (#49997) * fix mod 0 error * fix div 0 error in floormod --- .../phi/kernels/funcs/elementwise_functor.h | 1 + .../unittests/test_elementwise_floormod_op.py | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 python/paddle/fluid/tests/unittests/test_elementwise_floormod_op.py diff --git a/paddle/phi/kernels/funcs/elementwise_functor.h b/paddle/phi/kernels/funcs/elementwise_functor.h index b98247fdf0..2636e9814d 100644 --- a/paddle/phi/kernels/funcs/elementwise_functor.h +++ b/paddle/phi/kernels/funcs/elementwise_functor.h @@ -501,6 +501,7 @@ struct MinGradXYFunctor { template struct RemainderFunctor { inline HOSTDEVICE T operator()(const T a, const T b) const { + PADDLE_ENFORCE(b != 0, DIV_ERROR_INFO); T res = a % b; // Accoding to #PR26732: in dividen % divsor diff --git a/python/paddle/fluid/tests/unittests/test_elementwise_floormod_op.py b/python/paddle/fluid/tests/unittests/test_elementwise_floormod_op.py new file mode 100644 index 0000000000..33e6fc2c47 --- /dev/null +++ b/python/paddle/fluid/tests/unittests/test_elementwise_floormod_op.py @@ -0,0 +1,35 @@ +# Copyright (c) 2023 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import unittest + +import paddle +import paddle.fluid as fluid + + +class TestFloorModOp(unittest.TestCase): + def test_dygraph(self): + with fluid.dygraph.guard(fluid.CPUPlace()): + # mod by zero + x = paddle.to_tensor([59], dtype='int32') + y = paddle.to_tensor([0], dtype='int32') + try: + paddle.floor_mod(x, y) + except Exception as e: + print("Error: Mod by zero encounter in floor_mod\n") + + +if __name__ == '__main__': + unittest.main() -- GitLab