use burn_tensor::Device;
pub use crate::data::dataset::{Dataset, DatasetIterator};
use burn_dataset::DatasetError;
use core::iter::Iterator;
use std::sync::Arc;
#[derive(new, Clone, Debug)]
pub struct Progress {
pub items_processed: usize,
pub items_total: usize,
pub unit: Option<String>,
}
pub trait DataLoaderIterator<O>: Iterator<Item = Result<O, DatasetError>> {
fn progress(&self) -> Progress;
}
pub trait DataLoader<O>: Send + Sync {
fn iter<'a>(&'a self) -> Box<dyn DataLoaderIterator<O> + 'a>;
fn num_items(&self) -> usize;
fn to_device(&self, device: &Device) -> Arc<dyn DataLoader<O>>;
fn slice(&self, start: usize, end: usize) -> Arc<dyn DataLoader<O>>;
}