diff --git a/nx_parallel/algorithms/cluster.py b/nx_parallel/algorithms/cluster.py index b22317bb..9fc90e3c 100644 --- a/nx_parallel/algorithms/cluster.py +++ b/nx_parallel/algorithms/cluster.py @@ -80,7 +80,7 @@ def _compute_clustering_chunk(node_iter_chunk): return clustering -@nxp._configure_if_nx_active() +@nxp._configure_if_nx_active(should_run=nxp.should_run_if_nodes_none) def triangles(G, nodes=None, get_chunks="chunks"): """The nodes are chunked into `node_chunks` and for all `node_chunks` the number of triangles that include a node as one vertex is computed diff --git a/nx_parallel/tests/test_should_run.py b/nx_parallel/tests/test_should_run.py index 933a6d6f..22def8b6 100644 --- a/nx_parallel/tests/test_should_run.py +++ b/nx_parallel/tests/test_should_run.py @@ -52,6 +52,19 @@ def dummy_if_large(G): assert dummy_if_large.should_run(largeG) +def test_should_run_if_nodes_none(): + @nxp._configure_if_nx_active(should_run=nxp.should_run_if_nodes_none) + def dummy_nodes_none(G, nodes=None): + pass + + G = nx.fast_gnp_random_graph(20, 0.6, seed=42) + assert ( + dummy_nodes_none.should_run(G, nodes=[1, 3]) + == "Parallel execution only supported when `nodes` is None" + ) + assert dummy_nodes_none.should_run(G) + + def test_should_run_if_sparse(): @nxp._configure_if_nx_active(should_run=nxp.should_run_if_sparse(threshold=0.4)) def dummy_if_sparse(G): diff --git a/nx_parallel/utils/should_run_policies.py b/nx_parallel/utils/should_run_policies.py index cd856951..97ecc2ef 100644 --- a/nx_parallel/utils/should_run_policies.py +++ b/nx_parallel/utils/should_run_policies.py @@ -5,6 +5,7 @@ "default_should_run", "should_skip_parallel", "should_run_if_large", + "should_run_if_nodes_none", "should_run_if_sparse", ] @@ -30,6 +31,12 @@ def default_should_run(*_): return True +def should_run_if_nodes_none(G, nodes=None, *_): + if nodes is None: + return True + return "Parallel execution only supported when `nodes` is None" + + def should_run_if_sparse(threshold=0.3): def wrapper(G, *_): if hasattr(G, "graph_object"):