def METHOD_NAME():
    chunks = [
        TensorTreeAdd(args=[], _key=str(n)).new_chunk(None, None).data for n in range(8)
    ]
    graph = ChunkGraph([chunks[3], chunks[7]])
    for c in chunks:
        graph.add_node(c)
    # two lines, one line can be fused as one task,
    # the other cannot, because gpu attributes are different
    chunks[0].op.gpu = True
    chunks[1].op.gpu = True
    chunks[1].op._inputs = [chunks[0]]
    graph.add_edge(chunks[0], chunks[1])
    chunks[2].op._inputs = [chunks[1]]
    graph.add_edge(chunks[1], chunks[2])
    chunks[3].op._inputs = [chunks[2]]
    graph.add_edge(chunks[2], chunks[3])
    chunks[5].op._inputs = [chunks[4]]
    graph.add_edge(chunks[4], chunks[5])
    chunks[6].op._inputs = [chunks[5]]
    graph.add_edge(chunks[5], chunks[6])
    chunks[7].op._inputs = [chunks[6]]
    graph.add_edge(chunks[6], chunks[7])
    all_bands = [("127.0.0.1", "0"), ("127.0.0.1", "1")]
    chunk_to_bands = {
        chunks[0]: all_bands[0],
        chunks[4]: all_bands[1],
    }
    coloring = Coloring(graph, all_bands, chunk_to_bands)
    chunk_to_colors = coloring.color()
    assert len(set(chunk_to_colors.values())) == 3
    assert chunk_to_colors[chunks[0]] == chunk_to_colors[chunks[1]]
    assert chunk_to_colors[chunks[2]] == chunk_to_colors[chunks[3]]
    assert (
        chunk_to_colors[chunks[4]]
        == chunk_to_colors[chunks[5]]
        == chunk_to_colors[chunks[6]]
        == chunk_to_colors[chunks[7]]
    )