class FactorGraphNode(Node): def __init__(self, name=None): super(FactorGraphNode, self).__init__(name) self._mailbox = Mailbox() def send_message(self, message, other_node): other_node._recieve_message(message) def send_all_BEC_messages(self): for node in self.connections: #print str(self) + '|' + str(self.generate_BEC_message_for(node)) + '|' + str(node) self.send_message(self.generate_BEC_message_for(node), node) def send_all_BSC_messages(self): for node in self.connections: self.send_message(self.generate_BSC_message_for(node), node) def send_all_noisy_BEC_messages(self, p): for node in self.connections: self.send_message(self.generate_noisy_BEC_message_for(node, p), node) def send_all_noisy_BSC_messages(self, p): for node in self.connections: self.send_message(self.generate_noisy_BSC_message_for(node, p), node) def generate_noisy_BEC_message_for(self, node, p): if random() < p: return BinaryMessage(0, self) else: return self.generate_BEC_message_for(node) def generate_noisy_BSC_message_for(self, node, p): b = self.generate_BSC_message_for(node) if random() < p: b._data * -1 return b else: return b def generate_BEC_message_for(self, node): # Implemented by descendant classes pass def _recieve_message(self, message): self._mailbox.recieve_message(message) def clear_messages(self): self._mailbox.clear()
def __init__(self, name=None): super(FactorGraphNode, self).__init__(name) self._mailbox = Mailbox()