def makeScGraph(self): """Construct sc representation of netwokX graph @return: Return sc_addr of structure, that include all elements of generated sc-graph construction """ assert self.graphSc is None assert self.graphNx is not None _session = core.Kernel.session() result = sc_utils.createNode(_session, self.segment, sc.SC_CONST, "element") self.graphSc = sc_utils.createNode(_session, self.segment, sc.SC_CONST, "struct") a = sc_utils.createPairPosPerm(_session, self.segment, graph_keynodes.Common.graph, self.graphSc, sc.SC_CONST) res_list = [self.graphSc, a] nx2sc = {} # create all nodes for node in self.graphNx.nodes(): sc_node = sc_utils.createNode(_session, self.segment, sc.SC_CONST, "element") nx2sc[node] = sc_node # append into graph with vertex attribute a = sc_utils.createPairPosPerm(_session, self.segment, self.graphSc, sc_node, sc.SC_CONST) a1 = sc_utils.createPairPosPerm(_session, self.segment, graph_keynodes.Common.rrel_vertex, a, sc.SC_CONST) res_list.extend([sc_node, a, a1]) # create edges for edge in self.graphNx.edges(): sc_edge = sc_utils.createNodeSheaf(_session, self.segment, sc.SC_CONST) # append into graph with edge attribute a = sc_utils.createPairPosPerm(_session, self.segment, self.graphSc, sc_edge, sc.SC_CONST) a1 = sc_utils.createPairPosPerm(_session, self.segment, graph_keynodes.Common.rrel_edge, a, sc.SC_CONST) # setup begin and end objects beg, end = edge a2 = sc_utils.createPairPosPerm(_session, self.segment, sc_edge, nx2sc[beg], sc.SC_CONST) a3 = sc_utils.createPairPosPerm(_session, self.segment, sc_edge, nx2sc[end], sc.SC_CONST) res_list.extend([sc_edge, a, a1, a2, a3]) res_list.extend([graph_keynodes.Common.rrel_edge, graph_keynodes.Common.rrel_vertex, graph_keynodes.Common.graph ]) # create result set for r in res_list: sc_utils.createPairPosPerm(_session, self.segment, result, r, sc.SC_CONST) return result
def translate_impl(self, _input, _output): """Translator implementation """ # translating objects objs = objects.ScObject._sc2Objects(_input) assert len(objs) > 0 sheet = objs[0] assert type(sheet) is objects.ObjectSheet segment = sheet.getTmpSegment() errors = [] session = core.Kernel.session() # getting objects, that need to be translated trans_obj = [] for obj in sheet.getChilds(): _addr = obj._getScAddr() if _addr is None: trans_obj.append(obj) # remove old translation data else: if _addr.seg == segment: obj._setScAddr(None) #session.erase_el(_addr) trans_obj.append(obj) # sort objects to nodes and edges verticies = [] edges = [] for obj in trans_obj: if isinstance(obj, graph_objects.GraphVertex): verticies.append(obj) elif isinstance(obj, graph_objects.GraphLink): edges.append(obj) graph = sc_utils.createNode(session, segment, sc.SC_CONST, "struct") sc_utils.createPairPosPerm(session, segment, graph_keynodes.Common.graph, graph, sc.SC_CONST) # create all nodes for node in verticies: sc_node = sc_utils.createNode(session, segment, sc.SC_CONST, "element") node._setScAddr(sc_node) # append into graph with vertex attribute a = sc_utils.createPairPosPerm(session, segment, graph, sc_node, sc.SC_CONST) a1 = sc_utils.createPairPosPerm(session, segment, graph_keynodes.Common.rrel_vertex, a, sc.SC_CONST) # create edges for edge in edges: sc_edge = sc_utils.createNodeSheaf(session, segment, sc.SC_CONST) # append into graph with edge attribute a = sc_utils.createPairPosPerm(session, segment, graph, sc_edge, sc.SC_CONST) a1 = sc_utils.createPairPosPerm(session, segment, graph_keynodes.Common.rrel_edge, a, sc.SC_CONST) # setup begin and end objects beg = edge.getBegin()._getScAddr() end = edge.getEnd()._getScAddr() a2 = sc_utils.createPairPosPerm(session, segment, sc_edge, beg, sc.SC_CONST) a3 = sc_utils.createPairPosPerm(session, segment, sc_edge, end, sc.SC_CONST) edge._setScAddr(sc_edge) print "Translation errors:" for obj, error in errors: print error return errors
def makeScGraph(self): """Construct sc representation of netwokX graph @return: Return sc_addr of structure, that include all elements of generated sc-graph construction """ assert self.graphSc is None assert self.graphNx is not None _session = core.Kernel.session() result = sc_utils.createNode(_session, self.segment, sc.SC_CONST, "element") self.graphSc = sc_utils.createNode(_session, self.segment, sc.SC_CONST, "struct") a = sc_utils.createPairPosPerm(_session, self.segment, graph_keynodes.Common.graph, self.graphSc, sc.SC_CONST) res_list = [self.graphSc, a] nx2sc = {} # create all nodes for node in self.graphNx.nodes(): sc_node = sc_utils.createNode(_session, self.segment, sc.SC_CONST, "element") nx2sc[node] = sc_node # append into graph with vertex attribute a = sc_utils.createPairPosPerm(_session, self.segment, self.graphSc, sc_node, sc.SC_CONST) a1 = sc_utils.createPairPosPerm(_session, self.segment, graph_keynodes.Common.rrel_vertex, a, sc.SC_CONST) res_list.extend([sc_node, a, a1]) # create edges for edge in self.graphNx.edges(): sc_edge = sc_utils.createNodeSheaf(_session, self.segment, sc.SC_CONST) # append into graph with edge attribute a = sc_utils.createPairPosPerm(_session, self.segment, self.graphSc, sc_edge, sc.SC_CONST) a1 = sc_utils.createPairPosPerm(_session, self.segment, graph_keynodes.Common.rrel_edge, a, sc.SC_CONST) # setup begin and end objects beg, end = edge a2 = sc_utils.createPairPosPerm(_session, self.segment, sc_edge, nx2sc[beg], sc.SC_CONST) a3 = sc_utils.createPairPosPerm(_session, self.segment, sc_edge, nx2sc[end], sc.SC_CONST) res_list.extend([sc_edge, a, a1, a2, a3]) res_list.extend([ graph_keynodes.Common.rrel_edge, graph_keynodes.Common.rrel_vertex, graph_keynodes.Common.graph ]) # create result set for r in res_list: sc_utils.createPairPosPerm(_session, self.segment, result, r, sc.SC_CONST) return result