From 3100189cb6e09e2074671796afba20e5d35bd8d9 Mon Sep 17 00:00:00 2001 From: Akshita Sure Date: Sun, 24 Aug 2025 14:05:57 +0530 Subject: [PATCH 1/7] add threshold parameter to should_run_if_sparse --- nx_parallel/algorithms/centrality/harmonic.py | 2 +- nx_parallel/utils/should_run_policies.py | 34 +++++++++++-------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/nx_parallel/algorithms/centrality/harmonic.py b/nx_parallel/algorithms/centrality/harmonic.py index c02eacbf..125c9de7 100644 --- a/nx_parallel/algorithms/centrality/harmonic.py +++ b/nx_parallel/algorithms/centrality/harmonic.py @@ -6,7 +6,7 @@ __all__ = ["harmonic_centrality"] -@nxp._configure_if_nx_active(should_run=nxp.should_run_if_sparse) +@nxp._configure_if_nx_active(should_run=nxp.should_run_if_sparse(threshold=0.3)) def harmonic_centrality( G, nbunch=None, distance=None, sources=None, get_chunks="chunks" ): diff --git a/nx_parallel/utils/should_run_policies.py b/nx_parallel/utils/should_run_policies.py index 6d947743..cd856951 100644 --- a/nx_parallel/utils/should_run_policies.py +++ b/nx_parallel/utils/should_run_policies.py @@ -14,6 +14,9 @@ def should_skip_parallel(*_): def should_run_if_large(G, *_): + if hasattr(G, "graph_object"): + G = G.graph_object + if len(G) <= 200: return "Graph too small for parallel execution" return True @@ -27,18 +30,21 @@ def default_should_run(*_): return True -def should_run_if_sparse(G, *args, threshold=0.3, **kwargs): - if hasattr(G, "graph_object"): - G = G.graph_object +def should_run_if_sparse(threshold=0.3): + def wrapper(G, *_): + if hasattr(G, "graph_object"): + G = G.graph_object + + nodes = len(G) + # Handle trivial graphs separately to avoid division by zero + if nodes <= 1: + return "Empty graph" if nodes == 0 else "Single-node graph" + + density = 2 * G.number_of_edges() / (nodes * (nodes - 1)) + return ( + True + if density <= threshold + else "Graph too dense to benefit from parallel execution" + ) - nodes = len(G) - # Handle trivial graphs separately to avoid division by zero - if nodes <= 1: - return "Empty graph" if nodes == 0 else "Single-node graph" - - density = 2 * G.number_of_edges() / (nodes * (nodes - 1)) - return ( - True - if density <= threshold - else "Graph too dense to benefit from parallel execution" - ) + return wrapper From 5b5a7d0bcd678e2c1c31bd65ae4b62c2895b09ac Mon Sep 17 00:00:00 2001 From: Akshita Sure Date: Mon, 25 Aug 2025 00:23:33 +0530 Subject: [PATCH 2/7] update README.md with latest algorithms --- README.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 52e8f926..8ed7910d 100644 --- a/README.md +++ b/README.md @@ -15,23 +15,33 @@ nx-parallel is a NetworkX backend that uses joblib for parallelization. This pro - [all_pairs_shortest_path](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/shortest_paths/unweighted.py#L62) - [all_pairs_shortest_path_length](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/shortest_paths/unweighted.py#L19) - [approximate_all_pairs_node_connectivity](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/approximation/connectivity.py#L14) +- [average_clustering](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/cluster.py#L213) +- [average_neighbor_degree](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/assortativity/neighbor_degree.py#L10) - [betweenness_centrality](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/centrality/betweenness.py#L20) - [closeness_vitality](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/vitality.py#L10) +- [clustering](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/cluster.py#L146) - [cn_soundarajan_hopcroft](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/link_prediction.py#L200) +- [colliders](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/dag.py#L37) - [common_neighbor_centrality](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/link_prediction.py#L158) - [edge_betweenness_centrality](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/centrality/betweenness.py#L103) -- [is_reachable](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/tournament.py#L13) +- [harmonic_centrality](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/centrality/harmonic.py#L10) +- [is_reachable](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/tournament.py#L15) - [jaccard_coefficient](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/link_prediction.py#L80) - [johnson](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/shortest_paths/weighted.py#L251) - [local_efficiency](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/efficiency_measures.py#L11) - [node_redundancy](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/bipartite/redundancy.py#L12) +- [number_attracting_components](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/components/attracting.py#L9) +- [number_connected_components](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/components/connected.py#L9) - [number_of_isolates](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/isolate.py#L9) +- [number_strongly_connected_components](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/components/strongly_connected.py#L9) +- [number_weakly_connected_components](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/components/weakly_connected.py#L9) - [preferential_attachment](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/link_prediction.py#L133) - [ra_index_soundarajan_hopcroft](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/link_prediction.py#L232) - [resource_allocation_index](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/link_prediction.py#L55) -- [square_clustering](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/cluster.py#L14) -- [tournament_is_strongly_connected](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/tournament.py#L58) -- [triangles](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/cluster.py#L76) +- [square_clustering](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/cluster.py#L22) +- [tournament_is_strongly_connected](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/tournament.py#L76) +- [triangles](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/cluster.py#L84) +- [v_structures](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/dag.py#L13) - [within_inter_cluster](https://github.com/networkx/nx-parallel/blob/main/nx_parallel/algorithms/link_prediction.py#L264)
From d60840dedccc6e07208b19501e34b99105b113a9 Mon Sep 17 00:00:00 2001 From: Akshita Sure Date: Mon, 25 Aug 2025 00:24:29 +0530 Subject: [PATCH 3/7] rm old is_reachable heatmap --- .../heatmap_is_reachable_timing.png | Bin 28425 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 timing/old_heatmaps/heatmap_is_reachable_timing.png diff --git a/timing/old_heatmaps/heatmap_is_reachable_timing.png b/timing/old_heatmaps/heatmap_is_reachable_timing.png deleted file mode 100644 index 3ca573936f34d726496b60794a2f813618e53223..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28425 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ৌ*Dl%R_sZM(vJXk9;W-V>7^ct^Xa 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 From 7f85115da557467fb2751c9722a3588d3f679ab7 Mon Sep 17 00:00:00 2001 From: Akshita Sure Date: Mon, 25 Aug 2025 00:26:22 +0530 Subject: [PATCH 4/7] rm clustering & average_clustering old heatmaps --- .../heatmap_average_clustering_timing.png | Bin 35723 -> 0 bytes .../old_heatmaps/heatmap_clustering_timing.png | Bin 35866 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 timing/old_heatmaps/heatmap_average_clustering_timing.png delete mode 100644 timing/old_heatmaps/heatmap_clustering_timing.png diff --git a/timing/old_heatmaps/heatmap_average_clustering_timing.png b/timing/old_heatmaps/heatmap_average_clustering_timing.png deleted file mode 100644 index 8aa228ea18290350759c7c3c183327d83157999a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35723 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 From 641b7a062f5620accf45134393ec9cfb6f201683 Mon Sep 17 00:00:00 2001 From: Akshita Sure Date: Mon, 25 Aug 2025 12:52:35 +0530 Subject: [PATCH 5/7] modify funcs in new timing script --- timing/new_heatmaps/timing_individual_function.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/timing/new_heatmaps/timing_individual_function.py b/timing/new_heatmaps/timing_individual_function.py index 531bdc22..5cc77d52 100644 --- a/timing/new_heatmaps/timing_individual_function.py +++ b/timing/new_heatmaps/timing_individual_function.py @@ -14,14 +14,18 @@ import types seed = random.Random(42) -tournament_funcs = ["is_reachable", "tournament_is_strongly_connected"] +tournament_funcs = ["is_reachable", "is_strongly_connected"] bipartite_funcs = ["node_redundancy"] community_funcs = [ "ra_index_soundarajan_hopcroft", "cn_soundarajan_hopcroft", "within_inter_cluster", ] -not_implemented_undirected = [] +not_implemented_undirected = [ + "number_attracting_components", + "number_strongly_connected_components", + "number_weakly_connected_components", +] def time_individual_function( From 66e0c8011647c4eb5c66e82b66067a4c6ceee055 Mon Sep 17 00:00:00 2001 From: Akshita Sure Date: Mon, 25 Aug 2025 12:54:29 +0530 Subject: [PATCH 6/7] remove heatmaps in README.md --- timing/README.md | 60 ------------------------------------------------ 1 file changed, 60 deletions(-) diff --git a/timing/README.md b/timing/README.md index 3d4855b9..c3a189ba 100644 --- a/timing/README.md +++ b/timing/README.md @@ -25,63 +25,3 @@ CPU: 2 GHz Quad-Core Intel Core i5 RAM: 16 GB LPDDR4X at 3733 MHz -## Heatmaps - -### New Heatmaps (`new_heatmaps/`) - -betweeness_centrality -![alt text](new_heatmaps/heatmap_betweenness_centrality_timing.png) - -edge_betweeness_centrality -![alt text](new_heatmaps/heatmap_edge_betweenness_centrality_timing.png) - -number_of_isolates -![alt text](new_heatmaps/heatmap_number_of_isolates_timing.png) - -tournament.is_reachable -![alt text](new_heatmaps/heatmap_is_reachable_timing.png) - -node_redundancy -![alt text](new_heatmaps/heatmap_node_redundancy_timing.png) - -## Old heatmaps (`old_heatmaps/`): - -all_pairs_all_shortest_paths -![alt text](old_heatmaps/heatmap_all_pairs_all_shortest_paths_timing.png) - -all_pairs_bellman_ford_path -![alt text](old_heatmaps/heatmap_all_pairs_bellman_ford_path_timing.png) - -all_pairs_bellman_ford_path_length -![alt text](old_heatmaps/heatmap_all_pairs_bellman_ford_path_length_timing.png) - -all_pairs_dijkstra_path -![alt text](old_heatmaps/heatmap_all_pairs_dijkstra_path_timing.png) - -all_pairs_dijkstra_path_length -![alt text](old_heatmaps/heatmap_all_pairs_dijkstra_path_length_timing.png) - -all_pairs_node_connectivity -![alt text](old_heatmaps/heatmap_all_pairs_node_connectivity_timing.png) - -all_pairs_shortest_path -![alt text](old_heatmaps/heatmap_all_pairs_shortest_path_timing.png) - -all_pairs_shortest_path_length -![alt text](old_heatmaps/heatmap_all_pairs_shortest_path_length_timing.png) - -closeness_vitality -![alt text](old_heatmaps/heatmap_closeness_vitality_timing.png) - -is_strongly_connected -![alt text](old_heatmaps/heatmap_is_strongly_connected_timing.png) - -johnson -![alt text](old_heatmaps/heatmap_johnson_timing.png) - -local_efficiency -![alt text](old_heatmaps/heatmap_local_efficiency_timing.png) - -square_clustering -![alt text](old_heatmaps/heatmap_square_clustering_timing.png) - From 2edd3590a80b40775df837e45f87bcfad554ccd5 Mon Sep 17 00:00:00 2001 From: Akshita Sure Date: Mon, 25 Aug 2025 13:12:09 +0530 Subject: [PATCH 7/7] modify should_run_if_sparse tests --- nx_parallel/tests/test_should_run.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/nx_parallel/tests/test_should_run.py b/nx_parallel/tests/test_should_run.py index 67c2a8a6..933a6d6f 100644 --- a/nx_parallel/tests/test_should_run.py +++ b/nx_parallel/tests/test_should_run.py @@ -53,7 +53,7 @@ def dummy_if_large(G): def test_should_run_if_sparse(): - @nxp._configure_if_nx_active(should_run=nxp.should_run_if_sparse) + @nxp._configure_if_nx_active(should_run=nxp.should_run_if_sparse(threshold=0.4)) def dummy_if_sparse(G): pass @@ -63,12 +63,8 @@ def dummy_if_sparse(G): == "Graph too dense to benefit from parallel execution" ) - G_sparse = nx.fast_gnp_random_graph(20, 0.3, seed=42) + G_sparse = nx.fast_gnp_random_graph(20, 0.2, seed=42) assert dummy_if_sparse.should_run(G_sparse) - assert ( - dummy_if_sparse.should_run(G_sparse, threshold=0.2) - == "Graph too dense to benefit from parallel execution" - ) @pytest.mark.parametrize("func_name", get_functions_with_should_run())