def test_hms_to_seconds_since_midnight_full(self): t = "20:30:40" s = TimeUtil.hms_to_seconds_since_midnight(t) self.assertEqual(73840, s)
def test_seconds_since_midnight_to_hms_full(self): s = 73840 t = TimeUtil.seconds_since_midnight_to_hms(s) self.assertEqual("20:30:40", t)
def test_ddi_conversion_minutes(self): s = "PT3M" t = TimeUtil.ddi_duration_to_seconds(s) self.assertEqual(180, t)
def test_seconds_since_midnight_to_hms_minutes_seconds_single_digits(self): s = 125 t = TimeUtil.seconds_since_midnight_to_hms(s) self.assertEqual("00:02:05", t)
def test_seconds_since_midnight_to_hms_minutes_double_digits(self): s = 720 t = TimeUtil.seconds_since_midnight_to_hms(s) self.assertEqual("00:12:00", t)
def test_seconds_since_midnight_to_hms_seconds_double_digits(self): s = 25 t = TimeUtil.seconds_since_midnight_to_hms(s) self.assertEqual("00:00:25", t)
def test_seconds_since_midnight_to_hms_seconds_single_digit(self): s = 2 t = TimeUtil.seconds_since_midnight_to_hms(s) self.assertEqual("00:00:02", t)
def test_ddi_conversion_mixed(self): # This appears in problem 5: s = "PT2M30S" t = TimeUtil.ddi_duration_to_seconds(s) self.assertEqual(150, t)
def test_ddi_conversion_seconds(self): s = "PT53S" t = TimeUtil.ddi_duration_to_seconds(s) self.assertEqual(53, t)
def train_run_from_dag(annotated_problem, chromosome, dag_path, route_id): # Dag_path should be the array of nodes: train_run = {} train_run["service_intention_id"] = route_id train_run["train_run_sections"] = [] c_idx = 0 current_time = 0 #print(dag_path) for node in dag_path: temp_node = node.strip("(").strip(")") sequence_number = None m_number = None # Try and parse out sequence or m_number if "->" in temp_node: sequence_number = int(temp_node.split('->', 1)[1]) elif "_end" in temp_node: sequence_number = int(temp_node.strip("_end")) elif "_beginning" in temp_node: sequence_number = int(temp_node.strip("_beginning")) else: m_number = temp_node # Try and find the route section: route_section = None if sequence_number: route_section = SolutionBuilder.route_path_with_sequence_number( annotated_problem, route_id, sequence_number) else: route_section = SolutionBuilder.route_path_with_alternative_name( annotated_problem, route_id, m_number) if route_section: sequence_number = route_section["sequence_number"] if not route_section: raise ValueError( "Unable to find route section with node: ({})".format( node)) # Build the train_run_section: train_run_section = { "route": route_id, "route_section_id": "{}#{}".format(route_id, sequence_number), "sequence_number": c_idx + 1, "route_path": sequence_number } if "section_marker" in route_section: marker = route_section["section_marker"][0] train_run_section["section_requirement"] = marker # There's a marker, see if we can find the entry_earliest requirement: requirement = SolutionBuilder.section_requirement_with_marker( annotated_problem, route_id, marker) if requirement and "entry_earliest" in requirement: current_time = TimeUtil.hms_to_seconds_since_midnight( requirement["entry_earliest"]) else: train_run_section["section_requirement"] = None train_run_section[ "entry_time"] = TimeUtil.seconds_since_midnight_to_hms( current_time) min_time = 0 if "minimum_running_time" in route_section: min_time = TimeUtil.ddi_duration_to_seconds( route_section["minimum_running_time"]) current_time += min_time current_time += chromosome[c_idx]['delta'] train_run_section[ "exit_time"] = TimeUtil.seconds_since_midnight_to_hms( current_time) # TODO: Figure out our exit time train_run["train_run_sections"].append(train_run_section) c_idx += 1 return train_run