From 8e484085a1199560ddba9d60efb80aea7e38e587 Mon Sep 17 00:00:00 2001 From: Schefflera-Arboricola <1509aditi@gmail.com> Date: Wed, 11 Oct 2023 09:58:37 +0530 Subject: [PATCH 1/6] parallel implementation for all_pairs_bellman_ford_path --- .../algorithms/shortest_paths/__init__.py | 1 + .../algorithms/shortest_paths/weighted.py | 69 +++++++++++ nx_parallel/interface.py | 4 + ...map_all_pairs_bellman_ford_path_timing.png | Bin 0 -> 62088 bytes timing/timing_individual_function.py | 113 +++++++++--------- 5 files changed, 131 insertions(+), 56 deletions(-) create mode 100644 nx_parallel/algorithms/shortest_paths/__init__.py create mode 100644 nx_parallel/algorithms/shortest_paths/weighted.py create mode 100644 timing/heatmap_all_pairs_bellman_ford_path_timing.png diff --git a/nx_parallel/algorithms/shortest_paths/__init__.py b/nx_parallel/algorithms/shortest_paths/__init__.py new file mode 100644 index 0000000..10a565d --- /dev/null +++ b/nx_parallel/algorithms/shortest_paths/__init__.py @@ -0,0 +1 @@ +from .weighted import * diff --git a/nx_parallel/algorithms/shortest_paths/weighted.py b/nx_parallel/algorithms/shortest_paths/weighted.py new file mode 100644 index 0000000..4207912 --- /dev/null +++ b/nx_parallel/algorithms/shortest_paths/weighted.py @@ -0,0 +1,69 @@ +from joblib import Parallel, delayed +from networkx.algorithms.shortest_paths.weighted import ( + single_source_bellman_ford_path +) + +import nx_parallel as nxp + +__all__ = ["all_pairs_bellman_ford_path"] + + +def all_pairs_bellman_ford_path(G, weight="weight"): + """Compute shortest paths between all nodes in a weighted graph. + + Parameters + ---------- + G : NetworkX graph + + weight : string or function (default="weight") + If this is a string, then edge weights will be accessed via the + edge attribute with this key (that is, the weight of the edge + joining `u` to `v` will be ``G.edges[u, v][weight]``). If no + such edge attribute exists, the weight of the edge is assumed to + be one. + + If this is a function, the weight of an edge is the value + returned by the function. The function must accept exactly three + positional arguments: the two endpoints of an edge and the + dictionary of edge attributes for that edge. The function must + return a number. + + Returns + ------- + all_paths : + dictionary keyed by source with value as another dictionary keyed + by target and shortest path as its key value. + + Notes + ----- + Edge weight attributes must be numerical. + Distances are calculated as sums of weighted edges traversed. + + """ + if hasattr(G, "graph_object"): + G = G.graph_object + + nodes = G.nodes + + total_cores = nxp.cpu_count() + + num_in_chunk = max(len(nodes) // total_cores, 1) + node_chunks = nxp.chunks(nodes, num_in_chunk) + + paths_list = Parallel(n_jobs=total_cores)(delayed(_calculate_shortest_paths_subset)(G, chunk, weight) for chunk in node_chunks) + + + all_paths = {} + for result in paths_list: + for source, paths in result.items(): + all_paths[source]=paths + return all_paths + + +# Helper function +def _calculate_shortest_paths_subset(G, chunk, weight): + result = {} + for source in chunk: + paths = single_source_bellman_ford_path(G, source, weight=weight) + result[source] = paths + return result diff --git a/nx_parallel/interface.py b/nx_parallel/interface.py index a60b3c1..736f3c0 100644 --- a/nx_parallel/interface.py +++ b/nx_parallel/interface.py @@ -1,4 +1,5 @@ from nx_parallel.algorithms.centrality.betweenness import betweenness_centrality +from nx_parallel.algorithms.shortest_paths.weighted import all_pairs_bellman_ford_path from nx_parallel.algorithms.efficiency_measures import ( local_efficiency, ) @@ -43,6 +44,9 @@ class Dispatcher: # Efficiency local_efficiency = local_efficiency + # Shortest Paths : all pairs shortest paths(bellman_ford) + all_pairs_bellman_ford_path = all_pairs_bellman_ford_path + # ============================= @staticmethod diff --git a/timing/heatmap_all_pairs_bellman_ford_path_timing.png b/timing/heatmap_all_pairs_bellman_ford_path_timing.png new file mode 100644 index 0000000000000000000000000000000000000000..3930a0edcce4d80ac3aa1b495d9bf4c9970ae1d6 GIT binary patch literal 62088 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ž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%0A;TdUAE1xbNI4z8Ww0Io_K z1ef2rHi98x35F++yfjt{;P#%1Uk)Fx0bv0+2aWdb$e(SmTLI>YxwfFMuaDabN~OqU zb=z6NBKrg^my+SN{gs9qbd%c8<9on*YAbPefatrDPyzr!=+(jie{;R)*o2c&G3liI4(SZ58oeK0f`4@StK|{ zW&^@D0xpphl#`nw*^!E*iV!3xAXBax)}4d==snm?nh@U|u3Rm}UqsKCAFeGGtm``d za(seZ(0=(0E&?(;22j}VAs;l}DU4uAA+$;X2K44=h&~eC!WJvA@r~=7Qq}h=eI@1Zm&A`z_Y!lMR2b3HGdf?k#N0Q6wC9B~esEvmTg+_aj zgS~w_Y*7eD1WEtFVnnuYNTiRBjj;k1+VjN=BD_CZzqA;vK+?@;hmlN(!wTb%Mbhhg ze5{Pe_}?gfWCM8lQxh8s_420{RuszrrxF(wT3-GC=a;gZl9U3}Te`I`t|FI4R!ZUb Kv|E2X{eJ)>7MJ?~ literal 0 HcmV?d00001 diff --git a/timing/timing_individual_function.py b/timing/timing_individual_function.py index 0de014e..82bf2a9 100644 --- a/timing/timing_individual_function.py +++ b/timing/timing_individual_function.py @@ -11,67 +11,68 @@ heatmapDF = pd.DataFrame() number_of_nodes_list = [10, 50, 100, 300, 500] pList = [1, 0.8, 0.6, 0.4, 0.2] -currFun = nx.betweenness_centrality -for i in range(0, len(pList)): - p = pList[i] - for j in range(0, len(number_of_nodes_list)): - num = number_of_nodes_list[j] +funcs = [nx.betweenness_centrality, nx.all_pairs_bellman_ford_path] +for currFun in funcs: + for i in range(0, len(pList)): + p = pList[i] + for j in range(0, len(number_of_nodes_list)): + num = number_of_nodes_list[j] - # create original and parallel graphs - G = nx.fast_gnp_random_graph(num, p, directed=False) - H = nx_parallel.ParallelGraph(G) + # create original and parallel graphs + G = nx.fast_gnp_random_graph(num, p, directed=False) + H = nx_parallel.ParallelGraph(G) - # time both versions and update heatmapDF - t1 = time.time() - c = currFun(H) - t2 = time.time() - parallelTime = t2 - t1 - t1 = time.time() - c = currFun(G) - t2 = time.time() - stdTime = t2 - t1 - timesFaster = stdTime / parallelTime - heatmapDF.at[j, i] = timesFaster - print("Finished " + str(currFun)) + # time both versions and update heatmapDF + t1 = time.time() + c = currFun(H) + t2 = time.time() + parallelTime = t2 - t1 + t1 = time.time() + c = currFun(G) + t2 = time.time() + stdTime = t2 - t1 + timesFaster = stdTime / parallelTime + heatmapDF.at[j, i] = timesFaster + print("Finished " + str(currFun)) -# Code to create for row of heatmap specifically for tournaments -# for i in range(0, len(pList)): -# p = pList[i] -# for j in range(0, len(number_of_nodes_list)): -# num = number_of_nodes_list[j] -# G = nx.tournament.random_tournament(num) -# H = nx_parallel.ParallelDiGraph(G) -# t1 = time.time() -# c = nx.tournament.is_reachable(H, 1, num) -# t2 = time.time() -# parallelTime = t2-t1 -# t1 = time.time() -# c = nx.tournament.is_reachable(G, 1, num) -# t2 = time.time() -# stdTime = t2-t1 -# timesFaster = stdTime/parallelTime -# heatmapDF.at[j, 3] = timesFaster + # Code to create for row of heatmap specifically for tournaments + # for i in range(0, len(pList)): + # p = pList[i] + # for j in range(0, len(number_of_nodes_list)): + # num = number_of_nodes_list[j] + # G = nx.tournament.random_tournament(num) + # H = nx_parallel.ParallelDiGraph(G) + # t1 = time.time() + # c = nx.tournament.is_reachable(H, 1, num) + # t2 = time.time() + # parallelTime = t2-t1 + # t1 = time.time() + # c = nx.tournament.is_reachable(G, 1, num) + # t2 = time.time() + # stdTime = t2-t1 + # timesFaster = stdTime/parallelTime + # heatmapDF.at[j, 3] = timesFaster -# plotting the heatmap with numbers and a green color scheme -plt.figure(figsize=(20, 4)) -hm = sns.heatmap(data=heatmapDF.T, annot=True, cmap="Greens", cbar=True) + # plotting the heatmap with numbers and a green color scheme + plt.figure(figsize=(20, 4)) + hm = sns.heatmap(data=heatmapDF.T, annot=True, cmap="Greens", cbar=True) -# Remove the tick labels on both axes -hm.set_yticklabels(pList) + # Remove the tick labels on both axes + hm.set_yticklabels(pList) -# Adding x-axis labels -hm.set_xticklabels(number_of_nodes_list) + # Adding x-axis labels + hm.set_xticklabels(number_of_nodes_list) -# Rotating the x-axis labels for better readability (optional) -plt.xticks(rotation=45) -plt.yticks(rotation=20) -plt.title( - "Small Scale Demo: Times Speedups of " + currFun.__name__ + " compared to networkx" -) -plt.xlabel("Number of Vertices") -plt.ylabel("Edge Probability") -print(currFun.__name__) + # Rotating the x-axis labels for better readability (optional) + plt.xticks(rotation=45) + plt.yticks(rotation=20) + plt.title( + "Small Scale Demo: Times Speedups of " + currFun.__name__ + " compared to networkx" + ) + plt.xlabel("Number of Vertices") + plt.ylabel("Edge Probability") + print(currFun.__name__) -# displaying the plotted heatmap -plt.tight_layout() -plt.savefig("timing/" + "heatmap_" + currFun.__name__ + "_timing.png") + # displaying the plotted heatmap + plt.tight_layout() + plt.savefig("timing/" + "heatmap_" + currFun.__name__ + "_timing.png") From a79de3363052dc707fd689da29f8228929fe253e Mon Sep 17 00:00:00 2001 From: Schefflera-Arboricola <1509aditi@gmail.com> Date: Thu, 26 Oct 2023 00:26:38 +0530 Subject: [PATCH 2/6] changed return type from dict to generator --- .../algorithms/shortest_paths/weighted.py | 38 +++--- ...map_all_pairs_bellman_ford_path_timing.png | Bin 62088 -> 46536 bytes timing/timing_comparison.md | 3 + timing/timing_individual_function.py | 124 ++++++++++-------- 4 files changed, 84 insertions(+), 81 deletions(-) diff --git a/nx_parallel/algorithms/shortest_paths/weighted.py b/nx_parallel/algorithms/shortest_paths/weighted.py index 4207912..8725a6e 100644 --- a/nx_parallel/algorithms/shortest_paths/weighted.py +++ b/nx_parallel/algorithms/shortest_paths/weighted.py @@ -30,9 +30,9 @@ def all_pairs_bellman_ford_path(G, weight="weight"): Returns ------- - all_paths : - dictionary keyed by source with value as another dictionary keyed - by target and shortest path as its key value. + paths : iterator + (source, dictionary) iterator with dictionary keyed by target and + shortest path as the key value. Notes ----- @@ -40,6 +40,9 @@ def all_pairs_bellman_ford_path(G, weight="weight"): Distances are calculated as sums of weighted edges traversed. """ + def _calculate_shortest_paths_subset(G, source, weight): + return (source, single_source_bellman_ford_path(G, source, weight=weight)) + if hasattr(G, "graph_object"): G = G.graph_object @@ -47,23 +50,12 @@ def all_pairs_bellman_ford_path(G, weight="weight"): total_cores = nxp.cpu_count() - num_in_chunk = max(len(nodes) // total_cores, 1) - node_chunks = nxp.chunks(nodes, num_in_chunk) - - paths_list = Parallel(n_jobs=total_cores)(delayed(_calculate_shortest_paths_subset)(G, chunk, weight) for chunk in node_chunks) - - - all_paths = {} - for result in paths_list: - for source, paths in result.items(): - all_paths[source]=paths - return all_paths - - -# Helper function -def _calculate_shortest_paths_subset(G, chunk, weight): - result = {} - for source in chunk: - paths = single_source_bellman_ford_path(G, source, weight=weight) - result[source] = paths - return result + paths = Parallel(n_jobs=total_cores, return_as="generator")( + delayed(_calculate_shortest_paths_subset)( + G, + source, + weight=weight + ) + for source in nodes + ) + return paths diff --git a/timing/heatmap_all_pairs_bellman_ford_path_timing.png b/timing/heatmap_all_pairs_bellman_ford_path_timing.png index 3930a0edcce4d80ac3aa1b495d9bf4c9970ae1d6..7049e637fedc6a5b40aeecbf80c1c454d33b3729 100644 GIT binary patch literal 46536 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

qifLS||O_B~!CDbC9WapPMA8$SPpLV~)c3 zFy!4k6(VJ+5fPvNTg%(P$*NEnf62G;9hS;z$S7xti6xXE%yJb-IEPU~CN7*rB_Zrb zN1e!jdo$qsX7VyJ_WNd{Wz{%GbSz%s9!82*-wV<;+9!XRAc-dU*QUfM3<@1$13{!J zs0a{E%fDv$C7|-KS&Rialw`PY-7$xu2hOgc{8l)Hh0%Bvki|BO?9ZP*lTsanp9yhcBnns}!a!^dUzZrY(Fe=1hbj@r4I(9gsX!FU zQ{?+b`Wq*I-N^WbH(7qcG$^{YxC1pWh%*d`ozqVr?&6+Q{MlzYiO#_kClNRtWeihH zN=fAcU+WxxsRSC!2yBLCZ|?q%yYgzf)WM+4ZdMZG|Q5Qv=LVK_I$MtyMz9a^FP;R-2sNbxn4k{Yy1O*y+0;D}*dJ&Ez4apTSuX`crMgy5V=(A%XS=Vx%f=1FVu!4pYINie`lywf) z=;%S14#E4cs>f<>#qy2N8Nj+M0x4Wt2M3YO*H14MUjhKSht-5FBc5%3JEb^xKH#__ zVcV8wHk@t^H?+-0Q z0+dKxxUjjYtEjwl>}fCbl=T%fNaoFk00Re#XQm6C*zPzVDF}kHiISTP6TCK7ClUo( zjrou5VE2ZUjqfUV8aV7gebP9eB1!tX-Igk-0diebgoo9fG!@51J1Kp|posp!bxnS2 z!CUstIvHml5%d}B))Yq)fW}&wj-^854~>{!D6t0p{(8Sw6#KWH%urA5VFHz)PW8E~ zD;f@H-5533Ter5?;{9%@_*pfP>KKGVd;~`!Mwz5)k4F*?)-A$98e%Jo@J+}SW8h&3+~8^823x#O?&JFsB0-~e$c53`RH z>mm*ZB>={;z|({0)Pp|`9Ec~7P$7sbY9%3DRx2Cg-V5eo3~cg=2D8ujcg3aB8rID%xV#{Dea# z;(NlIj2s4FtvLWDA`2rXZoWoNI>_fLq3wbKXyd=$b%1aE_ahf7lPow6aht(q3*16f zB>ab<3F|K1)13ORLv=2KLQq_W<7T`W-aR>Bu$)QU-!B*D zqo_ye9Y5vn`Si>4r9}2i^lo{xGkWkuO(&kg&~ZfD4K&r5{`6I^yb3|pa@CLthOR>m zvPj>=#Kg=Jm|YUxHqijOZ~Ese@V{>~G4_TCy|7ViksgQD1@U&Z*mX}3mNPXZNP}M` zd8#b&2J>$VJ3$J-^ezu+Si=CmN*hq67e3n}wbk&cHiD39xR;SqG&JCch{8*_RjC?g z1L}EBj)2vbXhdBGV?fb{hB>QW^0`v=-w*P@=Z(;+ML2L8Uq2cJBZzjaJ#M+fVqgEl zFsH0F=|*M^>*`&=#$c#JATjukmiauHzqY&EH_<*)mWtRTh>FQ%{exqtPDK)7E3|i5 zy?0?Buu1u0)QcAfv9}!h?r{w!l(|A+ML(sk+Y#s}93ycPZ8P1ju)d*kJ$_L7IO zFWr1PpN}v7_I0?tvdmgNF;_@CX_T6AQ|{dt-n{xu#dv6kO>4K3_+(8bpFzqAzv0p8 zb5eTF^$AN~3-WE3*nj2O74so|an{(OFFxn#TpVnKnhlwkXlVUDFy*RryRu(_QTS+s zet@e)P(rK!>gez!W~1uso-n8^tCNgfO`SN{aQCc6slonnv2VPB+m&x5a@0;8P_X%^ zS=2U6{kA!v&Q8-=ura|+R;Z^YP0xJK)MD1yz!B%ofsM|}d2eS(@dZQ`Lqj@4J}yIL zje7OVH;>Ri-W?mq!$h$h!H^@SOEFn*CW5qL$r{0jCL1n;Qbbg^#5n?RbMc8Cg%H{i z5jqi_rZ?FuKvCmwO-_)tdlivo5y+dZ+ za)=6BzB$XhewUO@Pi?ttkf!-NmuI>epDkGVZAT@4HF_irr@Y+tPHv!* z)`EOzxeoz*+qTm5y#215Jx;`^R0| z9TzR9cL{gBRAgE{<6Upp7S-F=Tb=hU#qWb6}uJ31{^F6Jt*dw8YO3=_oH`1 z7P{Qt;vJiz88o5sI^=Ls(}~Da@~PD~W9WywUzOuo7I%H2@&#s;pDtLsFv>DiW$R?i z4aOQf>vQVYe2y*=_$(xQ3i#$(LyL$h0ogT-*RJ_G;3D2E`zH{cO@~D?adL#w$z5*m zEow4I9PXy4+g&dMwg_h8M(EL>c}2f$LEqve0H8a7v6nT8BS?Z6YrmO-N3N z1uhJ6Ga)yknxlqFZd{eZ)SA*Cg%@r)lwBUV=gmZ%Y~Gr(mO0RJ=0lOGo?q)<&Cr&9tc-5T*E>p8ktb%Ag59)_qrXn?p1ztxjJvri zp2gpg3#NawoL)2Uc#`D#)`QdEJ_vY!V=2GmHi?4v+Y^y?>z;;~Id4_JCKmp=>&1#A z6sP#{bfwhyLCFqJaxJHlTraX#U9ph8z{^J+iar$noKH3SY*tT);EJdZ(hEu_n=*53 zE)E_EXmq~wi->W7b{RQViXQjk5ax%$2E>@PCN)np7tpaF05y_`Mp3&+`;z{EYz?r;-ID#%%uPoVvWLq8#3OIsT%?g5 zc_%V55{pUc+}p(5`_Wm#-Lc0fPwldJWeMkl`$m&C1u|_cMTtgxEY$}$ZLNNKZmGMy zMQTWBNXmyZ)SH+v?gL5NlgKW~!D;=}?Pw%6zkw%A^->on$jWBF=I z`K4^jD9f*g5qgN$XdQV)oqyVUCU;5XD$zeSRWo>-R?SvnDrUoB`< z+r-V?34u1^sH<>Od1W2M51&=kK)hkWO|<876-4%%Wn)2TZ(v%Tx5=60x(?tvIXztq zM?NVn_2I1Jk@vdG4H?P`QtZplFIyCDN5m2aL#rNGUk zGXNCVr#Vjx$`QW~fWB2QMqqrhX5G42oQ-;xNlBwdYnH#UGRP87w6}tKZJboI7V%o3fMX0D@!t(W`dqN#~_CqIGpbn>nIS>!o*nzU8@ZotVpPszJ}F zY2%d9aLGE3&mRk_UQ_3r9_!|;`lP2)P&+MDDgtc_yV~r@oXLh&(l47X-Yln+su|)P zyuIY&=h{=Ec_kRDd~*?xz9_*UYt70v>&zxuL{ptxpFLc*SZeis#R$dI)Lk_MW1}#@ z>#E!$dmhYW8MJO-6Y&M}7ZS=e=UFGX?)VoYW+4nSRFaXo02Kn{qmY%|G(lYGk)9EM z`|g@}f09HZu8oH68H?qGe`qCyzRvX0{k3PJM_eLR6MY@5BckhSAKbflZJX1*J7dvTE&=L?^uXa(ls-u^lufo=w~m85>+= zSI=QIv2j;su&fZhL}O#Z)!gOYCnC}fT%wAR>+;=?gL77IFe-s`Ivl0NCb9Yt2y@^j zc^96MyJ0FxET=)vVHdHE;*JI$#s}8Z^@i^$bBc6bz>5Yp2^P-7|0i^Mp{4&Doj&b? z??`VGKob69)C;q1`)gn_6z6j|^{#KaFL$)PyE&08$mH&mKX9G--ceM+>?Bl%{i?Uh zgwsozym<9u%eN`XohS9Pt(7`F47~g!V=phrNwaS+%i_FrfWy#Yb60;VkRzQ4oXycv zw|*m42-@e)-rv^P`L6GxcbR>1RM;U_=MV?8p{Qnh>+#PW-5cey*zEL@ZrS<1U^6%q zobbW5Dy(mi)pu>sF~^~G=hC^ma(g1^rIb5$B0SC8VnaM;{9^9^CHl=aYqI%P`pRRg zf>zDCgwnNqyybSQGHvOR_UR~vTAQx1lbQBeZ}{^S^4^Xc?AdrGrj5UpTh4hlRSoQ+ zB35fVs<6(nBlUEhQA`z|0AmQF@m5>z0=oD21vbB1iKGsEI$~5!oSXqUaT6aSn8g)W z?W13?V9uG^f434Cr)oIe(F9=~5jE4$qG2JS8lk}d)_jf2qF6Q3kn*-@~LvrAh3F{F>p^%0T9!b5tn0F znkH4mvxdB4V`I&$qr+>V06L__kl)(-;ohL%*9ptP8P_fgZaG$V-&(cAC)Mt;dsrR! z)lW@4@pj&_WxJfDqTwU1O^MrlH`g+{+=xHWmF@i3bVzmf>b6j)fGDmzalYJbU%&Vs z#o= z-5~iz7U#KwDVWOE?;T~4HgfeTY*LoEbXh&o;`Fs^k>VB`U1Wo9b-f3{)AQ(B8O_6R zkO={vLcG~)ZpzWD;Q*F1^{u!b77D=ULqV=G$CCibI1udYqiMDk&*w@Puhoj@sH@3I zJ*y=%R#0NkUE7zI%qgz@Rxd7|(^uR3^!gKhwfp;TCJ}cW5+|}*5`LlT@_}yLxPHAG zgcwbwU@&I%jV^z^M%tIaXa>d>axl1a;w?m@s=r?+IObTRnsUJ~-pnTM>_aegh(gUB zS!(*l#^PfBf{tBG2S`s4q~l)b#DG)E;xE!rYwqQ8;{|s%qt*f!*_#?GI^n=`mz!9x zL^$NiK`DkH5n1rg%Wppq0^z20{PQlj<(+0I7z*U+mDtD36fkW}rANT%!cqi{_o`C0g0y02i=roIZbSTpKMat_zt~(;!qZRFbZ6ZAHEdu6xvsOWgZ{Ne^Phyn=>MV zbBzwv3fq|A)hH&db8QK02?18Yt0|HHf%Z%J5!WSvVX@#7!sgyF%Y!(`gK1kb3Cy`} zIT*9F@AZ&)*7;!uxXEI{JOn^I7MfZ%2|*Z)!GX4hWsys1k?MjRgeEnv^UPezgH2TY z;VA#M%oSEwYfNG5)JNp!_1xEb^WWjEsx~ zZU%E}hcEnbE7`>^Zu_BWaG4D*Nw^Yt1R1yQ(Y0o|5+G%}O_NZ+^WCGm^{kX0`5f3x zrJ|1#n5{ZqYhdP&*gpAR;H9m=@Y4KO+B{dBdTO@9R5F}557wgKX#5NQEh%7!9Yf7A z;ERX?WzkY&`+&dVCe$#A$95d+{6hP}b@Fex@0j=UPU4RRldn|ANn3~$&2VA$>1Tox z(Aor4s{(eV`N4u}Nl}xncrnG|j;#z6n1DjW)ee6BjqruUP-=m-4nn9Q0c+m`^Ig%H zbHqqqx+b!1uErd|r}f<$V?=g6`44J0=<3h_plHKWh-xmps~*>M&3~hD>wIl>w7)Uh z2X}+281eFktJM=3wfR4MynGX>t=`6Up^Z{IWAM?nGy$%gFr&4Hno}4QZoE%BRBrwa z@Zu~YsD74pG|?5IK7(420kIJyxHy1ZQ-JG!+mBzzG>QZPu#&xWe)#ek-WPgB|BcD! z!F8QTZB}t|S_$$4x+Yzhh(;W)Y+l$2iP0S~y{j?(Zc{?8z+*3Q=^zx1X0*qHAG?|t zrV-KV!5ehY3G9B0UGs~OT4%gN=j4tP)J4;{Z&kz&PhzZv9#85)F-pk8<I)Akw0R zVU28o&Zx$8Ue-hHcKJTIx21x_E+vy335~mm$hD&JNEhLWk;GCCjJsL|p_~){u4$7R zBf#(+Y!SpJll1BUWnO_ska=(lNYgAD;TGwIZkZp{_ls7B7UFcDdz$zIP>Rz2^)%CZG}{SX9Jo}%)eNqfjA_S10P)F22$|@GGeuDRp?x>qXxQ}@Yzhh)(55x1(N0Dc@ zFJWYY^oj~a4LT&nmH)UP%bT~*@n~*Vp?u~EZn^7uQ0~AStN7Ql;1(KPNimgG*qnMOWWqR(<#}y?SA0Iky1w1Bs1yTNLp0Yi15sh zv*lX)t#t4G1mdqWp?w(i5dNc*m{b_S2csJ|Zq$GZB5v2c-%**!ZbAhZ-53pNC)U0? zVDY2aOc^(TN??>@p9Y#`DT-9Hx!5wyn+_wf!~T|BaWIR>&44df{dlOAywXXV7VO8zp<%zMDneTS>B#t za%V?mxB8_V)Y_OBeJJU9_ny>5`RhK1()#@dYP(y@gK)Ns?CXv!EiReNOPo9)DQFnI zkK8_hLubGJLu%h2<0jC+Y zYNmv{AyXY2{j1yjkJhmXB0_&Yv$TG?fK&S6&8j|&^y<%PGJNXcDt^Od1KGhrui_3J zndwbcK0kP__|+l0-)!#P*kElrd_+3vwyLFd9N%bcj2P=+gpPB^?K~S>wW8))v2T}R zW<;4&cB)f#Z@5V{Mgeq>Xvd{*>YJDRT^bOOm3^&lbXfT=_8L`E7$^4Nq;88f$-UPRCTt_-W$s+sWfzlDv7F4&M)1<1kuT!R14G57KtEyu7kxnP8NV ziLxh1jO}Fx!E{2*Rfl7p?mD~Vahtu3%kE^~SP>bmec z;XY?0)0TD98aq<|%GGH?TZI|oVHn~`u$ObaFxEHFD z1Ob(~(uZG2Lzan=K7KfQ$R%rYiEo5A7ik=3hK_4Ue$`+ZN7`qAWA*-n)iL zY(T5k2%D6fxP!q_>js+I5e5i)TZ)uEabbKQY7tm(XPWq=uK|ev`h9<_bDmZz&ee+u z%&`xPl63B`jnT=D$QthDlk1jz9Q4GpKIYosn(p``XVAQ(G$=(XXJSb8sthx?+Aq z-)^jmQjuE7x9ZK8a|um?=WXrYUcX8Gc6>o`yQXp7hpvQy&URke>A{7;Zq7z3Q+*d% zqcpbR!F{UBPO~It+x2S>JFKXusn3ZoY|>{kQ#yc>AH6p;GBl)Kcm7fPg^97TD3y#s;ycV@J#@e$zi-$QI+aMo@Q{ zow_&$q_*eHv(Ok7;Szll)Ml4x6j&RVJ=^8scI#I8g{|4q7u*uq_g%cL%qcqjD+*;L zU(b)+<(7W=;i6Qjv-J{-=(fq4@O{TPC{B&$oLt4h34wR6c3Rz^_UD!?%C`-enf97e zSoo$i=p-+t_lh``Df!3*m%(dN_uPG;wS~K4xww z=`0D;9zUZzJ)dt63vG~TMwE@|UuAe2;-_Iw8XIJuA2%l;(6ey9b}U={_CO+b0s9+e=4HH4I1f$jd9z5`#RXGx7i4K2&s!ZwdZmzx{CE zem>Q>yC5*fOJB&V4DL_ta+6kLz1uMR`$1-^>l95c)PJNl=#*{GJMWcUBAWz^D>USt)ebE2qT`>l0D#<@`9UOEk)65)yX2pYsdt_m9fkULC~{*k0$$tvDp1jA}L z)g5@hE*Q%j=@*yin3!!H8_cq`eqXZe&Cv_DnN!@0qTZPeyWjld*3CoQuT?(ZWqNdP zF~?1tyRMzvZv7$6=l;Cp`tR#(1KAo9dM2imf_f$mB0zc0zW5>AAl)`ca-ghZaH4l| zIybK&uy%4pD&M<4{2>63o)F(sd|!ME2^N8W0&Qd zL3rk>pW{kFASBH``Dv-SgTuOo>5FP^*WDALT|OvkJ2e@oN}Uz{^G|x4Gq1C&gU`_~ zOt(ysOU&U;jL{fsi!^G;-bH2P4>8I_-7*qqp0Vua2^!RXbG6=KgWS2-Lb)p#DX%?- z!a1uho>@6wJ*qJblUl1U0WnS&Y^J|f2aO0aQ-TdiL3fHWL)^^&YC18XO6|S*^r;vj z!vc=?ts)Jc?Y}%@1p9)KWNXA28oje%Jbk8Bp3cjzO;E}XeF=z=$Zo(8oK@WhfYe(- z^#WobPXm23?%5bI@kNj|=dPP>_cg8wAtGr*?2Lz>*R*rTj*6__sqtEiohA(}T`i_D z_8Q(`9#vHCkWWSNvADK2vg!hoY45<9^cl0+z5&=L&YoVA*M0}Gy_18Qr4M%=cy#pl zB}_}I6om44?e^@6H%Lhs6LET33o35zFnd!|)3=!Jmpl3?LAOZX$lJ;?CnHXIo0ch- z(bCUUD`Z_yaZ6#}m5|u_`c6aeA5_NqL>aL}hjrI_?%n?=Unp)P*P(v)oK{D0_R!G} zzPl5aQI?6i2PE6V+TUk0Q5gcO-K1rm_J-7dOgm{UXy^Q#;p~GV^Tnf#oEM3|ab*FE zgwvMd4fMKgyRu% zb5%`EAMP!n8N<-^F8FZ^uab6>!=M~Rfo(i%p9i`Yzo=;T3yYGB^4g&XE%){H4OXpP z6%~{|Yk7L7f9b@f$z=;~{Nih`eD=^|r>5M{gU~uQuzm>1aE`A}gBzvZCqH=K)^KId zrW)>?wfrjKFLR)9_7?kX8J&`sdMp0=>)IjOGAxLs#g3-!H&%GIO{e#5q4EO_-7gxB?#Vsik+3!)RL6IQ zu0Z)pUt4!?NZHH>dNJ#$SgFd|Y&CuM8aKW2M z+ty@;&W>3}r=TH)kL~T74j(RCA+%>ty2X_GS@oPriAQA;I`L^1HQmM)`<4867>tjP zcYiy3O0Ghob(3k+hw+-39DB)#Ag3|8fvpA!2N+qpN*B7Nc9i9SnG+fIY4*-Y_h3eo z?$ndq=AoQr-0R={b#7&wR_S58#>V}$stw%QC^q_i`E;<)qZw(fr|@W6?Qm^Up0#Xt z1CN|d4?|ReL7(u>Z^AF9IV0&AR|tQ6>8p`$XwZ1xB6i1&Al+H(#=wi(M)8J;XKEZ{ zH{Q5o>U1LYZF`W$ivwueVUi;zJMc8Aq+Zgbka5DMK{aY`Ku$ECI2w+Z;t)l!mzyS&&%T)-+YXC z&SZ*a>rR$9bV|Dqd>LBUA+h>faLvH%{s-eF?|(5ix^`-*x6@vOt{ZNf*M1HZiytcJ z5(%)?rKPrBH5zLCv$ST$`SN(=vRPVOZ`Jyf>kHpKIoV({RkmuO^e=VcP86?*URdwO zx*`eMRyh$*TbVl9WbYs+8CvQIzW}85L}uPnw+e z2n%a~At6+bF3UEs4(FAWob_vDbZI^J#EvffD^6uFQ(}M;6YF+BGc?yx89SS;Ggr01 zjRWV9b(Q**LW{RR2c5p_B-c$96PbwBxnCnHDk`coU&U6GUEu+ z@2&dDQfErsYAUB0qNAb?F|*gyK3$j?d(QJ!O^>4gS64&-?RuC*p5?~s#d^Bkr99;@ zz1b2vu*{`LdUCQ~-PQzop6d}4`-tvleWS$O?HU@6uD)j_AK1sdn5}JZ57ewm9WPQW zQ$JZ&L>6F3Q$W1S#7vDu!=5v>y<3jdj8?ub^WqlY{^i^-TUD$jCsRIi?3q|WT3Fdc ziBP%3<kzHpLlX#Vf~pF1KIR(#@LR@(4sJ9YHV{PtzxLHDlu*#T}a5V zFz!gUjQMPDfQYAe;?tqZn%4FWDNcr8Q@-tZ`=+i`r)j2XqU^6pjTD{I9f=$i_m-Zs zK2P#SLWifDyq)D~=IPO)cV~`@_}XZWv+*2=dA{?SeBFbP2yuUJvv|t#_1SAFg+Kv> z(O-4NY0{tp6x+o88r0cy3~n!vCD|cfF$*LL#Kn&w8Sn`Mn9?vcb4uxy zr4tMFIDF-JuQYT1*K4xF>2`~$vl=qCm)|wjpypLdWJ+9D!ZiqC&kbM(avSo=3!jy^i>O#%d5vqs2ibc6Y< zLKU5Hu}acb&$c~H5Z@jCrSNx1w)+7XW-z_lQUB*CShOe}q~=PZK7jHSh$ZA~1$Yh_ z-LNmTgo1LU=RvCRvjsWecoO;VTeJ?bpD00KFx| zX?j=-{AzU7R;Q6}4*2hGROEfQ(Ppa?ZANQmz{aZtFE$!6898f+B!mDoh)&;Q6}QP| z2K>NSsMjVcbtO`e`Q-?#E|&HX0ytT9!D)8dZk^`B{N>AkK==8Zm`{M{PS;~^M>XqP%g!PxctB!{f!})kUj9P->_Iycdk=E ziW9q^F_GW6Z=MIGDC*apKm2cuHwwVzrTo{QuX52ly1ncRe)!P5XK)CnKfCSci(YJk z-|YI=Z|L!;Fe^Mr`pY9ytpba#*!bU5ErG#jQ``F7Tf*DJ?(e- z&r8+@jvD&A6r)Rzx^##9h#(!6pgV0Z+-IHhkvodgg05By1wiD zQyu5genAx#oT@N6Ptuo#gu!UdiOv(BrOUn|dzF`W9rk|s@UpPSk`@t+{y(=z`HxKs z3@A7nBp~wdhM%J*3KOeVtqQ}Ui6(tXAPksIdV&g^wh@l6JU`imX9F;d|GeKtNxzF} zh(PL_H%Gqc`H*=byeTv|SSoLN#J@kYgVVyl+_Xx3^aJ4_8KgczdlUZOev=~Ia?o)l z4TNcnnJH>L%g+ntlRW*UAu>*5Qv7)`En2n!EKGh2ggSDzxblvh&PI{XmGV-NAN zL5iP%-4rn#;hrPe$!>3^r|!J0`)O2LCaigilN2gY%N9QW`OS*cAR*Rk2noS1M^erH^Jiy68{}8X0Mt zj^MN#QN3^Zn_nE}ztADGg6D&f7Rr)D3QkA|7=H~^#{p&&Y(TC8{`&HtWga|uKnh6S zett2id&WR$G-nRFYL)t?;RU>TOsjDq4s1wJH#d(VJ+{LmB1q%DCFrsSF#|EtC%wV# zKi%4#FjkL4G2v)9r807UY0BLCPrD(>VK#RNR>kSQoI4f=W3|iY{^ORFWNj1Ahj({^ z_MMmRsE+G&cIT&aQD}X)^BuoN3^xj!F#nfEK!uZveaDHLnsM5X05KV8xGbCU^pMbw z9&K_wY-ZM#mHD-leY8Sbn8nJre5Uz@mCDe%r8ZNEt*~dT{c^7W5wB?6>%7Lt&`Uan zI691M5f#1)!u z$t@hGXOCvz;Ziul;~{Tuqo=^^

~4cHF1!I9K= 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 literal 62088 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ž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%0A;TdUAE1xbNI4z8Ww0Io_K z1ef2rHi98x35F++yfjt{;P#%1Uk)Fx0bv0+2aWdb$e(SmTLI>YxwfFMuaDabN~OqU zb=z6NBKrg^my+SN{gs9qbd%c8<9on*YAbPefatrDPyzr!=+(jie{;R)*o2c&G3liI4(SZ58oeK0f`4@StK|{ zW&^@D0xpphl#`nw*^!E*iV!3xAXBax)}4d==snm?nh@U|u3Rm}UqsKCAFeGGtm``d za(seZ(0=(0E&?(;22j}VAs;l}DU4uAA+$;X2K44=h&~eC!WJvA@r~=7Qq}h=eI@1Zm&A`z_Y!lMR2b3HGdf?k#N0Q6wC9B~esEvmTg+_aj zgS~w_Y*7eD1WEtFVnnuYNTiRBjj;k1+VjN=BD_CZzqA;vK+?@;hmlN(!wTb%Mbhhg ze5{Pe_}?gfWCM8lQxh8s_420{RuszrrxF(wT3-GC=a;gZl9U3}Te`I`t|FI4R!ZUb Kv|E2X{eJ)>7MJ?~ diff --git a/timing/timing_comparison.md b/timing/timing_comparison.md index cbbd0ae..9c09545 100644 --- a/timing/timing_comparison.md +++ b/timing/timing_comparison.md @@ -27,3 +27,6 @@ local_efficiency tournament is_reachable ![alt text](heatmap_is_reachable_timing.png) + +all_pairs_bellman_ford_path +![alt text](heatmap_all_pairs_bellman_ford_path_timing.png) diff --git a/timing/timing_individual_function.py b/timing/timing_individual_function.py index 82bf2a9..811e029 100644 --- a/timing/timing_individual_function.py +++ b/timing/timing_individual_function.py @@ -1,4 +1,6 @@ import time +import random +import types import networkx as nx import pandas as pd @@ -11,68 +13,74 @@ heatmapDF = pd.DataFrame() number_of_nodes_list = [10, 50, 100, 300, 500] pList = [1, 0.8, 0.6, 0.4, 0.2] -funcs = [nx.betweenness_centrality, nx.all_pairs_bellman_ford_path] -for currFun in funcs: - for i in range(0, len(pList)): - p = pList[i] - for j in range(0, len(number_of_nodes_list)): - num = number_of_nodes_list[j] +currFun = nx.all_pairs_bellman_ford_path +for i in range(0, len(pList)): + p = pList[i] + for j in range(0, len(number_of_nodes_list)): + num = number_of_nodes_list[j] + + # create original and parallel graphs + G = nx.fast_gnp_random_graph(num, p, directed=False) + + # for weighted graphs + for u, v in G.edges(): + G[u][v]['weight'] = random.random() + + H = nx_parallel.ParallelGraph(G) - # create original and parallel graphs - G = nx.fast_gnp_random_graph(num, p, directed=False) - H = nx_parallel.ParallelGraph(G) + # time both versions and update heatmapDF + t1 = time.time() + c = currFun(H) + if type(c)==types.GeneratorType: d = dict(c) + t2 = time.time() + parallelTime = t2 - t1 + t1 = time.time() + c = currFun(G) + if type(c)==types.GeneratorType: d = dict(c) + t2 = time.time() + stdTime = t2 - t1 + timesFaster = stdTime / parallelTime + heatmapDF.at[j, i] = timesFaster + print("Finished " + str(currFun)) - # time both versions and update heatmapDF - t1 = time.time() - c = currFun(H) - t2 = time.time() - parallelTime = t2 - t1 - t1 = time.time() - c = currFun(G) - t2 = time.time() - stdTime = t2 - t1 - timesFaster = stdTime / parallelTime - heatmapDF.at[j, i] = timesFaster - print("Finished " + str(currFun)) +# Code to create for row of heatmap specifically for tournaments +# for i in range(0, len(pList)): +# p = pList[i] +# for j in range(0, len(number_of_nodes_list)): +# num = number_of_nodes_list[j] +# G = nx.tournament.random_tournament(num) +# H = nx_parallel.ParallelDiGraph(G) +# t1 = time.time() +# c = nx.tournament.is_reachable(H, 1, num) +# t2 = time.time() +# parallelTime = t2-t1 +# t1 = time.time() +# c = nx.tournament.is_reachable(G, 1, num) +# t2 = time.time() +# stdTime = t2-t1 +# timesFaster = stdTime/parallelTime +# heatmapDF.at[j, 3] = timesFaster - # Code to create for row of heatmap specifically for tournaments - # for i in range(0, len(pList)): - # p = pList[i] - # for j in range(0, len(number_of_nodes_list)): - # num = number_of_nodes_list[j] - # G = nx.tournament.random_tournament(num) - # H = nx_parallel.ParallelDiGraph(G) - # t1 = time.time() - # c = nx.tournament.is_reachable(H, 1, num) - # t2 = time.time() - # parallelTime = t2-t1 - # t1 = time.time() - # c = nx.tournament.is_reachable(G, 1, num) - # t2 = time.time() - # stdTime = t2-t1 - # timesFaster = stdTime/parallelTime - # heatmapDF.at[j, 3] = timesFaster +# plotting the heatmap with numbers and a green color scheme +plt.figure(figsize=(20, 4)) +hm = sns.heatmap(data=heatmapDF.T, annot=True, cmap="Greens", cbar=True) - # plotting the heatmap with numbers and a green color scheme - plt.figure(figsize=(20, 4)) - hm = sns.heatmap(data=heatmapDF.T, annot=True, cmap="Greens", cbar=True) +# Remove the tick labels on both axes +hm.set_yticklabels(pList) - # Remove the tick labels on both axes - hm.set_yticklabels(pList) +# Adding x-axis labels +hm.set_xticklabels(number_of_nodes_list) - # Adding x-axis labels - hm.set_xticklabels(number_of_nodes_list) +# Rotating the x-axis labels for better readability (optional) +plt.xticks(rotation=45) +plt.yticks(rotation=20) +plt.title( + "Small Scale Demo: Times Speedups of " + currFun.__name__ + " compared to networkx" +) +plt.xlabel("Number of Vertices") +plt.ylabel("Edge Probability") +print(currFun.__name__) - # Rotating the x-axis labels for better readability (optional) - plt.xticks(rotation=45) - plt.yticks(rotation=20) - plt.title( - "Small Scale Demo: Times Speedups of " + currFun.__name__ + " compared to networkx" - ) - plt.xlabel("Number of Vertices") - plt.ylabel("Edge Probability") - print(currFun.__name__) - - # displaying the plotted heatmap - plt.tight_layout() - plt.savefig("timing/" + "heatmap_" + currFun.__name__ + "_timing.png") +# displaying the plotted heatmap +plt.tight_layout() +plt.savefig("timing/" + "heatmap_" + currFun.__name__ + "_timing.png") From f8f512fe00997781c78ecf5fc420d0551a4dfcfb Mon Sep 17 00:00:00 2001 From: Schefflera-Arboricola <1509aditi@gmail.com> Date: Fri, 3 Nov 2023 19:02:11 +0530 Subject: [PATCH 3/6] updated all_pairs_bellman_ford_path and timing_individual_function.py --- .../algorithms/shortest_paths/weighted.py | 8 ++----- ...map_all_pairs_bellman_ford_path_timing.png | Bin 46536 -> 46261 bytes timing/timing_individual_function.py | 20 +++++++----------- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/nx_parallel/algorithms/shortest_paths/weighted.py b/nx_parallel/algorithms/shortest_paths/weighted.py index 8725a6e..fbf0b3e 100644 --- a/nx_parallel/algorithms/shortest_paths/weighted.py +++ b/nx_parallel/algorithms/shortest_paths/weighted.py @@ -40,7 +40,7 @@ def all_pairs_bellman_ford_path(G, weight="weight"): Distances are calculated as sums of weighted edges traversed. """ - def _calculate_shortest_paths_subset(G, source, weight): + def _calculate_shortest_paths_subset(source): return (source, single_source_bellman_ford_path(G, source, weight=weight)) if hasattr(G, "graph_object"): @@ -51,11 +51,7 @@ def _calculate_shortest_paths_subset(G, source, weight): total_cores = nxp.cpu_count() paths = Parallel(n_jobs=total_cores, return_as="generator")( - delayed(_calculate_shortest_paths_subset)( - G, - source, - weight=weight - ) + delayed(_calculate_shortest_paths_subset)(source) for source in nodes ) return paths diff --git a/timing/heatmap_all_pairs_bellman_ford_path_timing.png b/timing/heatmap_all_pairs_bellman_ford_path_timing.png index 7049e637fedc6a5b40aeecbf80c1c454d33b3729..3c78818caa4e9117ed5486378becbdc72ac2374b 100644 GIT binary patch literal 46261 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

656MUELW~*-18-G@5)N7o8R}*t8|^t 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

qifLS||O_B~!CDbC9WapPMA8$SPpLV~)c3 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

~4cHF1!I9K= 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 diff --git a/timing/timing_individual_function.py b/timing/timing_individual_function.py index 811e029..44bb583 100644 --- a/timing/timing_individual_function.py +++ b/timing/timing_individual_function.py @@ -14,15 +14,13 @@ number_of_nodes_list = [10, 50, 100, 300, 500] pList = [1, 0.8, 0.6, 0.4, 0.2] currFun = nx.all_pairs_bellman_ford_path -for i in range(0, len(pList)): - p = pList[i] - for j in range(0, len(number_of_nodes_list)): - num = number_of_nodes_list[j] - +for p in pList: + for num in number_of_nodes_list: # create original and parallel graphs - G = nx.fast_gnp_random_graph(num, p, directed=False) + G = nx.fast_gnp_random_graph(num, p, seed=42, directed=False) # for weighted graphs + random.seed(42) for u, v in G.edges(): G[u][v]['weight'] = random.random() @@ -40,14 +38,12 @@ t2 = time.time() stdTime = t2 - t1 timesFaster = stdTime / parallelTime - heatmapDF.at[j, i] = timesFaster + heatmapDF.at[num, p] = timesFaster print("Finished " + str(currFun)) # Code to create for row of heatmap specifically for tournaments -# for i in range(0, len(pList)): -# p = pList[i] -# for j in range(0, len(number_of_nodes_list)): -# num = number_of_nodes_list[j] +# for p in pList: +# for num in number_of_nodes_list): # G = nx.tournament.random_tournament(num) # H = nx_parallel.ParallelDiGraph(G) # t1 = time.time() @@ -59,7 +55,7 @@ # t2 = time.time() # stdTime = t2-t1 # timesFaster = stdTime/parallelTime -# heatmapDF.at[j, 3] = timesFaster +# heatmapDF.at[num, 3] = timesFaster # plotting the heatmap with numbers and a green color scheme plt.figure(figsize=(20, 4)) From 6c5e0d457a6e242d1b6315016e1c914e91594bd8 Mon Sep 17 00:00:00 2001 From: Schefflera-Arboricola <1509aditi@gmail.com> Date: Sat, 4 Nov 2023 12:14:40 +0530 Subject: [PATCH 4/6] added examples to all_pairs_bellman_ford_path() --- .../algorithms/shortest_paths/weighted.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/nx_parallel/algorithms/shortest_paths/weighted.py b/nx_parallel/algorithms/shortest_paths/weighted.py index fbf0b3e..2184303 100644 --- a/nx_parallel/algorithms/shortest_paths/weighted.py +++ b/nx_parallel/algorithms/shortest_paths/weighted.py @@ -39,6 +39,22 @@ def all_pairs_bellman_ford_path(G, weight="weight"): Edge weight attributes must be numerical. Distances are calculated as sums of weighted edges traversed. + Examples + -------- + >>> import networkx as nx + >>> G = nx.Graph() + >>> G.add_weighted_edges_from([(1, 0, 1), (1, 2, 1), (2, 0, 3)]) + >>> path = dict(nx.all_pairs_bellman_ford_path(G)) + >>> path[0][2] + [0, 1, 2] + >>> parallel_path = dict(nx.all_pairs_bellman_ford_path(G, backend="parallel")) + >>> parallel_path[0][2] + [0, 1, 2] + >>> import nx_parallel as nxp + >>> parallel_path_ = dict(nx.all_pairs_bellman_ford_path(nxp.ParallelGraph(G))) + >>> parallel_path_ + {1: {1: [1], 0: [1, 0], 2: [1, 2]}, 0: {0: [0], 1: [0, 1], 2: [0, 1, 2]}, 2: {2: [2], 1: [2, 1], 0: [2, 1, 0]}} + """ def _calculate_shortest_paths_subset(source): return (source, single_source_bellman_ford_path(G, source, weight=weight)) From 2abd4341f5eb69f8c8406a71ec66a6c4fc085dbd Mon Sep 17 00:00:00 2001 From: Schefflera-Arboricola <1509aditi@gmail.com> Date: Sun, 26 Nov 2023 18:12:46 +0530 Subject: [PATCH 5/6] applied black and modified doc in weighted.py --- nx_parallel/algorithms/shortest_paths/weighted.py | 13 +++++-------- nx_parallel/interface.py | 5 ++--- timing/timing_individual_function.py | 12 +++++++----- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/nx_parallel/algorithms/shortest_paths/weighted.py b/nx_parallel/algorithms/shortest_paths/weighted.py index 2184303..5a2b143 100644 --- a/nx_parallel/algorithms/shortest_paths/weighted.py +++ b/nx_parallel/algorithms/shortest_paths/weighted.py @@ -1,7 +1,5 @@ from joblib import Parallel, delayed -from networkx.algorithms.shortest_paths.weighted import ( - single_source_bellman_ford_path -) +from networkx.algorithms.shortest_paths.weighted import single_source_bellman_ford_path import nx_parallel as nxp @@ -41,7 +39,6 @@ def all_pairs_bellman_ford_path(G, weight="weight"): Examples -------- - >>> import networkx as nx >>> G = nx.Graph() >>> G.add_weighted_edges_from([(1, 0, 1), (1, 2, 1), (2, 0, 3)]) >>> path = dict(nx.all_pairs_bellman_ford_path(G)) @@ -56,6 +53,7 @@ def all_pairs_bellman_ford_path(G, weight="weight"): {1: {1: [1], 0: [1, 0], 2: [1, 2]}, 0: {0: [0], 1: [0, 1], 2: [0, 1, 2]}, 2: {2: [2], 1: [2, 1], 0: [2, 1, 0]}} """ + def _calculate_shortest_paths_subset(source): return (source, single_source_bellman_ford_path(G, source, weight=weight)) @@ -65,9 +63,8 @@ def _calculate_shortest_paths_subset(source): nodes = G.nodes total_cores = nxp.cpu_count() - + paths = Parallel(n_jobs=total_cores, return_as="generator")( - delayed(_calculate_shortest_paths_subset)(source) - for source in nodes - ) + delayed(_calculate_shortest_paths_subset)(source) for source in nodes + ) return paths diff --git a/nx_parallel/interface.py b/nx_parallel/interface.py index 736f3c0..38b090d 100644 --- a/nx_parallel/interface.py +++ b/nx_parallel/interface.py @@ -1,8 +1,6 @@ from nx_parallel.algorithms.centrality.betweenness import betweenness_centrality from nx_parallel.algorithms.shortest_paths.weighted import all_pairs_bellman_ford_path -from nx_parallel.algorithms.efficiency_measures import ( - local_efficiency, -) +from nx_parallel.algorithms.efficiency_measures import local_efficiency from nx_parallel.algorithms.isolate import number_of_isolates from nx_parallel.algorithms.tournament import ( is_reachable, @@ -25,6 +23,7 @@ def is_multigraph(self): def is_directed(self): return self.graph_object.is_directed() + class Dispatcher: # ============================= diff --git a/timing/timing_individual_function.py b/timing/timing_individual_function.py index 44bb583..7c14681 100644 --- a/timing/timing_individual_function.py +++ b/timing/timing_individual_function.py @@ -18,23 +18,25 @@ for num in number_of_nodes_list: # create original and parallel graphs G = nx.fast_gnp_random_graph(num, p, seed=42, directed=False) - + # for weighted graphs random.seed(42) for u, v in G.edges(): - G[u][v]['weight'] = random.random() - + G[u][v]["weight"] = random.random() + H = nx_parallel.ParallelGraph(G) # time both versions and update heatmapDF t1 = time.time() c = currFun(H) - if type(c)==types.GeneratorType: d = dict(c) + if type(c) == types.GeneratorType: + d = dict(c) t2 = time.time() parallelTime = t2 - t1 t1 = time.time() c = currFun(G) - if type(c)==types.GeneratorType: d = dict(c) + if type(c) == types.GeneratorType: + d = dict(c) t2 = time.time() stdTime = t2 - t1 timesFaster = stdTime / parallelTime From aaa36b71683e2026ec67eeea1e7e678c041819f8 Mon Sep 17 00:00:00 2001 From: Schefflera-Arboricola <1509aditi@gmail.com> Date: Sun, 26 Nov 2023 18:23:35 +0530 Subject: [PATCH 6/6] modified doc in weighted.py --- nx_parallel/algorithms/shortest_paths/weighted.py | 1 + 1 file changed, 1 insertion(+) diff --git a/nx_parallel/algorithms/shortest_paths/weighted.py b/nx_parallel/algorithms/shortest_paths/weighted.py index 5a2b143..68d4559 100644 --- a/nx_parallel/algorithms/shortest_paths/weighted.py +++ b/nx_parallel/algorithms/shortest_paths/weighted.py @@ -39,6 +39,7 @@ def all_pairs_bellman_ford_path(G, weight="weight"): Examples -------- + >>> import networkx as nx >>> G = nx.Graph() >>> G.add_weighted_edges_from([(1, 0, 1), (1, 2, 1), (2, 0, 3)]) >>> path = dict(nx.all_pairs_bellman_ford_path(G))

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