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 64 65 66 67 68 69 70 71 72 73
|
#!/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(15):
for node in g.nodes():
if g.in_degree(node) == 0:
g.remove_node(node)
print(nx.info(g))
#print nx.is_directed_acyclic_graph(g)
#print list(nx.simple_cycles(g))
degree_sequence=sorted(list(nx.degree(g).values()),reverse=True)
print(Counter(degree_sequence))
#print nx.diameter(g)
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))
print([len(item) for item in nx.weakly_connected_components(g)])
nx.write_graphml(g, filename.split('.')[0]+'.graphml')
with open(sys.argv[2],'w') as f:
for edge in nx.dfs_edges(g):
f.write('{} {}\n'.format(edge[0],edge[1]))
f.close()
|