def test_gram_schmidt_biorth(vector_arrays): U1, U2 = vector_arrays V1 = U1.copy() V2 = U2.copy() # this is the default used in gram_schmidt_biorth check_tol = 1e-3 with log_levels( {'pymor.algorithms.gram_schmidt.gram_schmidt_biorth': 'ERROR'}): A1, A2 = gram_schmidt_biorth(U1, U2, copy=True, check_tol=check_tol) assert np.all(almost_equal(U1, V1)) assert np.all(almost_equal(U2, V2)) assert np.allclose(A2.dot(A1), np.eye(len(A1)), atol=check_tol) c = np.linalg.cond(A1.to_numpy()) * np.linalg.cond(A2.to_numpy()) assert np.all(almost_equal(U1, A1.lincomb(A2.dot(U1).T), rtol=c * 1e-14)) assert np.all(almost_equal(U2, A2.lincomb(A1.dot(U2).T), rtol=c * 1e-14)) with log_levels( {'pymor.algorithms.gram_schmidt.gram_schmidt_biorth': 'ERROR'}): B1, B2 = gram_schmidt_biorth(U1, U2, copy=False) assert np.all(almost_equal(A1, B1)) assert np.all(almost_equal(A2, B2)) assert np.all(almost_equal(A1, U1)) assert np.all(almost_equal(A2, U2))
def test_pod_with_product(operator_with_arrays_and_products, method): _, _, A, _, p, _ = operator_with_arrays_and_products B = A.copy() with log_levels({"pymor.algorithms": "ERROR"}): U, s = pod(A, product=p, method=method) assert np.all(almost_equal(A, B)) assert len(U) == len(s) assert np.allclose(U.gramian(p), np.eye(len(s)))
def test_log_levels(): logger = NumpyMatrixOperator._logger before_name = 'INFO' logger.setLevel(before_name) before = logger.level with log_levels({logger.name: 'DEBUG'}): assert 'DEBUG' == logging.getLevelName(logger.level) assert logger.level != before assert logger.level == before assert before_name == logging.getLevelName(logger.level)
def test_method_of_snapshots_with_product(operator_with_arrays_and_products, method): _, _, A, _, p, _ = operator_with_arrays_and_products B = A.copy() with log_levels({"pymor.algorithms": "ERROR"}): U, s, Vh = method(A, product=p) assert np.all(almost_equal(A, B)) assert len(U) == len(s) == Vh.shape[0] assert Vh.shape[1] == len(A) assert np.allclose(Vh @ Vh.T.conj(), np.eye(len(s))) U.scal(s) UsVh = U.lincomb(Vh.T) assert np.all(almost_equal(A, UsVh, rtol=4e-8))
def test_method_of_snapshots(vector_array, method): A = vector_array[0] # TODO assumption here masks a potential issue with the algorithm # where it fails in internal lapack instead of a proper error assume(len(A) > 1 or A.dim > 1) assume(not contains_zero_vector(A, rtol=1e-13, atol=1e-13)) B = A.copy() with log_levels({"pymor.algorithms": "ERROR"}): U, s, Vh = method(A) assert np.all(almost_equal(A, B)) assert len(U) == len(s) == Vh.shape[0] assert Vh.shape[1] == len(A) assert np.allclose(Vh @ Vh.T.conj(), np.eye(len(s))) U.scal(s) UsVh = U.lincomb(Vh.T) assert np.all(almost_equal(A, UsVh, rtol=4e-8))