from __future__ import absolute_import
from __future__ import print_function
import os
import sys
from xml.sax import parse, handler
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from sumolib.options import ArgumentParser
class DumpReader(handler.ContentHandler):
"""Reads the dump file"""
def __init__(self):
self._edge = None
self._lane = None
self.vehicles = {}
self.changes = 0
def startElement(self, name, attrs):
if name == 'edge':
self._edge = attrs['id']
elif name == 'lane':
self._lane = attrs['id']
elif name == 'vehicle':
veh = attrs['id']
prevEdge, prevLane = self.vehicles.get(veh, (None, None))
if self._edge == prevEdge and self._lane != prevLane:
self.changes += 1
self.vehicles[veh] = (self._edge, self._lane)
def parse_args():
optParser = ArgumentParser()
optParser.add_argument("dumpfile", help="dump file path")
return optParser.parse_args()
def countLaneChanges(dumpfile):
dr = DumpReader()
parse(dumpfile, dr)
print(dr.changes, dr.changes / float(len(dr.vehicles)))
if __name__ == "__main__":
countLaneChanges(parse_args().dumpfile)