42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
import pytest
|
|
|
|
np = pytest.importorskip("numpy")
|
|
npt = pytest.importorskip("numpy.testing")
|
|
sp = pytest.importorskip("scipy")
|
|
|
|
import networkx as nx
|
|
from networkx.generators.degree_seq import havel_hakimi_graph
|
|
|
|
|
|
class TestBetheHessian:
|
|
@classmethod
|
|
def setup_class(cls):
|
|
deg = [3, 2, 2, 1, 0]
|
|
cls.G = havel_hakimi_graph(deg)
|
|
cls.P = nx.path_graph(3)
|
|
|
|
def test_bethe_hessian(self):
|
|
"Bethe Hessian matrix"
|
|
# fmt: off
|
|
H = np.array([[4, -2, 0],
|
|
[-2, 5, -2],
|
|
[0, -2, 4]])
|
|
# fmt: on
|
|
permutation = [2, 0, 1]
|
|
# Bethe Hessian gives expected form
|
|
npt.assert_equal(nx.bethe_hessian_matrix(self.P, r=2).todense(), H)
|
|
# nodelist is correctly implemented
|
|
npt.assert_equal(
|
|
nx.bethe_hessian_matrix(self.P, r=2, nodelist=permutation).todense(),
|
|
H[np.ix_(permutation, permutation)],
|
|
)
|
|
# Equal to Laplacian matrix when r=1
|
|
npt.assert_equal(
|
|
nx.bethe_hessian_matrix(self.G, r=1).todense(),
|
|
nx.laplacian_matrix(self.G).todense(),
|
|
)
|
|
# Correct default for the regularizer r
|
|
npt.assert_equal(
|
|
nx.bethe_hessian_matrix(self.G).todense(),
|
|
nx.bethe_hessian_matrix(self.G, r=1.25).todense(),
|
|
)
|