comparison planemo/lib/python3.7/site-packages/networkx/readwrite/leda.py @ 1:56ad4e20f292 draft

"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author guerler
date Fri, 31 Jul 2020 00:32:28 -0400
parents
children
comparison
equal deleted inserted replaced
0:d30785e31577 1:56ad4e20f292
1 """
2 Read graphs in LEDA format.
3
4 LEDA is a C++ class library for efficient data types and algorithms.
5
6 Format
7 ------
8 See http://www.algorithmic-solutions.info/leda_guide/graphs/leda_native_graph_fileformat.html
9
10 """
11 # Original author: D. Eppstein, UC Irvine, August 12, 2003.
12 # The original code at http://www.ics.uci.edu/~eppstein/PADS/ is public domain.
13 __author__ = """Aric Hagberg (hagberg@lanl.gov)"""
14 # Copyright (C) 2004-2019 by
15 # Aric Hagberg <hagberg@lanl.gov>
16 # Dan Schult <dschult@colgate.edu>
17 # Pieter Swart <swart@lanl.gov>
18 # All rights reserved.
19 # BSD license.
20
21 __all__ = ['read_leda', 'parse_leda']
22
23 import networkx as nx
24 from networkx.exception import NetworkXError
25 from networkx.utils import open_file, is_string_like
26
27
28 @open_file(0, mode='rb')
29 def read_leda(path, encoding='UTF-8'):
30 """Read graph in LEDA format from path.
31
32 Parameters
33 ----------
34 path : file or string
35 File or filename to read. Filenames ending in .gz or .bz2 will be
36 uncompressed.
37
38 Returns
39 -------
40 G : NetworkX graph
41
42 Examples
43 --------
44 G=nx.read_leda('file.leda')
45
46 References
47 ----------
48 .. [1] http://www.algorithmic-solutions.info/leda_guide/graphs/leda_native_graph_fileformat.html
49 """
50 lines = (line.decode(encoding) for line in path)
51 G = parse_leda(lines)
52 return G
53
54
55 def parse_leda(lines):
56 """Read graph in LEDA format from string or iterable.
57
58 Parameters
59 ----------
60 lines : string or iterable
61 Data in LEDA format.
62
63 Returns
64 -------
65 G : NetworkX graph
66
67 Examples
68 --------
69 G=nx.parse_leda(string)
70
71 References
72 ----------
73 .. [1] http://www.algorithmic-solutions.info/leda_guide/graphs/leda_native_graph_fileformat.html
74 """
75 if is_string_like(lines):
76 lines = iter(lines.split('\n'))
77 lines = iter([line.rstrip('\n') for line in lines
78 if not (line.startswith('#') or line.startswith('\n') or line == '')])
79 for i in range(3):
80 next(lines)
81 # Graph
82 du = int(next(lines)) # -1=directed, -2=undirected
83 if du == -1:
84 G = nx.DiGraph()
85 else:
86 G = nx.Graph()
87
88 # Nodes
89 n = int(next(lines)) # number of nodes
90 node = {}
91 for i in range(1, n + 1): # LEDA counts from 1 to n
92 symbol = next(lines).rstrip().strip('|{}| ')
93 if symbol == "":
94 symbol = str(i) # use int if no label - could be trouble
95 node[i] = symbol
96
97 G.add_nodes_from([s for i, s in node.items()])
98
99 # Edges
100 m = int(next(lines)) # number of edges
101 for i in range(m):
102 try:
103 s, t, reversal, label = next(lines).split()
104 except:
105 raise NetworkXError('Too few fields in LEDA.GRAPH edge %d' % (i + 1))
106 # BEWARE: no handling of reversal edges
107 G.add_edge(node[int(s)], node[int(t)], label=label[2:-2])
108 return G