verify — prism-style-plot 回归验证套件
技能自带的回归验证脚本,随技能包分发,换机器不丢验证能力。
文件
| 文件 | 覆盖范围 |
|---|---|
| verify_common.py | 公共工具:模拟数据生成(make_groups)、重叠检查、PASS/FAIL 报告 |
| verify1_column.py | Column 表三大图型:prism_bars / prism_boxplot / prism_violin + ttest/ANOVA 统计 |
| verify2_others.py | 其他表型:Grouped 手写分组柱、Survival KM、XY 4PL/linear、Contingency |
| verify3a_dot_size.py | 点径自适应 + 配色越界 + 非参数检验 |
| verify3b_zorder_layout.py | 抖动布局 + zorder 图层 + 长标签旋转 |
| verify3c_edge_cases.py | 统计边界场景 + 3 表型 + 报告补强 |
| verify4_twoway_posthoc.py | Two-way ANOVA 事后比较:交互显著→简单效应 / 纯加性→主效应 |
| verify5_grouped_annotated.py | Grouped 图上简单效应显著性标注(交互数据,48h 起效示例) |
| verify6_figsize_recommend.py | 画布推荐(recommend_shape / recommend_figsize,表型默认 + 关键词覆盖) |
| verify7_ylim_small.py | ylim<1 值域:细粒度步长 + bracket 数据最大值收集 |
| verify8_ylim_small_allsigns.py | ylim<1 修复全图型推广(下限分级 / boxplot 边框 / 负值) |
| verify9_deep_matrix.py | 析因设计矩阵深度回归(组数×样本量×交互形态) |
| verify10_deep_others.py | 其他表型深度回归(含 figsize 关键词覆盖) |
| verify11_deep_edge.py | 深度边界/性能(NaN/inf、空组、n=1、预检、向量化;含墙钟耗时断言,强制串行) |
| verify12_combined_panel.py | v2.7.0 多数据集合并面板图 + 总报告(compose_panel_figure / build_master_report) |
| verify13_multi_sheet.py | v2.7.2 单 Excel 多 sheet 读取 → 合并面板图(read_excel_sheets) |
| verify14_v28_additions.py | v2.8.0 新增 API 回归(23 项):误差线 5 口径 + n=0/n=1 防御、log 轴守卫、零基线只在跨零时画、堆叠柱/水平柱/配对连线三个新图型、CLD 字母(两入口一致/链式 a·ab·b)、断轴、标签折行、离群值 Grubbs/ROUT、RM one-way(SS 分解闭合 + F 自洽)、投稿合规自检(不误报 + 真违规必检出)、XY 模型族(power 真实参数恢复)、7 种事后方案 + 效应量单调性、risk 表计数单调不增、布局缓存容量护栏。每个 check 用独立固定种子,可单独重跑任一检查 |
| build_deep_report.py | 把 verify9/10 的深度回归产物汇总成一个 HTML 报告 |
| run_all.py | 一键回归入口(首选),跑固定 16 个 verify;无参数=全套,支持 --quick/--only <档位> |
| run_full_suite.py | 备用入口(v2.7.6 明确):glob 自动发现 verify*.py/test*.py。仅当你另有自定义 verify 脚本、不想改 run_all.py 注册表时用——不保证执行顺序、不并行、不隔离耗时脚本,日常回归请用 run_all.py |
运行方式
# 遵循技能环境约定:先取 venv 解释器
PY=$(python ../../scripts/ensure_env.py 2>/dev/null || python scripts/ensure_env.py)
# 入口 1(首选):跑固定 16 个官方 verify(自动清理 output/)
$PY scripts/verify/run_all.py
$PY scripts/verify/run_all.py --keep-output # 保留产物供人工复查
# 入口 2(备用,v2.3.1+):glob 自动发现当前目录所有 verify*.py + test*.py
# 仅当你有自定义 verify 脚本、不想改 run_all.py 注册表时使用
$PY scripts/verify/run_full_suite.py # Markdown 表格输出
$PY scripts/verify/run_full_suite.py --json # CI 友好 JSON 输出
$PY scripts/verify/run_full_suite.py /path/to # 自定义 verify 目录
单跑一个用例(调试时):
$PY scripts/verify/verify1_column.py
输出
- 产物(PNG/PDF/_report.md)写入
output/子目录,默认在回归全部通过后清理; - 退出码 0 = 全部 PASS,1 = 存在 FAIL;
- 新增用例:命名
verifyN_*.py放入本目录,并在run_all.py的VERIFY_SCRIPTS注册。
维护约定
- 每次对
scripts/prism_theme.py做改动,先python -c "import prism_theme"确认不崩, 再跑run_all.py确认无回归; - 回归失败立即还原改动,并记
status=reverted到 learnings.jsonl。 output/不参与技能包分发:该目录是回归运行的副产物 (PNG/PDF/_report.md/html),体积可达 1.5M+,只应存在于本地。 交付/分享技能包前用run_all.py(默认自动清理)或手动清空output/, 不要把output/内容带进技能包。run_all.py默认行为已满足此约定; 如需在沙箱环境(回收站不可用)手动清理,直接删除output/内文件即可。- 新增验证脚本必须带失败退出码:每个
verifyN_*.py结尾必须sys.exit(1 if fails else 0)(无 fails 列表时用sys.exit(0 if ok else 1))——run_all.py靠子进程退出码判定 PASS/FAIL,缺退出码会让脚本内 FAIL 被误报为 PASS("假绿",v2.1.1 教训)。
微信扫一扫