// Synthetic building observations: keep group membership and observation identity.
// Run from the directory containing examples/fixtures/contextual/energy.csv.
import aner.data
import aner.tensor

var schema = data.schema()
schema = data.column(schema, "row_id", "Int64", false)
schema = data.column(schema, "building_id", "String", false)
schema = data.column(schema, "temperature", "Float64", false)
schema = data.column(schema, "occupancy", "Float64", false)
schema = data.column(schema, "energy", "Float64", false)
let table = data.collect(data.scan_csv("examples/fixtures/contextual/energy.csv", schema, "NA"),
    max_rows: 16, max_bytes: 1048576, batch_rows: 4)
let observations = data.frame(table, "row_id", "building_id", "energy",
    List("", "", "degC", "1", "kWh"))
let populations = observations.partition_groups(
    List("B0", "B1", "B2", "B3"), List("B4", "B5"), List("B6", "B7"))
print("Training, validation and test rows")
print(populations.train().rows())
print(populations.validation().rows())
print(populations.test().rows())
print("Training population role")
print(populations.train().role())
print("Numerical features exclude identity, grouping and target")
print(populations.train().features().cols())
let validation = populations.validation().batch(max_output_bytes: 1048576, copy: "allow")
print("First validation observation ID and target unit")
print(validation.row_id(0))
print(validation.targets().unit())
print("First validation temperature")
print(validation.inputs().value(0, 0))
