npc_engine_utils/
graphs.rs1use npc_engine_core::{debug_name_to_filename_safe, graphviz, ActiveTask, Domain, MCTS};
7use std::fs;
8
9pub fn plot_tree_in_tmp<D: Domain>(
11 mcts: &MCTS<D>,
12 base_dir_name: &str,
13 file_name: &str,
14) -> std::io::Result<()> {
15 let temp_dir = std::env::temp_dir().display().to_string();
16 let path = format!("{temp_dir}/{base_dir_name}/");
17 fs::create_dir_all(&path)?;
18 let mut file = fs::OpenOptions::new()
19 .create(true)
20 .write(true)
21 .truncate(true)
22 .open(format!("{path}{file_name}.dot"))?;
23 graphviz::plot_mcts_tree(mcts, &mut file)
24}
25
26pub fn plot_tree_in_tmp_with_task_name<D: Domain>(
28 mcts: &MCTS<D>,
29 base_dir_name: &str,
30 last_active_task: &ActiveTask<D>,
31) -> std::io::Result<()> {
32 let time_text = format!("T{}", mcts.start_tick());
33 let agent_id_text = format!("A{}", mcts.agent().0);
34 let last_task_name = format!("{:?}", last_active_task.task);
35 let last_task_name = debug_name_to_filename_safe(&last_task_name);
36 plot_tree_in_tmp(
37 mcts,
38 base_dir_name,
39 &format!("{agent_id_text}-{time_text}-{last_task_name}"),
40 )
41}