Example #1
0
def test_update_H(dim, subdim, method, symm, pd):
    rng = np.random.RandomState(1)

    tol = dict(atol=1e-6, rtol=1e-6)

    B = get_matrix(dim, dim, pd, True, rng=rng)
    H = get_matrix(dim, dim, pd, True, rng=rng)

    S = get_matrix(dim, subdim, rng=rng)
    Y = H @ S

    B1 = update_H(None, S, Y, method=method, symm=symm)
    np.testing.assert_allclose(B1 @ S, Y, **tol)

    B2 = update_H(B, S, Y, method=method, symm=symm)
    np.testing.assert_allclose(B2 @ S, Y, **tol)

    if subdim == 1:
        B3 = update_H(B, S.ravel(), Y.ravel(), method=method, symm=symm)
        np.testing.assert_allclose(B2, B3, **tol)

        B4 = update_H(B,
                      S.ravel() / 1e12,
                      Y.ravel() / 1e12,
                      method=method,
                      symm=symm)
        np.testing.assert_allclose(B, B4, atol=0, rtol=0)
Example #2
0
def test_modified_gram_schmidt(n, mx, my, eps1, eps2, maxiter):
    rng = np.random.RandomState(2)

    tol = dict(atol=1e-6, rtol=1e-6)
    mgskw = dict(eps1=eps1, eps2=eps2, maxiter=maxiter)

    X = get_matrix(n, mx, rng=rng)

    Xout1 = modified_gram_schmidt(X, **mgskw)
    _, nxout1 = Xout1.shape

    np.testing.assert_allclose(Xout1.T @ Xout1, np.eye(nxout1), **tol)
    np.testing.assert_allclose(np.linalg.det(X.T @ X),
                               np.linalg.det(X.T @ Xout1)**2, **tol)

    Y = get_matrix(n, my, rng=rng)
    Xout2 = modified_gram_schmidt(X, Y, **mgskw)
    _, nxout2 = Xout2.shape

    np.testing.assert_allclose(Xout2.T @ Xout2, np.eye(nxout2), **tol)
    np.testing.assert_allclose(Xout2.T @ Y, np.zeros((nxout2, my)), **tol)

    X[:, 1] = X[:, 0]

    Xout3 = modified_gram_schmidt(X, **mgskw)
    _, nxout3 = Xout3.shape
    assert nxout3 == nxout1 - 1

    np.testing.assert_allclose(Xout2.T @ Xout2, np.eye(nxout2), **tol)
Example #3
0
def test_symmetrize(rngstate, n, m):
    rng = np.random.RandomState(rngstate)
    X = get_matrix(n, m, rng=rng)
    minnm = min(n, m)
    Y = X[:minnm, :minnm]
    wrappers['symmetrize'](Y)
    np.testing.assert_allclose(Y, Y.T)
Example #4
0
def test_exact(dim, order, eta, threepoint):
    rng = np.random.RandomState(1)

    tol = dict(atol=1e-4, rtol=eta**2)

    poly = poly_factory(dim, order, rng=rng)
    x = rng.normal(size=dim)

    _, g, h = poly(x)

    H = NumericalHessian(lambda x: poly(x)[:2], g0=g, x0=x,
                         eta=eta, threepoint=threepoint)

    l1, V1, AV1 = exact(h)
    l2, V2, AV2 = exact(H)

    np.testing.assert_allclose(l1, l2, **tol)
    np.testing.assert_allclose(np.abs(V1.T @ V2), np.eye(dim), **tol)
    np.testing.assert_allclose(h @ V1, AV1, **tol)
    np.testing.assert_allclose(h @ V2, AV2, **tol)

    P = h + get_matrix(dim, dim, rng=rng) * 1e-3
    l3, V3, AV3 = exact(H, P=P)

    np.testing.assert_allclose(l1, l3, **tol)
    np.testing.assert_allclose(np.abs(V1.T @ V2), np.eye(dim), **tol)
Example #5
0
def test_mgs(rngstate, n, mx, my):
    rng = np.random.RandomState(rngstate)
    X = get_matrix(n, mx, rng=rng)
    assert wrappers['mgs'](X, None, maxiter=1) < 0
    X = get_matrix(n, mx, rng=rng)
    assert wrappers['mgs'](X, None, eps2=1e10) == 0
    X = get_matrix(n, mx, rng=rng)
    Y = get_matrix(n, my, rng=rng)
    assert wrappers['mgs'](X, Y, eps2=1e10) == 0
    Y = get_matrix(n, my, rng=rng)
    my2 = wrappers['mgs'](Y, None)
    assert my2 >= 0
    np.testing.assert_allclose(Y[:, :my2].T @ Y[:, :my2],
                               np.eye(my2),
                               atol=1e-10)
    X = get_matrix(n, mx, rng=rng)
    mx2 = wrappers['mgs'](X, Y)
    assert mx2 >= 0
    np.testing.assert_allclose(X[:, :mx2].T @ X[:, :mx2],
                               np.eye(mx2),
                               atol=1e-10)
    np.testing.assert_allclose(X[:, :mx2].T @ Y[:, :my2],
                               np.zeros((mx2, my2)),
                               atol=1e-10)
    assert wrappers['mgs'](X, Y[:n - 1]) < 0
Example #6
0
def test_mppi(n, m, eps):
    rng = np.random.RandomState(1)

    tol = dict(atol=1e-6, rtol=1e-6)

    A = get_matrix(n, m, rng=rng)
    U1, s1, VT1, Ainv, nsing1 = pseudo_inverse(A.copy(), eps=eps)

    A_test = U1[:, :nsing1] @ np.diag(s1) @ VT1[:nsing1, :]
    np.testing.assert_allclose(A_test, A, **tol)

    Ainv_test = np.linalg.pinv(A)
    np.testing.assert_allclose(Ainv_test, Ainv, **tol)

    nsingB = nsing1 - 1
    B = U1[:, :nsingB] @ np.diag(s1[:nsingB]) @ VT1[:nsingB, :]
    U2, s2, VT2, Binv, nsing2 = pseudo_inverse(B.copy(), eps=eps)
Example #7
0
def test_skew(rngstate, scale):
    rng = np.random.RandomState(rngstate)
    x = rng.normal(size=(3, ))
    Y = get_matrix(3, 3, rng=rng)
    wrappers['skew'](x, Y, scale)
    np.testing.assert_allclose(scale * np.cross(np.eye(3), x), Y)