def addEdge(self, id, fromID, toID, prio, function, name): if id not in self._id2edge: fromN = self.addNode(fromID) toN = self.addNode(toID) edge = Edge(id, fromN, toN, prio, function, name) self._edges.append(edge) self._id2edge[id] = edge return self._id2edge[id]
def startElement(self, name, attrs): if name == 'district': self._StartDTIn = self._net.newVertex() self._StartDTIn.label = attrs['id'] self._StartDTOut = self._net.newVertex() self._StartDTOut.label = self._StartDTIn.label self._net._startVertices.append(self._StartDTIn) self._net._endVertices.append(self._StartDTOut) elif name == 'dsink': sinklink = self._net.getEdge(attrs['id']) self.I += 1 conlink = self._StartDTOut.label + str(self.I) newEdge = Edge(conlink, sinklink.target, self._StartDTOut, "real") self._net.addEdge(newEdge) newEdge.ratio = attrs['weight'] newEdge.connection = 1 elif name == 'dsource': sourcelink = self._net.getEdge(attrs['id']) self.I += 1 conlink = self._StartDTIn.label + str(self.I) newEdge = Edge(conlink, self._StartDTIn, sourcelink.source, "real") self._net.addEdge(newEdge) newEdge.ratio = attrs['weight'] newEdge.connection = 2
def insertEdge(self, tail, head, weight=None): if head in self.nodes and tail in self.nodes: self.inc[tail].addAsLast(Edge(tail, head, weight))
def addIsolatedRealEdge(self, edgeLabel): self.addEdge( Edge(edgeLabel, self.newVertex(), self.newVertex(), "real"))
def startElement(self, name, attrs): self._chars = '' if name == 'edge' and (not attrs.has_key('function') or attrs['function'] != 'internal'): self._edge = attrs['id'] self._net.addIsolatedRealEdge(self._edge) self._edgeObj = self._net.getEdge(self._edge) self._edgeObj.source.label = attrs['from'] self._edgeObj.target.label = attrs['to'] self._maxSpeed = 0 self._laneNumber = 0 self._length = 0 elif name == 'tl-logic': self._junctionObj = TLJunction() if self._junctionObj and attrs.has_key('id'): self._junctionObj.label = attrs['id'] self._net.addTLJunctions(self._junctionObj) self._phasenoInfo = False elif self._junctionObj and name == 'phase': if attrs.has_key('state'): self._newphase = Signalphase(float(attrs['duration']), attrs['state']) else: self._newphase = Signalphase(float(attrs['duration']), None, attrs['phase'], attrs['brake'], attrs['yellow']) if self._junctionObj: self._junctionObj.phases.append(self._newphase) self._counter += 1 self._newphase.label = self._counter elif name == 'succ': self._edge = attrs['edge'] if self._edge[0] != ':': self._edgeObj = self._net.getEdge(self._edge) if self._edgeObj.junction == 'None': self._edgeObj.junction = attrs['junction'] else: self._edge = "" elif name == 'succlane' and self._edge != "": l = attrs['lane'] if l != "SUMO_NO_DESTINATION": toEdge = self._net.getEdge(l[:l.rfind('_')]) newEdge = Edge(self._edge + "_" + l[:l.rfind('_')], self._edgeObj.target, toEdge.source) self._net.addEdge(newEdge) self._edgeObj.finalizer = l[:l.rfind('_')] if attrs.has_key('tl'): self._edgeObj.junction = attrs['tl'] self._edgeObj.junctiontype = 'signalized' if attrs['dir'] == "r": self._edgeObj.rightturn = attrs['linkno'] self._edgeObj.rightlink.append(toEdge) elif attrs['dir'] == "s": self._edgeObj.straight = attrs['linkno'] self._edgeObj.straightlink.append(toEdge) elif attrs['dir'] == "l": self._edgeObj.leftturn = attrs['linkno'] self._edgeObj.leftlink.append(toEdge) elif attrs['dir'] == "t": self._edgeObj.uturn = attrs['linkno'] else: self._edgeObj.junctiontype = 'prioritized' if attrs['dir'] == "r": self._edgeObj.rightturn = attrs['state'] self._edgeObj.rightlink.append(toEdge) elif attrs['dir'] == "s": self._edgeObj.straight = attrs['state'] self._edgeObj.straightlink.append(toEdge) elif attrs['dir'] == "l": self._edgeObj.leftturn = attrs['state'] self._edgeObj.leftlink.append(toEdge) elif attrs['dir'] == "t": self._edgeObj.uturn = attrs['state'] elif name == 'lane' and self._edge != '': self._maxSpeed = max(self._maxSpeed, float(attrs['maxspeed'])) self._laneNumber = self._laneNumber + 1 self._length = float(attrs['length'])
def edge_copy(source_id, target_id, label, data): return Edge(source_id=source_id, target_id=target_id, label=label, properties=copy.copy(data))