Source code for pgm.inference.messageParsing

import numpy as np
from ..helpers.common import Node
from ..helpers.search import dfs

[docs]class MessageParsing(object): r""" message parsing algorithm KF Book: chapter 7 """ def __init__(self, rootNode, type='BN'): r""" rootNode: Node attribute type : 'BN' or 'MN' """ self.type = type if isinstance(rootNode, Node): self.rootNode = rootNode
[docs] def parse_message(self, node1, node2): r""" Caclulates the message from node1 -> node2 m_{node1->node2} = \sum_{node1} \phi(node1)\phi(node1, node2) \prod_{pa \in parents_{node1}} message_{pa->node1} node1: ['int' or 'str'] or <Node> object node2: ['int' or 'str'] or <Node> object """ if not isinstance(node1, Node): node1 = dfs(self.rootNode, node1, self.type).searchNode if not isinstance(node2, Node): node2 = dfs(self.rootNode, node2, self.type).searchNode if self.type=='BN': assert node2 in node1.children, "No direct link between node1 and node2" else: assert node2 in node1.nbrs, "No direct link between node1 and node2"