aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/networkx/linalg/tests/test_graphmatrix.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/networkx/linalg/tests/test_graphmatrix.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/networkx/linalg/tests/test_graphmatrix.py')
-rw-r--r--.venv/lib/python3.12/site-packages/networkx/linalg/tests/test_graphmatrix.py276
1 files changed, 276 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/networkx/linalg/tests/test_graphmatrix.py b/.venv/lib/python3.12/site-packages/networkx/linalg/tests/test_graphmatrix.py
new file mode 100644
index 00000000..519198bc
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/networkx/linalg/tests/test_graphmatrix.py
@@ -0,0 +1,276 @@
+import pytest
+
+np = pytest.importorskip("numpy")
+pytest.importorskip("scipy")
+
+import networkx as nx
+from networkx.exception import NetworkXError
+from networkx.generators.degree_seq import havel_hakimi_graph
+
+
+def test_incidence_matrix_simple():
+ deg = [3, 2, 2, 1, 0]
+ G = havel_hakimi_graph(deg)
+ deg = [(1, 0), (1, 0), (1, 0), (2, 0), (1, 0), (2, 1), (0, 1), (0, 1)]
+ MG = nx.random_clustered_graph(deg, seed=42)
+
+ I = nx.incidence_matrix(G, dtype=int).todense()
+ # fmt: off
+ expected = np.array(
+ [[1, 1, 1, 0],
+ [0, 1, 0, 1],
+ [1, 0, 0, 1],
+ [0, 0, 1, 0],
+ [0, 0, 0, 0]]
+ )
+ # fmt: on
+ np.testing.assert_equal(I, expected)
+
+ I = nx.incidence_matrix(MG, dtype=int).todense()
+ # fmt: off
+ expected = np.array(
+ [[1, 0, 0, 0, 0, 0, 0],
+ [1, 0, 0, 0, 0, 0, 0],
+ [0, 1, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0],
+ [0, 1, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 1, 1, 0],
+ [0, 0, 0, 0, 0, 1, 1],
+ [0, 0, 0, 0, 1, 0, 1]]
+ )
+ # fmt: on
+ np.testing.assert_equal(I, expected)
+
+ with pytest.raises(NetworkXError):
+ nx.incidence_matrix(G, nodelist=[0, 1])
+
+
+class TestGraphMatrix:
+ @classmethod
+ def setup_class(cls):
+ deg = [3, 2, 2, 1, 0]
+ cls.G = havel_hakimi_graph(deg)
+ # fmt: off
+ cls.OI = np.array(
+ [[-1, -1, -1, 0],
+ [1, 0, 0, -1],
+ [0, 1, 0, 1],
+ [0, 0, 1, 0],
+ [0, 0, 0, 0]]
+ )
+ cls.A = np.array(
+ [[0, 1, 1, 1, 0],
+ [1, 0, 1, 0, 0],
+ [1, 1, 0, 0, 0],
+ [1, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0]]
+ )
+ # fmt: on
+ cls.WG = havel_hakimi_graph(deg)
+ cls.WG.add_edges_from(
+ (u, v, {"weight": 0.5, "other": 0.3}) for (u, v) in cls.G.edges()
+ )
+ # fmt: off
+ cls.WA = np.array(
+ [[0, 0.5, 0.5, 0.5, 0],
+ [0.5, 0, 0.5, 0, 0],
+ [0.5, 0.5, 0, 0, 0],
+ [0.5, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0]]
+ )
+ # fmt: on
+ cls.MG = nx.MultiGraph(cls.G)
+ cls.MG2 = cls.MG.copy()
+ cls.MG2.add_edge(0, 1)
+ # fmt: off
+ cls.MG2A = np.array(
+ [[0, 2, 1, 1, 0],
+ [2, 0, 1, 0, 0],
+ [1, 1, 0, 0, 0],
+ [1, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0]]
+ )
+ cls.MGOI = np.array(
+ [[-1, -1, -1, -1, 0],
+ [1, 1, 0, 0, -1],
+ [0, 0, 1, 0, 1],
+ [0, 0, 0, 1, 0],
+ [0, 0, 0, 0, 0]]
+ )
+ # fmt: on
+ cls.no_edges_G = nx.Graph([(1, 2), (3, 2, {"weight": 8})])
+ cls.no_edges_A = np.array([[0, 0], [0, 0]])
+
+ def test_incidence_matrix(self):
+ "Conversion to incidence matrix"
+ I = nx.incidence_matrix(
+ self.G,
+ nodelist=sorted(self.G),
+ edgelist=sorted(self.G.edges()),
+ oriented=True,
+ dtype=int,
+ ).todense()
+ np.testing.assert_equal(I, self.OI)
+
+ I = nx.incidence_matrix(
+ self.G,
+ nodelist=sorted(self.G),
+ edgelist=sorted(self.G.edges()),
+ oriented=False,
+ dtype=int,
+ ).todense()
+ np.testing.assert_equal(I, np.abs(self.OI))
+
+ I = nx.incidence_matrix(
+ self.MG,
+ nodelist=sorted(self.MG),
+ edgelist=sorted(self.MG.edges()),
+ oriented=True,
+ dtype=int,
+ ).todense()
+ np.testing.assert_equal(I, self.OI)
+
+ I = nx.incidence_matrix(
+ self.MG,
+ nodelist=sorted(self.MG),
+ edgelist=sorted(self.MG.edges()),
+ oriented=False,
+ dtype=int,
+ ).todense()
+ np.testing.assert_equal(I, np.abs(self.OI))
+
+ I = nx.incidence_matrix(
+ self.MG2,
+ nodelist=sorted(self.MG2),
+ edgelist=sorted(self.MG2.edges()),
+ oriented=True,
+ dtype=int,
+ ).todense()
+ np.testing.assert_equal(I, self.MGOI)
+
+ I = nx.incidence_matrix(
+ self.MG2,
+ nodelist=sorted(self.MG),
+ edgelist=sorted(self.MG2.edges()),
+ oriented=False,
+ dtype=int,
+ ).todense()
+ np.testing.assert_equal(I, np.abs(self.MGOI))
+
+ I = nx.incidence_matrix(self.G, dtype=np.uint8)
+ assert I.dtype == np.uint8
+
+ def test_weighted_incidence_matrix(self):
+ I = nx.incidence_matrix(
+ self.WG,
+ nodelist=sorted(self.WG),
+ edgelist=sorted(self.WG.edges()),
+ oriented=True,
+ dtype=int,
+ ).todense()
+ np.testing.assert_equal(I, self.OI)
+
+ I = nx.incidence_matrix(
+ self.WG,
+ nodelist=sorted(self.WG),
+ edgelist=sorted(self.WG.edges()),
+ oriented=False,
+ dtype=int,
+ ).todense()
+ np.testing.assert_equal(I, np.abs(self.OI))
+
+ # np.testing.assert_equal(nx.incidence_matrix(self.WG,oriented=True,
+ # weight='weight').todense(),0.5*self.OI)
+ # np.testing.assert_equal(nx.incidence_matrix(self.WG,weight='weight').todense(),
+ # np.abs(0.5*self.OI))
+ # np.testing.assert_equal(nx.incidence_matrix(self.WG,oriented=True,weight='other').todense(),
+ # 0.3*self.OI)
+
+ I = nx.incidence_matrix(
+ self.WG,
+ nodelist=sorted(self.WG),
+ edgelist=sorted(self.WG.edges()),
+ oriented=True,
+ weight="weight",
+ ).todense()
+ np.testing.assert_equal(I, 0.5 * self.OI)
+
+ I = nx.incidence_matrix(
+ self.WG,
+ nodelist=sorted(self.WG),
+ edgelist=sorted(self.WG.edges()),
+ oriented=False,
+ weight="weight",
+ ).todense()
+ np.testing.assert_equal(I, np.abs(0.5 * self.OI))
+
+ I = nx.incidence_matrix(
+ self.WG,
+ nodelist=sorted(self.WG),
+ edgelist=sorted(self.WG.edges()),
+ oriented=True,
+ weight="other",
+ ).todense()
+ np.testing.assert_equal(I, 0.3 * self.OI)
+
+ # WMG=nx.MultiGraph(self.WG)
+ # WMG.add_edge(0,1,weight=0.5,other=0.3)
+ # np.testing.assert_equal(nx.incidence_matrix(WMG,weight='weight').todense(),
+ # np.abs(0.5*self.MGOI))
+ # np.testing.assert_equal(nx.incidence_matrix(WMG,weight='weight',oriented=True).todense(),
+ # 0.5*self.MGOI)
+ # np.testing.assert_equal(nx.incidence_matrix(WMG,weight='other',oriented=True).todense(),
+ # 0.3*self.MGOI)
+
+ WMG = nx.MultiGraph(self.WG)
+ WMG.add_edge(0, 1, weight=0.5, other=0.3)
+
+ I = nx.incidence_matrix(
+ WMG,
+ nodelist=sorted(WMG),
+ edgelist=sorted(WMG.edges(keys=True)),
+ oriented=True,
+ weight="weight",
+ ).todense()
+ np.testing.assert_equal(I, 0.5 * self.MGOI)
+
+ I = nx.incidence_matrix(
+ WMG,
+ nodelist=sorted(WMG),
+ edgelist=sorted(WMG.edges(keys=True)),
+ oriented=False,
+ weight="weight",
+ ).todense()
+ np.testing.assert_equal(I, np.abs(0.5 * self.MGOI))
+
+ I = nx.incidence_matrix(
+ WMG,
+ nodelist=sorted(WMG),
+ edgelist=sorted(WMG.edges(keys=True)),
+ oriented=True,
+ weight="other",
+ ).todense()
+ np.testing.assert_equal(I, 0.3 * self.MGOI)
+
+ def test_adjacency_matrix(self):
+ "Conversion to adjacency matrix"
+ np.testing.assert_equal(nx.adjacency_matrix(self.G).todense(), self.A)
+ np.testing.assert_equal(nx.adjacency_matrix(self.MG).todense(), self.A)
+ np.testing.assert_equal(nx.adjacency_matrix(self.MG2).todense(), self.MG2A)
+ np.testing.assert_equal(
+ nx.adjacency_matrix(self.G, nodelist=[0, 1]).todense(), self.A[:2, :2]
+ )
+ np.testing.assert_equal(nx.adjacency_matrix(self.WG).todense(), self.WA)
+ np.testing.assert_equal(
+ nx.adjacency_matrix(self.WG, weight=None).todense(), self.A
+ )
+ np.testing.assert_equal(
+ nx.adjacency_matrix(self.MG2, weight=None).todense(), self.MG2A
+ )
+ np.testing.assert_equal(
+ nx.adjacency_matrix(self.WG, weight="other").todense(), 0.6 * self.WA
+ )
+ np.testing.assert_equal(
+ nx.adjacency_matrix(self.no_edges_G, nodelist=[1, 3]).todense(),
+ self.no_edges_A,
+ )