123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- import pytest
- pytest.importorskip("numpy")
- pytest.importorskip("scipy")
- import networkx as nx
- from networkx.algorithms import node_classification
- class TestHarmonicFunction:
- def test_path_graph(self):
- G = nx.path_graph(4)
- label_name = "label"
- G.nodes[0][label_name] = "A"
- G.nodes[3][label_name] = "B"
- predicted = node_classification.harmonic_function(G, label_name=label_name)
- assert predicted[0] == "A"
- assert predicted[1] == "A"
- assert predicted[2] == "B"
- assert predicted[3] == "B"
- def test_no_labels(self):
- with pytest.raises(nx.NetworkXError):
- G = nx.path_graph(4)
- node_classification.harmonic_function(G)
- def test_no_nodes(self):
- with pytest.raises(nx.NetworkXError):
- G = nx.Graph()
- node_classification.harmonic_function(G)
- def test_no_edges(self):
- with pytest.raises(nx.NetworkXError):
- G = nx.Graph()
- G.add_node(1)
- G.add_node(2)
- node_classification.harmonic_function(G)
- def test_digraph(self):
- with pytest.raises(nx.NetworkXNotImplemented):
- G = nx.DiGraph()
- G.add_edge(0, 1)
- G.add_edge(1, 2)
- G.add_edge(2, 3)
- label_name = "label"
- G.nodes[0][label_name] = "A"
- G.nodes[3][label_name] = "B"
- node_classification.harmonic_function(G)
- def test_one_labeled_node(self):
- G = nx.path_graph(4)
- label_name = "label"
- G.nodes[0][label_name] = "A"
- predicted = node_classification.harmonic_function(G, label_name=label_name)
- assert predicted[0] == "A"
- assert predicted[1] == "A"
- assert predicted[2] == "A"
- assert predicted[3] == "A"
- def test_nodes_all_labeled(self):
- G = nx.karate_club_graph()
- label_name = "club"
- predicted = node_classification.harmonic_function(G, label_name=label_name)
- for i in range(len(G)):
- assert predicted[i] == G.nodes[i][label_name]
- def test_labeled_nodes_are_not_changed(self):
- G = nx.karate_club_graph()
- label_name = "club"
- label_removed = {0, 1, 2, 3, 4, 5, 6, 7}
- for i in label_removed:
- del G.nodes[i][label_name]
- predicted = node_classification.harmonic_function(G, label_name=label_name)
- label_not_removed = set(range(len(G))) - label_removed
- for i in label_not_removed:
- assert predicted[i] == G.nodes[i][label_name]
- class TestLocalAndGlobalConsistency:
- def test_path_graph(self):
- G = nx.path_graph(4)
- label_name = "label"
- G.nodes[0][label_name] = "A"
- G.nodes[3][label_name] = "B"
- predicted = node_classification.local_and_global_consistency(
- G, label_name=label_name
- )
- assert predicted[0] == "A"
- assert predicted[1] == "A"
- assert predicted[2] == "B"
- assert predicted[3] == "B"
- def test_no_labels(self):
- with pytest.raises(nx.NetworkXError):
- G = nx.path_graph(4)
- node_classification.local_and_global_consistency(G)
- def test_no_nodes(self):
- with pytest.raises(nx.NetworkXError):
- G = nx.Graph()
- node_classification.local_and_global_consistency(G)
- def test_no_edges(self):
- with pytest.raises(nx.NetworkXError):
- G = nx.Graph()
- G.add_node(1)
- G.add_node(2)
- node_classification.local_and_global_consistency(G)
- def test_digraph(self):
- with pytest.raises(nx.NetworkXNotImplemented):
- G = nx.DiGraph()
- G.add_edge(0, 1)
- G.add_edge(1, 2)
- G.add_edge(2, 3)
- label_name = "label"
- G.nodes[0][label_name] = "A"
- G.nodes[3][label_name] = "B"
- node_classification.harmonic_function(G)
- def test_one_labeled_node(self):
- G = nx.path_graph(4)
- label_name = "label"
- G.nodes[0][label_name] = "A"
- predicted = node_classification.local_and_global_consistency(
- G, label_name=label_name
- )
- assert predicted[0] == "A"
- assert predicted[1] == "A"
- assert predicted[2] == "A"
- assert predicted[3] == "A"
- def test_nodes_all_labeled(self):
- G = nx.karate_club_graph()
- label_name = "club"
- predicted = node_classification.local_and_global_consistency(
- G, alpha=0, label_name=label_name
- )
- for i in range(len(G)):
- assert predicted[i] == G.nodes[i][label_name]
|