#include "op_plugin/AclOpsInterface.h"
#include "op_plugin/utils/OpAdapter.h"
namespace acl_op {
at::Tensor complex(const at::Tensor &real, const at::Tensor &imag)
{
TORCH_NPU_WARN_ONCE(
"Warning: kernel [complex] is not supported by NPU currently. Now this kernel is running on CPU.");
at::Tensor real_cpu = real.to("cpu");
at::Tensor imag_cpu = imag.to("cpu");
auto result = at::native::complex(real_cpu, imag_cpu);
at::Tensor output = result.to(real.device());
return output;
}
at::Tensor &complex_out(const at::Tensor &real, const at::Tensor &imag, at::Tensor &out)
{
TORCH_NPU_WARN_ONCE(
"Warning: kernel [complex_out] is not supported by NPU currently. Now this kernel is running on CPU.");
at::Tensor real_cpu = real.to("cpu");
at::Tensor imag_cpu = imag.to("cpu");
at::Tensor out_cpu = out.to("cpu");
at::native::complex_out(real_cpu, imag_cpu, out_cpu);
auto output_size = op_infer::broadcast_ops_npu_output_size(real, imag);
out.resize_(output_size);
out.copy_(out_cpu);
return out;
}
}