1#pragma once2#include <vector>3#include <span>4#include <string>5#include "raid/core/types.hpp"6#include "raid/core/error.hpp"78namespace raid {910/// Columnar time series: strictly increasing timestamps and one double per observation.11struct TimeSeries {12 std::string id;13 std::vector<Timestamp> t;14 std::vector<f64> v;15 usize size() const { return v.size(); }16 bool empty() const { return v.empty(); }17 void validate() const {18 RAID_REQUIRE(t.size() == v.size(), invalid_argument, "TimeSeries: t/v size mismatch");19 for (usize i = 1; i < t.size(); ++i) RAID_REQUIRE(t[i] > t[i - 1], data_quality, "TimeSeries: timestamps not strictly increasing at index " + std::to_string(i));20 }21 std::span<const f64> values() const { return v; }22};2324} // namespace raid25