# 5. BFMI if hasattr(inference_data, "sample_stats") and hasattr(inference_data.sample_stats, "bfmi"): bfmi = inference_data.sample_stats.bfmi.values.mean() if bfmi < bfmi_threshold: results["failures"].append(f"BFMI = {bfmi:.2f} < {bfmi_threshold}") results["passed"] = False
# 1. R-hat rhat = az.rhat(inference_data).to_array().values if np.any(rhat > rhat_threshold): results["failures"].append(f"R-hat > {rhat_threshold} for some parameters") results["passed"] = False hmc checker
print("HMC Checker Report") print("=" * 40) print(f"Overall status: {'✅ PASS' if report['passed'] else '❌ FAIL'}") if report["warnings"]: print("\n⚠️ Warnings:") for w in report["warnings"]: print(f" - {w}") if report["failures"]: print("\n❌ Failures:") for f in report["failures"]: print(f" - {f}") You could also wrap it as: # 5. BFMI if hasattr(inference_data
# 3. Divergent transitions if hasattr(inference_data, "sample_stats"): diverging = inference_data.sample_stats.diverging.values div_frac = np.mean(diverging) if div_frac > max_divergent_fraction: results["failures"].append(f"Divergent fraction = {div_frac:.3f} > {max_divergent_fraction}") results["passed"] = False elif div_frac > 0: results["warnings"].append(f"Some divergent transitions ({div_frac:.3f})") "sample_stats") and hasattr(inference_data.sample_stats