30 lines
1.3 KiB
Python
30 lines
1.3 KiB
Python
# Copyright (C) 2018-2021 Intel Corporation
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
from extensions.ops.roll import Roll
|
|
from mo.front.common.replacement import FrontReplacementPattern
|
|
from mo.front.tf.graph_utils import create_op_with_const_inputs
|
|
from mo.graph.graph import Graph, rename_nodes
|
|
|
|
|
|
class AttributedRollToRoll(FrontReplacementPattern):
|
|
"""
|
|
This transformation converts AttributedRoll operation (axes and shift are specified as attributes) to Roll
|
|
operation (Inference Engine semantic).
|
|
"""
|
|
enabled = True
|
|
|
|
def find_and_replace_pattern(self, graph: Graph):
|
|
for attr_roll in graph.get_op_nodes(op='AttributedRoll'):
|
|
original_name = attr_roll.soft_get('name', attr_roll.id)
|
|
port_value_dict = {1: attr_roll.shift}
|
|
if attr_roll.has_valid('axes'):
|
|
port_value_dict.update({2: attr_roll.axes})
|
|
|
|
new_roll = create_op_with_const_inputs(graph, op=Roll, port_value_dict=port_value_dict)
|
|
rename_nodes([(attr_roll, original_name + '/to_be_removed'), (new_roll, original_name)])
|
|
|
|
attr_roll.in_port(0).get_connection().set_destination(new_roll.in_port(0))
|
|
attr_roll.out_port(0).get_connection().set_source(new_roll.out_port(0))
|
|
graph.remove_node(attr_roll.id)
|