fix_missing changed - algo tweak 3
This commit is contained in:
parent
880955fbe3
commit
93aa6eab81
|
@ -237,9 +237,9 @@ def loadFKinRouteDetail():
|
||||||
good_saves+=1
|
good_saves+=1
|
||||||
except:
|
except:
|
||||||
rd.route=None
|
rd.route=None
|
||||||
err.append({"data":rd.route_code, "error":["Route Not Found in Route"]})
|
err.append({"data":{"route_code":rd.route_code, "id":rd.id,"serial":rd.serial } , "error":"route Not Found in Route"})
|
||||||
|
|
||||||
#errors = open(join(PROJECT_ROOT, "../errors/RouteNotFoundErrors.json"), "w")
|
errors = open(join(PROJECT_ROOT, "../errors/RouteNotFoundErrors.json"), "w")
|
||||||
size = len(err)
|
size = len(err)
|
||||||
print "No. of Routes in RouteDetail mapped to Route: " , str(good_saves)
|
print "No. of Routes in RouteDetail mapped to Route: " , str(good_saves)
|
||||||
print "No. of Routes in RouteDetail not mapped to Route: " , str(size)
|
print "No. of Routes in RouteDetail not mapped to Route: " , str(size)
|
||||||
|
@ -247,8 +247,8 @@ def loadFKinRouteDetail():
|
||||||
if (size != 0) :
|
if (size != 0) :
|
||||||
print "See /errors/RouteNotFoundErrors.json for details"
|
print "See /errors/RouteNotFoundErrors.json for details"
|
||||||
|
|
||||||
#errors.write(json.dumps(err, indent=2))
|
errors.write(json.dumps(str(err), indent=2))
|
||||||
#errors.close()
|
errors.close()
|
||||||
return err
|
return err
|
||||||
|
|
||||||
|
|
||||||
|
@ -281,7 +281,7 @@ def CsvLoader(thismodel):
|
||||||
#print "Error:", str(entry) + '\t' + str(sys.exc_info()[0]) + '\n'
|
#print "Error:", str(entry) + '\t' + str(sys.exc_info()[0]) + '\n'
|
||||||
|
|
||||||
errors = open(join(PROJECT_ROOT, "../errors/"+ thismodel + "Errors.json"), 'w')
|
errors = open(join(PROJECT_ROOT, "../errors/"+ thismodel + "Errors.json"), 'w')
|
||||||
errors.write(json.dumps(globalerr, indent=2))
|
errors.write(json.dumps(str(globalerr), indent=2))
|
||||||
errors.close()
|
errors.close()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,14 +14,19 @@ def fix_distances():
|
||||||
if detail.stop.id == to_stop:
|
if detail.stop.id == to_stop:
|
||||||
details.reverse()
|
details.reverse()
|
||||||
break
|
break
|
||||||
|
|
||||||
# setup vars
|
# setup vars
|
||||||
distance = 0.0
|
distance = 0.0
|
||||||
record = False
|
record = False
|
||||||
last_stop_passed = False
|
last_stop_passed = False
|
||||||
for detail in details:
|
|
||||||
# basic idea, run thru each detail, if it has km info, then add it, if to_stop reached, and if it did not have km info, then go to the next detail having km info add it and done.
|
|
||||||
# For route 240RING, some detail.km is null???
|
|
||||||
|
|
||||||
|
for detail in details:
|
||||||
|
# basic idea, run thru each detail,
|
||||||
|
# if it has km info, then add it,
|
||||||
|
# if to_stop reached, and if it did not have km info,
|
||||||
|
# then go to the next detail having km info add it and done.
|
||||||
|
|
||||||
|
# For route 240RING, some detail.km is null???
|
||||||
# distance > 0 because of 100RING returning 1 stop shy of its start
|
# distance > 0 because of 100RING returning 1 stop shy of its start
|
||||||
if distance > 0 and detail.stop.id == to_stop:
|
if distance > 0 and detail.stop.id == to_stop:
|
||||||
last_stop_passed = True
|
last_stop_passed = True
|
||||||
|
@ -29,6 +34,7 @@ def fix_distances():
|
||||||
# is a stage
|
# is a stage
|
||||||
if record and detail.km:
|
if record and detail.km:
|
||||||
if not last_stop_passed:
|
if not last_stop_passed:
|
||||||
|
# add it
|
||||||
distance += float(detail.km)
|
distance += float(detail.km)
|
||||||
else:
|
else:
|
||||||
# if stage having km info reached after last stop, then add and exit loop
|
# if stage having km info reached after last stop, then add and exit loop
|
||||||
|
@ -37,10 +43,11 @@ def fix_distances():
|
||||||
last_stop_passed = True
|
last_stop_passed = True
|
||||||
break
|
break
|
||||||
|
|
||||||
#if record and distance > 0 and detail.stop.id == to_stop and last_stop_reached:
|
#if record and distance > 0 and detail.stop.id == to_stop:
|
||||||
# record = False
|
# record = False
|
||||||
# break
|
# break
|
||||||
|
|
||||||
|
|
||||||
# Start recording *after* we check for the break, because,
|
# Start recording *after* we check for the break, because,
|
||||||
# if from_stop == to_stop, we don't want to break on the first stop
|
# if from_stop == to_stop, we don't want to break on the first stop
|
||||||
if detail.stop.id == from_stop: record = True
|
if detail.stop.id == from_stop: record = True
|
||||||
|
@ -130,3 +137,86 @@ def fix_missing_runtimes():
|
||||||
|
|
||||||
if column != "runtime4":
|
if column != "runtime4":
|
||||||
print Exception("ERR fix_missing_runtimes: %s STILL missing %s!" % (schedule, column))
|
print Exception("ERR fix_missing_runtimes: %s STILL missing %s!" % (schedule, column))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
hcolumns = ["headway%d" % n for n in range(1,6)]
|
||||||
|
def fix_missing_headways():
|
||||||
|
for schedule in RouteSchedule.objects.all():
|
||||||
|
# other schedules for the same unique route (but at different times)
|
||||||
|
sibling_schedules = schedule.unique_route.routeschedule_set.all()
|
||||||
|
# the "full" schedules for this route are used to attempt to
|
||||||
|
# guestimate the schedules of partial subroutes
|
||||||
|
related_routes = related_schedules = []
|
||||||
|
related_subroutes = list(schedule.unique_route.route.uniqueroute_set.all())
|
||||||
|
|
||||||
|
# the main inner loop: for each headway column ---
|
||||||
|
for col_idx, column in enumerate(hcolumns):
|
||||||
|
# if the headway is set, AWESOME, bail
|
||||||
|
if getattr(schedule, column): continue
|
||||||
|
|
||||||
|
# try to use the previous column....if available
|
||||||
|
if getattr(schedule, column): continue
|
||||||
|
if col_idx > 0:
|
||||||
|
prev_headway = getattr(schedule, columns[col_idx-1])
|
||||||
|
if prev_headway:
|
||||||
|
setattr(schedule, column, prev_headway)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# ... or the next column, if it comes to that.
|
||||||
|
if col_idx < len(columns)-1:
|
||||||
|
next_headway = getattr(schedule, columns[col_idx+1])
|
||||||
|
if next_headway:
|
||||||
|
setattr(schedule, column, next_headway)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# otherwise, go through the other schedules for this subroute and
|
||||||
|
# see if we get a matching headway -- if so, use it
|
||||||
|
for sibling in sibling_schedules:
|
||||||
|
sibling_headway = getattr(sibling, column)
|
||||||
|
if sibling_headway:
|
||||||
|
setattr(schedule, column, sibling_headway)
|
||||||
|
# print "OK fix_missing_headways: %s %s fixed to %s" % (schedule, column, sibling)
|
||||||
|
break
|
||||||
|
|
||||||
|
if getattr(schedule, column): continue
|
||||||
|
# otherwise, go through the matching schedules for the full-length versions of this
|
||||||
|
# route and extrapolate the headway.
|
||||||
|
if related_subroutes:
|
||||||
|
# first, try to get the schedules for the full routes, given the same schedule type
|
||||||
|
related_schedules = []
|
||||||
|
for related_route in related_subroutes:
|
||||||
|
related_schedules += list(related_route.routeschedule_set.filter(schedule_type=schedule.schedule_type))
|
||||||
|
|
||||||
|
# iterate over them and see if we got one with the right headway
|
||||||
|
for related_schedule in related_schedules:
|
||||||
|
related_headway = getattr(related_schedule, column)
|
||||||
|
if related_headway:
|
||||||
|
# if so, compute the partial headway of this schedule as the (possibly > 1.0) fraction of headway of the other schedule by distance
|
||||||
|
partial_headway = related_headway*float(schedule.unique_route.distance)/float(related_schedule.unique_route.distance)
|
||||||
|
# print "OK fix_missing_headways: %s %s adjusted to parent %s" % (schedule, column, related_schedule)
|
||||||
|
setattr(schedule, column, partial_headway)
|
||||||
|
break
|
||||||
|
|
||||||
|
# did we find a headway? great, use it
|
||||||
|
if getattr(schedule, column): continue
|
||||||
|
|
||||||
|
# failing that, try to get the schedules for the full routes, with ANY schedule type
|
||||||
|
for related_route in related_subroutes:
|
||||||
|
related_schedules += list(related_route.routeschedule_set.all())
|
||||||
|
|
||||||
|
# iterate over them and see if we got one with the right headway
|
||||||
|
for related_schedule in related_schedules:
|
||||||
|
related_headway = getattr(related_schedule, column)
|
||||||
|
if related_headway:
|
||||||
|
# if so, compute the partial headway of this schedule as the (possibly > 1.0) fraction of headway of the other schedule by distance
|
||||||
|
partial_headway = related_headway*float(schedule.unique_route.distance)/float(related_schedule.unique_route.distance)
|
||||||
|
# print "OK fix_missing_headways: %s %s adjusted to parent %s" % (schedule, column, related_schedule)
|
||||||
|
setattr(schedule, column, partial_headway)
|
||||||
|
break
|
||||||
|
|
||||||
|
if column != "headway5":
|
||||||
|
print Exception("ERR fix_missing_headways: %s STILL missing %s!" % (schedule, column))
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from mumbai.models import *
|
from mumbai.models import *
|
||||||
|
|
||||||
#"Road, Area, Landmark, Stop"
|
# for Road, Area, Landmark, Stop
|
||||||
def copynames2display_name():
|
def copynames2display_name():
|
||||||
print "Copying names to display_name field..."
|
print "Copying names to display_name field..."
|
||||||
for obj in Stop.objects.all():
|
for obj in Stop.objects.all():
|
||||||
|
@ -18,12 +18,3 @@ def copynames2display_name():
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
def addStopstoRoutes():
|
|
||||||
print "Getting stops linked to Routes..."
|
|
||||||
for r in Route.objects.all():
|
|
||||||
try:
|
|
||||||
r.stop = Stop.objects.get(name=)
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user