用途:PyMC 提供测试工具,用先验预测采样替代 MCMC 采样,从而加速测试套件,适合在不运行昂贵推断的情况下检查模型结构。
主要能力:mock_sample 将 pm.sample() 替换为先验预测采样;mock_sample_setup_and_teardown 提供 pytest fixture 辅助;check_logcdf 与 check_logccdf 用于对照解析 log-CDF 校验自定义分布;可通过 sample_stats 字典模拟特定统计量(如 diverging、tree_depth)。fixture 会自动将 pm.Flat 替换为 pm.Normal、pm.HalfFlat 替换为 pm.HalfNormal,避免无效初值。
使用方式:基本用法为 pm.sample = mock_sample;在 conftest.py 中写 mock_pymc_sample = pytest.fixture(scope="function")(mock_sample_setup_and_teardown),测试函数接收该 fixture 后调用 pm.sample()。模拟统计量用 functools.partial 传入 sample_stats。
适用场景:测试模型规格、CI/CD 流水线、绘图代码、API 集成、序列化。需要检查后验值、ESS/r_hat 诊断、LOO-CV、模型比较时应使用真实采样。
限制:mock_sample 内部使用先验预测但以 posterior 形式返回,默认不含 prior、prior_predictive、posterior_predictive 或 sample_stats 组;依赖 posterior_predictive、warmup 组或 sample_stats 的代码在模拟采样下会失败。不同采样器产生的 DataTree 结构不同。真实采样默认也不含 posterior_predictive,需另行调用 pm.sample_posterior_predictive。官方文档见 https://www.pymc.io/projects/docs/en/latest/api/testing.html。