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(six.iterkeys(model_tape)), ["x"])
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)
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() 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)