def verify_uncoloring(str_graph_file, str_witness_file):
    G = gio.load_from_edge_list(str_graph_file)
    with open(str_witness_file, 'r') as f_uncol:
        lines = f_uncol.readlines()


    # verify line by line up to Q.E.D. is found
    for line in lines[8:-1]:
        word = line.split()
        if not verify_word(G, word): return False
def verify_coloring_dict(str_graph_file, W):
    G = gio.load_from_edge_list(str_graph_file)
    with open(str_witness_file, 'r') as f_col:
        lines = f_col.readlines()

    str_col = ''.join(l for l in lines[8, -1])
    C = eval(str_col)  # reads directly as a formated python str(dict())
    V = set()

    # 1st test: is there any edge in a purported independent set?
    for i in (1, 2, 3):
        for x, y in combinations(C[i], 2):
            if G.is_edge(x, y): return False, 'There is an edge' + str((x, y)) + ' in set ' + str(i) + '\n'
            V |= {x, y}

    # 2nd test: are all edges *** OF GRAPH G! *** included in C?
    if sorted(G.Vertices()) != sorted(V): return False, 'Not all vertices of G are included in the purported solution \n'


    return True