Ejemplo n.º 1
0
    def marginals(self, *args):
        self.do_inference()

        n = self.n
        proj = Gauss.Map(np.zeros((0, n)))  # n -> 0
        for t in args:
            proj = Gauss.copy(n).then(Gauss.tensor(proj, self.eval_term(t)))
        return self.state.then(proj)
Ejemplo n.º 2
0
    def do_inference(self):
        n_eqs = len(self.equations)

        if n_eqs > 0:
            n = self.n
            joint = Gauss.Map(np.zeros((0, n)))  # n -> 0
            for (s, t) in self.equations:
                diff = self.eval_term(s + (-1.0) * t)
                joint = Gauss.copy(n).then(Gauss.tensor(joint, diff))

            zz = np.zeros((n_eqs, 1))
            zeros = Gauss.Map(np.zeros((n_eqs, 0)), zz)  # 0 -> n_eqs

            if not Gauss.in_support(self.state.then(joint), zz):
                raise InferenceError("conditions cannot be satisfied")
            else:
                dis = self.state.disintegrate(joint)
                self.state = dis.dot(zeros)
                self.equations = []
Ejemplo n.º 3
0
 def eval_term(self, term):
     (A, b) = self.eval_term_rec(term)
     return Gauss.Map(A, np.array([[b]]))