diff --git a/demo/tacas2023/exp2/example_controller5.py b/demo/tacas2023/exp2/example_controller5.py index 2c95eee4d486ccfa0cee4e25d82848a8ec9d69c9..3414a5c21dcdb0fc1c61f6616de9c140836e5fd6 100644 --- a/demo/tacas2023/exp2/example_controller5.py +++ b/demo/tacas2023/exp2/example_controller5.py @@ -49,7 +49,7 @@ def controller(ego:State, others:List[State], lane_map): output = copy.deepcopy(ego) if ego.agent_mode == VehicleMode.Normal: if vehicle_front(ego, others, lane_map): - if lane_map.h_exist(ego.lane_mode, ego.agent_mode, 'SwitchLeft'): + if lane_map.h_exist(ego.lane_mode, ego.agent_mode, VehicleMode.SwitchLeft): output.agent_mode = VehicleMode.SwitchLeft output.lane_mode = lane_map.h(ego.lane_mode, ego.agent_mode, 'SwitchLeft') if vehicle_front(ego, others, lane_map): diff --git a/demo/tacas2023/exp3/demo6.py b/demo/tacas2023/exp3/demo6.py index b73c5bda752b79f1c53c921ddf0c5af60ad64ee1..071a9ee8686cf4f10b1f25e6732c197021402a5d 100644 --- a/demo/tacas2023/exp3/demo6.py +++ b/demo/tacas2023/exp3/demo6.py @@ -71,7 +71,7 @@ if __name__ == "__main__": # 1, 2], 'lines', 'trace', sample_rate=1) # fig.show() - traces = scenario.verify(20, 0.05) + traces = scenario.verify(80, 0.1) fig = go.Figure() fig = reachtube_tree(traces, tmp_map, fig, 1, 2, [1, 2], 'lines', 'trace') fig.show() diff --git a/verse/analysis/analysis_tree.py b/verse/analysis/analysis_tree.py index 324079000f875610bcdc28920634b10c87817a3b..83dd940fb2a96c3c238168471289fa305af3df44 100644 --- a/verse/analysis/analysis_tree.py +++ b/verse/analysis/analysis_tree.py @@ -58,6 +58,8 @@ class AnalysisTreeNode: return rst_dict def get_track(self, agent_id, D): + if 'TrackMode' not in self.agent[agent_id].controller.mode_defs: + return "" for d in D: if d in self.agent[agent_id].controller.mode_defs['TrackMode'].modes: return d @@ -65,6 +67,10 @@ class AnalysisTreeNode: def get_mode(self, agent_id, D): res = [] + if 'TrackMode' not in self.agent[agent_id].controller.mode_defs: + if len(D)==1: + return D[0] + return D for d in D: if d not in self.agent[agent_id].controller.mode_defs['TrackMode'].modes: res.append(d) diff --git a/verse/map/lane_map.py b/verse/map/lane_map.py index abe532efb6336b0978f67b983066e7b82ce4ed84..a286fbaaf19f95adf2de94a58747fd53645da05d 100644 --- a/verse/map/lane_map.py +++ b/verse/map/lane_map.py @@ -104,6 +104,8 @@ class LaneMap: return lane.get_lane_width() def h(self, lane_idx, agent_mode_src, agent_mode_dest): + if self.h_dict == {}: + return "" return self.h_dict[(lane_idx, agent_mode_src, agent_mode_dest)] def h_exist(self, lane_idx, agent_mode_src, agent_mode_dest): diff --git a/verse/parser/parser.py b/verse/parser/parser.py index 60b6ee2354e2598e56674eb5ed31541680dcc7ea..eebcb893bf5725e21ea71f4b195821675af65906 100644 --- a/verse/parser/parser.py +++ b/verse/parser/parser.py @@ -623,8 +623,6 @@ def proc(node: ast.AST, env: Env) -> Any: elif isinstance(node, ast.Name):# and isinstance(node.ctx, ast.Load): return env.lookup(node.id) elif isinstance(node, ast.Attribute) and isinstance(node.ctx, ast.Load): - if isinstance(node.value, ast.Name) and node.value.id in env.mode_defs: - return node.attr obj = proc(node.value, env) # TODO since we know what the mode and state types contain we can do some typo checking if not_ir_ast(obj): @@ -704,7 +702,16 @@ def proc(node: ast.AST, env: Env) -> Any: if len(node.args) > 1: raise ValueError("too many args to `copy.deepcopy`") return proc(node.args[0], env) - return node + ret = copy.deepcopy(node) + tmp = [] + for a in ret.args: + if isinstance(a, ast.Attribute) and isinstance(a.value, ast.Name) and a.value.id in env.mode_defs: + tmp.append(ast.Constant(a.attr, kind=None)) + else: + tmp.append(a) + ret.args = tmp + + return ret if isinstance(fun, ast.arg): if fun.arg == "copy.deepcopy": raise Exception("unreachable")