From 8ce6282c793e815c2800976ff7de606b46b39fc7 Mon Sep 17 00:00:00 2001 From: Yangge Li <li213@illinois.edu> Date: Tue, 4 Oct 2022 21:39:52 -0500 Subject: [PATCH] modify many car example, small modification in parser --- demo/tacas2023/exp2/example_controller5.py | 2 +- demo/tacas2023/exp3/demo6.py | 2 +- verse/analysis/analysis_tree.py | 6 ++++++ verse/map/lane_map.py | 2 ++ verse/parser/parser.py | 13 ++++++++++--- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/demo/tacas2023/exp2/example_controller5.py b/demo/tacas2023/exp2/example_controller5.py index 2c95eee4..3414a5c2 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 b73c5bda..071a9ee8 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 32407900..83dd940f 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 abe532ef..a286fbaa 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 60b6ee23..eebcb893 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") -- GitLab