use std::fs::File;
use std::io::BufWriter;
use std::path::PathBuf;
use arroy::distances::DotProduct;
use arroy::{Database, Reader};
use clap::Parser;
use heed::EnvOpenOptions;
#[derive(Parser)]
#[command(author, version, about, long_about = None)]
struct Cli {
#[arg(default_value = "import.ary")]
database: PathBuf,
#[arg(long, default_value = "graph.dot")]
output_path: PathBuf,
}
fn main() {
let Cli { database, output_path } = Cli::parse();
let output = File::create(&output_path).unwrap();
let writer = BufWriter::new(output);
let env = unsafe {
EnvOpenOptions::new()
.map_size(1024 * 1024 * 1024 * 2) .open(database)
}
.unwrap();
let rtxn = env.read_txn().unwrap();
let database: Database<DotProduct> =
env.database_options().types().open(&rtxn).unwrap().unwrap();
let reader = Reader::<DotProduct>::open(&rtxn, 0, database).unwrap();
reader.plot_internals_tree_nodes(&rtxn, writer).unwrap();
eprintln!("To convert the graph to a png, run: `dot {output_path:?} -T png > graph.png`");
eprintln!("`dot` comes from the graphiz package");
}