# 架构与数值契约

核心为不可变 `Scores`：验证有限输入、复制并排序，查询校正秩与并列保守 p 值。校准器存储排序值，原始预测和训练数据不持久化。回归评分与集合构造分离，使同一固定分数可查询多个预先指定的 alpha；这不授权事后择优报告覆盖。

回归模块包含普通、尺度、CQR、双尾和 CV+；分类模块先验证概率、产生标签分数，再用同一 `Scores` 阈值选择标签。APS 的累计排序仅影响分数，不改变公开输出的标签索引顺序。分组校准通过 Map 构造桶，公开组名排序。多输出方法先按行取最大值，因此样本量仍为行数，不是单元数。

所有数据接口先检查维度、预算与有限性；不做模糊修复。空预测批次报错，使误接空数据可以被发现。JSON schema 固定、拒绝重复字段和未知字段。公开 `Interval` 的手工构造需要调用者负责；评估与结果传输会重新验证。

## 已发现并修复的边界

1. 绝对/尺度残差曾只检查选中的分位数是否非负，可能遗漏更小的负分数；现在检查排序最小值，回归测试覆盖有限/无穷阈值。
2. `ceil((n+1)*(1-alpha))` 的浮点抵消会在 `alpha=k/(n+1)` 偏一个秩。生产实现从候选排除数量出发，按同一离散 p 值网格修正；参考实现枚举全部网格点。CV+ 下端点与上端点用同一网格保持对称。

3. 普通 `pub struct` 并不隐藏内部数组；外部调用包实际可修改校准数组。所有校准状态字段已显式设为 `priv`，同一调用在修复后编译失败，生成接口只暴露受控方法。

## 复杂度与边界

校准排序 O(n log n)，普通阈值 O(1)，单 p 值 O(log n)。APS/RAPS 每行排序 O(c log c)。CV+ 每个查询行生成 n 对候选并分别排序，O(n log n)，受批量候选预算限制。分组快照恢复再验证每组及总量。代码没有声称通过性能基准。

有限输入仍可能产生端点溢出，明确报错；样本分辨率导致的无界结果是有意义输出。评估宽度或区间分数可因无界输出或有限 Double 算术范围得到正无穷，计数与覆盖率仍保留。CQR 空集合的经验宽度为零，Winkler 分数对空集合不定义而报错。
