Kano001's picture
Upload 1329 files
b200bda verified
import pickle
import pytest
import networkx as nx
sp = pytest.importorskip("scipy")
pytest.importorskip("numpy")
def test_dispatch_kwds_vs_args():
G = nx.path_graph(4)
nx.pagerank(G)
nx.pagerank(G=G)
with pytest.raises(TypeError):
nx.pagerank()
def test_pickle():
for name, func in nx.utils.backends._registered_algorithms.items():
assert pickle.loads(pickle.dumps(func)) is func
assert pickle.loads(pickle.dumps(nx.inverse_line_graph)) is nx.inverse_line_graph
@pytest.mark.skipif(
"not nx._dispatch._automatic_backends "
"or nx._dispatch._automatic_backends[0] != 'nx-loopback'"
)
def test_graph_converter_needs_backend():
# When testing, `nx.from_scipy_sparse_array` will *always* call the backend
# implementation if it's implemented. If `backend=` isn't given, then the result
# will be converted back to NetworkX via `convert_to_nx`.
# If not testing, then calling `nx.from_scipy_sparse_array` w/o `backend=` will
# always call the original version. `backend=` is *required* to call the backend.
from networkx.classes.tests.dispatch_interface import (
LoopbackDispatcher,
LoopbackGraph,
)
A = sp.sparse.coo_array([[0, 3, 2], [3, 0, 1], [2, 1, 0]])
side_effects = []
def from_scipy_sparse_array(self, *args, **kwargs):
side_effects.append(1) # Just to prove this was called
return self.convert_from_nx(
self.__getattr__("from_scipy_sparse_array")(*args, **kwargs),
preserve_edge_attrs=None,
preserve_node_attrs=None,
preserve_graph_attrs=None,
)
@staticmethod
def convert_to_nx(obj, *, name=None):
if type(obj) is nx.Graph:
return obj
return nx.Graph(obj)
# *This mutates LoopbackDispatcher!*
orig_convert_to_nx = LoopbackDispatcher.convert_to_nx
LoopbackDispatcher.convert_to_nx = convert_to_nx
LoopbackDispatcher.from_scipy_sparse_array = from_scipy_sparse_array
try:
assert side_effects == []
assert type(nx.from_scipy_sparse_array(A)) is nx.Graph
assert side_effects == [1]
assert (
type(nx.from_scipy_sparse_array(A, backend="nx-loopback")) is LoopbackGraph
)
assert side_effects == [1, 1]
finally:
LoopbackDispatcher.convert_to_nx = staticmethod(orig_convert_to_nx)
del LoopbackDispatcher.from_scipy_sparse_array
with pytest.raises(ImportError, match="Unable to load"):
nx.from_scipy_sparse_array(A, backend="bad-backend-name")