В настоящее время есть два способа сделать это: первый - «благословенный», который сейчас не очень гибок.
with pm.Model():
...
trace = pm.sample()
trace.report.raise_ok()
Это увеличит значение ValueError
для расхождений или плохой настройки, но это довольно новое, так что вы еще не можете легко определить типы расхождений.
Другой способ, который намного менее стабилен, это тот же объект trace
, что и выше,
from pymc3.backends.report import WarningType
if any(w.kind is WarningType.BAD_ACCEPTANCE for w in trace.report._warnings):
raise SomeCustomError(w.message)
Атрибут _warnings
помечен как закрытый и может измениться в будущем, но может предоставить вам большую гибкость в доступе к статистике конвергенции.