in onnxconverter_common/optimizer.py [0:0]
def is_same_node_merge(node_0, node_1, node):
if node_0.origin is None or node_1.origin is None:
return False
if node_0.origin.name == node_1.origin.name:
return False
if len(node_0.output) > 1 or len(node_1.output) > 1:
return False
no_merge_count = 0
for node_suc_ in node_0.successor:
if node_suc_.origin is None:
return False
if node_suc_.op_type in MergeCommonSequenceOptimizer._no_merge_types and no_merge_count == 0:
no_merge_count += 1
for node_suc_ in node_1.successor:
if node_suc_.origin is None:
return False
if node_suc_.op_type in MergeCommonSequenceOptimizer._no_merge_types and no_merge_count == 1:
no_merge_count += 1
if no_merge_count == 2:
return False
if node_0.origin.op_type != node_1.origin.op_type:
return False
if node_0.origin.op_type == 'Transpose':
return False
if node_0.origin.attribute != node_1.origin.attribute:
return False
if node_0.attributes != node_1.attributes:
return False
if len(node_0.origin.input) != len(node_1.origin.input):
return False
for node_succ_ in [node_0, node_1]:
count = 0
for succ_ in node.successor:
if succ_ == node_succ_:
count += 1
if count > 1:
return False
if len(node_0.initializers) > 0 or len(node_1.initializers) > 0:
return False
for idx_ in range(len(node_0.precedence)):
pred_0 = node_0.get_precedence_by_idx(idx_)
pred_1 = node_1.get_precedence_by_idx(idx_)
if pred_0 is None or pred_1 is None:
return False
if pred_0.unique_name == node.unique_name:
if node_0.input[node_0.origin.input[idx_]] != \
node_1.input[node_1.origin.input[idx_]]:
return False
continue
if pred_0.origin is not None or pred_1.origin is not None:
return False
if len(pred_0.tensors) == 0 or len(pred_1.tensors) == 0:
return False
val_0 = numpy_helper.to_array(pred_0.tensors[0])
val_1 = numpy_helper.to_array(pred_1.tensors[0])
if not np.array_equal(val_0, val_1):
return False
return True