Ejemplo n.º 1
0
def test_full_adapt_not_invertible():
    window = 10
    pot = quadpotential.QuadPotentialFullAdapt(
        2, np.zeros(2), np.eye(2), 0, adaptation_window=window
    )
    for i in range(window + 1):
        pot.update(np.ones(2), None, True)
    with pytest.raises(ValueError):
        pot.raise_ok(None)
Ejemplo n.º 2
0
def test_full_adapt_adaptation_window(seed=8978):
    np.random.seed(seed)
    window = 10
    pot = quadpotential.QuadPotentialFullAdapt(
        2, np.zeros(2), np.eye(2), 1, adaptation_window=window
    )
    for i in range(window + 1):
        pot.update(np.random.randn(2), None, True)
    assert pot._previous_update == window
    assert pot.adaptation_window == window * pot.adaptation_window_multiplier

    pot = quadpotential.QuadPotentialFullAdapt(
        2, np.zeros(2), np.eye(2), 1, adaptation_window=window
    )
    for i in range(window + 1):
        pot.update(np.random.randn(2), None, True)
    assert pot._previous_update == window
    assert pot.adaptation_window == window * pot.adaptation_window_multiplier
Ejemplo n.º 3
0
def test_full_adapt_update_window(seed=1123):
    np.random.seed(seed)
    init_cov = np.array([[1.0, 0.02], [0.02, 0.8]])
    pot = quadpotential.QuadPotentialFullAdapt(2, np.zeros(2), init_cov, 1, update_window=50)
    assert np.allclose(pot._cov, init_cov)
    for i in range(49):
        pot.update(np.random.randn(2), None, True)
    assert np.allclose(pot._cov, init_cov)
    pot.update(np.random.randn(2), None, True)
    assert not np.allclose(pot._cov, init_cov)
Ejemplo n.º 4
0
def test_full_adapt_sampling(seed=289586):
    np.random.seed(seed)

    L = np.random.randn(5, 5)
    L[np.diag_indices_from(L)] = np.exp(L[np.diag_indices_from(L)])
    L[np.triu_indices_from(L, 1)] = 0.0

    with pymc3.Model() as model:
        pymc3.MvNormal("a", mu=np.zeros(len(L)), chol=L, shape=len(L))

        pot = quadpotential.QuadPotentialFullAdapt(model.ndim, np.zeros(model.ndim))
        step = pymc3.NUTS(model=model, potential=pot)
        pymc3.sample(draws=10, tune=1000, random_seed=seed, step=step, cores=1, chains=1)
Ejemplo n.º 5
0
def test_full_adapt_sample_p(seed=4566):
    # ref: https://github.com/stan-dev/stan/pull/2672
    np.random.seed(seed)
    m = np.array([[3.0, -2.0], [-2.0, 4.0]])
    m_inv = np.linalg.inv(m)

    var = np.array([
        [2 * m[0, 0], m[1, 0] * m[1, 0] + m[1, 1] * m[0, 0]],
        [m[0, 1] * m[0, 1] + m[1, 1] * m[0, 0], 2 * m[1, 1]],
    ])

    n_samples = 1000
    pot = quadpotential.QuadPotentialFullAdapt(2, np.zeros(2), m_inv, 1)
    samples = [pot.random() for n in range(n_samples)]
    sample_cov = np.cov(samples, rowvar=0)

    # Covariance matrix within 5 sigma of expected value
    # (comes from a Wishart distribution)
    assert np.all(np.abs(m - sample_cov) < 5 * np.sqrt(var / n_samples))
Ejemplo n.º 6
0
def test_full_adapt_sampling(seed=289586):
    np.random.seed(seed)

    L = np.random.randn(5, 5)
    L[np.diag_indices_from(L)] = np.exp(L[np.diag_indices_from(L)])
    L[np.triu_indices_from(L, 1)] = 0.0

    with pymc3.Model() as model:
        pymc3.MvNormal("a", mu=np.zeros(len(L)), chol=L, size=len(L))

        initial_point = model.initial_point
        initial_point_size = sum(initial_point[n.name].size
                                 for n in model.value_vars)

        pot = quadpotential.QuadPotentialFullAdapt(
            initial_point_size, np.zeros(initial_point_size))
        step = pymc3.NUTS(model=model, potential=pot)
        pymc3.sample(draws=10,
                     tune=1000,
                     random_seed=seed,
                     step=step,
                     cores=1,
                     chains=1)
Ejemplo n.º 7
0
def test_full_adapt_warn():
    with pytest.warns(UserWarning):
        quadpotential.QuadPotentialFullAdapt(2, np.zeros(2), np.eye(2), 0)