summaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/leda.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/setoolsgui/networkx/readwrite/leda.py')
-rw-r--r--lib/python2.7/site-packages/setoolsgui/networkx/readwrite/leda.py106
1 files changed, 106 insertions, 0 deletions
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/leda.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/leda.py
new file mode 100644
index 0000000..a4d17db
--- /dev/null
+++ b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/leda.py
@@ -0,0 +1,106 @@
+"""
+Read graphs in LEDA format.
+
+LEDA is a C++ class library for efficient data types and algorithms.
+
+Format
+------
+See http://www.algorithmic-solutions.info/leda_guide/graphs/leda_native_graph_fileformat.html
+
+"""
+# Original author: D. Eppstein, UC Irvine, August 12, 2003.
+# The original code at http://www.ics.uci.edu/~eppstein/PADS/ is public domain.
+__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
+# Copyright (C) 2004-2010 by
+# Aric Hagberg <hagberg@lanl.gov>
+# Dan Schult <dschult@colgate.edu>
+# Pieter Swart <swart@lanl.gov>
+# All rights reserved.
+# BSD license.
+
+__all__ = ['read_leda', 'parse_leda']
+
+import networkx as nx
+from networkx.exception import NetworkXError
+from networkx.utils import open_file, is_string_like
+
+@open_file(0,mode='rb')
+def read_leda(path, encoding='UTF-8'):
+ """Read graph in LEDA format from path.
+
+ Parameters
+ ----------
+ path : file or string
+ File or filename to read. Filenames ending in .gz or .bz2 will be
+ uncompressed.
+
+ Returns
+ -------
+ G : NetworkX graph
+
+ Examples
+ --------
+ G=nx.read_leda('file.leda')
+
+ References
+ ----------
+ .. [1] http://www.algorithmic-solutions.info/leda_guide/graphs/leda_native_graph_fileformat.html
+ """
+ lines=(line.decode(encoding) for line in path)
+ G=parse_leda(lines)
+ return G
+
+
+def parse_leda(lines):
+ """Read graph in LEDA format from string or iterable.
+
+ Parameters
+ ----------
+ lines : string or iterable
+ Data in LEDA format.
+
+ Returns
+ -------
+ G : NetworkX graph
+
+ Examples
+ --------
+ G=nx.parse_leda(string)
+
+ References
+ ----------
+ .. [1] http://www.algorithmic-solutions.info/leda_guide/graphs/leda_native_graph_fileformat.html
+ """
+ if is_string_like(lines): lines=iter(lines.split('\n'))
+ lines = iter([line.rstrip('\n') for line in lines \
+ if not (line.startswith('#') or line.startswith('\n') or line=='')])
+ for i in range(3):
+ next(lines)
+ # Graph
+ du = int(next(lines)) # -1=directed, -2=undirected
+ if du==-1:
+ G = nx.DiGraph()
+ else:
+ G = nx.Graph()
+
+ # Nodes
+ n =int(next(lines)) # number of nodes
+ node={}
+ for i in range(1,n+1): # LEDA counts from 1 to n
+ symbol=next(lines).rstrip().strip('|{}| ')
+ if symbol=="": symbol=str(i) # use int if no label - could be trouble
+ node[i]=symbol
+
+ G.add_nodes_from([s for i,s in node.items()])
+
+ # Edges
+ m = int(next(lines)) # number of edges
+ for i in range(m):
+ try:
+ s,t,reversal,label=next(lines).split()
+ except:
+ raise NetworkXError('Too few fields in LEDA.GRAPH edge %d'%(i+1))
+ # BEWARE: no handling of reversal edges
+ G.add_edge(node[int(s)],node[int(t)],label=label[2:-2])
+ return G
+