def METHOD_NAME(self, model: ModelProto) -> ModelProto:
    graph = ONNXGraph(model)
    matches = get_structural_matches(
        graph,
        op_type="Gemm",
        parent_ops=[
            [any_of("QuantizeLinear", "DequantizeLinear")],
            [INITIALIZER_MATCH, "QuantizeLinear", "DequantizeLinear"],
        ],
        children_ops=[
            [
                any_of("QuantizeLinear", "DequantizeLinear"),
                optional_node("DequantizeLinear"),
            ]
        ],
    )
    for match in matches:
        gemm_attributes = get_node_attributes(match.node)
        if any(float(attribute) != 1.0 for attribute in gemm_attributes.values()):
            # can only handle Gemm operations without alpha/beta/transB set
            continue
        output_dequant = match.children[0][1]
        if output_dequant is not None:
            output_dequant_child = graph.get_node_single_child(output_dequant)
            if output_dequant_child and output_dequant_child.op_type in {
                "Gemm",
                "Softmax",
            }:
                # output quant is not a QDQ block for the current Gemm Node but,
                # the input QDQ block for a new Gemm block this Gemm should be
                # skipped and processed by _convert_quantizable_gemm_no_activations
                continue
        self.log_match(match)
        self._transform_match(model, match)
    return model