From f46b345d232eee64b1b69dea2ec38ffce6041370 Mon Sep 17 00:00:00 2001 From: Matthew Henderson Date: Tue, 26 Nov 2024 09:22:23 +0000 Subject: [PATCH 1/2] Add docs for both functions. --- src/vizing/__init__.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/vizing/__init__.py b/src/vizing/__init__.py index 26b5df1..9a45bab 100644 --- a/src/vizing/__init__.py +++ b/src/vizing/__init__.py @@ -1,6 +1,12 @@ import constraint def list_colouring_problem(G): + """ + Return a constraint problem representing a node list-colouring instance. + + :param G: A graph with lists of permissible colours assigned to nodes. + :return A node list-colouring constraint problem. + """ P = constraint.Problem() for node in G.nodes(): P.addVariable(node, G.nodes[node]['permissible']) @@ -9,6 +15,12 @@ def list_colouring_problem(G): return(P) def list_colouring_solution(G): + """ + Return a list-coloured graph. + + :param G: A graph with lists of permissible colours assigned to nodes. + :return A properly list-coloured graph. + """ P = list_colouring_problem(G) S = P.getSolution() for node in S: From 3aa3358405f763b3b76abc56e0d5f5e0db800cf6 Mon Sep 17 00:00:00 2001 From: Matthew Henderson Date: Tue, 26 Nov 2024 09:50:43 +0000 Subject: [PATCH 2/2] Add tests. Rename files and functions. --- src/vizing/__init__.py | 6 +++--- tests/test_list-colouring-solution.py | 11 ----------- tests/test_node_list-colouring.py | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 14 deletions(-) delete mode 100644 tests/test_list-colouring-solution.py create mode 100644 tests/test_node_list-colouring.py diff --git a/src/vizing/__init__.py b/src/vizing/__init__.py index 9a45bab..2b88da3 100644 --- a/src/vizing/__init__.py +++ b/src/vizing/__init__.py @@ -1,6 +1,6 @@ import constraint -def list_colouring_problem(G): +def node_list_colouring_problem(G): """ Return a constraint problem representing a node list-colouring instance. @@ -14,14 +14,14 @@ def list_colouring_problem(G): P.addConstraint(constraint.AllDifferentConstraint(), edge) return(P) -def list_colouring_solution(G): +def node_list_colouring_solution(G): """ Return a list-coloured graph. :param G: A graph with lists of permissible colours assigned to nodes. :return A properly list-coloured graph. """ - P = list_colouring_problem(G) + P = node_list_colouring_problem(G) S = P.getSolution() for node in S: G.nodes[node]['colour'] = S[node] diff --git a/tests/test_list-colouring-solution.py b/tests/test_list-colouring-solution.py deleted file mode 100644 index bb30994..0000000 --- a/tests/test_list-colouring-solution.py +++ /dev/null @@ -1,11 +0,0 @@ -import listcolouring -import networkx as nx - -import vizing - -from listcolouring import list_init_node - -def test_list_colouring_solution(): - G = nx.petersen_graph() - G = list_init_node(G, range(1, 10), 3, 0) - G = vizing.list_colouring_solution(G) diff --git a/tests/test_node_list-colouring.py b/tests/test_node_list-colouring.py new file mode 100644 index 0000000..20c4584 --- /dev/null +++ b/tests/test_node_list-colouring.py @@ -0,0 +1,17 @@ +import listcolouring +import networkx as nx +import vizing + +def test_node_list_colouring_problem(): + G = nx.petersen_graph() + G = listcolouring.list_init_node(G, range(1, 10), 3, 0) + G = vizing.node_list_colouring_problem(G) + +def test_node_list_colouring_solution(): + G = nx.complete_graph(3) + permissible_dict = {0: [0, 1], 1: [1, 2], 2: [2, 3]} + nx.set_node_attributes(G, permissible_dict, "permissible") + G = vizing.node_list_colouring_solution(G) + assert G.nodes[0]['colour'] == 1 + assert G.nodes[1]['colour'] == 2 + assert G.nodes[2]['colour'] == 3