network->setInputInfo(info);
};
+ // Check if some of function nodes has dynamic input or output shape
+ // we collect this nodes and then throw an exception with the list
+ // of dynamic nodes.
+ std::stringstream err_log;
+ for (const auto & node : graph->get_ordered_ops()) {
+ bool is_dynamic = false;
+ for (const auto & input : node->inputs()) {
+ if (input.get_partial_shape().is_dynamic()) {
+ is_dynamic = true;
+ break;
+ }
+ }
+ for (const auto & output : node->outputs()) {
+ if (output.get_partial_shape().is_dynamic()) {
+ is_dynamic = true;
+ break;
+ }
+ }
+ if (is_dynamic) err_log << node << std::endl;
+ }
+ if (!err_log.str().empty()) {
+ THROW_IE_EXCEPTION << "\nUnsupported dynamic ops: \n" << err_log.str();
+ }
+
const CNNNetworkNGraphImpl* nGraphImpl = dynamic_cast<const CNNNetworkNGraphImpl*>(&network);
InputsDataMap thisInputDataMap;
//
#include <gtest/gtest.h>
+#include <gmock/gmock.h>
#include <cpp/ie_cnn_network.h>
#include <legacy/cnn_network_impl.hpp> // deprecated API
const std::string resp_msg = err.what();
ASSERT_TRUE(resp_msg.find(ref_msg) != std::string::npos) << resp_msg;
}
+}
+
+TEST(ConvertFunctionToCNNNetworkTests, UnsupportedDynamicOps) {
+ std::shared_ptr<ngraph::Function> f;
+ {
+ auto param = std::make_shared<ngraph::opset4::Parameter>(ngraph::element::f32, ngraph::PartialShape::dynamic());
+ param->set_friendly_name("param");
+ auto relu = std::make_shared<ngraph::opset4::Relu>(param);
+ relu->set_friendly_name("relu");
+ auto non_zero = std::make_shared<ngraph::opset4::NonZero>(relu);
+ non_zero->set_friendly_name("non_zero");
+ auto result = std::make_shared<ngraph::op::Result>(non_zero->output(0));
+ result->set_friendly_name("result");
+
+ f = std::make_shared<ngraph::Function>(ngraph::ResultVector{result},
+ ngraph::ParameterVector{param});
+ }
+
+ InferenceEngine::CNNNetwork nGraphImpl(f);
+ try {
+ InferenceEngine::details::convertFunctionToICNNNetwork(f, nGraphImpl);
+ FAIL() << "InferenceEngineException must be thrown";
+ } catch(InferenceEngine::details::InferenceEngineException & e) {
+ EXPECT_THAT(e.what(), testing::HasSubstr(std::string("Unsupported dynamic ops: \n"
+ "v0::Parameter param () -> (f32?)\n"
+ "v0::Relu relu (param[0]:f32?) -> (f32?)\n"
+ "v3::NonZero non_zero (relu[0]:f32?) -> (i64{?,?})\n"
+ "v0::Result result (non_zero[0]:i64{?,?}) -> (i64{?,?})")));
+ }
}
\ No newline at end of file