chronaxis.execution.record_selection
源码基线:8904c2f744951857659abd40aaa3535d57faf53c
1"""把真实样本更新有界地交给原select核,并直接写最终选择表。23条件独自变化、TTL和裁剪边界不输出行。TRUE与UNKNOWN保持区别;只保存一批及4共享右端,没有完整选择历史或第二套算法。事件范围由必要历史提供相同协议。5"""6from ..core.calculations_reference import select_reference7from ..core.calculations_numpy import select_numpy8from ..results.budget import _reserve_owned_ram,_release_owned_ram,_cleanup_owner9from .record_point_buffer import RecordPointBuffer10from .record_sample_series import sample_series111213class RecordSelection(RecordPointBuffer):14 """拥有有限样本缓冲;结果行只在回调期间借用,不累计输出列表。"""15 def __init__(self,budget,spec,input_unit,dtype,step_ns,*,backend='numpy',batch_intervals=64,16 conditioned=False,consumer=None):17 """预约必要缓冲。参数: 共享预算/选择请求/类型/后端/回调。返回: owner。异常: 配置或预算错。"""18 if spec.operation!='select' or step_ns is not None or backend not in ('reference','numpy') or not callable(consumer):19 raise ValueError('选择需要select、无周期和明确后端及行消费者')20 if type(batch_intervals) is not int or not 1<=batch_intervals<=4096 or type(conditioned) is not bool:21 raise ValueError('选择需要合法批大小及条件开关')22 self._budget,self._spec,self._input_unit,self._dtype=budget,spec,input_unit,dtype23 self._consumer,self._backend=consumer,backend24 self._limit,self._conditioned,self._samples=batch_intervals,conditioned,True25 self._held_cost=self._fixed_cost=self._workspace_cost=026 self._rows=None;self._last_time=None27 self._closed=self._closing=self._failed=self._finished=False28 try:29 _reserve_owned_ram(self,65536+(batch_intervals+1)*4096,'_fixed_cost')30 self._rows=[]31 except BaseException as error:32 _cleanup_owner(self,error,'record_selection_cleanup_owner','样本选择');raise3334 def _flush(self):35 """消费当前正时段,留下右端供下一批。参数: 无。返回: None。异常: 核或输出错误。"""36 if len(self._rows)<2:return37 series=row=iterator=None38 try:39 _reserve_owned_ram(self,65536+len(self._rows)*36864,'_workspace_cost')40 series=sample_series(self._rows,self._input_unit,self._conditioned)41 iterator=(select_reference if self._backend=='reference' else select_numpy)(series,self._spec)42 for row in iterator:self._consumer(row)43 self._rows[:]=self._rows[-1:]44 except BaseException:45 self._failed=True;raise46 finally:47 if iterator is not None:iterator.close()48 series=row=iterator=None49 _release_owned_ram(self,self._workspace_cost,'_workspace_cost')5051 def finish(self):52 """EOF后输出最后正范围,无末尾假样本。参数: 无。返回: None。异常: 原计算/写入错。"""53 self._require_open()54 if not self._finished:self._flush();self._finished=True5556 def close(self):57 """释放缓冲及回调,实际费用归零后关闭。参数: 无。返回: None。异常: 预算释放错。"""58 if self._closed:return59 self._closing=True;self._rows=self._consumer=None60 _release_owned_ram(self,self._workspace_cost,'_workspace_cost')61 _release_owned_ram(self,self._fixed_cost,'_fixed_cost')62 self._closed=True63