1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
#!/usr/bin/python3
import networkx as nx
import sys
from collections import Counter
def longest_path(G):
dist = {} # stores [node, distance] pair
for node in nx.topological_sort(G):
# pairs of dist,node for all incoming edges
pairs = [(dist[v][0]+1,v) for v in G.pred[node]]
if pairs:
dist[node] = max(pairs)
else:
dist[node] = (0, node)
node,(length,_) = max(list(dist.items()), key=lambda x:x[1])
path = []
while length > 0:
path.append(node)
length,node = dist[node]
return list(reversed(path))
filename = sys.argv[1]
g = nx.DiGraph()
with open(filename,'r') as f:
for line in f:
g.add_edge(*(line.strip().split('->')))
print(nx.info(g))
degree_sequence=sorted(list(nx.degree(g).values()),reverse=True)
print(Counter(degree_sequence))
for i in range(7):
for node in g.nodes():
if g.in_degree(node) == 0:
g.remove_node(node)
print(nx.info(g))
degree_sequence=sorted(list(nx.degree(g).values()),reverse=True)
print(Counter(degree_sequence))
def rev(string):
if string[-1] == '\'':
return string[:-1]
else:
return string+'\''
for edge in g.edges():
g.add_edge(rev(edge[1]), rev(edge[0]))
#print edge
#print rev(edge[1]), rev(edge[0])
print(nx.info(g))
nx.write_graphml(g, filename.split('.')[0]+'.graphml')
#print(list(nx.dfs_edges(g,sys.argv[2])))
#p=nx.shortest_path(g)
|