From 70855355f3e7388ce116a4395a995a71bde6138b Mon Sep 17 00:00:00 2001 From: chentianyu03 Date: Mon, 21 Jun 2021 07:54:59 +0000 Subject: [PATCH 1/3] transform complex scale to tensor --- python/paddle/fluid/dygraph/math_op_patch.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/python/paddle/fluid/dygraph/math_op_patch.py b/python/paddle/fluid/dygraph/math_op_patch.py index 83804e80c2309b..1d5c9d0e7cbf62 100644 --- a/python/paddle/fluid/dygraph/math_op_patch.py +++ b/python/paddle/fluid/dygraph/math_op_patch.py @@ -18,6 +18,7 @@ from ..framework import Variable, convert_np_dtype_to_dtype_, _varbase_creator from ..layers.layer_function_generator import OpProtoHolder from . import no_grad +import paddle import numpy as np import six @@ -209,12 +210,17 @@ def __impl__(self, other_var): # 2. create varbase for scalar lhs_dtype = self.dtype if not isinstance(other_var, core.VarBase): - if reverse: - other_var = create_tensor( - other_var, dtype=lhs_dtype, shape=self.shape) + if isinstance(other_var, complex): + global paddle + other_var = paddle.to_tensor(other_var, dtype='complex64') else: - # add fill_op - other_var = create_scalar(value=other_var, dtype=lhs_dtype) + if reverse: + other_var = create_tensor( + other_var, dtype=lhs_dtype, shape=self.shape) + else: + # add fill_op + other_var = create_scalar( + value=other_var, dtype=lhs_dtype) # 3. promote types or unify right var type to left var rhs_dtype = other_var.dtype From f9370e671fbd25b0d74941d764264de425691925 Mon Sep 17 00:00:00 2001 From: chentianyu03 Date: Mon, 21 Jun 2021 08:19:53 +0000 Subject: [PATCH 2/3] add test_case for complex scalar --- .../fluid/tests/unittests/test_math_op_patch_var_base.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/python/paddle/fluid/tests/unittests/test_math_op_patch_var_base.py b/python/paddle/fluid/tests/unittests/test_math_op_patch_var_base.py index 4ad6261293d260..3d31b821103487 100644 --- a/python/paddle/fluid/tests/unittests/test_math_op_patch_var_base.py +++ b/python/paddle/fluid/tests/unittests/test_math_op_patch_var_base.py @@ -579,6 +579,13 @@ def test_tensor_patch_method(self): self.assertTrue(inspect.ismethod(a.std)) self.assertTrue(inspect.ismethod(a.numel)) + def test_complex_scalar(self): + a_np = np.random.random(self.shape).astype(self.dtype) + with fluid.dygraph.guard(): + a = fluid.dygraph.to_variable(a_np) + res = 1J * a + self.assertTrue(np.array_equal(res.numpy(), 1J * a_np)) + if __name__ == '__main__': unittest.main() From c10dffdc8c222f25e320acf26a94f06504466769 Mon Sep 17 00:00:00 2001 From: chentianyu03 Date: Tue, 22 Jun 2021 03:04:39 +0000 Subject: [PATCH 3/3] modify import paddle --- python/paddle/fluid/dygraph/math_op_patch.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/python/paddle/fluid/dygraph/math_op_patch.py b/python/paddle/fluid/dygraph/math_op_patch.py index 1d5c9d0e7cbf62..e272c45473d29f 100644 --- a/python/paddle/fluid/dygraph/math_op_patch.py +++ b/python/paddle/fluid/dygraph/math_op_patch.py @@ -18,7 +18,6 @@ from ..framework import Variable, convert_np_dtype_to_dtype_, _varbase_creator from ..layers.layer_function_generator import OpProtoHolder from . import no_grad -import paddle import numpy as np import six @@ -211,7 +210,7 @@ def __impl__(self, other_var): lhs_dtype = self.dtype if not isinstance(other_var, core.VarBase): if isinstance(other_var, complex): - global paddle + import paddle other_var = paddle.to_tensor(other_var, dtype='complex64') else: if reverse: