From f961fe31b24e22f83e3d4f71f3902c24ebf2291e Mon Sep 17 00:00:00 2001
From: crides <zhuhaoqing@live.cn>
Date: Mon, 19 Sep 2022 17:27:03 -0500
Subject: [PATCH] dump tree

---
 demo/vehicle/demo7.py           | 16 +++++++++-------
 verse/analysis/analysis_tree.py | 18 ++++++++++++++++++
 2 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/demo/vehicle/demo7.py b/demo/vehicle/demo7.py
index 200513f3..8aa7ed7c 100644
--- a/demo/vehicle/demo7.py
+++ b/demo/vehicle/demo7.py
@@ -103,15 +103,17 @@ if __name__ == "__main__":
     time = timeit.default_timer()
     traces = scenario.simulate(60, 0.05)
     print("\x1b[31mrun1\x1b[0m", timeit.default_timer() - time)
+    traces.dump_tree()
     fig = go.Figure()
     fig = simulation_tree(traces, tmp_map, fig, 1,
                           2, 'lines', 'trace', print_dim_list=[1, 2])
     fig.show()
 
-    time = timeit.default_timer()
-    traces = scenario.simulate(60, 0.05)
-    print("\x1b[31mrun2\x1b[0m", timeit.default_timer() - time)
-    fig = go.Figure()
-    fig = simulation_tree(traces, tmp_map, fig, 1,
-                          2, 'lines', 'trace', print_dim_list=[1, 2])
-    fig.show()
+#     time = timeit.default_timer()
+#     traces = scenario.simulate(60, 0.05)
+#     print("\x1b[31mrun2\x1b[0m", timeit.default_timer() - time)
+#     traces.dump_tree()
+#     fig = go.Figure()
+#     fig = simulation_tree(traces, tmp_map, fig, 1,
+#                           2, 'lines', 'trace', print_dim_list=[1, 2])
+#     fig.show()
diff --git a/verse/analysis/analysis_tree.py b/verse/analysis/analysis_tree.py
index 57b26bb0..7000f992 100644
--- a/verse/analysis/analysis_tree.py
+++ b/verse/analysis/analysis_tree.py
@@ -1,5 +1,6 @@
 from typing import List, Dict, Any
 import json
+from treelib import Tree
 
 class AnalysisTreeNode:
     """AnalysisTreeNode class
@@ -122,3 +123,20 @@ class AnalysisTree:
                 parent_node.child.append(child_node)
                 queue.append((child_node_dict, child_node))
         return AnalysisTree(root)
+
+    def dump_tree(self):
+        tree = Tree()
+        AnalysisTree._dump_tree(self.root, tree, 0, 1)
+        tree.show()
+
+    @staticmethod
+    def _dump_tree(node, tree, pid, id):
+        n = "\n".join(str((aid, *node.mode[aid], *node.init[aid])) for aid in node.agent)
+        if pid != 0:
+            tree.create_node(n, id, parent=pid)
+        else:
+            tree.create_node(n, id)
+        nid = id + 1
+        for child in node.child:
+            nid = AnalysisTree._dump_tree(child, tree, id, nid)
+        return nid + 1
-- 
GitLab