diff --git a/docs/ops/arithmetic/Atan_1.md b/docs/ops/arithmetic/Atan_1.md index dc4c3b6d824..7fc9525bf66 100644 --- a/docs/ops/arithmetic/Atan_1.md +++ b/docs/ops/arithmetic/Atan_1.md @@ -6,31 +6,27 @@ **Short description**: *Atan* performs element-wise inverse tangent (arctangent) operation with given tensor. -**Attributes**: - - No attributes available. - -**Inputs** - -* **1**: An tensor of type *T*. **Required.** - -**Outputs** - -* **1**: The result of element-wise atan operation. A tensor of type *T*. - -**Types** - -* *T*: any numeric type. - -*atan* does the following with the input tensor *a*: +**Detailed description**: Operation takes one input tensor and performs the element-wise inverse tangent function on a given input tensor, based on the following mathematical formula: \f[ a_{i} = atan(a_{i}) \f] -**Examples** +**Attributes**: *Atan* operation has no attributes. -*Example 1* +**Inputs** + +* **1**: A tensor of type *T* and arbitrary shape. **Required.** + +**Outputs** + +* **1**: The result of element-wise *Atan* applied to the input tensor. A tensor of type *T* and same shape as the input tensor. + +**Types** + +* *T*: any supported numeric type. + +**Examples** ```xml diff --git a/inference-engine/tests/functional/plugin/cpu/shared_tests_instances/single_layer_tests/activation.cpp b/inference-engine/tests/functional/plugin/cpu/shared_tests_instances/single_layer_tests/activation.cpp index 571187abfbb..0c6a8763844 100644 --- a/inference-engine/tests/functional/plugin/cpu/shared_tests_instances/single_layer_tests/activation.cpp +++ b/inference-engine/tests/functional/plugin/cpu/shared_tests_instances/single_layer_tests/activation.cpp @@ -65,6 +65,7 @@ const std::map>> activationTypes // List of operations that should be tested also with integer precision const std::map>> intActivationTypes = { + {Atan, {}}, {Negative, {}}, {Ceiling, {}}, {Cos, {}}, diff --git a/ngraph/core/include/ngraph/op/atan.hpp b/ngraph/core/include/ngraph/op/atan.hpp index fc388cc228c..c15b4d0b60f 100644 --- a/ngraph/core/include/ngraph/op/atan.hpp +++ b/ngraph/core/include/ngraph/op/atan.hpp @@ -19,8 +19,7 @@ namespace ngraph class NGRAPH_API Atan : public util::UnaryElementwiseArithmetic { public: - static constexpr NodeTypeInfo type_info{"Atan", 0}; - const NodeTypeInfo& get_type_info() const override { return type_info; } + NGRAPH_RTTI_DECLARATION; /// \brief Constructs an arctan operation. Atan() = default; diff --git a/ngraph/core/reference/include/ngraph/runtime/reference/atan.hpp b/ngraph/core/reference/include/ngraph/runtime/reference/atan.hpp index 03dcdf525f2..a5e8f21c662 100644 --- a/ngraph/core/reference/include/ngraph/runtime/reference/atan.hpp +++ b/ngraph/core/reference/include/ngraph/runtime/reference/atan.hpp @@ -13,7 +13,8 @@ namespace ngraph { namespace reference { - template + template ::value, bool>::type = true> void atan(const T* arg, T* out, size_t count) { for (size_t i = 0; i < count; i++) @@ -21,6 +22,16 @@ namespace ngraph out[i] = std::atan(arg[i]); } } + + template ::value, bool>::type = true> + void atan(const T* arg, T* out, size_t count) + { + for (size_t i = 0; i < count; i++) + { + out[i] = std::roundl(std::atan(arg[i])); + } + } } // namespace reference } // namespace runtime } // namespace ngraph diff --git a/ngraph/core/src/op/atan.cpp b/ngraph/core/src/op/atan.cpp index c3f1cce9fb4..9344f7ea0b2 100644 --- a/ngraph/core/src/op/atan.cpp +++ b/ngraph/core/src/op/atan.cpp @@ -23,7 +23,7 @@ using namespace std; using namespace ngraph; -constexpr NodeTypeInfo op::Atan::type_info; +NGRAPH_RTTI_DEFINITION(op::v0::Atan, "Atan", 0, util::UnaryElementwiseArithmetic); op::Atan::Atan(const Output& arg) : UnaryElementwiseArithmetic(arg) diff --git a/ngraph/test/CMakeLists.txt b/ngraph/test/CMakeLists.txt index 4732fdc1906..114e685a936 100644 --- a/ngraph/test/CMakeLists.txt +++ b/ngraph/test/CMakeLists.txt @@ -96,6 +96,7 @@ set(SRC type_prop/adaptive_max_pool.cpp type_prop/asin.cpp type_prop/assign.cpp + type_prop/atan.cpp type_prop/avg_pool.cpp type_prop/batch_norm.cpp type_prop/batch_to_space.cpp @@ -228,6 +229,7 @@ set(SRC visitors/value_map.cpp visitors/op/adaptive_avg_pool.cpp visitors/op/adaptive_max_pool.cpp + visitors/op/atan.cpp visitors/op/batch_norm.cpp visitors/op/broadcast.cpp visitors/op/bucketize.cpp diff --git a/ngraph/test/backend/atan.in.cpp b/ngraph/test/backend/atan.in.cpp index 8a8f29bd0ab..5c5e4f79bfc 100644 --- a/ngraph/test/backend/atan.in.cpp +++ b/ngraph/test/backend/atan.in.cpp @@ -31,7 +31,7 @@ using namespace ngraph; static string s_manifest = "${MANIFEST}"; using TestEngine = test::ENGINE_CLASS_NAME(${BACKEND_NAME}); -NGRAPH_TEST(${BACKEND_NAME}, atan) +NGRAPH_TEST(${BACKEND_NAME}, atan_float) { Shape shape{11}; auto A = make_shared(element::f32, shape); @@ -53,3 +53,16 @@ NGRAPH_TEST(${BACKEND_NAME}, atan) 1.32581766f}); test_case.run(); } + +NGRAPH_TEST(${BACKEND_NAME}, atan_int) +{ + Shape shape{5}; + auto A = make_shared(element::i32, shape); + auto f = make_shared(make_shared(A), ParameterVector{A}); + + auto test_case = test::TestCase(f); + test_case.add_input({-2, -1, 0, 1, 2}); + test_case.add_expected_output(shape, + {-1, -1, 0, 1, 1}); + test_case.run(); +} diff --git a/ngraph/test/type_prop/atan.cpp b/ngraph/test/type_prop/atan.cpp new file mode 100644 index 00000000000..3b21f2a686d --- /dev/null +++ b/ngraph/test/type_prop/atan.cpp @@ -0,0 +1,9 @@ +// Copyright (C) 2021 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 +// + +#include "unary_ops.hpp" + +using Type = ::testing::Types; + +INSTANTIATE_TYPED_TEST_SUITE_P(type_prop_atan, UnaryOperator, Type); diff --git a/ngraph/test/visitors/op/atan.cpp b/ngraph/test/visitors/op/atan.cpp new file mode 100644 index 00000000000..72b5931c72b --- /dev/null +++ b/ngraph/test/visitors/op/atan.cpp @@ -0,0 +1,12 @@ +// Copyright (C) 2021 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 +// + +#include "unary_ops.hpp" + +using Types = ::testing::Types>; + +INSTANTIATE_TYPED_TEST_SUITE_P(visitor_without_attribute, + UnaryOperatorVisitor, + Types, + UnaryOperatorTypeName); \ No newline at end of file