Chronaxis用户手册English
本页目录

chronaxis.execution.hosted_sample_reduction

源码基线:8904c2f744951857659abd40aaa3535d57faf53c

1"""把有限真实样本块交给明确注册的宿主归约,复用原半开选择、覆盖与独立数值后端。"""23from dataclasses import replace4from ..core.calculation_output_numpy import convert_result_numpy5from ..core.calculation_output_reference import convert_result_reference6from ..core.sample_reduction import SampleReductionResult7from ..core.sample_reduction_numpy import NumpySampleReduction8from ..core.sample_reduction_reference import ReferenceSampleReduction9from ..core.types import QualityFlag as Q10from ..extension_runtime import HostedReduction11from ..results.budget import _cleanup_owner121314class HostedSampleReduction:15    """一个会话、事件或窗口持有一个插件状态;插件不决定是否选入样本及结果显示单位。"""1617    def __init__(self, spec, input_unit, dtype, descriptor, conversion, backend, budget, partial_limit):18        """创建所选后端的覆盖计算器及宿主状态。参数: 已校验请求、描述、单位及预算。1920        返回: 独立归约owner。异常: 宿主工厂或预算失败转交可重试清理句柄。21        """22        self._host=self._coverage=None23        self._conversion=conversion24        self._convert=convert_result_reference if backend=='reference' else convert_result_numpy25        self._closed=self._finished=self.partial=False26        try:27            coverage_spec=replace(spec,operation='sample_count',output_unit='1')28            kernel=ReferenceSampleReduction if backend=='reference' else NumpySampleReduction29            self._coverage=kernel(coverage_spec,input_unit,dtype,partial_limit=partial_limit)30            self._host=HostedReduction(descriptor,backend,budget)31        except BaseException as error:32            self._host=getattr(error,'extension_cleanup_owner',self._host)33            _cleanup_owner(self,error,'hosted_sample_cleanup_owner','宿主样本归约')34            raise3536    def push(self,series):37        """沿同一选中掩码消费并返回覆盖事实。参数: 有限 CalculationSeries。返回: 本块 facts。异常: 回调或输入错误。"""38        return self._coverage.push(series,sample_consumer=self._host.consume)3940    def finish(self):41        """无参与值保留空结果,输出单位只变换一次。参数: 无。返回: SampleReductionResult。异常: 回调或转换错误。"""42        count=self._coverage.valid_sample_count43        number,quality=None,Q.NONE44        if count:45            value=self._host.finalize()46            self.partial=value.partial47            if value.valid:48                number,quality=self._convert(value.value,value.dtype,self._conversion)49            else:50                quality=value.quality51        self._finished=True52        return SampleReductionResult(number,self._conversion.unit,bool(quality),quality,count)5354    def close(self):55        """未正常结束时通知取消,释放宿主和覆盖状态。参数: 无。返回: None。异常: 清理失败可重试。"""56        if self._closed:57            return58        if self._host is not None:59            self._host.close(cancelled=not self._finished)60        if self._coverage is not None:61            self._coverage.close()62        self._closed=True63
Chronaxis 用户手册 · 离线阅读