#include "op_plugin/AclOpsInterface.h"
#include "op_plugin/OpApiInterface.h"
#include "op_plugin/utils/op_api_common.h"
namespace op_api {
at::Tensor& log_out(const at::Tensor& self, at::Tensor& result) {
DO_COMPATIBILITY(aclnnLog, acl_op::log_out(self, result));
if (!result.is_same(self)) {
at::ScalarType expext_dtype = self.scalar_type();
if (isIntegralType(self.scalar_type(), true)) {
expext_dtype = at::kFloat;
}
if (isFloatingType(result.scalar_type()) ||
isComplexType(result.scalar_type())) {
expext_dtype = result.scalar_type();
}
at_npu::native::OpPreparation::check_tensor({self}, result, expext_dtype, self.sizes());
}
at_npu::native::OpPreparation::check_memory({self}, {result});
EXEC_NPU_CMD(aclnnLog, self, result);
at::namedinference::propagate_names(result, self);
return result;
}
at::Tensor log(const at::Tensor& self) {
DO_COMPATIBILITY(aclnnLog, acl_op::log(self));
at::ScalarType expext_dtype = self.scalar_type();
if (isIntegralType(self.scalar_type(), true)) {
expext_dtype = at::kFloat;
}
at::Tensor result = at_npu::native::OpPreparation::apply_tensor_without_format(
self.sizes(),
self.options().dtype(expext_dtype));
EXEC_NPU_CMD(aclnnLog, self, result);
at::namedinference::propagate_names(result, self);
return result;
}
at::Tensor& log_(at::Tensor& self) {
DO_COMPATIBILITY(aclnnInplaceLog, acl_op::log_(self));
EXEC_NPU_CMD(aclnnInplaceLog, self);
return self;
}
}