"""Implementation of a gSpan graph database with two classes.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import codecs from .graph import AUTO_EDGE_ID from .graph import Graph class GraphDatabase(object): def __init__(self): self._graph_cnt = 0 self._graphs = dict() def read_graphs(self, filename): indexes = [] with codecs.open(filename, 'r', 'utf-8') as f: lines = [line.strip() for line in f.readlines()] tgraph = None for i, line in enumerate(lines): cols = line.split(' ') if cols[0] == 't': if tgraph is not None: self._graphs[self._graph_cnt] = tgraph indexes.append(self._graph_cnt) self._graph_cnt += 1 tgraph = None if cols[-1] == '-1': break tgraph = Graph(self._graph_cnt, is_undirected=True, eid_auto_increment=True) elif cols[0] == 'v': tgraph.add_vertex(cols[1], cols[2]) elif cols[0] == 'e': tgraph.add_edge(AUTO_EDGE_ID, cols[1], cols[2], cols[3]) # adapt to input files that do not end with 't # -1' if tgraph is not None: self._graphs[self._graph_cnt] = tgraph indexes.append(self._graph_cnt) return indexes