use std::path::Path;
use crate::dataset_bridge::sqlite_reader::SqliteDatasetReader;
use crate::dataset_bridge::{FEATURE_DIM, LABEL_DIM};
use crate::error::Result;
#[derive(Debug, Clone, PartialEq)]
pub struct LocalSample {
pub features: Vec<f32>,
pub labels: Vec<f32>,
}
impl LocalSample {
pub fn shape_ok(&self) -> bool {
self.features.len() == FEATURE_DIM && self.labels.len() == LABEL_DIM
}
}
pub struct LocalDataset {
samples: Vec<LocalSample>,
}
impl LocalDataset {
pub fn open_sqlite(decisions_path: &Path, outcomes_path: &Path) -> Result<Self> {
let reader = SqliteDatasetReader::open(decisions_path, outcomes_path)?;
let mut samples: Vec<LocalSample> = Vec::new();
for s in reader.iter_pairs()? {
samples.push(s?);
}
Ok(Self { samples })
}
pub fn n_samples(&self) -> usize {
self.samples.len()
}
pub fn iter(&self) -> impl Iterator<Item = &LocalSample> {
self.samples.iter()
}
pub fn as_slice(&self) -> &[LocalSample] {
&self.samples
}
}