关于 physverify
physverify 用于检查数值 ODE 和 PDE 求解器是否达到其声明的精度并符合物理要求,面向计算物理开发者。它结合源码扫描与可执行验证;目前 PDE 支持仅限一维。
主要功能
- 01扫描代码中的数值与常量问题
- 02依据物理规格验证求解器阶数
- 03检查 Runge-Kutta 阶数与稳定性
- 04通过通过或失败结果评估收敛误差
- 05在 CI 中运行检查
适用场景
- 01在采用模拟结果前审查求解器
- 02根据系数检查 Runge-Kutta 表
- 03使用测得的误差测试收敛性
- 04验证失败时令 CI 任务失败
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 3 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| specs | array | 否 | 规格文件路径 |
| project | string | 否 | 要搜索 verify_*.py 的 project 文件夹 |
详细介绍
physverify
检查模拟是否以其声称的精度阶数求解了其声称的方程,而不只是检查它能否运行。
physverify 仍在积极迭代(v0.5.1),欢迎计算物理社区贡献代码和测试用例。适用范围:ODE 和 PDE 的数值解(时间积分、收敛性、守恒性),以及一些蒙特卡洛检查。只需 NumPy。
pip install physverify
physverify demo
此演示先检查正确的求解器(所有检查均通过),再检查阻尼系数大 10% 的同一求解器(所有检查均失败):
如果你是新手,从这里开始:大约十分钟即可了解安装和首次检查,并附有一段提示词,供使用 AI 编码助手时粘贴。
在自己的代码上使用
- 任何项目,无需设置:
physverify scan PATH会读取代码(不会运行任何内容),并标记阶数不符合声明的 Runge-Kutta 方法(以表格、类属性或代码阶段形式编写)、与网格不匹配的网格间距、接近但不准确的物理常数,以及值得进行往返测试的反函数对。 - ODE 求解器:
physverify init verify_solver.py --solver mysolver --order 4会生成一个规格文件;填写方程(依据物理过程,而不是你的代码),然后运行physverify run verify_solver.py。 - Runge-Kutta 表:
check_tableau(A, b, c, claimed=3)(来自physverify.butcher)仅根据系数检查其阶数、阶段阶数和稳定性。 - 已有的误差数据:
check_order(hs, errors, expected=2)会给出 PASS、FAIL 或 INCONCLUSIVE,并附上理由。
在 CI 中运行
检查失败会导致任务失败,就像单元测试出错一样(CI 指南:选项、pre-commit、pytest):
- uses: rcgiri-physics/[email protected]
with:
specs: tests/verify_*.py
入门指南 · 示例 · PASS 的含义 · 故障排除 · API
它能发现错误吗?
在注入五个小型求解器的 37 个错误中,它标记出了 35 个(普通的“与一个答案比较”测试:27 个),且没有误报。这些错误和检查均由同一个人编写,因此这只能说明工具按设计运行,不能说明它在其他人的代码上表现如何。在公开的物理学代码仓库中,向作者报告了 74 个缺陷;其中 14 个是通过 physverify 检查发现的,11 个是通过直接运行代码发现的,其余则是通过各仓库的测试脚本或阅读代码发现的。现在,单独运行 physverify scan(不使用脚本)就能发现 74 个缺陷中的 18 个,高于第一个版本中的 2 个;它还在相同的代码仓库中发现了 7 个新缺陷(各方法分别发现了哪些缺陷)。这些数量仅描述该样本,并非错误率。详情见:结果,以及用于重新生成所有表格的 results/README.md。
局限
最适用于 ODE;目前仅支持一维 PDE。你的代码需要能够添加源项,或者需要一个本身也可能出错的小型包装器。PASS 表示这些检查未发现问题;它不能证明模拟正确,而且其独立性仅取决于你编写的参考实现:参见 PASS 的含义。
贡献、引用和许可证
欢迎提供帮助:在你自己的求解器上进行试用并提交报告、由作者以外的人编写的注入错误、适配器和文档。请参阅 CONTRIBUTING.md、行为准则、用于获取帮助的 SUPPORT.md、关于运行不可信代码的 SECURITY.md,以及面向 AI 助手的 AGENTS.md。引用时,请使用 doi:10.5281/zenodo.23534512 或 CITATION.cff。变更记录:CHANGELOG.md;计划:ROADMAP.md。MIT 许可证,版权所有 (c) 2026 Ram Chandra Giri。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。