// Packed native unit arrays; requires the updated Aner development runtime.
// Complete synthetic inputs. No network, credentials or external data.
import aner.units

let lengths: Array<Quantity<m>> = Array<Quantity<m>>(size: 3, fill: 0.0@m)
lengths[0] = 1.0@m
lengths[1] = (200.0@cm).to("m")
lengths[2] = 3.0@m
print(type(lengths))
print(dtype(lengths))
print(lengths.unit())
print(lengths.mean())
print(lengths.sum())
print(lengths.cumsum().get(2))
print(lengths.to("cm").get(0))

let independent = lengths.to("m")
independent[0] = 99.0@m
print(lengths.get(0) == 1.0@m)
let raw = lengths.values()
raw[0] = -99.0
print(type(raw))
print(lengths.get(0) == 1.0@m)

let readings: DynamicArray<Point<degC>> = DynamicArray<Point<degC>>(capacity: 3)
readings.append(20.0@degC)
readings.append(22.0@degC)
readings.append(24.0@degC)
print(readings.mean())
print(readings.std().unit())
let reference = DynamicArray<Point<degC>>(capacity: 3)
reference.resize(size: 3, fill: 20.0@degC)
let changes = readings.sub(reference)
print(type(changes))
print(changes.get(2))

let distances = NDArray<Quantity<m>>(shape: List(2, 2), fill: 6.0@m)
let times = NDArray<Quantity<s>>(shape: List(1, 2), fill: 2.0@s)
let speeds: NDArray<Quantity<"m/s">> = distances.div(times)
print(type(speeds))
print(speeds.shape())
print(speeds[1, 1])
