chronaxis.execution.transform_partial
源码基线:8904c2f744951857659abd40aaa3535d57faf53c
1"""区分滚动输入窗口的部分性和下游查询轴的覆盖率,只标记确实参与的原值。"""23from dataclasses import replace4from ..core.types import QualityFlag as Q567def partial_in_block(rows, window, *, samples):8 """核实当前有限块是否实际使用部分值或部分选择条件。910 参数: rows 为点/值/有效截止/条件/条件截止及可选真实更新,window 为实际计算请求。11 返回: 有属于半开窗口的真实选中样本,或有选中且有效的正长度保持区间时返回 True。12 异常: 内部行损坏时传播结构错误;不把末端共享点计入两块。13 """14 for index in range(len(rows)-1):15 time,value,deadline,condition,condition_deadline=rows[index][:5]16 if not (value.partial or condition is not None and condition.partial):17 continue18 if not value.valid or condition is not None and (not condition.valid or not condition.value):19 continue20 if samples:21 if (len(rows[index])>5 and rows[index][5] and window.start_ns<=time<window.end_ns22 and (deadline is None or time<deadline) and (condition_deadline is None or time<condition_deadline)):23 return True24 else:25 left=max(time,window.start_ns)26 right=min(rows[index+1][0],window.end_ns)27 if deadline is not None:28 right=min(right,deadline)29 if condition_deadline is not None:30 right=min(right,condition_deadline)31 if left<right:32 return True33 return False343536def partial_result(result, policy):37 """保留原失败,或将有限估算按当前指标政策输出。参数: 冻结归约结果和report/strict。返回: 新结果。异常: 非结果对象。"""38 quality=result.quality|Q.ESTIMATED39 if result.value is None:40 return replace(result,quality=quality)41 strict=policy=='strict'42 return replace(result,value=None if strict else result.value,status='indeterminate' if strict else 'partial',43 reason='partial_input',quality=quality)44