Ejemplo n.º 1
0
    def test_density_scaling_with_generator(self):
        # We have different size generators

        def true_dens():
            g = gen1()
            for i, point in enumerate(g):
                yield stats.norm.logpdf(point).sum() * 10

        t = true_dens()
        # We have same size models
        with pm.Model() as model1:
            Normal("n", observed=gen1(), total_size=100)
            p1 = aesara.function([], model1.logp())

        with pm.Model() as model2:
            gen_var = generator(gen2())
            Normal("n", observed=gen_var, total_size=100)
            p2 = aesara.function([], model2.logp())

        for i in range(10):
            _1, _2, _t = p1(), p2(), next(t)
            decimals = select_by_precision(float64=7, float32=1)
            np.testing.assert_almost_equal(
                _1, _t, decimal=decimals)  # Value O(-50,000)
            np.testing.assert_almost_equal(_1, _2)
Ejemplo n.º 2
0
 def test_cloning_available(self):
     gop = generator(integers())
     res = gop**2
     shared = aesara.shared(floatX(10))
     res1 = aesara.clone_replace(res, {gop: shared})
     f = aesara.function([], res1)
     assert f() == np.float32(100)
Ejemplo n.º 3
0
 def test_gen_cloning_with_shape_change(self, datagen):
     gen = generator(datagen)
     gen_r = at_rng().normal(size=gen.shape).T
     X = gen.dot(gen_r)
     res, _ = aesara.scan(lambda x: x.sum(), X, n_steps=X.shape[0])
     assert res.eval().shape == (50, )
     shared = aesara.shared(datagen.data.astype(gen.dtype))
     res2 = aesara.clone_replace(res, {gen: shared**2})
     assert res2.eval().shape == (1000, )
Ejemplo n.º 4
0
    def test_default_value(self):
        def gen():
            for i in range(2):
                yield floatX(np.ones((10, 10)) * i)

        gop = generator(gen(), np.ones((10, 10)) * 10)
        f = aesara.function([], gop)
        np.testing.assert_equal(np.ones((10, 10)) * 0, f())
        np.testing.assert_equal(np.ones((10, 10)) * 1, f())
        np.testing.assert_equal(np.ones((10, 10)) * 10, f())
        with pytest.raises(ValueError):
            gop.set_default(1)
Ejemplo n.º 5
0
    def test_set_gen_and_exc(self):
        def gen():
            for i in range(2):
                yield floatX(np.ones((10, 10)) * i)

        gop = generator(gen())
        f = aesara.function([], gop)
        np.testing.assert_equal(np.ones((10, 10)) * 0, f())
        np.testing.assert_equal(np.ones((10, 10)) * 1, f())
        with pytest.raises(StopIteration):
            f()
        gop.set_gen(gen())
        np.testing.assert_equal(np.ones((10, 10)) * 0, f())
        np.testing.assert_equal(np.ones((10, 10)) * 1, f())
Ejemplo n.º 6
0
    def test_gradient_with_scaling(self):
        with pm.Model() as model1:
            genvar = generator(gen1())
            m = Normal("m")
            Normal("n", observed=genvar, total_size=1000)
            grad1 = aesara.function([m.tag.value_var], at.grad(model1.logpt(), m.tag.value_var))
        with pm.Model() as model2:
            m = Normal("m")
            shavar = aesara.shared(np.ones((1000, 100)))
            Normal("n", observed=shavar)
            grad2 = aesara.function([m.tag.value_var], at.grad(model2.logpt(), m.tag.value_var))

        for i in range(10):
            shavar.set_value(np.ones((100, 100)) * i)
            g1 = grad1(1)
            g2 = grad2(1)
            np.testing.assert_almost_equal(g1, g2)
Ejemplo n.º 7
0
 def test_pickling(self, datagen):
     gen = generator(datagen)
     cloudpickle.loads(cloudpickle.dumps(gen))
     bad_gen = generator(integers())
     with pytest.raises(TypeError):
         cloudpickle.dumps(bad_gen)