// Controlled Dense fixture; synthetic quality is not real-world task accuracy.
// This source is an exploration program. The measured CLI protocol records its
// own frozen source/build manifest, warm-up boundaries and three trial repeats.
import aner.dataset
import aner.nn
import aner.ml
import aner.parallel
import aner.dev

let source = dataset.synthetic(rows: 65536, inputs: 64, classes: 4, seed: 42)
let parts = source.partition(validation: 0.15, test: 0.15, seed: 42)
print(source.sha256())
print(parts.audit())
let network = nn.mlp(inputs: 64, hidden: List(128, 64), outputs: 4, seed: 42)
let model = ml.classifier(network, standardize: true,
    loss: "cross_entropy", optimizer: "sgd")
let config = ml.training(epochs: 10, batch: 1536, rate: 0.05, seed: 42)
    .validation(parts.validation())
// CPU/CUDA can request Float64. MPS must explicitly request Float32.
let execution = parallel.device(device: "cpu", dtype: "Float64")
// For an explicitly enrolled group, replace the preceding context with:
// let execution = parallel.cluster(config: "private.neural.cluster")
let fitted = parallel.fit(model: model, data: parts.train(),
    config: config, execution: execution, progress: true)
dev.capture("Canonical fitted model and replica history", fitted)
print(fitted.summary())
print(fitted.evaluate(parts.test()).summary())
