#pragma once #include #include #include #include "raid/core/types.hpp" #include "raid/core/error.hpp" namespace raid { /// Columnar time series: strictly increasing timestamps and one double per observation. struct TimeSeries { std::string id; std::vector t; std::vector v; usize size() const { return v.size(); } bool empty() const { return v.empty(); } void validate() const { RAID_REQUIRE(t.size() == v.size(), invalid_argument, "TimeSeries: t/v size mismatch"); 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)); } std::span values() const { return v; } }; } // namespace raid