Source code for spydrnet_physical.util.connectivity_graph
importnetworkxasnximportnumpyasnpimportos
[docs]defprepare_graph_from_nx(graph):""" This definition converts networkx graph to xadj, adjncy, eweights data structures """xadj=[0]adjncy=[]eweights=[]nodes=list(range(1,1+len(graph)))forrowingraph:adj=map(lambdax:(x[0]ifbool(x[1])else0,int(x[1])),zip(nodes,row))adj=list(filter(lambdax:bool(x[0]),adj))adjncy+=[a[0]-1forainadj]eweights+=[a[1]forainadj]xadj.append(len(adjncy))returnxadj,adjncy,eweights
[docs]defwrite_metis_graph(graph,eweights=False,vweights=False,filename=None):""" This definition write the given netowrkx graph in CSR format for metis """lines=[]lines+=[f"{len(graph)}{np.count_nonzero(graph)//2}"+" 0"+('1'ifvweightselse'0')+('1'ifeweightselse'0')]nodes=list(range(1,1+len(graph)))forindx,rowinenumerate(graph):line=map(lambdax:(x[0]ifbool(x[1])else0,int(x[1])),zip(nodes,row))line=list(filter(lambdax:bool(x[0]),line))ifeweights:lines.append(" ".join([str(e[0])+" "+str(e[1])foreinline]))else:lines.append(" ".join([str(e[0])foreinline]))ifvweights:lines[-1]=f"{vweights.get(indx,1)} "+lines[-1]iffilename:withopen(filename,'w')asfp:fp.write("% Auto-generated\n")fp.write("\n".join(lines))returnlines