#!/usr/bin/env python # -*- coding: utf-8 -*- from primo.core import BayesNet from primo.reasoning import DiscreteNode import numpy class EasiestFactorElimination(object): '''This is the easiest way for factor elimination. But not very efficient.''' def __init__(self): self.bn= BayesNet() def set_BayesNet(self,bayesnet): self.bn = bayesnet def calculate_PriorMarginal(self,variables): nodes = self.bn.get_all_nodes() finCpd = nodes.pop().get_cpd() for n in nodes: finCpd = finCpd.multiplication(n.get_cpd()) for v in finCpd.get_variables()[:]: if v not in variables: finCpd = finCpd.marginalization(v) return finCpd