Files
easy-graph--easy-graph/easygraph/functions/hypergraph/tests/test_hypergraph_operation.py
T
2026-07-13 12:36:30 +08:00

73 lines
2.4 KiB
Python

import math
import unittest
import easygraph as eg
from easygraph.utils.exception import EasyGraphError
class test_hypergraph_operation(unittest.TestCase):
def setUp(self):
self.g = eg.get_graph_karateclub()
self.edges = [(1, 2), (8, 4)]
self.hg = [
eg.Hypergraph(num_v=10, e_list=self.edges, e_property=None),
eg.Hypergraph(num_v=2, e_list=[(0, 1)]),
]
# checked -- num_v cannot be set to negative number
def test_hypergraph_operation(self):
for i in self.hg:
print(eg.hypergraph_density(i))
i.draw(v_color="#e6928f", e_color="#4e9595")
def test_basic_density(self):
hg = eg.Hypergraph(num_v=3, e_list=[(0, 1), (1, 2)])
expected = 2 / (2**3 - 1)
self.assertAlmostEqual(eg.hypergraph_density(hg), expected)
def test_density_ignore_singletons(self):
hg = eg.Hypergraph(num_v=3, e_list=[(0,), (1, 2)])
expected = 2 / ((2**3 - 1) - 3)
self.assertAlmostEqual(
eg.hypergraph_density(hg, ignore_singletons=True), expected
)
def test_density_all_singletons(self):
hg = eg.Hypergraph(num_v=3, e_list=[(0,), (1,), (2,)])
expected = 3 / (2**3 - 1)
self.assertAlmostEqual(eg.hypergraph_density(hg), expected)
expected_ignoring = 3 / ((2**3 - 1) - 3)
self.assertAlmostEqual(
eg.hypergraph_density(hg, ignore_singletons=True), expected_ignoring
)
def test_no_edges_returns_zero(self):
hg = eg.Hypergraph(num_v=5, e_list=[])
self.assertEqual(eg.hypergraph_density(hg), 0.0)
def test_single_node_single_edge(self):
hg = eg.Hypergraph(num_v=1, e_list=[(0,)])
self.assertEqual(eg.hypergraph_density(hg), 1.0)
def test_density_max_possible_edges(self):
n = 4
from itertools import chain
from itertools import combinations
powerset = list(
chain.from_iterable(combinations(range(n), r) for r in range(1, n + 1))
)
hg = eg.Hypergraph(num_v=n, e_list=powerset)
self.assertAlmostEqual(eg.hypergraph_density(hg), 1.0)
def test_density_zero_division_guard(self):
# Singleton ignored in n=1 graph should not divide by zero
hg = eg.Hypergraph(num_v=1, e_list=[(0,)])
result = eg.hypergraph_density(hg, ignore_singletons=True)
self.assertEqual(result, 0.0)
if __name__ == "__main__":
unittest.main()