Source code for fgen_runtime.timeseries_collection
"""
Timeseries collection handling class
"""
from __future__ import annotations
from typing import TYPE_CHECKING, Protocol
from attrs import define
if TYPE_CHECKING:
import pint
[docs]class ValuesBoundedLike(Protocol):
"""
Class that behaves like a bounded values holder
"""
@property
def values(self) -> pint.UnitRegistry.Quantity:
"""
Values
"""
...
@property
def value_last_bound(self) -> pint.UnitRegistry.Quantity:
"""
Value at the end of the last bound
"""
...
[docs]class TimeseriesLike(Protocol):
"""
Class that behaves like a timeseries
"""
@property
def name(self) -> str:
"""
Name of the timeseries
"""
...
@property
def values(self) -> ValuesBoundedLike:
"""
Values of the timeseries
"""
...
@property
def time(self) -> ValuesBoundedLike:
"""
Time axis of the timeseries
"""
...
@property
def spline(self) -> int:
"""
Spline of the timeseries
"""
...
[docs]@define
class TimeseriesCollection:
"""
Container for a number of :obj:`Timeseries`
"""
ts: list[TimeseriesLike]
def __getitem__(self, key: int | str) -> TimeseriesLike:
if isinstance(key, str):
raise NotImplementedError()
return self.ts[key]
def __len__(self) -> int:
return len(self.ts)