Chronaxis用户手册English
本页目录

chronaxis.execution.groups

源码基线:8904c2f744951857659abd40aaa3535d57faf53c

1"""定义现役记录流一次交付的完整同刻组,不执行磁盘回放或排序。"""2from dataclasses import dataclass3from ..timebase.conversion import require_int64_ns4from .record_sample import RecordSample5from .history_records import HistorySample67@dataclass(frozen=True)8class DecodedTimeGroup:9    """保存一个session在同一整数ns的全部更新;来源和原sequence仍独立。"""1011    time_ns: int  # 完整组的共同纳秒坐标。12    samples: tuple[HistorySample | RecordSample, ...]  # 同组全部原观测,不套用last_by_sequence策略。1314    def __post_init__(self) -> None:15        """检查同刻、同会话和唯一原身份,不执行绑定或表达式。1617        参数: 无;读取time_ns/samples。返回: None。18        异常: TypeError/ValueError/OverflowError为结构或身份错误。19        """20        require_int64_ns(self.time_ns)21        if type(self.samples) is not tuple or not self.samples or any(type(item) not in (HistorySample,RecordSample) for item in self.samples):22            raise TypeError('完整时间组需要非空的HistorySample或RecordSample tuple')23        if any(item.time_ns != self.time_ns for item in self.samples) or len({item.source_ref.session_id for item in self.samples}) != 1:24            raise ValueError('时间组不能混用时间或session')25        # 每别名原来源/sequence定位唯一,同原行不同列仍各自保留。26        identities = {(item.source_ref, item.name, item.sequence) for item in self.samples}27        if len(identities) != len(self.samples):28            raise ValueError('完整时间组重复原观测')29
Chronaxis 用户手册 · 离线阅读