Chronaxis用户手册English
本页目录

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
Chronaxis 用户手册 · 离线阅读