use burn::prelude::*;
use burn::record::{BinFileRecorder, FullPrecisionSettings, Recorder};
use std::path::Path;
use std::fs::File;
use std::io::{Write, Read};
use crate::backend::AutodiffBackend;
use crate::model::UMAPModel;
pub fn save_model<B: AutodiffBackend>(
model: &UMAPModel<B::InnerBackend>,
path: impl AsRef<Path>,
) -> Result<(), Box<dyn std::error::Error>> {
let recorder = BinFileRecorder::<FullPrecisionSettings>::new();
let path_buf = path.as_ref().to_path_buf();
model.clone().save_file(path_buf, &recorder)
.map_err(|e| Box::new(e) as Box<dyn std::error::Error>)
}
pub fn load_model<B: AutodiffBackend>(
model: &mut UMAPModel<B::InnerBackend>,
path: impl AsRef<Path>,
device: &Device<B>,
) -> Result<(), Box<dyn std::error::Error>> {
let recorder = BinFileRecorder::<FullPrecisionSettings>::new();
let path_buf = path.as_ref().to_path_buf();
*model = model.clone().load_file(path_buf, &recorder, device)
.map_err(|e| Box::new(e) as Box<dyn std::error::Error>)?;
Ok(())
}