# HG changeset patch # User bernhardlutz # Date 1393595864 18000 # Node ID fe01a054a6b25deefdbad1bdf0d5bdb52dfb2112 Uploaded diff -r 000000000000 -r fe01a054a6b2 3_molecules.gspan --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3_molecules.gspan Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,129 @@ +t # id 1 +v 0 O +v 1 O +v 2 O +v 3 O +v 4 C +v 5 C +v 6 C +v 7 C +v 8 C +v 9 C +v 10 C +v 11 C +v 12 C +v 13 H +v 14 H +v 15 H +v 16 H +v 17 H +v 18 H +v 19 H +v 20 H +e 0 4 1 +e 0 11 1 +e 1 10 1 +e 1 20 1 +e 2 10 2 +e 3 11 2 +e 4 5 1 +e 4 6 2 +e 5 7 2 +e 5 10 1 +e 6 8 1 +e 6 13 1 +e 7 9 1 +e 7 14 1 +e 8 9 2 +e 8 15 1 +e 9 16 1 +e 11 12 1 +e 12 17 1 +e 12 18 1 +e 12 19 1 +t # id 2 +v 0 O +v 1 O +v 2 O +v 3 O +v 4 C +v 5 C +v 6 C +v 7 C +v 8 C +v 9 C +v 10 C +v 11 C +v 12 C +v 13 H +v 14 H +v 15 H +v 16 H +v 17 H +v 18 H +v 19 H +v 20 H +e 0 4 1 +e 0 11 1 +e 1 10 1 +e 1 20 1 +e 2 10 2 +e 3 11 2 +e 4 5 1 +e 4 6 2 +e 5 7 2 +e 5 10 1 +e 6 8 1 +e 6 13 1 +e 7 9 1 +e 7 14 1 +e 8 9 2 +e 8 15 1 +e 9 16 1 +e 11 12 1 +e 12 17 1 +e 12 18 1 +e 12 19 1 +t # id 3 +v 0 O +v 1 O +v 2 O +v 3 O +v 4 C +v 5 C +v 6 C +v 7 C +v 8 C +v 9 C +v 10 C +v 11 C +v 12 C +v 13 H +v 14 H +v 15 H +v 16 H +v 17 H +v 18 H +v 19 H +v 20 H +e 0 4 1 +e 0 11 1 +e 1 10 1 +e 1 20 1 +e 2 10 2 +e 3 11 2 +e 4 5 1 +e 4 6 2 +e 5 7 2 +e 5 10 1 +e 6 8 1 +e 6 13 1 +e 7 9 1 +e 7 14 1 +e 8 9 2 +e 8 15 1 +e 9 16 1 +e 11 12 1 +e 12 17 1 +e 12 18 1 +e 12 19 1 diff -r 000000000000 -r fe01a054a6b2 convert_graph.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/convert_graph.py Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,129 @@ +#!/usr/bin/env python +# Aufruf convert_graph.py --infile datei --informat typ --outfile ausgabedatei --outformat ausgabetyp + +import sys, os +import networkx as nx +import argparse +import json + +from xgmml_networkx import XGMMLParserHelper, XGMMLWriter +from networkx.readwrite import json_graph + +#supported graph_types +graph_types = ["gml", "yaml", "gspan", "xgmml", "gexf", "graphml", "json", "pajek"] + +func_dic_read= {'gml': nx.read_gml, 'yaml':nx.read_yaml, 'gexf': nx.read_gexf, + 'graphml': nx.read_graphml, 'pajek': nx.read_pajek} + +func_dic_write= {'gml': nx.write_gml, 'yaml':nx.write_yaml, 'gexf': nx.write_gexf, + 'graphml': nx.write_graphml, 'pajek': nx.write_pajek} + +#completely supported types by networkx +completely_supported_types = ["gml", "gexf", "yaml", "graphml", "pajek"] + +def read_gspan(infile): + G = nx.Graph() + idoffset=0 + old_id_start=0 + for line in infile: + line_split=line.split(" ") + if line[0] == "v": + G.add_node(idoffset, label=line_split[2].strip()) + idoffset+=1 + elif line[0] == "e": + G.add_edge(old_id_start+int(line_split[1]), old_id_start+int(line_split[2]), label=line_split[3].strip()) + elif line[0] == "t": + # its a new subgraph + #idoffset*=1 + old_id_start=idoffset + #print(nx.is_connected(G)) + return G + + +def write_gspan(graph, outfile): + # get all subgraphs only works with undirected + subgraphs=nx.connected_components(graph.to_undirected()) + id_count=1 + node_count=0 + #get labels + label_dic=nx.get_node_attributes(graph,'label') + for s in subgraphs: + node_count_tree=0 + node_dict={} + outfile.write("t # id "+str(id_count)+"\n") + # for every node in subgraph + for v in sorted(s): + # node id restart from 0 for every sub graph + node_dict[v]=node_count_tree + outfile.write("v "+str(node_count_tree)+" "+label_dic[v]+" \n") + node_count_tree+=1 + node_count+=1 + + # all edges adjacent to a node of s + edges=nx.edges(graph, s) + for e in sorted(edges): + #print(graph[e[0]][e[1]]) + outfile.write("e "+str(node_dict[e[0]])+" "+str(node_dict[e[1]])+" "+graph[e[0]][e[1]]['label']+"\n") + + id_count+=1 +def read_json(file): + json_string=file.read() + print(json_string) + json_dict=json.loads(json_string) + print(json_dict) + return nx.Graph() + +def write_json(graph, outfile): + json_dict=json_graph.node_link_data(graph) + json_string=json.dumbs(json_dict) + outfile.write(json_string) + print("did it") + +def main( args ): + + if args.informat not in graph_types: + print "EXCEPTION COMPUTER EXPLODING" + # everything networkx can do by itself ;) + elif args.informat in completely_supported_types: + function = func_dic_read[args.informat] + graph = function(args.infile) + elif args.informat == "gspan": + graph = read_gspan(args.infile) + elif args.informat == "json": + graph = read_json(args.infile) + elif args.informat == "xgmml": + xgmml=XGMMLParserHelper() + xgmml.parseFile(args.infile) + graph=xgmml.graph() + + + + if args.outformat in completely_supported_types: + function = func_dic_write[args.outformat] + function(graph, args.outfile) + elif args.outformat == "gspan": + write_gspan(graph, args.outfile) + elif args.outformat == "json": + write_json(graph, args.outfile) + elif args.outformat == "xgmml": + #xgmml=XGMMLParserHelper(graph) + #xgmml.parseFile(open(sys.argv[1])) + a=XGMMLWriter(args.outfile, graph, "MyGraph") + +if __name__ == "__main__": + + parser = argparse.ArgumentParser() + parser.add_argument('--infile', type=argparse.FileType('r'), + help="Specify the input file representing a graph") + parser.add_argument('--outfile', type=argparse.FileType('w'), + help="Specify one output file") + parser.add_argument('--informat', type=str, + help="Specify the format of the input graph", choices = graph_types) + parser.add_argument('--outformat', type=str, + help="Specify the format of the output graph", choices = graph_types) + if len(sys.argv) < 8: + print "Too few arguments..." + parser.print_help() + exit(1) + args = parser.parse_args() + main( args ) diff -r 000000000000 -r fe01a054a6b2 convert_graph.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/convert_graph.xml Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,44 @@ + + Convert between different Graphformats + echo "0.1.0" + + GRAPHCONVERTER_SCRIPT_PATH + + + python \$GRAPHCONVERTER_SCRIPT_PATH/convert_graph.py --infile $inputfile --informat $informat --outfile $outfile --outformat $outformat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +**What it does** + +This tool converts a file representing a graph into another format. + + diff -r 000000000000 -r fe01a054a6b2 deps.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deps.txt Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,1 @@ +libyaml->pyyaml diff -r 000000000000 -r fe01a054a6b2 gspantest2 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gspantest2 Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,18 @@ +t # id 1 +v 0 O +v 3 O +e 0 3 1 +t # id 2 +v 0 O +v 1 O +v 2 O +v 3 O +e 0 1 1 +e 1 2 1 +e 1 3 1 + +t # id 3 +v 0 O +v 1 O +e 0 1 1 + diff -r 000000000000 -r fe01a054a6b2 jsonex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jsonex Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,19 @@ +{ + "id": "root", + "children": [{ + id: "n1", + labels: [ { text: "n1" } ], + width: 100, + height: 100, + },{ + id: "n2", + labels: [ { text: "n2" } ], + width: 100, + height: 50 + }], + "edges": [{ + id: "e1", + source: "n1", + target: "n2" + }] +} diff -r 000000000000 -r fe01a054a6b2 jsonwiki --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jsonwiki Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,16 @@ +{ + "Herausgeber": "Xema", + "Nummer": "1234-5678-9012-3456", + "Deckung": 2e+6, + "Währung": "EURO", + "Inhaber": { + "Name": "Mustermann", + "Vorname": "Max", + "männlich": true, + "Hobbys": [ "Reiten", "Golfen", "Lesen" ], + "Alter": 42, + "Kinder": [], + "Partner": null + } +} + diff -r 000000000000 -r fe01a054a6b2 neu.gml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/neu.gml Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,18 @@ +graph [ + directed 1 + edge_default [ + ] + node [ + id 0 + label "Word" + ] + node [ + id 1 + label "Hello" + ] + edge [ + source 1 + target 0 + id "0" + ] +] diff -r 000000000000 -r fe01a054a6b2 neu.xgmml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/neu.xgmml Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 000000000000 -r fe01a054a6b2 neu.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/neu.xml Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,6 @@ + + + + + + diff -r 000000000000 -r fe01a054a6b2 neu2.gml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/neu2.gml Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,39 @@ +graph [ + directed 1 + node [ + id 1 + label "A" + weiteresAttribut "42" + ] + node [ + id 3 + label "C" + weiteresAttribut "44" + ] + node [ + id 2 + label "B" + weiteresAttribut "43" + ] + edge [ + source 1 + target 2 + weiteresAttribut "44" + id "3" + label "Kante AB" + ] + edge [ + source 3 + target 1 + weiteresAttribut "44" + id "3" + label "Kante CA" + ] + edge [ + source 2 + target 3 + weiteresAttribut "44" + id "3" + label "Kante BC" + ] +] diff -r 000000000000 -r fe01a054a6b2 test-data/bsp_graph.gml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/bsp_graph.gml Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,37 @@ +graph [ + comment "Das ist ein Beispielgraph." + directed 1 + id 42 + label "Graph" + node [ + id 1 + label "A" + weiteresAttribut 42 + ] + node [ + id 2 + label "B" + weiteresAttribut 43 + ] + node [ + id 3 + label "C" + weiteresAttribut 44 + ] + edge [ + source 1 + target 2 + label "Kante AB" + ] + edge [ + source 2 + target 3 + label "Kante BC" + ] + edge [ + source 3 + target 1 + label "Kante CA" + ] +] + diff -r 000000000000 -r fe01a054a6b2 test-data/bsp_graph.gml~ --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/bsp_graph.gml~ Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,49 @@ + Creator "yFiles" + Version 2.2 + graph + [ hierarchic 1 + directed 1 + node + [ id 0 + graphics + [ x 200.0 + y 0.0 + ] + LabelGraphics + [ text "January" ] + ] + node + [ id 1 + graphics + [ x 425.0 + y 75.0 + ] + LabelGraphics + [ text "December" ] + ] + edge + [ source 1 + target 0 + graphics + [ Line + [ point + [ x 425.0 + y 75.0 + ] + point + [ x 425.0 + y 0.0 + ] + point + [ x 200.0 + y 0.0 + ] + ] + ] + LabelGraphics + [ text "Happy New Year!" + model "six_pos" + position "head" + ] + ] + ] diff -r 000000000000 -r fe01a054a6b2 test-data/graph2.gexf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/graph2.gexf Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,16 @@ + + + + Gexf.net + A hello world! file + + + + + + + + + + + diff -r 000000000000 -r fe01a054a6b2 test.gexf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test.gexf Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,389 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 000000000000 -r fe01a054a6b2 test.gml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test.gml Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,569 @@ +graph [ + node [ + id 0 + label "O" + ] + node [ + id 1 + label "O" + ] + node [ + id 2 + label "O" + ] + node [ + id 3 + label "O" + ] + node [ + id 4 + label "C" + ] + node [ + id 5 + label "C" + ] + node [ + id 6 + label "C" + ] + node [ + id 7 + label "C" + ] + node [ + id 8 + label "C" + ] + node [ + id 9 + label "C" + ] + node [ + id 10 + label "C" + ] + node [ + id 11 + label "C" + ] + node [ + id 12 + label "C" + ] + node [ + id 13 + label "H" + ] + node [ + id 14 + label "H" + ] + node [ + id 15 + label "H" + ] + node [ + id 16 + label "H" + ] + node [ + id 17 + label "H" + ] + node [ + id 18 + label "H" + ] + node [ + id 19 + label "H" + ] + node [ + id 20 + label "H" + ] + node [ + id 21 + label "O" + ] + node [ + id 22 + label "O" + ] + node [ + id 23 + label "O" + ] + node [ + id 24 + label "O" + ] + node [ + id 25 + label "C" + ] + node [ + id 26 + label "C" + ] + node [ + id 27 + label "C" + ] + node [ + id 28 + label "C" + ] + node [ + id 29 + label "C" + ] + node [ + id 30 + label "C" + ] + node [ + id 31 + label "C" + ] + node [ + id 32 + label "C" + ] + node [ + id 33 + label "C" + ] + node [ + id 34 + label "H" + ] + node [ + id 35 + label "H" + ] + node [ + id 36 + label "H" + ] + node [ + id 37 + label "H" + ] + node [ + id 38 + label "H" + ] + node [ + id 39 + label "H" + ] + node [ + id 40 + label "H" + ] + node [ + id 41 + label "H" + ] + node [ + id 42 + label "O" + ] + node [ + id 43 + label "O" + ] + node [ + id 44 + label "O" + ] + node [ + id 45 + label "O" + ] + node [ + id 46 + label "C" + ] + node [ + id 47 + label "C" + ] + node [ + id 48 + label "C" + ] + node [ + id 49 + label "C" + ] + node [ + id 50 + label "C" + ] + node [ + id 51 + label "C" + ] + node [ + id 52 + label "C" + ] + node [ + id 53 + label "C" + ] + node [ + id 54 + label "C" + ] + node [ + id 55 + label "H" + ] + node [ + id 56 + label "H" + ] + node [ + id 57 + label "H" + ] + node [ + id 58 + label "H" + ] + node [ + id 59 + label "H" + ] + node [ + id 60 + label "H" + ] + node [ + id 61 + label "H" + ] + node [ + id 62 + label "H" + ] + edge [ + source 0 + target 11 + label "1" + ] + edge [ + source 0 + target 4 + label "1" + ] + edge [ + source 1 + target 10 + label "1" + ] + edge [ + source 1 + target 20 + label "1" + ] + edge [ + source 2 + target 10 + label "2" + ] + edge [ + source 3 + target 11 + label "2" + ] + edge [ + source 4 + target 5 + label "1" + ] + edge [ + source 4 + target 6 + label "2" + ] + edge [ + source 5 + target 10 + label "1" + ] + edge [ + source 5 + target 7 + label "2" + ] + edge [ + source 6 + target 8 + label "1" + ] + edge [ + source 6 + target 13 + label "1" + ] + edge [ + source 7 + target 9 + label "1" + ] + edge [ + source 7 + target 14 + label "1" + ] + edge [ + source 8 + target 9 + label "2" + ] + edge [ + source 8 + target 15 + label "1" + ] + edge [ + source 9 + target 16 + label "1" + ] + edge [ + source 11 + target 12 + label "1" + ] + edge [ + source 12 + target 19 + label "1" + ] + edge [ + source 12 + target 17 + label "1" + ] + edge [ + source 12 + target 18 + label "1" + ] + edge [ + source 21 + target 32 + label "1" + ] + edge [ + source 21 + target 25 + label "1" + ] + edge [ + source 22 + target 41 + label "1" + ] + edge [ + source 22 + target 31 + label "1" + ] + edge [ + source 23 + target 31 + label "2" + ] + edge [ + source 24 + target 32 + label "2" + ] + edge [ + source 25 + target 26 + label "1" + ] + edge [ + source 25 + target 27 + label "2" + ] + edge [ + source 26 + target 28 + label "2" + ] + edge [ + source 26 + target 31 + label "1" + ] + edge [ + source 27 + target 34 + label "1" + ] + edge [ + source 27 + target 29 + label "1" + ] + edge [ + source 28 + target 35 + label "1" + ] + edge [ + source 28 + target 30 + label "1" + ] + edge [ + source 29 + target 36 + label "1" + ] + edge [ + source 29 + target 30 + label "2" + ] + edge [ + source 30 + target 37 + label "1" + ] + edge [ + source 32 + target 33 + label "1" + ] + edge [ + source 33 + target 40 + label "1" + ] + edge [ + source 33 + target 38 + label "1" + ] + edge [ + source 33 + target 39 + label "1" + ] + edge [ + source 42 + target 53 + label "1" + ] + edge [ + source 42 + target 46 + label "1" + ] + edge [ + source 43 + target 52 + label "1" + ] + edge [ + source 43 + target 62 + label "1" + ] + edge [ + source 44 + target 52 + label "2" + ] + edge [ + source 45 + target 53 + label "2" + ] + edge [ + source 46 + target 48 + label "2" + ] + edge [ + source 46 + target 47 + label "1" + ] + edge [ + source 47 + target 49 + label "2" + ] + edge [ + source 47 + target 52 + label "1" + ] + edge [ + source 48 + target 50 + label "1" + ] + edge [ + source 48 + target 55 + label "1" + ] + edge [ + source 49 + target 56 + label "1" + ] + edge [ + source 49 + target 51 + label "1" + ] + edge [ + source 50 + target 57 + label "1" + ] + edge [ + source 50 + target 51 + label "2" + ] + edge [ + source 51 + target 58 + label "1" + ] + edge [ + source 53 + target 54 + label "1" + ] + edge [ + source 54 + target 59 + label "1" + ] + edge [ + source 54 + target 60 + label "1" + ] + edge [ + source 54 + target 61 + label "1" + ] +] diff -r 000000000000 -r fe01a054a6b2 test.gspan --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test.gspan Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,7 @@ +t # id 1 +v 0 A +v 1 B +v 2 C +e 0 1 Kante AB +e 1 2 Kante BC +e 2 0 Kante CA diff -r 000000000000 -r fe01a054a6b2 test.json diff -r 000000000000 -r fe01a054a6b2 test.xgmml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test.xgmml Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff -r 000000000000 -r fe01a054a6b2 test.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test.xml Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,6 @@ + + + + + + diff -r 000000000000 -r fe01a054a6b2 test.yaml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test.yaml Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,28 @@ +!!python/object:networkx.classes.digraph.DiGraph +adj: &id001 + !!python/unicode '1': + !!python/unicode '2': &id003 {!!python/unicode 'id': !!python/unicode '3', !!python/unicode 'label': !!python/unicode 'Kante + AB', !!python/unicode 'weiteresAttribut': !!python/unicode '44'} + !!python/unicode '2': + !!python/unicode '3': &id004 {!!python/unicode 'id': !!python/unicode '3', !!python/unicode 'label': !!python/unicode 'Kante + BC', !!python/unicode 'weiteresAttribut': !!python/unicode '44'} + !!python/unicode '3': + !!python/unicode '1': &id002 {!!python/unicode 'id': !!python/unicode '3', !!python/unicode 'label': !!python/unicode 'Kante + CA', !!python/unicode 'weiteresAttribut': !!python/unicode '44'} +edge: *id001 +graph: {} +node: + !!python/unicode '1': {!!python/unicode 'id': !!python/unicode '1', label: !!python/unicode 'A', + !!python/unicode 'weiteresAttribut': !!python/unicode '42'} + !!python/unicode '2': {!!python/unicode 'id': !!python/unicode '2', label: !!python/unicode 'B', + !!python/unicode 'weiteresAttribut': !!python/unicode '43'} + !!python/unicode '3': {!!python/unicode 'id': !!python/unicode '3', label: !!python/unicode 'C', + !!python/unicode 'weiteresAttribut': !!python/unicode '44'} +pred: + !!python/unicode '1': + !!python/unicode '3': *id002 + !!python/unicode '2': + !!python/unicode '1': *id003 + !!python/unicode '3': + !!python/unicode '2': *id004 +succ: *id001 diff -r 000000000000 -r fe01a054a6b2 tool_dependencies.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool_dependencies.xml Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,5 @@ + + + $REPOSITORY_INSTALL_DIR + + diff -r 000000000000 -r fe01a054a6b2 xgmml_networkx.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xgmml_networkx.py Fri Feb 28 08:57:44 2014 -0500 @@ -0,0 +1,124 @@ +__author__ = "Yasunobu OKAMURA" +__copyright__ = "Copyright (c) 2012 Y.Okamura" +__license__ = "GPL v3+" + +import xml.parsers.expat +import networkx as nx + +class XGMMLParserHelper(object): + """ + """ + + def __init__(self, graph=nx.DiGraph()): + """ + + Arguments: + - `graph`: Network X graph object + """ + self._graph = graph + self._parser = xml.parsers.expat.ParserCreate() + self._parser.StartElementHandler = self._start_element + self._parser.EndElementHandler = self._end_element + self._tagstack = list() + + self._current_attr = dict() + self._current_obj = dict() + + def _start_element(self, tag, attr): + """ + + Arguments: + - `self`: + - `tag`: + - `attr`: + """ + + self._tagstack.append(tag) + + if tag == 'node' or tag == 'edge': + self._current_obj = dict(attr) + + if tag == 'att' and (self._tagstack[-2] == 'node' or self._tagstack[-2] == 'edge'): + if attr['type'] == 'string': + self._current_attr[attr['name']] = attr['value'] + elif attr['type'] == 'real': + self._current_attr[attr['name']] = float(attr['value']) + elif attr['type'] == 'integer': + self._current_attr[attr['name']] = int(attr['value']) + elif attr['type'] == 'boolean': + self._current_attr[attr['name']] = bool(attr['value']) + else: + raise NotImplementedError(attr['type']) + + def _end_element(self, tag): + """ + + Arguments: + - `self`: + - `tag`: + """ + + if tag == 'node': + self._graph.add_node(self._current_obj['id'], label=self._current_obj['label'], **self._current_attr) + #print 'add node', self._current_obj + elif tag == 'edge': + self._graph.add_edge(self._current_obj['source'], self._current_obj['target'], **self._current_attr) + + self._tagstack.pop() + + def parseFile(self, file): + """ + + Arguments: + - `self`: + - `file`: + """ + + self._parser.ParseFile(file) + + def graph(self): + """ + + Arguments: + - `self`: + """ + + return self._graph + +def XGMMLWriter(file, graph, graph_name): + """ + + Arguments: + - `graph`: + """ + + print >>file, """ + + + + +""".format(graph_name) + + + for onenode in graph.nodes(data=True): + id = onenode[0] + attr = dict(onenode[1]) + + if 'label' in attr: + label = attr['label'] + del attr['label'] + else: + label = id + + print >>file, ''.format(id=id, label=label) + for k, v in attr.iteritems(): + print >>file, ''.format(k, v) + print >>file, '' + + for oneedge in graph.edges(data=True): + print >>file, ''.format(oneedge[0], oneedge[1]) + for k, v in oneedge[2].iteritems(): + print >>file, ''.format(k, v) + print >>file, '' + print >>file, '' + diff -r 000000000000 -r fe01a054a6b2 xgmml_networkx.pyc Binary file xgmml_networkx.pyc has changed