Chronaxis用户手册English
本页目录

chronaxis.execution.record_sample_series

源码基线:8904c2f744951857659abd40aaa3535d57faf53c

1"""把一小批实际记录及有效截止交给既有样本统计/选择核。23只在当前批插入必要的失效边界,不保存另一条时间轴;这些边界的真实更新标志为False。4半开范围及共享右端由原CalculationSeries/CalculationDefinition处理,不把保持值当作新样本。5"""6from ..core.calculations import CalculationSeries7from ..core.models import Interval8from ..core.numeric import ScalarValue9from ..core.types import QualityFlag as Q101112def sample_series(rows,unit,conditioned):13    """构造有界核输入。参数: 至少两点的内部行/单位/条件开关。返回: CalculationSeries。异常: 类型/时间错误。"""14    times=[];values=[];conditions=[];updates=[]15    for index,row in enumerate(rows):16        time,value,deadline,condition,condition_end=row[:5]17        end=rows[index+1][0] if index+1<len(rows) else time18        # 每对最多两个不同过期点;不插入计算所选固定周期的虚构时刻。19        points=(time,*sorted({d for d in (deadline,condition_end) if d is not None and time<d<end}))20        for point in points:21            times.append(point)22            values.append(ScalarValue(None,value.dtype,False,value.quality|Q.STALE,value.labels)23                if deadline is not None and point>=deadline and point<end else value)24            if conditioned:25                conditions.append(ScalarValue(None,condition.dtype,False,condition.quality|Q.STALE,condition.labels)26                    if condition_end is not None and point>=condition_end and point<end else condition)27            updates.append(bool(row[5]) if point==time and len(row)>5 else False)28    return CalculationSeries(Interval(times[0],times[-1]),tuple(times),tuple(values),tuple(updates),unit,29        conditions=tuple(conditions) if conditioned else None)30
Chronaxis 用户手册 · 离线阅读