From dd4bdda387dd66a99fb1727ffed7bcae3c66d8c5 Mon Sep 17 00:00:00 2001 From: "sdmccabe@github.com" Date: Thu, 20 Jun 2019 14:37:44 -0400 Subject: [PATCH 1/2] use denser random graphs in distance tests See #239. --- tests/test_distance.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/test_distance.py b/tests/test_distance.py index f38b5808..a7c14a3e 100644 --- a/tests/test_distance.py +++ b/tests/test_distance.py @@ -29,7 +29,7 @@ def test_different_graphs(): ## networks may have the same eigenvalues, thus a method that compares ## their eigenvalues would result in distance 0. However, this is very ## unlikely in the constructed case, so we rely on it for now. - G1 = nx.fast_gnp_random_graph(100, 0.1) + G1 = nx.fast_gnp_random_graph(100, 0.3) G2 = nx.barabasi_albert_graph(100, 5) for obj in distance.__dict__.values(): @@ -41,7 +41,7 @@ def test_different_graphs(): def test_symmetry(): """The distance between two graphs must be symmetric.""" G1 = nx.barabasi_albert_graph(100, 4) - G2 = nx.fast_gnp_random_graph(100, 0.1) + G2 = nx.fast_gnp_random_graph(100, 0.3) for label, obj in distance.__dict__.items(): if isinstance(obj, type) and BaseDistance in obj.__bases__: @@ -63,13 +63,13 @@ def test_quantum_jsd(): dist = JSD.dist(G, G, beta=0.1, q=2) assert np.isclose(dist, 0.0) - G1 = nx.fast_gnp_random_graph(100, 0.1) + G1 = nx.fast_gnp_random_graph(100, 0.3) G2 = nx.barabasi_albert_graph(100, 5) dist = JSD.dist(G1, G2, beta=0.1, q=2) assert dist > 0.0 G1 = nx.barabasi_albert_graph(100, 4) - G2 = nx.fast_gnp_random_graph(100, 0.1) + G2 = nx.fast_gnp_random_graph(100, 0.3) dist1 = JSD.dist(G1, G2, beta=0.1, q=2) dist2 = JSD.dist(G2, G1, beta=0.1, q=2) assert np.isclose(dist1, dist2) @@ -80,15 +80,15 @@ def test_directed_input(): warnings.filterwarnings( "ignore", message="Coercing directed graph to undirected." ) - G = nx.fast_gnp_random_graph(100, 0.1, directed=True) + G = nx.fast_gnp_random_graph(100, 0.3, directed=True) for label, obj in distance.__dict__.items(): if isinstance(obj, type) and BaseDistance in obj.__bases__: dist = obj().dist(G, G) assert np.isclose(dist, 0.0) - G1 = nx.fast_gnp_random_graph(100, 0.1, directed=True) - G2 = nx.fast_gnp_random_graph(100, 0.1, directed=True) + G1 = nx.fast_gnp_random_graph(100, 0.3, directed=True) + G2 = nx.fast_gnp_random_graph(100, 0.3, directed=True) for label, obj in distance.__dict__.items(): if isinstance(obj, type) and BaseDistance in obj.__bases__: From 0a481a12380739dc19543d7dd8ab03b4260d2289 Mon Sep 17 00:00:00 2001 From: "sdmccabe@github.com" Date: Mon, 24 Jun 2019 11:54:55 -0400 Subject: [PATCH 2/2] ensure undirected graphs in QuantumJSD --- netrd/distance/quantum_jsd.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/netrd/distance/quantum_jsd.py b/netrd/distance/quantum_jsd.py index 901ece9a..3b010a6c 100644 --- a/netrd/distance/quantum_jsd.py +++ b/netrd/distance/quantum_jsd.py @@ -20,6 +20,7 @@ import numpy as np from scipy.linalg import expm from .base import BaseDistance +from ..utilities import ensure_undirected class QuantumJSD(BaseDistance): @@ -110,6 +111,9 @@ def dist(self, G1, G2, beta=0.1, q=None): if q and q >= 2: warnings.warn("JSD is only a metric for 0 ≤ q < 2.", RuntimeWarning) + G1 = ensure_undirected(G1) + G2 = ensure_undirected(G2) + def density_matrix(A, beta): """ Create the density matrix encoding probabilities for entropies.