Add nGraph visitor tests for reduction operations (#5538)

* Add ngraph visitor tests for reduction operations

* Add check for number of expected attributes

* Add ReduceL1 and ReduceL2 to visitor test typed case of reduce ops

* Instantiate reduce operation type in separate file
This commit is contained in:
Gabriele Galiero Casay 2021-05-12 05:23:14 +02:00 committed by GitHub
parent 0b22d6c51c
commit 5a0bcf50c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 87 additions and 210 deletions

View File

@ -237,6 +237,8 @@ set(SRC
visitors/op/prior_box.cpp
visitors/op/proposal.cpp
visitors/op/psroi_pooling.cpp
visitors/op/reduce_l1.cpp
visitors/op/reduce_l2.cpp
visitors/op/reduce_logical_and.cpp
visitors/op/reduce_logical_or.cpp
visitors/op/reduce_max.cpp

View File

@ -0,0 +1,8 @@
// Copyright (C) 2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "reduce_ops.hpp"
using Type = ::testing::Types<ngraph::op::v4::ReduceL1>;
INSTANTIATE_TYPED_TEST_CASE_P(attributes_reduce_l1, ReduceOpsAttrTest, Type);

View File

@ -0,0 +1,8 @@
// Copyright (C) 2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "reduce_ops.hpp"
using Type = ::testing::Types<ngraph::op::v4::ReduceL2>;
INSTANTIATE_TYPED_TEST_CASE_P(attributes_reduce_l2, ReduceOpsAttrTest, Type);

View File

@ -2,34 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "gtest/gtest.h"
#include "reduce_ops.hpp"
#include "ngraph/ngraph.hpp"
#include "ngraph/op/util/attr_types.hpp"
#include "ngraph/opsets/opset1.hpp"
#include "ngraph/opsets/opset3.hpp"
#include "ngraph/opsets/opset4.hpp"
#include "ngraph/opsets/opset5.hpp"
#include "util/visitor.hpp"
using namespace std;
using namespace ngraph;
using ngraph::test::NodeBuilder;
using ngraph::test::ValueMap;
TEST(attributes, reduce_logical_and_op)
{
// ReduceLogicalAnd derives visit_attributes from op::util::LogicalReductionKeepDims
NodeBuilder::get_ops().register_factory<opset1::ReduceLogicalAnd>();
auto data = make_shared<op::Parameter>(element::f32, Shape{3, 4, 5});
auto reduction_axes = make_shared<op::Parameter>(element::i64, Shape{2});
bool keep_dims = true;
auto reduce_logical_and = make_shared<opset1::ReduceSum>(data, reduction_axes, keep_dims);
NodeBuilder builder(reduce_logical_and);
auto g_reduce_logical_and = as_type_ptr<opset1::ReduceSum>(builder.create());
EXPECT_EQ(g_reduce_logical_and->get_keep_dims(), reduce_logical_and->get_keep_dims());
}
using Type = ::testing::Types<ngraph::op::v1::ReduceLogicalAnd>;
INSTANTIATE_TYPED_TEST_CASE_P(attributes_reduce_logical_and, ReduceOpsAttrTest, Type);

View File

@ -2,34 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "gtest/gtest.h"
#include "reduce_ops.hpp"
#include "ngraph/ngraph.hpp"
#include "ngraph/op/util/attr_types.hpp"
#include "ngraph/opsets/opset1.hpp"
#include "ngraph/opsets/opset3.hpp"
#include "ngraph/opsets/opset4.hpp"
#include "ngraph/opsets/opset5.hpp"
#include "util/visitor.hpp"
using namespace std;
using namespace ngraph;
using ngraph::test::NodeBuilder;
using ngraph::test::ValueMap;
TEST(attributes, reduce_logical_or_op)
{
// ReduceLogicalOr derives visit_attributes from op::util::LogicalReductionKeepDims
NodeBuilder::get_ops().register_factory<opset1::ReduceLogicalOr>();
auto data = make_shared<op::Parameter>(element::f32, Shape{3, 4, 5});
auto reduction_axes = make_shared<op::Parameter>(element::i64, Shape{2});
bool keep_dims = true;
auto reduce_logical_or = make_shared<opset1::ReduceLogicalOr>(data, reduction_axes, keep_dims);
NodeBuilder builder(reduce_logical_or);
auto g_reduce_logical_or = as_type_ptr<opset1::ReduceLogicalOr>(builder.create());
EXPECT_EQ(g_reduce_logical_or->get_keep_dims(), reduce_logical_or->get_keep_dims());
}
using Type = ::testing::Types<ngraph::op::v1::ReduceLogicalOr>;
INSTANTIATE_TYPED_TEST_CASE_P(attributes_reduce_logical_or, ReduceOpsAttrTest, Type);

View File

@ -2,34 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "gtest/gtest.h"
#include "reduce_ops.hpp"
#include "ngraph/ngraph.hpp"
#include "ngraph/op/util/attr_types.hpp"
#include "ngraph/opsets/opset1.hpp"
#include "ngraph/opsets/opset3.hpp"
#include "ngraph/opsets/opset4.hpp"
#include "ngraph/opsets/opset5.hpp"
#include "util/visitor.hpp"
using namespace std;
using namespace ngraph;
using ngraph::test::NodeBuilder;
using ngraph::test::ValueMap;
TEST(attributes, reduce_max_op)
{
// ReduceMax derives visit_attributes from op::util::ArithmeticReductionKeepDims
NodeBuilder::get_ops().register_factory<opset1::ReduceMax>();
auto data = make_shared<op::Parameter>(element::f32, Shape{3, 4, 5});
auto reduction_axes = make_shared<op::Parameter>(element::i64, Shape{2});
bool keep_dims = true;
auto reduce_max = make_shared<opset1::ReduceMax>(data, reduction_axes, keep_dims);
NodeBuilder builder(reduce_max);
auto g_reduce_max = as_type_ptr<opset1::ReduceMax>(builder.create());
EXPECT_EQ(g_reduce_max->get_keep_dims(), reduce_max->get_keep_dims());
}
using Type = ::testing::Types<ngraph::op::v1::ReduceMax>;
INSTANTIATE_TYPED_TEST_CASE_P(attributes_reduce_max, ReduceOpsAttrTest, Type);

View File

@ -2,34 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "gtest/gtest.h"
#include "reduce_ops.hpp"
#include "ngraph/ngraph.hpp"
#include "ngraph/op/util/attr_types.hpp"
#include "ngraph/opsets/opset1.hpp"
#include "ngraph/opsets/opset3.hpp"
#include "ngraph/opsets/opset4.hpp"
#include "ngraph/opsets/opset5.hpp"
#include "util/visitor.hpp"
using namespace std;
using namespace ngraph;
using ngraph::test::NodeBuilder;
using ngraph::test::ValueMap;
TEST(attributes, reduce_mean_op)
{
// ReduceMean derives visit_attributes from op::util::ArithmeticReductionKeepDims
NodeBuilder::get_ops().register_factory<opset1::ReduceMean>();
auto data = make_shared<op::Parameter>(element::f32, Shape{3, 4, 5});
auto reduction_axes = make_shared<op::Parameter>(element::i64, Shape{2});
bool keep_dims = true;
auto reduce_mean = make_shared<opset1::ReduceMean>(data, reduction_axes, keep_dims);
NodeBuilder builder(reduce_mean);
auto g_reduce_mean = as_type_ptr<opset1::ReduceMean>(builder.create());
EXPECT_EQ(g_reduce_mean->get_keep_dims(), reduce_mean->get_keep_dims());
}
using Type = ::testing::Types<ngraph::op::v1::ReduceMean>;
INSTANTIATE_TYPED_TEST_CASE_P(attributes_reduce_mean, ReduceOpsAttrTest, Type);

View File

@ -2,34 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "gtest/gtest.h"
#include "reduce_ops.hpp"
#include "ngraph/ngraph.hpp"
#include "ngraph/op/util/attr_types.hpp"
#include "ngraph/opsets/opset1.hpp"
#include "ngraph/opsets/opset3.hpp"
#include "ngraph/opsets/opset4.hpp"
#include "ngraph/opsets/opset5.hpp"
#include "util/visitor.hpp"
using namespace std;
using namespace ngraph;
using ngraph::test::NodeBuilder;
using ngraph::test::ValueMap;
TEST(attributes, reduce_min_op)
{
// ReduceMin derives visit_attributes from op::util::ArithmeticReductionKeepDims
NodeBuilder::get_ops().register_factory<opset1::ReduceMin>();
auto data = make_shared<op::Parameter>(element::f32, Shape{3, 4, 5});
auto reduction_axes = make_shared<op::Parameter>(element::i64, Shape{2});
bool keep_dims = true;
auto reduce_min = make_shared<opset1::ReduceMin>(data, reduction_axes, keep_dims);
NodeBuilder builder(reduce_min);
auto g_reduce_min = as_type_ptr<opset1::ReduceMin>(builder.create());
EXPECT_EQ(g_reduce_min->get_keep_dims(), reduce_min->get_keep_dims());
}
using Type = ::testing::Types<ngraph::op::v1::ReduceMin>;
INSTANTIATE_TYPED_TEST_CASE_P(attributes_reduce_min, ReduceOpsAttrTest, Type);

View File

@ -0,0 +1,48 @@
// Copyright (C) 2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "gtest/gtest.h"
#include "ngraph/ngraph.hpp"
#include "ngraph/op/util/attr_types.hpp"
#include "util/visitor.hpp"
using namespace std;
using namespace ngraph;
using ngraph::test::NodeBuilder;
using ngraph::test::ValueMap;
template<class T>
class ReduceOpsAttrTest : public ::testing::Test
{
};
TYPED_TEST_CASE_P(ReduceOpsAttrTest);
TYPED_TEST_P(ReduceOpsAttrTest, reduce_ops)
{
Shape in_shape{3, 4, 5};
element::Type in_et = element::f32;
Shape axes_shape{2};
element::Type axes_et = element::i64;
bool keep_dims = true;
NodeBuilder::get_ops().register_factory<TypeParam>();
auto data = make_shared<op::Parameter>(in_et, in_shape);
auto reduction_axes = make_shared<op::Parameter>(axes_et, axes_shape);
auto reduce_op = make_shared<TypeParam>(data, reduction_axes, keep_dims);
NodeBuilder builder(reduce_op);
const auto expected_attr_count = 1;
EXPECT_EQ(builder.get_value_map_size(), expected_attr_count);
auto g_reduce_op = as_type_ptr<TypeParam>(builder.create());
EXPECT_EQ(g_reduce_op->get_keep_dims(), reduce_op->get_keep_dims());
}
REGISTER_TYPED_TEST_CASE_P(
ReduceOpsAttrTest,
reduce_ops);

View File

@ -2,34 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "gtest/gtest.h"
#include "reduce_ops.hpp"
#include "ngraph/ngraph.hpp"
#include "ngraph/op/util/attr_types.hpp"
#include "ngraph/opsets/opset1.hpp"
#include "ngraph/opsets/opset3.hpp"
#include "ngraph/opsets/opset4.hpp"
#include "ngraph/opsets/opset5.hpp"
#include "util/visitor.hpp"
using namespace std;
using namespace ngraph;
using ngraph::test::NodeBuilder;
using ngraph::test::ValueMap;
TEST(attributes, reduce_prod_op)
{
// ReduceProd derives visit_attributes from op::util::ArithmeticReductionKeepDims
NodeBuilder::get_ops().register_factory<opset1::ReduceProd>();
auto data = make_shared<op::Parameter>(element::f32, Shape{3, 4, 5});
auto reduction_axes = make_shared<op::Parameter>(element::i64, Shape{2});
bool keep_dims = true;
auto reduce_prod = make_shared<opset1::ReduceProd>(data, reduction_axes, keep_dims);
NodeBuilder builder(reduce_prod);
auto g_reduce_prod = as_type_ptr<opset1::ReduceProd>(builder.create());
EXPECT_EQ(g_reduce_prod->get_keep_dims(), reduce_prod->get_keep_dims());
}
using Type = ::testing::Types<ngraph::op::v1::ReduceProd>;
INSTANTIATE_TYPED_TEST_CASE_P(attributes_reduce_prod, ReduceOpsAttrTest, Type);

View File

@ -2,34 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "gtest/gtest.h"
#include "reduce_ops.hpp"
#include "ngraph/ngraph.hpp"
#include "ngraph/op/util/attr_types.hpp"
#include "ngraph/opsets/opset1.hpp"
#include "ngraph/opsets/opset3.hpp"
#include "ngraph/opsets/opset4.hpp"
#include "ngraph/opsets/opset5.hpp"
#include "util/visitor.hpp"
using namespace std;
using namespace ngraph;
using ngraph::test::NodeBuilder;
using ngraph::test::ValueMap;
TEST(attributes, reduce_sum_op)
{
// ReduceSum derives visit_attributes from op::util::ArithmeticReductionKeepDims
NodeBuilder::get_ops().register_factory<opset1::ReduceSum>();
auto data = make_shared<op::Parameter>(element::f32, Shape{3, 4, 5});
auto reduction_axes = make_shared<op::Parameter>(element::i64, Shape{2});
bool keep_dims = true;
auto reduce_sum = make_shared<opset1::ReduceSum>(data, reduction_axes, keep_dims);
NodeBuilder builder(reduce_sum);
auto g_reduce_sum = as_type_ptr<opset1::ReduceSum>(builder.create());
EXPECT_EQ(g_reduce_sum->get_keep_dims(), reduce_sum->get_keep_dims());
}
using Type = ::testing::Types<ngraph::op::v1::ReduceSum>;
INSTANTIATE_TYPED_TEST_CASE_P(attributes_reduce_sum, ReduceOpsAttrTest, Type);