102 lines
2.8 KiB
Python
102 lines
2.8 KiB
Python
import unittest
|
|
|
|
import easygraph as eg
|
|
import numpy as np
|
|
|
|
|
|
class Test_Deepwalk(unittest.TestCase):
|
|
def setUp(self):
|
|
self.ds = eg.datasets.get_graph_karateclub()
|
|
self.edges = [(1, 4), (2, 4)]
|
|
self.test_graphs = []
|
|
self.test_graphs.append(eg.classes.DiGraph(self.edges))
|
|
self.shs = eg.common_greedy(self.ds, int(len(self.ds.nodes) / 3))
|
|
|
|
self.graph = eg.Graph()
|
|
self.graph.add_edges_from([(0, 1), (1, 2), (2, 3), (3, 4), (4, 0)])
|
|
|
|
self.empty_graph = eg.Graph()
|
|
|
|
self.single_node_graph = eg.Graph()
|
|
self.single_node_graph.add_node(0)
|
|
|
|
def test_deepwalk(self):
|
|
for i in self.test_graphs:
|
|
print(eg.deepwalk(i))
|
|
|
|
def test_deepwalk_output_structure(self):
|
|
emb, sim = eg.deepwalk(
|
|
self.graph,
|
|
dimensions=16,
|
|
walk_length=5,
|
|
num_walks=3,
|
|
window=2,
|
|
min_count=1,
|
|
batch_words=4,
|
|
epochs=5,
|
|
)
|
|
self.assertIsInstance(emb, dict)
|
|
self.assertIsInstance(sim, dict)
|
|
for k, v in emb.items():
|
|
self.assertEqual(len(v), 16)
|
|
self.assertTrue(isinstance(v, np.ndarray))
|
|
|
|
def test_deepwalk_similarity_keys_match_nodes(self):
|
|
emb, sim = eg.deepwalk(
|
|
self.graph,
|
|
dimensions=8,
|
|
walk_length=3,
|
|
num_walks=2,
|
|
window=2,
|
|
min_count=1,
|
|
batch_words=2,
|
|
epochs=3,
|
|
)
|
|
self.assertEqual(set(emb.keys()), set(sim.keys()))
|
|
self.assertEqual(set(emb.keys()), set(self.graph.nodes))
|
|
|
|
def test_deepwalk_on_single_node(self):
|
|
emb, sim = eg.deepwalk(
|
|
self.single_node_graph,
|
|
dimensions=4,
|
|
walk_length=2,
|
|
num_walks=1,
|
|
window=1,
|
|
min_count=1,
|
|
batch_words=2,
|
|
epochs=2,
|
|
)
|
|
self.assertEqual(len(emb), 1)
|
|
self.assertEqual(list(emb.keys()), [0])
|
|
self.assertEqual(len(emb[0]), 4)
|
|
|
|
def test_deepwalk_on_empty_graph(self):
|
|
with self.assertRaises(RuntimeError):
|
|
eg.deepwalk(
|
|
self.empty_graph,
|
|
dimensions=4,
|
|
walk_length=2,
|
|
num_walks=1,
|
|
window=1,
|
|
min_count=1,
|
|
batch_words=2,
|
|
epochs=2,
|
|
)
|
|
|
|
def test_deepwalk_walk_length_zero(self):
|
|
emb, sim = eg.deepwalk(
|
|
self.graph,
|
|
dimensions=4,
|
|
walk_length=0,
|
|
num_walks=2,
|
|
window=1,
|
|
min_count=1,
|
|
batch_words=2,
|
|
epochs=2,
|
|
)
|
|
self.assertEqual(len(emb), len(self.graph.nodes))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|