78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
import unittest
|
|
|
|
import easygraph as eg
|
|
import numpy as np
|
|
|
|
|
|
class Test_LINE(unittest.TestCase):
|
|
def setUp(self):
|
|
self.edges = [(0, 1), (1, 2), (2, 3), (3, 4)]
|
|
self.graph = eg.Graph()
|
|
self.graph.add_edges_from(self.edges)
|
|
|
|
def test_output_is_dict_with_correct_dim(self):
|
|
model = eg.functions.graph_embedding.LINE(
|
|
dimension=16, walk_length=10, walk_num=5, order=1
|
|
)
|
|
emb = model(self.graph, return_dict=True)
|
|
self.assertIsInstance(emb, dict)
|
|
for v in emb.values():
|
|
self.assertEqual(len(v), 16)
|
|
|
|
def test_output_as_matrix(self):
|
|
model = eg.functions.graph_embedding.LINE(
|
|
dimension=8, walk_length=5, walk_num=3, order=1
|
|
)
|
|
emb = model(self.graph, return_dict=False)
|
|
self.assertEqual(emb.shape, (len(self.graph.nodes), 8))
|
|
|
|
def test_output_with_order_2(self):
|
|
model = eg.functions.graph_embedding.LINE(
|
|
dimension=16, walk_length=10, walk_num=5, order=2
|
|
)
|
|
emb = model(self.graph)
|
|
for vec in emb.values():
|
|
self.assertEqual(len(vec), 16)
|
|
|
|
def test_output_with_order_3_combination(self):
|
|
model = eg.functions.graph_embedding.LINE(
|
|
dimension=16, walk_length=10, walk_num=5, order=3
|
|
)
|
|
emb = model(self.graph)
|
|
for vec in emb.values():
|
|
self.assertEqual(len(vec), 16)
|
|
|
|
def test_directed_graph(self):
|
|
g = eg.DiGraph()
|
|
g.add_edges_from(self.edges)
|
|
model = eg.functions.graph_embedding.LINE(
|
|
dimension=8, walk_length=5, walk_num=3, order=1
|
|
)
|
|
emb = model(g)
|
|
self.assertEqual(len(emb), len(g.nodes))
|
|
|
|
def test_empty_graph_raises(self):
|
|
g = eg.Graph()
|
|
model = eg.functions.graph_embedding.LINE(
|
|
dimension=8, walk_length=5, walk_num=3, order=1
|
|
)
|
|
with self.assertRaises(Exception):
|
|
_ = model(g)
|
|
|
|
def test_embeddings_are_normalized(self):
|
|
model = eg.functions.graph_embedding.LINE(
|
|
dimension=16, walk_length=10, walk_num=5, order=1
|
|
)
|
|
emb = model(self.graph)
|
|
for vec in emb.values():
|
|
norm = np.linalg.norm(vec)
|
|
self.assertTrue(np.isclose(norm, 1.0, atol=1e-5))
|
|
|
|
def test_embedding_value_finiteness(self):
|
|
model = eg.functions.graph_embedding.LINE(
|
|
dimension=16, walk_length=10, walk_num=5, order=1
|
|
)
|
|
emb = model(self.graph)
|
|
for vec in emb.values():
|
|
self.assertTrue(np.all(np.isfinite(vec)))
|