def is_same_node_merge()

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