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)
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)
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)
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)
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
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)
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)