From 0af6be876cd5d84d27a9d0c4e74f028e30d15f6d Mon Sep 17 00:00:00 2001 From: Aoraki-Dream Date: Mon, 16 Sep 2024 13:54:45 +0000 Subject: [PATCH] add complex support for expm1 --- paddle/phi/kernels/sparse/cpu/unary_grad_kernel.cc | 2 +- paddle/phi/kernels/sparse/cpu/unary_kernel.cc | 2 +- paddle/phi/kernels/sparse/gpu/unary_grad_kernel.cu | 2 +- paddle/phi/kernels/sparse/gpu/unary_kernel.cu | 2 +- paddle/phi/kernels/sparse/impl/unary_kernel_impl.h | 2 +- python/paddle/sparse/unary.py | 2 +- test/legacy_test/test_sparse_unary_op.py | 12 ++++++++++-- 7 files changed, 16 insertions(+), 8 deletions(-) diff --git a/paddle/phi/kernels/sparse/cpu/unary_grad_kernel.cc b/paddle/phi/kernels/sparse/cpu/unary_grad_kernel.cc index d8b815d25b0d26..9d38812b08743a 100644 --- a/paddle/phi/kernels/sparse/cpu/unary_grad_kernel.cc +++ b/paddle/phi/kernels/sparse/cpu/unary_grad_kernel.cc @@ -70,10 +70,10 @@ PD_REGISTER_SPARSE_UNARY_CPU_GRAD_KERNEL(square, Square) PD_REGISTER_SPARSE_UNARY_CPU_GRAD_KERNEL(log1p, Log1p) PD_REGISTER_SPARSE_UNARY_CPU_GRAD_KERNEL(relu, Relu) PD_REGISTER_SPARSE_UNARY_CPU_GRAD_KERNEL(pow, Pow) -PD_REGISTER_SPARSE_UNARY_CPU_GRAD_KERNEL(expm1, Expm1) PD_REGISTER_SPARSE_UNARY_CPU_GRAD_KERNEL(relu6, Relu6) PD_REGISTER_SPARSE_UNARY_CPU_GRAD_KERNEL(leaky_relu, LeakyRelu) +PD_REGISTER_SPARSE_UNARY_CPU_GRAD_KERNEL_WITH_COMPLEX(expm1, Expm1) PD_REGISTER_SPARSE_UNARY_CPU_GRAD_KERNEL_WITH_COMPLEX(sinh, Sinh) PD_REGISTER_SPARSE_UNARY_CPU_GRAD_KERNEL_WITH_COMPLEX(tan, Tan) PD_REGISTER_SPARSE_UNARY_CPU_GRAD_KERNEL_WITH_COMPLEX(sin, Sin) diff --git a/paddle/phi/kernels/sparse/cpu/unary_kernel.cc b/paddle/phi/kernels/sparse/cpu/unary_kernel.cc index 2d96e4c30ca739..85eeda1107c6c2 100644 --- a/paddle/phi/kernels/sparse/cpu/unary_kernel.cc +++ b/paddle/phi/kernels/sparse/cpu/unary_kernel.cc @@ -112,10 +112,10 @@ PD_REGISTER_SPARSE_UNARY_CPU_KERNEL(log1p, Log1p) PD_REGISTER_SPARSE_UNARY_CPU_KERNEL(relu, Relu) PD_REGISTER_SPARSE_UNARY_CPU_KERNEL(pow, Pow) PD_REGISTER_SPARSE_UNARY_CPU_KERNEL(scale, Scale) -PD_REGISTER_SPARSE_UNARY_CPU_KERNEL(expm1, Expm1) PD_REGISTER_SPARSE_UNARY_CPU_KERNEL(relu6, Relu6) PD_REGISTER_SPARSE_UNARY_CPU_KERNEL(leaky_relu, LeakyRelu) +PD_REGISTER_SPARSE_UNARY_CPU_KERNEL_WITH_COMPLEX(expm1, Expm1) PD_REGISTER_SPARSE_UNARY_CPU_KERNEL_WITH_COMPLEX(sinh, Sinh) PD_REGISTER_SPARSE_UNARY_CPU_KERNEL_WITH_COMPLEX(tan, Tan) PD_REGISTER_SPARSE_UNARY_CPU_KERNEL_WITH_COMPLEX(sin, Sin) diff --git a/paddle/phi/kernels/sparse/gpu/unary_grad_kernel.cu b/paddle/phi/kernels/sparse/gpu/unary_grad_kernel.cu index dabf46c93371ac..44e04207e145f6 100644 --- a/paddle/phi/kernels/sparse/gpu/unary_grad_kernel.cu +++ b/paddle/phi/kernels/sparse/gpu/unary_grad_kernel.cu @@ -74,10 +74,10 @@ PD_REGISTER_SPARSE_UNARY_GPU_GRAD_KERNEL(square, Square) PD_REGISTER_SPARSE_UNARY_GPU_GRAD_KERNEL(log1p, Log1p) PD_REGISTER_SPARSE_UNARY_GPU_GRAD_KERNEL(relu, Relu) PD_REGISTER_SPARSE_UNARY_GPU_GRAD_KERNEL(pow, Pow) -PD_REGISTER_SPARSE_UNARY_GPU_GRAD_KERNEL(expm1, Expm1) PD_REGISTER_SPARSE_UNARY_GPU_GRAD_KERNEL(relu6, Relu6) PD_REGISTER_SPARSE_UNARY_GPU_GRAD_KERNEL(leaky_relu, LeakyRelu) +PD_REGISTER_SPARSE_UNARY_GPU_GRAD_KERNEL_WITH_COMPLEX(expm1, Expm1) PD_REGISTER_SPARSE_UNARY_GPU_GRAD_KERNEL_WITH_COMPLEX(sinh, Sinh) PD_REGISTER_SPARSE_UNARY_GPU_GRAD_KERNEL_WITH_COMPLEX(sin, Sin) PD_REGISTER_SPARSE_UNARY_GPU_GRAD_KERNEL_WITH_COMPLEX(abs, Abs) diff --git a/paddle/phi/kernels/sparse/gpu/unary_kernel.cu b/paddle/phi/kernels/sparse/gpu/unary_kernel.cu index 8fca9a1f151249..60080f888eff11 100644 --- a/paddle/phi/kernels/sparse/gpu/unary_kernel.cu +++ b/paddle/phi/kernels/sparse/gpu/unary_kernel.cu @@ -105,10 +105,10 @@ PD_REGISTER_SPARSE_UNARY_GPU_KERNEL(log1p, Log1p) PD_REGISTER_SPARSE_UNARY_GPU_KERNEL(relu, Relu) PD_REGISTER_SPARSE_UNARY_GPU_KERNEL(pow, Pow) PD_REGISTER_SPARSE_UNARY_GPU_KERNEL(scale, Scale) -PD_REGISTER_SPARSE_UNARY_GPU_KERNEL(expm1, Expm1) PD_REGISTER_SPARSE_UNARY_GPU_KERNEL(relu6, Relu6) PD_REGISTER_SPARSE_UNARY_GPU_KERNEL(leaky_relu, LeakyRelu) +PD_REGISTER_SPARSE_UNARY_GPU_KERNEL_WITH_COMPLEX(expm1, Expm1) PD_REGISTER_SPARSE_UNARY_GPU_KERNEL_WITH_COMPLEX(sinh, Sinh) PD_REGISTER_SPARSE_UNARY_GPU_KERNEL_WITH_COMPLEX(tan, Tan) PD_REGISTER_SPARSE_UNARY_GPU_KERNEL_WITH_COMPLEX(sin, Sin) diff --git a/paddle/phi/kernels/sparse/impl/unary_kernel_impl.h b/paddle/phi/kernels/sparse/impl/unary_kernel_impl.h index d469ca061a3c2a..fd7df7acddf637 100644 --- a/paddle/phi/kernels/sparse/impl/unary_kernel_impl.h +++ b/paddle/phi/kernels/sparse/impl/unary_kernel_impl.h @@ -112,7 +112,6 @@ DEFINE_SPARSE_UNARY_KERNEL(Sqrt) DEFINE_SPARSE_UNARY_KERNEL(Square) DEFINE_SPARSE_UNARY_KERNEL(Log1p) DEFINE_SPARSE_UNARY_KERNEL(Relu) -DEFINE_SPARSE_UNARY_KERNEL(Expm1) DEFINE_SPARSE_UNARY_KERNEL(Relu6) DEFINE_SPARSE_UNARY_KERNEL_WITH_ONE_ATTR(Pow, factor) DEFINE_SPARSE_UNARY_KERNEL_WITH_ONE_ATTR(LeakyRelu, alpha) @@ -120,6 +119,7 @@ DEFINE_SPARSE_UNARY_KERNEL_WITH_COMPLEX(Abs) DEFINE_SPARSE_UNARY_KERNEL_WITH_COMPLEX(Sin) DEFINE_SPARSE_UNARY_KERNEL_WITH_COMPLEX(Tan) DEFINE_SPARSE_UNARY_KERNEL_WITH_COMPLEX(Sinh) +DEFINE_SPARSE_UNARY_KERNEL_WITH_COMPLEX(Expm1) template void ScaleCooKernel(const Context& dev_ctx, diff --git a/python/paddle/sparse/unary.py b/python/paddle/sparse/unary.py index ff59b354496eb6..bec6b7c22a46c5 100644 --- a/python/paddle/sparse/unary.py +++ b/python/paddle/sparse/unary.py @@ -853,7 +853,7 @@ def expm1(x: Tensor, name: str | None = None) -> Tensor: out = exp(x) - 1 Parameters: - x (Tensor): The input Sparse Tensor with data type float32, float64. + x (Tensor): The input Sparse Tensor with data type float32, float64, complex64, complex128. name (str|None, optional): Name for the operation (optional, default is None). For more information, please refer to :ref:`api_guide_Name`. diff --git a/test/legacy_test/test_sparse_unary_op.py b/test/legacy_test/test_sparse_unary_op.py index d9886d3f71df55..79f81c1c728740 100644 --- a/test/legacy_test/test_sparse_unary_op.py +++ b/test/legacy_test/test_sparse_unary_op.py @@ -215,7 +215,11 @@ def test_sparse_sinh(self): self.compare_with_dense(paddle.sinh, paddle.sparse.sinh, 'complex128') def test_sparse_expm1(self): - self.compare_with_dense(paddle.expm1, paddle.sparse.expm1) + self.compare_with_dense(paddle.expm1, paddle.sparse.expm1, 'float16') + self.compare_with_dense(paddle.expm1, paddle.sparse.expm1, 'float32') + self.compare_with_dense(paddle.expm1, paddle.sparse.expm1, 'float64') + self.compare_with_dense(paddle.expm1, paddle.sparse.expm1, 'complex64') + self.compare_with_dense(paddle.expm1, paddle.sparse.expm1, 'complex128') def test_sparse_deg2rad(self): self.compare_with_dense(paddle.deg2rad, paddle.sparse.deg2rad) @@ -457,7 +461,11 @@ def test_sparse_sinh(self): self.compare_with_dense(paddle.sinh, paddle.sparse.sinh, 'complex128') def test_sparse_expm1(self): - self.compare_with_dense(paddle.expm1, paddle.sparse.expm1) + self.compare_with_dense(paddle.expm1, paddle.sparse.expm1, 'float16') + self.compare_with_dense(paddle.expm1, paddle.sparse.expm1, 'float32') + self.compare_with_dense(paddle.expm1, paddle.sparse.expm1, 'float64') + self.compare_with_dense(paddle.expm1, paddle.sparse.expm1, 'complex64') + self.compare_with_dense(paddle.expm1, paddle.sparse.expm1, 'complex128') def test_sparse_deg2rad(self): self.compare_with_dense(paddle.deg2rad, paddle.sparse.deg2rad)