コード例 #1
0
def test_serial_code():

    temp_filename = 'temp.pickle'

    try:
        # Copy reference output to temporary location
        copyfile(serial_filename(), temp_filename)

        # Run serial code
        serial_output_code.serial_output_code()

        with open(serial_filename(), 'rb') as f:
            qmc_out = pickle.load(f)

        with open(temp_filename, 'rb') as f:
            old_out = pickle.load(f)
    finally:
        # Copy reference output back
        copyfile(temp_filename, serial_filename())

        # Remove temporary file
        remove(temp_filename)

    assert qmc_out[0] == old_out[0]  # should be a float

    assert len(qmc_out) == len(old_out)

    for ii in range(1, len(old_out)):
        assert (len(old_out[ii]) == len(qmc_out[ii]))
        for jj in range(len(old_out[1])):
            # For some reason, the sizes of these variables (in
            # bytes) aren't always the same. I've no idea why.
            # Hence, this assertion is commented out.
            #assert np.all(np.isclose(qmc_out[ii][jj],old_out[ii][jj]))
            pass

        for ii in range(1, len(qmc_out) - 1):
            assert (len(old_out[ii]) == len(qmc_out[ii]))
            for jj in range(len(qmc_out[1])):
                # Commented out here for same reason as above
                #assert getsizeof(qmc_out[ii][jj]) == getsizeof(old_out[ii][jj])
                #assert np.all(np.isclose(qmc_out[ii][jj],old_out[ii][jj]))
                assert np.all(np.isclose(qmc_out[ii][jj], old_out[ii][jj]))

        # Final list (of GMRES its) is all Nones
        for jj in range(len(qmc_out[-1])):
            assert qmc_out[-1][jj] == old_out[-1][jj]
コード例 #2
0
def test_same_as_no_nbpc():
    """Tests that we get the same results as not using nearby preconditioning."""

    # Large portions of this code copied from test_parallel_regression

    qmc_out = qmc_test(1, True, 0.1)

    with open(serial_filename(), 'rb') as f:
        old_out = pickle.load(f)

    # The format of the outputs is:
    # 0 - k
    # 1 - samples - list of length nu:
    #         of lists of length num_qois
    #             of numpy arrays of length 2**M
    #                 each entry of which is a float
    # 2 - n_coeffs - list of length nu
    #         each entry of which is a (2**M) x J numpy array
    #             each row of which gives the KL-coeffs
    # 3 - GMRES_its

    qmc_out[0] == old_out[0]

    assert qmc_out[0] == old_out[0]  # should be a float,
    # but isn't the output
    # of a numerical
    # method, so == is OK.

    assert len(qmc_out) == len(old_out)

    for ii in range(1, len(old_out)):
        assert (len(old_out[ii]) == len(qmc_out[ii]))

    for ii in range(1, len(qmc_out)):
        assert (len(old_out[ii]) == len(qmc_out[ii]))

    for ii_nu in range(len(qmc_out[2])):

        for ii_kl in range(qmc_out[2][0].shape[0]):

            current_coeff = qmc_out[2][0][ii_kl, :]
            found_match = False

            for ii_kl_old in range(old_out[2][0].shape[0]):

                if (old_out[2][0][ii_kl_old, :] == current_coeff).all():

                    found_match = True

                    assert np.isclose(old_out[1][ii_nu][0][ii_kl_old],
                                      qmc_out[1][ii_nu][0][ii_kl])

            assert found_match
コード例 #3
0
def serial_output_code():
    qmc_out = gen.qmc_test(1)

    with open(gen.serial_filename(),'wb') as f:
        pickle.dump(qmc_out,f)
コード例 #4
0
        from firedrake_complex_hacks import balena_hacks
        balena_hacks.fix_mesh_generation_time()

    overall_size = fd.COMM_WORLD.size

    for num_spatial_cores in range(1, overall_size + 1):

        if overall_size % num_spatial_cores == 0:

            for qmc_out in [
                    qmc_test(num_spatial_cores),
                    qmc_test(num_spatial_cores, True, 0.1)
            ]:

                if fd.COMM_WORLD.rank == 0:
                    with open(serial_filename(), 'rb') as f:
                        old_out = pickle.load(f)

                    assert qmc_out[0] == old_out[0]  # should be a float,
                    # but isn't the output
                    # of a numerical
                    # method, so == is OK.

                    assert len(qmc_out) == len(old_out)

                    for ii in range(1, len(old_out)):
                        assert (len(old_out[ii]) == len(qmc_out[ii]))

                    for ii in range(1, len(qmc_out)):
                        assert (len(old_out[ii]) == len(qmc_out[ii]))
                    for jj in range(len(qmc_out[1])):
コード例 #5
0
import numpy as np
from shutil import copyfile
from os import remove

# This file is only temporary, mostly to be used when updating the
# reference output from a regression test, to ensure that, in all
# aspects that are in common with the previosu regression test, the new
# solution is the same.

# It is largely the same as test_serial_code.py

temp_filename = 'temp.pickle'

try:
    # Copy reference output to temporary location
    copyfile(serial_filename(),temp_filename)

    # Run serial code
    serial_output_code.serial_output_code()

    with open(serial_filename(),'rb') as f:
        qmc_out = pickle.load(f)

    with open(temp_filename,'rb') as f:
        old_out = pickle.load(f)
finally:
    # Copy reference output back
    copyfile(temp_filename,serial_filename())

    # Remove temporary file
    remove(temp_filename)