feat(inference): add loopy belief propagation