Skip to content

Commit

Permalink
[ONNX]: Added Range from com.microsoft domain (#28202)
Browse files Browse the repository at this point in the history
**Overview:**
This pull request fixes #17575 .

**Dependencies:**
- No dependencies on other pull requests.

**CC:**
- @p-wysocki , @mlukasze

---------

Signed-off-by: 11happy <[email protected]>
Co-authored-by: Georgy Krivoruchko <[email protected]>
  • Loading branch information
11happy and gkrivor authored Jan 15, 2025
1 parent 4e6617c commit 62b720d
Show file tree
Hide file tree
Showing 4 changed files with 176 additions and 0 deletions.
44 changes: 44 additions & 0 deletions src/frontends/onnx/frontend/src/op/com.microsoft/range.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// Copyright (C) 2018-2025 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//

#include "openvino/op/range.hpp"

#include "core/operator_set.hpp"
#include "exceptions.hpp"
#include "openvino/op/constant.hpp"
#include "utils/common.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) {
common::default_op_checks(node, 2);
auto nodes = node.get_ov_inputs();

auto start = nodes[0];
auto limit = nodes[1];
auto delta =
nodes.size() == 3 ? nodes[2] : ov::op::v0::Constant::create(start.get_element_type(), ov::Shape{}, {1});
CHECK_VALID_NODE(node,
start.get_element_type() == limit.get_element_type(),
"start and limit must be of same type, got :",
start.get_element_type(),
limit.get_element_type());
CHECK_VALID_NODE(node,
start.get_element_type() == delta.get_element_type(),
"start and delta must be of same type, got :",
start.get_element_type(),
delta.get_element_type());
return {std::make_shared<ov::op::v4::Range>(start, limit, delta, 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
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
ir_version: 6
producer_name: "OpenVINO ONNX Frontend"
graph {
node {
input: "start"
input: "limit"
input: "delta"
output: "output"
op_type: "Range"
domain: "com.microsoft"
}
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"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
ir_version: 6
producer_name: "OpenVINO ONNX Frontend"
graph {
node {
input: "start"
input: "limit"
output: "output"
op_type: "Range"
domain: "com.microsoft"
}
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"
}
23 changes: 23 additions & 0 deletions src/frontends/onnx/tests/onnx_import_com_microsoft.in.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1483,6 +1483,29 @@ OPENVINO_TEST(${BACKEND_NAME}, onnx_com_microsoft_simplified_layer_normalization
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<float>({0.f});
test_case.add_input<float>({10.f});
test_case.add_input<float>({1.f});
test_case.add_expected_output<float>(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<float>({0.f});
test_case.add_input<float>({10.f});
test_case.add_expected_output<float>(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_fusedmatmul_2x3) {
const auto model = convert_model("com.microsoft/fusedmatmul_2D.onnx");
auto test_case = ov::test::TestCase(model, s_device);
Expand Down

0 comments on commit 62b720d

Please sign in to comment.