Ejemplo n.º 1
0
    def testTapeNoName(self):
        def model():
            x = ed.Normal(loc=0., scale=1., name="x")
            y = ed.Normal(loc=x, scale=1.)
            return x + y

        with ed.tape() as model_tape:
            _ = model()

        self.assertEqual(list(model_tape.keys()), ["x"])
Ejemplo n.º 2
0
    def testTape(self):
        def model():
            x = ed.Normal(loc=0., scale=1., name="x")
            y = ed.Normal(loc=x, scale=1., name="y")
            return x + y

        with ed.tape() as model_tape:
            output = model()

        self.assertEqual(list(model_tape.keys()), ["x", "y"])
        expected_value = model_tape["x"] + model_tape["y"]
        actual_value = output
        self.assertEqual(expected_value, actual_value)
Ejemplo n.º 3
0
    def testTape(self):
        def model():
            x = ed.Normal(loc=0., scale=1., name="x")
            y = ed.Normal(loc=x, scale=1., name="y")
            return x + y

        with ed.tape() as model_tape:
            output = model()

        expected_value, actual_value = self.evaluate(
            [model_tape["x"] + model_tape["y"], output])
        self.assertEqual(list(six.iterkeys(model_tape)), ["x", "y"])
        self.assertEqual(expected_value, actual_value)
Ejemplo n.º 4
0
    def testTapeInnerForwarding(self):
        def double(f, *args, **kwargs):
            return 2. * ed.traceable(f)(*args, **kwargs)

        def model():
            x = ed.Normal(loc=0., scale=1., name="x")
            y = ed.Normal(loc=x, scale=1., name="y")
            return x + y

        with ed.trace(double):
            with ed.tape() as model_tape:
                output = model()

        self.assertEqual(list(model_tape.keys()), ["x", "y"])
        expected_value = model_tape["x"] + model_tape["y"]
        actual_value = output
        self.assertEqual(expected_value, actual_value)
Ejemplo n.º 5
0
    def testTapeOuterForwarding(self):
        def double(f, *args, **kwargs):
            return 2. * ed.traceable(f)(*args, **kwargs)

        def model():
            x = ed.Normal(loc=0., scale=1., name="x")
            y = ed.Normal(loc=x, scale=1., name="y")
            return x + y

        with ed.tape() as model_tape:
            with ed.trace(double):
                output = model()

        expected_value, actual_value = self.evaluate(
            [2. * model_tape["x"] + 2. * model_tape["y"], output])
        self.assertEqual(list(six.iterkeys(model_tape)), ["x", "y"])
        self.assertEqual(expected_value, actual_value)