chronaxis.core.counts_v4
源码基线:8904c2f744951857659abd40aaa3535d57faf53c
1"""定义v4计数结果及对象发现的完整性,不保存事件或原始样本。23样本计数沿用既有真实更新与选择政策,对象计数只计指定规则或窗口在本会话4最终产生的对象。计数保留整数;有证据的空集、发现不完整及没有观测分别报告。5"""67from .types import QualityFlag as Q8910OBJECT_COUNTS = ('point_event_count', 'activity_count', 'segment_count')11COUNT_OPERATIONS = ('sample_count', *OBJECT_COUNTS)121314def classify_count(count, policy, *, observed, determinate, complete):15 """由已知计数及范围证据决定整数结果、状态、原因与额外质量。1617 参数: count为已发现对象数;policy为report或strict;后三项分别说明是否18 有观测、是否至少有部分可判定范围、是否能判定完整请求。19 返回: (value,status,reason,quality),完全未知为None。20 异常: ValueError为计数或部分结果政策不合法。21 """22 if type(count) is not int or count < 0 or policy not in ('report', 'strict'):23 raise ValueError('计数需要非负原生整数及report/strict政策')24 if not observed:25 return None, 'indeterminate', 'no_observation', Q.MISSING26 if count > (1 << 64) - 1:27 return None, 'indeterminate', 'calculation_failed', Q.OVERFLOW28 if not determinate and not count:29 return None, 'indeterminate', 'insufficient_data', Q.MISSING30 if not complete:31 if policy == 'strict':32 return None, 'indeterminate', 'insufficient_coverage', Q.MISSING33 return count, 'partial', 'partial_coverage', Q.MISSING34 return count, 'complete', 'ok' if count else 'empty_selection', Q.NONE35