From d2c10aa8ddaf46bf5b40d82adef09bc18de34a66 Mon Sep 17 00:00:00 2001 From: Valery Chernov Date: Mon, 30 Jan 2023 10:52:50 +0300 Subject: [PATCH 1/3] add SequenceEmpty --- python/tvm/relay/frontend/onnx.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/python/tvm/relay/frontend/onnx.py b/python/tvm/relay/frontend/onnx.py index 93429a863889..c49eebda7c1f 100644 --- a/python/tvm/relay/frontend/onnx.py +++ b/python/tvm/relay/frontend/onnx.py @@ -6148,6 +6148,15 @@ def _impl_v11(cls, inputs, attr, params): return _expr.Tuple(inputs) +class SequenceEmpty(OnnxOpConverter): + """Operator converter for sequence empty op.""" + + @classmethod + def _impl_v11(cls, inputs, attr, params): + # Construct an empty tuple. + return _expr.Tuple(None) + + class SequenceErase(OnnxOpConverter): """Operator converter for sequence erase op.""" @@ -6523,6 +6532,7 @@ def _get_convert_map(opset): "LinearRegressor": LinearRegressor.get_converter(opset), # Sequence operators "SequenceConstruct": SequenceConstruct.get_converter(opset), + "SequenceEmpty": SequenceEmpty.get_converter(opset), "SequenceErase": SequenceErase.get_converter(opset), "SequenceInsert": SequenceInsert.get_converter(opset), "SequenceLength": SequenceLength.get_converter(opset), From 062cfabab2cfa1a09ed54d361d5e6d7b497024ff Mon Sep 17 00:00:00 2001 From: Valery Chernov Date: Mon, 30 Jan 2023 11:05:03 +0300 Subject: [PATCH 2/3] add SequenceEmpty test --- tests/python/frontend/onnx/test_forward.py | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/python/frontend/onnx/test_forward.py b/tests/python/frontend/onnx/test_forward.py index 3e1af4086784..3f382298c034 100644 --- a/tests/python/frontend/onnx/test_forward.py +++ b/tests/python/frontend/onnx/test_forward.py @@ -7829,6 +7829,38 @@ def verify_sequence_ops(tensor_shape, num_tensors, axis=0, position=0, new_axis= verify_sequence_ops((3, 3, 3, 3), 4, axis=2, new_axis=1) +@tvm.testing.parametrize_targets +def test_empty_sequence(target, dev): + """test_empty_sequence""" + + # Test creating an empty tensor sequence. + empty_node = helper.make_node( + "SequenceEmpty", inputs=[], outputs=["empty_sequence"], + ) + + length_node = helper.make_node( + "SequenceLength", inputs=["empty_sequence"], outputs=["output"] + ) + + graph_outputs = [helper.make_tensor_value_info("output", TensorProto.INT64, [])] + + graph_nodes = [empty_node, length_node] + + graph = helper.make_graph( + graph_nodes, + "Sequence_test", + inputs=[], + outputs=graph_outputs, + ) + + model = helper.make_model( + graph, + producer_name="Sequence_empty_test", + ) + + verify_with_ort_with_inputs(model, [], target=target, dev=dev) + + def test_exporting_node_renamed_model(): """test exproting model when export_node_renamed_model is set""" From 652be0ae870083090d644b055191c43f2efa4977 Mon Sep 17 00:00:00 2001 From: Valery Chernov Date: Mon, 30 Jan 2023 12:40:13 +0300 Subject: [PATCH 3/3] pylint fix --- python/tvm/relay/frontend/onnx.py | 2 +- tests/python/frontend/onnx/test_forward.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/python/tvm/relay/frontend/onnx.py b/python/tvm/relay/frontend/onnx.py index c49eebda7c1f..8b4a0cc5e8d3 100644 --- a/python/tvm/relay/frontend/onnx.py +++ b/python/tvm/relay/frontend/onnx.py @@ -6154,7 +6154,7 @@ class SequenceEmpty(OnnxOpConverter): @classmethod def _impl_v11(cls, inputs, attr, params): # Construct an empty tuple. - return _expr.Tuple(None) + return _expr.Tuple([]) class SequenceErase(OnnxOpConverter): diff --git a/tests/python/frontend/onnx/test_forward.py b/tests/python/frontend/onnx/test_forward.py index 3f382298c034..dd172d1ddea6 100644 --- a/tests/python/frontend/onnx/test_forward.py +++ b/tests/python/frontend/onnx/test_forward.py @@ -7835,12 +7835,12 @@ def test_empty_sequence(target, dev): # Test creating an empty tensor sequence. empty_node = helper.make_node( - "SequenceEmpty", inputs=[], outputs=["empty_sequence"], + "SequenceEmpty", + inputs=[], + outputs=["empty_sequence"], ) - length_node = helper.make_node( - "SequenceLength", inputs=["empty_sequence"], outputs=["output"] - ) + length_node = helper.make_node("SequenceLength", inputs=["empty_sequence"], outputs=["output"]) graph_outputs = [helper.make_tensor_value_info("output", TensorProto.INT64, [])] @@ -7848,7 +7848,7 @@ def test_empty_sequence(target, dev): graph = helper.make_graph( graph_nodes, - "Sequence_test", + "Sequence_empty_test", inputs=[], outputs=graph_outputs, )