From 0cd4ea29ce601bbcbe025918357282cfe19166fc Mon Sep 17 00:00:00 2001 From: Evgeny Kotov Date: Fri, 7 Jul 2023 17:49:47 +0200 Subject: [PATCH] fix ReverseShapeAndTypeInfer; add unit test (#18319) Co-authored-by: Ivan Tikhonov --- .../reverse_shape_and_type_infer.cpp | 3 ++- .../reverse_shape_and_type_infer.cpp | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/common/transformations/src/transformations/common_optimizations/reverse_shape_and_type_infer.cpp b/src/common/transformations/src/transformations/common_optimizations/reverse_shape_and_type_infer.cpp index 5ef4ebfeea5..77c48c65f20 100644 --- a/src/common/transformations/src/transformations/common_optimizations/reverse_shape_and_type_infer.cpp +++ b/src/common/transformations/src/transformations/common_optimizations/reverse_shape_and_type_infer.cpp @@ -6,6 +6,7 @@ #include "itt.hpp" #include "openvino/core/validation_util.hpp" +#include "openvino/op/util/pad_base.hpp" #include "openvino/opsets/opset10.hpp" using namespace ov::opset10; @@ -108,7 +109,7 @@ bool ov::pass::ReverseShapeAndTypeInfer::run_on_model(const std::shared_ptr(op)) { is_changed |= inherit_output_rank(op, {0, 1, 2, 3}); is_changed |= inherit_output_type(op, {0, 1, 2, 3}); - } else if (std::dynamic_pointer_cast(op)) { + } else if (std::dynamic_pointer_cast(op)) { // Shape of pads_begin and pads_end must match rank of input if (op->get_input_partial_shape(0).rank().is_dynamic()) { auto pads_begin_shape = op->get_input_partial_shape(1); diff --git a/src/common/transformations/tests/common_optimizations/reverse_shape_and_type_infer.cpp b/src/common/transformations/tests/common_optimizations/reverse_shape_and_type_infer.cpp index 5676f55b7ec..6dc801ee475 100644 --- a/src/common/transformations/tests/common_optimizations/reverse_shape_and_type_infer.cpp +++ b/src/common/transformations/tests/common_optimizations/reverse_shape_and_type_infer.cpp @@ -8,6 +8,7 @@ #include #include "common_test_utils/ngraph_test_utils.hpp" +#include "openvino/opsets/opset12.hpp" using namespace testing; using namespace ov; @@ -194,6 +195,28 @@ TEST_F(TransformationTestsF, PadReverseInfer) { } } +TEST_F(TransformationTestsF, NegativePad12ReverseInfer) { + { + auto data = std::make_shared(element::dynamic, PartialShape::dynamic()); + auto pads_begin = opset10::Constant::create(element::i64, Shape{4}, {0, 0, 0, -1}); + auto pads_end = opset10::Constant::create(element::i64, Shape{4}, {0, 0, 0, -1}); + auto value = opset10::Constant::create(element::f32, Shape{}, {0}); + auto pad = std::make_shared(data, pads_begin, pads_end, value, op::PadMode::CONSTANT); + auto result = std::make_shared(pad); + model = std::make_shared(ResultVector{result}, ParameterVector{data}); + manager.register_pass(); + } + { + auto data = std::make_shared(element::f32, PartialShape::dynamic(4)); + auto pads_begin = opset10::Constant::create(element::i64, Shape{4}, {0, 0, 0, -1}); + auto pads_end = opset10::Constant::create(element::i64, Shape{4}, {0, 0, 0, -1}); + auto value = opset10::Constant::create(element::f32, Shape{}, {0}); + auto pad = std::make_shared(data, pads_begin, pads_end, value, op::PadMode::CONSTANT); + auto result = std::make_shared(pad); + model_ref = std::make_shared(ResultVector{result}, ParameterVector{data}); + } +} + TEST_F(TransformationTestsF, ActivationReverseInfer) { { auto data = std::make_shared(element::dynamic, PartialShape::dynamic());