diff --git a/src/TensorFlowNET.Core/APIs/tf.bitwise.cs b/src/TensorFlowNET.Core/APIs/tf.bitwise.cs new file mode 100644 index 00000000..b0518244 --- /dev/null +++ b/src/TensorFlowNET.Core/APIs/tf.bitwise.cs @@ -0,0 +1,25 @@ +/***************************************************************************** + Copyright 2020 The TensorFlow.NET Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +******************************************************************************/ + +using Tensorflow.Operations; + +namespace Tensorflow +{ + public partial class tensorflow + { + public bitwise_ops bitwise = new bitwise_ops(); + } +} diff --git a/src/TensorFlowNET.Core/Operations/bitwise_ops.cs b/src/TensorFlowNET.Core/Operations/bitwise_ops.cs new file mode 100644 index 00000000..925f91ed --- /dev/null +++ b/src/TensorFlowNET.Core/Operations/bitwise_ops.cs @@ -0,0 +1,50 @@ +/***************************************************************************** + Copyright 2020 Haiping Chen. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +******************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Text; +using static Tensorflow.Binding; + +namespace Tensorflow.Operations +{ + public class bitwise_ops + { + /// + /// Elementwise computes the bitwise left-shift of `x` and `y`. + /// https://www.tensorflow.org/api_docs/python/tf/bitwise/left_shift + /// + /// + /// + /// + /// + public Tensor left_shift(Tensor x, Tensor y, string name = null) + { + if (tf.Context.executing_eagerly()) + { + var results = tf.Runner.TFE_FastPathExecute(tf.Context, tf.Context.DeviceName, + "LeftShift", name, + null, + x, y); + + return results[0]; + } + + var _op = tf.OpDefLib._apply_op_helper("LeftShift", name, args: new { x, y }); + return _op.output; + } + } +} diff --git a/test/TensorFlowNET.UnitTest/TF_API/BitwiseApiTest.cs b/test/TensorFlowNET.UnitTest/TF_API/BitwiseApiTest.cs new file mode 100644 index 00000000..73c1f511 --- /dev/null +++ b/test/TensorFlowNET.UnitTest/TF_API/BitwiseApiTest.cs @@ -0,0 +1,26 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Tensorflow; +using static Tensorflow.Binding; + +namespace TensorFlowNET.UnitTest.TF_API +{ + [TestClass] + public class BitwiseApiTest : TFNetApiTest + { + Tensor lhs = tf.constant(new int[] { -1, -5, -3, -14 }); + Tensor rhs = tf.constant(new int[] { 5, 0, 7, 11 }); + + [TestMethod] + public void LeftShift() + { + var left_shift_result = tf.bitwise.left_shift(lhs, rhs); + var expected = new int[] { -32, -5, -384, -28672 }; + var actual = left_shift_result.ToArray(); + Assert.IsTrue(Enumerable.SequenceEqual(expected, actual)); + } + } +}