23
23
// ===---------------------------------------------------------------------===//
24
24
25
25
#pragma once
26
- #include < CL/sycl.hpp>
27
26
#include < cmath>
28
27
#include < cstddef>
29
28
#include < cstdint>
30
29
#include < limits>
30
+ #include < sycl/ext/oneapi/experimental/sycl_complex.hpp>
31
+ #include < sycl/sycl.hpp>
31
32
#include < type_traits>
32
33
33
34
#include " kernels/elementwise_functions/common.hpp"
@@ -48,6 +49,7 @@ namespace sign
48
49
49
50
namespace py = pybind11;
50
51
namespace td_ns = dpctl::tensor::type_dispatch;
52
+ namespace exprm_ns = sycl::ext::oneapi::experimental;
51
53
52
54
using dpctl::tensor::type_utils::is_complex;
53
55
using dpctl::tensor::type_utils::vec_cast;
@@ -61,38 +63,41 @@ template <typename argT, typename resT> struct SignFunctor
61
63
std::disjunction<is_complex<resT>, is_complex<argT>>>;
62
64
using supports_sg_loadstore = std::false_type;
63
65
64
- resT operator ()(const argT &x ) const
66
+ resT operator ()(const argT &in ) const
65
67
{
66
68
if constexpr (std::is_integral_v<argT>) {
67
69
if constexpr (std::is_unsigned_v<argT>) {
68
- return resT (0 < x );
70
+ return resT (0 < in );
69
71
}
70
72
else {
71
- return sign <argT>(x );
73
+ return sign_impl <argT>(in );
72
74
}
73
75
}
74
76
else {
75
77
if constexpr (is_complex<argT>::value) {
76
- if (x == argT (0 )) {
78
+ using realT = typename argT::value_type;
79
+
80
+ if (in == argT (0 )) {
77
81
return resT (0 );
78
82
}
79
83
else {
80
- return (x / std::abs (x));
84
+ auto z = exprm_ns::complex<realT>(in);
85
+ return (z / exprm_ns::abs (z));
81
86
}
82
87
}
83
88
else {
84
- if (std::isnan (x )) {
89
+ if (std::isnan (in )) {
85
90
return std::numeric_limits<resT>::quiet_NaN ();
86
91
}
87
92
else {
88
- return sign <argT>(x );
93
+ return sign_impl <argT>(in );
89
94
}
90
95
}
91
96
}
92
97
}
93
98
94
99
private:
95
- template <typename T> T sign (const T &v) const
100
+ template <typename T> T sign_impl (const T &v) const
96
101
{
97
102
return (T (0 ) < v) - (v < T (0 ));
98
103
}
0 commit comments