Skip to content

Commit 089f9c4

Browse files
zptrojohpiip
andauthored
Add mode validation (#479)
* Add mode validation * Refactor and fix test * Fix mode import * Add newline at end of file * Add line * Update validate_network.py Co-authored-by: Johanna Piipponen <johanna.piipponen@hsl.fi>
1 parent a6b5430 commit 089f9c4

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

Scripts/assignment/emme_bindings/mock_project.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@
44
import os
55

66

7+
MODE_TYPES = {
8+
"1": "AUTO",
9+
"2": "TRANSIT",
10+
"3": "AUX_TRANSIT",
11+
"4": "AUX_AUTO",
12+
}
13+
14+
715
class MockProject:
816
"""Mock-up version of `EmmeProject`.
917
@@ -87,7 +95,13 @@ def mode_transaction(self, transaction_file, revert_on_error=True,
8795
if f.readline() == "t modes\n":
8896
break
8997
while True:
90-
rec = f.readline().split()
98+
rec = f.readline().split("'")
99+
if len(rec) == 3:
100+
rec = rec[0].split() + [rec[1]] + rec[2].split()
101+
elif len(rec) <= 1:
102+
rec = rec[0].split()
103+
else:
104+
raise SyntaxError("Extra single quotes (') found in mode table")
91105
if not rec:
92106
break
93107
if rec[0] == "c":
@@ -97,11 +111,13 @@ def mode_transaction(self, transaction_file, revert_on_error=True,
97111
pass
98112
else:
99113
if rec[0] == "a":
100-
network.create_mode(mode_type=rec[3], idx=rec[1])
114+
mode = network.create_mode(
115+
mode_type=MODE_TYPES[rec[3]], idx=rec[1])
101116
elif rec[0] == "m":
102-
network.mode(idx=rec[1])
117+
mode = network.mode(idx=rec[1])
103118
else:
104119
raise SyntaxError("Unknown update code")
120+
mode.description = rec[2]
105121

106122
def base_network_transaction(self, transaction_file, revert_on_error=True,
107123
scenario=None):
@@ -490,7 +506,7 @@ def modes(self):
490506
def create_mode(self, mode_type, idx):
491507
if not isinstance(idx, str) or len(idx) != 1:
492508
raise Exception("Invalid mode ID: " + idx)
493-
mode = Mode(idx)
509+
mode = Mode(idx, mode_type)
494510
self._modes[idx] = mode
495511
return mode
496512

@@ -569,8 +585,10 @@ def create_transit_line(self, idx, transit_vehicle_id, itinerary):
569585

570586

571587
class Mode:
572-
def __init__(self, idx):
588+
def __init__(self, idx, mode_type):
573589
self.id = idx
590+
self.type = mode_type
591+
self.description = ""
574592

575593
def __str__(self):
576594
return self.id

Scripts/utils/validate_network.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
import parameters.assignment as param
55

66

7+
EMME_AUTO_MODE = "AUTO"
8+
EMME_AUX_AUTO_MODE = "AUX_AUTO"
9+
EMME_TRANSIT_MODE = "TRANSIT"
10+
EMME_AUX_TRANSIT_MODE = "AUX_TRANSIT"
11+
712
def validate(network, fares=None):
813
"""Validate EMME network in terms of HELMET compatibility.
914
@@ -42,6 +47,13 @@ def validate(network, fares=None):
4247
found_zone_share)
4348
log.error(msg)
4449
raise ValueError(msg)
50+
validate_mode(network, param.main_mode, EMME_AUTO_MODE)
51+
for m in param.assignment_modes.values():
52+
validate_mode(network, m, EMME_AUX_AUTO_MODE)
53+
for m in param.transit_modes:
54+
validate_mode(network, m, EMME_TRANSIT_MODE)
55+
for m in param.aux_modes + [param.bike_mode]:
56+
validate_mode(network, m, EMME_AUX_TRANSIT_MODE)
4557
modesets = []
4658
intervals = []
4759
for modes in param.official_node_numbers:
@@ -88,3 +100,10 @@ def validate(network, fares=None):
88100
msg = "Headway missing for line {}".format(line.id)
89101
log.error(msg)
90102
raise ValueError(msg)
103+
104+
def validate_mode(network, m, mode_type):
105+
mode = network.mode(m)
106+
if mode is None or mode.type != mode_type:
107+
msg = f"{m} is not {mode_type} mode"
108+
log.error(msg)
109+
raise ValueError(msg)

0 commit comments

Comments
 (0)