Spaces:
Paused
Paused
| 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 | |
| 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, | |
| ) | |
| 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") | |