From 6bf1d8a2333685f7af27d5fba5c5fda4227f7c5d Mon Sep 17 00:00:00 2001 From: Saurabh Saxena <srbs@google.com> Date: Wed, 23 Sep 2020 11:06:45 -0700 Subject: [PATCH] Add C++ ops IdentityN and Exp. PiperOrigin-RevId: 333329699 Change-Id: I6dd2e2d1feef88da26bc28a8cdcb9de4eb73fbcc --- tensorflow/c/experimental/ops/array_ops.cc | 12 ++++++++++++ tensorflow/c/experimental/ops/array_ops.h | 4 ++++ tensorflow/c/experimental/ops/math_ops.cc | 11 +++++++++++ tensorflow/c/experimental/ops/math_ops.h | 3 +++ 4 files changed, 30 insertions(+) diff --git a/tensorflow/c/experimental/ops/array_ops.cc b/tensorflow/c/experimental/ops/array_ops.cc index c83b1512313..debeba18edf 100644 --- a/tensorflow/c/experimental/ops/array_ops.cc +++ b/tensorflow/c/experimental/ops/array_ops.cc @@ -34,6 +34,18 @@ Status Identity(AbstractContext* ctx, return identity_op->Execute(outputs, &num_retvals); } +Status IdentityN(AbstractContext* ctx, + absl::Span<AbstractTensorHandle* const> inputs, + absl::Span<AbstractTensorHandle*> outputs, const char* name) { + AbstractOperationPtr identity_n_op(ctx->CreateOperation()); + TF_RETURN_IF_ERROR( + identity_n_op->Reset("IdentityN", /*raw_device_name=*/nullptr)); + TF_RETURN_IF_ERROR(MaybeSetOpName(identity_n_op.get(), name)); + TF_RETURN_IF_ERROR(identity_n_op->AddInputList(inputs)); + int num_retvals = inputs.size(); + return identity_n_op->Execute(outputs, &num_retvals); +} + Status ZerosLike(AbstractContext* ctx, absl::Span<AbstractTensorHandle* const> inputs, absl::Span<AbstractTensorHandle*> outputs, const char* name) { diff --git a/tensorflow/c/experimental/ops/array_ops.h b/tensorflow/c/experimental/ops/array_ops.h index 2bd3b51eac0..f63412ed248 100644 --- a/tensorflow/c/experimental/ops/array_ops.h +++ b/tensorflow/c/experimental/ops/array_ops.h @@ -26,6 +26,10 @@ Status Identity(AbstractContext* ctx, absl::Span<AbstractTensorHandle* const> inputs, absl::Span<AbstractTensorHandle*> outputs, const char* name); +Status IdentityN(AbstractContext* ctx, + absl::Span<AbstractTensorHandle* const> inputs, + absl::Span<AbstractTensorHandle*> outputs, const char* name); + Status ZerosLike(AbstractContext* ctx, absl::Span<AbstractTensorHandle* const> inputs, absl::Span<AbstractTensorHandle*> outputs, const char* name); diff --git a/tensorflow/c/experimental/ops/math_ops.cc b/tensorflow/c/experimental/ops/math_ops.cc index 7e73775613a..3ff10923d48 100644 --- a/tensorflow/c/experimental/ops/math_ops.cc +++ b/tensorflow/c/experimental/ops/math_ops.cc @@ -133,5 +133,16 @@ Status DivNoNan(AbstractContext* ctx, return Status::OK(); } +Status Exp(AbstractContext* ctx, absl::Span<AbstractTensorHandle* const> inputs, + absl::Span<AbstractTensorHandle*> outputs, const char* name) { + AbstractOperationPtr exp_op(ctx->CreateOperation()); + TF_RETURN_IF_ERROR(exp_op->Reset("Exp", /*raw_device_name=*/nullptr)); + TF_RETURN_IF_ERROR(MaybeSetOpName(exp_op.get(), name)); + TF_RETURN_IF_ERROR(exp_op->AddInput(inputs[0])); + + int num_retvals = 1; + return exp_op->Execute(outputs, &num_retvals); +} + } // namespace ops } // namespace tensorflow diff --git a/tensorflow/c/experimental/ops/math_ops.h b/tensorflow/c/experimental/ops/math_ops.h index 004b8f2bb4d..be324c0b55a 100644 --- a/tensorflow/c/experimental/ops/math_ops.h +++ b/tensorflow/c/experimental/ops/math_ops.h @@ -47,6 +47,9 @@ Status Sub(AbstractContext* ctx, absl::Span<AbstractTensorHandle* const> inputs, Status DivNoNan(AbstractContext* ctx, absl::Span<AbstractTensorHandle* const> inputs, absl::Span<AbstractTensorHandle*> outputs, const char* name); + +Status Exp(AbstractContext* ctx, absl::Span<AbstractTensorHandle* const> inputs, + absl::Span<AbstractTensorHandle*> outputs, const char* name); } // namespace ops } // namespace tensorflow