Added check that new name is unique. (#4516)

* Added check that new name is unique..

* Added unique names test.

* Fixed unique name check.

* Fixed bug.

* Reformat code.

* Fixed bug, extended tests.

* Uncomment tests.
This commit is contained in:
Anastasia Popova 2021-03-02 17:26:55 +03:00 committed by GitHub
parent f88638006c
commit 9f5fad16e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 11 deletions

View File

@ -30,7 +30,12 @@ class ResultRename(BackReplacementPattern):
if node.in_ports():
prev_node_out_port = node.in_port(0).get_connection().get_source()
tensor_names = prev_node_out_port.get_tensor_names()
if tensor_names:
# Graph may contain Result nodes with names equal to input tensors and
# renaming in this case is not needed. The example of such situation is
# IR reader check when graph is read with correct Result names.
if tensor_names and node.soft_get('name') == tensor_names[0]:
continue
if tensor_names and not graph.get_op_nodes(name=tensor_names[0]):
result_name = tensor_names[0]
else:
result_name = prev_node_out_port.node.soft_get('name', prev_node_out_port.node.id) + \

View File

@ -23,26 +23,57 @@ from mo.utils.unittest.graph import build_graph, regular_op, result
nodes = {
**regular_op('Op1', {'type': 'Op1', 'kind': 'op', 'op': 'Op1'}),
**result('result'),
'Op1_data': {'kind': 'data', 'fw_tensor_debug_info': [('Op1', 0, 'Op1_tensor')]}
**regular_op('Op2', {'type': 'Op2', 'kind': 'op', 'op': 'Op2'}),
**result('result1'),
**result('result2'),
'Op1_data': {'kind': 'data', 'fw_tensor_debug_info': [('Op1', 0, 'Op1_tensor')]},
'Op2_data': {'kind': 'data', 'fw_tensor_debug_info': [('Op1', 0, 'Op2_tensor')]},
}
class ResultRenameTest(unittest.TestCase):
def test_case1(self):
graph = build_graph(nodes, [('Op1', 'Op1_data'), ('Op1_data', 'result')])
graph_ref = build_graph(nodes, [('Op1', 'Op1_data'), ('Op1_data', 'result')])
res_node = Node(graph_ref, 'result')
res_node['name'] = 'Op1_tensor'
graph = build_graph(nodes, [('Op1', 'Op1_data'), ('Op1_data', 'result1')])
ResultRename().find_and_replace_pattern(graph)
(flag, resp) = compare_graphs(graph, graph_ref, 'result', check_op_attrs=True)
self.assertTrue(flag, resp)
res_node = Node(graph, 'result1')
self.assertTrue(res_node['name'] == 'Op1_tensor')
def test_case2(self):
graph = build_graph(nodes, [])
graph_ref = build_graph(nodes, [])
ResultRename().find_and_replace_pattern(graph)
(flag, resp) = compare_graphs(graph, graph_ref, 'result', check_op_attrs=True)
(flag, resp) = compare_graphs(graph, graph_ref, 'result1', check_op_attrs=True)
self.assertTrue(flag, resp)
def test_case3(self):
graph = build_graph(nodes, [('Op1', 'Op1_data'), ('Op1_data', 'result1')])
res_node_graph = Node(graph, 'Op1')
res_node_graph['name'] = 'Op1_tensor'
ResultRename().find_and_replace_pattern(graph)
res_node = Node(graph, 'result1')
self.assertTrue(res_node['name'] == 'Op1_tensor/sink_port_0')
def test_case4(self):
graph = build_graph(nodes, [('Op1', 'Op1_data'), ('Op1_data', 'result1'),
('Op1_data', 'Op2'), ('Op2', 'Op2_data'),
('Op2_data', 'result2')])
ResultRename().find_and_replace_pattern(graph)
res1_node = Node(graph, 'result1')
res2_node = Node(graph, 'result2')
self.assertTrue(res1_node['name'] == 'Op1_tensor')
self.assertTrue(res2_node['name'] == 'Op2_tensor')
def test_case5(self):
graph = build_graph(nodes, [('Op1', 'Op1_data'), ('Op1_data', 'result1'),
('Op1_data', 'Op2'), ('Op2', 'Op2_data'),
('Op2_data', 'result2')])
res_node_graph = Node(graph, 'result1')
res_node_graph['name'] = 'Op1_tensor'
ResultRename().find_and_replace_pattern(graph)
res1_node = Node(graph, 'result1')
res2_node = Node(graph, 'result2')
self.assertTrue(res1_node['name'] == 'Op1_tensor')
self.assertTrue(res2_node['name'] == 'Op2_tensor')