use crate::{error::LtrError, eval::Evaluator, ranker::Ranker, DataSet};
pub trait Learner:
Ranker + DatasetConfigurable + MetricConfigurable + FeaturesConfigurable + FileSerializable
{
fn fit(&mut self) -> Result<(), LtrError>;
fn score(&self) -> Result<f32, LtrError>;
fn validation_score(&self) -> Result<f32, LtrError>;
}
pub trait DatasetConfigurable {
fn set_train_dataset(&mut self, dataset: DataSet);
fn set_validation_dataset(&mut self, dataset: DataSet);
}
pub trait MetricConfigurable {
fn set_metric(&mut self, metric: &dyn Evaluator);
}
pub trait FeaturesConfigurable {
fn set_features(&mut self, features: Vec<usize>);
fn get_features(&self) -> Vec<usize>;
}
pub trait FileSerializable {
fn save_to_file(&self, path: &str) -> Result<(), LtrError>;
fn load_from_file(&mut self, path: &str) -> Result<(), LtrError>;
}