diff --git a/src/frontends/onnx/frontend/src/op/com.microsoft/range.cpp b/src/frontends/onnx/frontend/src/op/com.microsoft/range.cpp new file mode 100644 index 00000000000000..9a1d08162318b1 --- /dev/null +++ b/src/frontends/onnx/frontend/src/op/com.microsoft/range.cpp @@ -0,0 +1,29 @@ +// Copyright (C) 2018-2024 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 +// + +#include "core/operator_set.hpp" +#include "openvino/op/ops.hpp" +#include "openvino/frontend/exception.hpp" + +using namespace ov::op; + +namespace ov { +namespace frontend { +namespace onnx { +namespace com_microsoft { +namespace opset_1 { +ov::OutputVector range(const ov::frontend::onnx::Node& node) { + auto nodes = node.get_ov_inputs(); + FRONT_END_GENERAL_CHECK((nodes.size() == 2 || nodes.size() == 3), "Range takes 2 or 3 inputs. Provided " + std::to_string(nodes.size())); + auto start = nodes.at(0); + auto limit = nodes.at(1); + auto step = nodes.size() == 3 ? nodes.at(2) : ov::op::v0::Constant::create(start.get_element_type(), ov::Shape{}, {1}); + return {std::make_shared(start, limit, step,start.get_element_type())}; +} +ONNX_OP("Range", OPSET_SINCE(1), com_microsoft::opset_1::range, MICROSOFT_DOMAIN); +} // namespace opset_1 +} // namespace com_microsoft +} // namespace onnx +} // namespace frontend +} // namespace ov \ No newline at end of file diff --git a/src/frontends/onnx/tests/models/com.microsoft/range_with_delta.prototxt b/src/frontends/onnx/tests/models/com.microsoft/range_with_delta.prototxt new file mode 100644 index 00000000000000..bd472d7e19594d --- /dev/null +++ b/src/frontends/onnx/tests/models/com.microsoft/range_with_delta.prototxt @@ -0,0 +1,59 @@ +ir_version: 6 +producer_name: "OpenVINO ONNX Frontend" +graph { + node { + input: "start" + input: "limit" + input: "delta" + output: "output" + op_type: "Range" + } + name: "test_range_float_type_with_delta" + input { + name: "start" + type { + tensor_type { + elem_type: 1 + shape { + } + } + } + } + input { + name: "limit" + type { + tensor_type { + elem_type: 1 + shape { + } + } + } + } + input { + name: "delta" + type { + tensor_type { + elem_type: 1 + shape { + } + } + } + } + output { + name: "output" + type { + tensor_type { + elem_type: 1 + shape { + dim { + dim_value: 10 + } + } + } + } + } +} +opset_import { + version: 1 + domain: "com.microsoft" +} \ No newline at end of file diff --git a/src/frontends/onnx/tests/models/com.microsoft/range_without_delta.prototxt b/src/frontends/onnx/tests/models/com.microsoft/range_without_delta.prototxt new file mode 100644 index 00000000000000..d264fc2264a12d --- /dev/null +++ b/src/frontends/onnx/tests/models/com.microsoft/range_without_delta.prototxt @@ -0,0 +1,48 @@ +ir_version: 6 +producer_name: "OpenVINO ONNX Frontend" +graph { + node { + input: "start" + input: "limit" + output: "output" + op_type: "Range" + } + name: "test_range_float_type_without_delta" + input { + name: "start" + type { + tensor_type { + elem_type: 1 + shape { + } + } + } + } + input { + name: "limit" + type { + tensor_type { + elem_type: 1 + shape { + } + } + } + } + output { + name: "output" + type { + tensor_type { + elem_type: 1 + shape { + dim { + dim_value: 10 + } + } + } + } + } +} +opset_import { + version: 1 + domain: "com.microsoft" +} \ No newline at end of file diff --git a/src/frontends/onnx/tests/onnx_import_com_microsoft.in.cpp b/src/frontends/onnx/tests/onnx_import_com_microsoft.in.cpp index 333c06e24a8a40..1ea4b5703e4f8a 100644 --- a/src/frontends/onnx/tests/onnx_import_com_microsoft.in.cpp +++ b/src/frontends/onnx/tests/onnx_import_com_microsoft.in.cpp @@ -1488,3 +1488,28 @@ OPENVINO_TEST(${BACKEND_NAME}, onnx_com_microsoft_matmul_integer_to_float) { test_case.run(); } + +OPENVINO_TEST(${BACKEND_NAME}, onnx_com_microsoft_range_with_delta) { + const auto model = convert_model("com.microsoft/range_with_delta.onnx"); + auto test_case = ov::test::TestCase(model, s_device); + + test_case.add_input({0.f}); + test_case.add_input({10.f}); + test_case.add_input({1.f}); + test_case.add_expected_output(Shape{10}, + {0.f,1.f,2.f,3.f,4.f,5.f,6.f,7.f,8.f,9.f}); + + test_case.run(); +} + +OPENVINO_TEST(${BACKEND_NAME}, onnx_com_microsoft_range_without_delta) { + const auto model = convert_model("com.microsoft/range_without_delta.onnx"); + auto test_case = ov::test::TestCase(model, s_device); + + test_case.add_input({0.f}); + test_case.add_input({10.f}); + test_case.add_expected_output(Shape{10}, + {0.f,1.f,2.f,3.f,4.f,5.f,6.f,7.f,8.f,9.f}); + + test_case.run(); +}