Beispiel #1
0
def test_compare_data_floats_equal(dummy_nc):
    """Check comparison of floating point data considered exactly equal"""
    actual_nc, expected_nc = dummy_nc
    expected_ds = nc.Dataset(expected_nc, mode='a')
    actual_ds = nc.Dataset(actual_nc, mode='a')

    messages_reported = []

    def message_collector(message):
        messages_reported.append(message)

    # Check that data originally matches exactly (zero tolerances)
    compare.compare_data(DEWPOINT, actual_ds[DEWPOINT], expected_ds[DEWPOINT],
                         0.0, 0.0, message_collector)
    assert len(messages_reported) == 0

    # Check that NaNs in same position compare equal rather than the
    # floating point "NaNs are always unequal" usual convention
    expected_dp = expected_ds[DEWPOINT]
    expected_dp[0, :] = np.nan
    expected_ds.sync()
    actual_dp = actual_ds[DEWPOINT]
    actual_dp[0, :] = np.nan
    actual_ds.sync()
    compare.compare_data(DEWPOINT, actual_ds[DEWPOINT], expected_ds[DEWPOINT],
                         0.0, 0.0, message_collector)
    assert len(messages_reported) == 0
Beispiel #2
0
def test_compare_data_shape(dummy_nc):
    """Check differing data shapes are reported"""
    actual_nc, expected_nc = dummy_nc
    expected_ds = nc.Dataset(expected_nc, mode='r')
    actual_ds = nc.Dataset(actual_nc, mode='a')

    messages_reported = []

    def message_collector(message):
        messages_reported.append(message)

    # super loose tolerance, but shapes don't match
    compare.compare_data("lonlat", actual_ds[LON], expected_ds[LAT],
                         100.0, 100.0, message_collector)
    assert len(messages_reported) == 1
    assert "shape" in messages_reported[0]
Beispiel #3
0
def test_compare_data_integers(dummy_nc):
    """Check comparison of integers"""
    actual_nc, expected_nc = dummy_nc
    expected_ds = nc.Dataset(expected_nc, mode='r')
    actual_ds = nc.Dataset(actual_nc, mode='a')

    messages_reported = []

    def message_collector(message):
        messages_reported.append(message)

    actual_dp = actual_ds[CAT]
    actual_dp[:] = np.array(actual_dp[:]) + 1

    # 2 absolute tolerance -> no problem
    compare.compare_data(CAT, actual_ds[CAT], expected_ds[CAT],
                         0, 2, message_collector)
    assert len(messages_reported) == 0
    # 1 absolute tolerance -> no problem
    compare.compare_data(CAT, actual_ds[CAT], expected_ds[CAT],
                         0, 1, message_collector)
    assert len(messages_reported) == 0
    # 0 relative and absolute tolerance -> problem reported
    compare.compare_data(CAT, actual_ds[CAT], expected_ds[CAT],
                         0, 0, message_collector)
    assert len(messages_reported) == 1
    assert "tolerance" in messages_reported[0]
    assert CAT in messages_reported[0]
Beispiel #4
0
def test_compare_data_floats_absolute(dummy_nc):
    """Check comparison of floating point data with absolute tolerances"""
    actual_nc, expected_nc = dummy_nc
    expected_ds = nc.Dataset(expected_nc, mode='r')
    actual_ds = nc.Dataset(actual_nc, mode='a')

    messages_reported = []

    def message_collector(message):
        messages_reported.append(message)

    # Check that modifying the data is picked up by absolute tolerance
    actual_dp = actual_ds[DEWPOINT]
    # absolute change is a little smaller than 1e-2
    actual_dp[1, :] = np.array(actual_dp[1, :]) + 8e-3
    # 1e-2 absolute tolerance -> no problem
    compare.compare_data(DEWPOINT, actual_ds[DEWPOINT], expected_ds[DEWPOINT],
                         0.0, 1e-2, message_collector)
    assert len(messages_reported) == 0
    # 5e-3 absolute tolerance -> problem reported
    compare.compare_data(DEWPOINT, actual_ds[DEWPOINT], expected_ds[DEWPOINT],
                         0.0, 5e-3, message_collector)
    assert len(messages_reported) == 1
    assert DEWPOINT in messages_reported[0]
    assert 'tolerance' in messages_reported[0]
    # no relative tolerance -> problem reported
    compare.compare_data(DEWPOINT, actual_ds[DEWPOINT], expected_ds[DEWPOINT],
                         0.0, 0.0, message_collector)
    assert len(messages_reported) == 2
Beispiel #5
0
def test_compare_data_floats_relative(dummy_nc):
    """Check comparison of floating point data with relative tolerances"""
    actual_nc, expected_nc = dummy_nc
    expected_ds = nc.Dataset(expected_nc, mode="a")
    actual_ds = nc.Dataset(actual_nc, mode="a")

    messages_reported = []

    def message_collector(message):
        messages_reported.append(message)

    # Check that modifying the data is picked up by relative tolerance
    actual_dp = actual_ds[DEWPOINT]
    # relative change is a little smaller than 1e-3
    actual_dp[1, :] = np.array(actual_dp[1, :]) * (1.0 + 8e-4)
    # 1e-3 relative tolerance -> no problem
    compare.compare_data(
        DEWPOINT,
        actual_ds[DEWPOINT],
        expected_ds[DEWPOINT],
        1e-3,
        0.0,
        message_collector,
    )
    assert len(messages_reported) == 0
    # 5e-4 relative tolerance -> problem reported
    compare.compare_data(
        DEWPOINT,
        actual_ds[DEWPOINT],
        expected_ds[DEWPOINT],
        5e-4,
        0.0,
        message_collector,
    )
    assert len(messages_reported) == 1
    assert DEWPOINT in messages_reported[0]
    assert "tolerance" in messages_reported[0]
    # no relative tolerance -> problem reported
    compare.compare_data(
        DEWPOINT,
        actual_ds[DEWPOINT],
        expected_ds[DEWPOINT],
        0.0,
        0.0,
        message_collector,
    )
    assert len(messages_reported) == 2