chronaxis.core.mean_weights_reference
源码基线:8904c2f744951857659abd40aaa3535d57faf53c
1"""复用标量均值的先归一化再相乘规则,避免先求面积导致溢出。"""23from math import isfinite4from .types import QualityFlag as Q567def normalized_mean_terms(values, weights, denominator):8 """将有限有效值按整窗正分母加权,返回原序项和计算质量。910 参数: 同长有效数值/正权重序列,denominator为已核实总权重。11 返回: (tuple, QualityFlag)。异常: 结构或分配错误传播;非有限/下溢标质量。12 """13 try:14 if len(values) != len(weights) or not isfinite(denominator) or denominator <= 0:15 raise ValueError('均值需要同长输入和有限正分母')16 terms, quality = [], Q.NONE17 for value, weight in zip(values, weights):18 if not isfinite(value) or not isfinite(weight) or weight <= 0:19 raise ValueError('均值回读需要有限数值和正权重')20 term = value * (weight / denominator)21 failure = Q.NONFINITE if not isfinite(term) else Q.PRECISION_LOSS if term == 0 and value != 0 else Q.NONE22 quality |= failure23 terms.append(term if failure == Q.NONE else 0.0)24 return tuple(terms), quality25 finally:26 # 保留原异常,断开本帧借用列,避免调用方保存traceback时延长其生命周期。27 values = weights = terms = None28