def _create_fuse_ops(info_list: List[FusedElementwiseInfo]) -> None:
    """
    Creates fused ops based on info we collected.
    First is to update elementwise ops' inputs/outputs within the subgraph;
    Second is to create fused_elementwise ops where their inputs/outputs
    are external inputs/outputs of the subgraph.
    """
    for info in info_list:
        op_set = set(info.partitioned_ops)
        for tensor in itertools.chain(info.inputs, info.outputs):
            tensor._attrs["src_ops"] = tensor._attrs["src_ops"] - op_set
            tensor._attrs["dst_ops"] = tensor._attrs["dst_ops"] - op_set
        fused_elementwise(
            info.partitioned_ops,
            info.external_inputs,
            info.external_outputs,
        )

    Creates fused ops based on info we collected.
    First is to update elementwise ops' inputs/outputs within the subgraph;
    Second is to create fused_elementwise ops where their inputs/outputs
    are external inputs/outputs of the subgraph.
    
python/aitemplate/compiler/transform/fuse_ops.py