// Offline source roles, training-only scaling, lazy batches and folds.
import aner.dataset
import aner.tensor

let parts = dataset.iris().partition(validation: 0.2, test: 0.2, seed: 42)
let training = parts.train()
let validation = parts.validation()
let testing = parts.test()
dataset.require_training(training)
dataset.require_disjoint(training, validation)
dataset.require_disjoint(training, testing)
print(training.rows())
print(validation.rows())
print(testing.rows())
print(training.role())
let scaler = training.fit_standardizer()
let prepared = dataset.transform(scaler, validation.features())
print(prepared.rows())
print(prepared.cols())
for batch in training.batches(size: 16, seed: 42, shuffle: true) {
    print(batch.rows())
}
let folds = dataset.iris().kfold(count: 5, seed: 2026)
print(folds.count())
let first = folds.fold(index: 0)
print(first.train().rows())
print(first.validation().rows())
