From 89b9b9aaab930785c4f8f09b9ccafc7a61f833f6 Mon Sep 17 00:00:00 2001 From: Robbi Bishop-Taylor Date: Thu, 21 Dec 2023 02:37:24 +0000 Subject: [PATCH] Add accuracy test --- tests/data/lidar_10m_tests.tif | Bin 0 -> 30962 bytes tests/test_intertidal.py | 54 +++++++++++++++++++++++++++++++-- 2 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 tests/data/lidar_10m_tests.tif diff --git a/tests/data/lidar_10m_tests.tif b/tests/data/lidar_10m_tests.tif new file mode 100644 index 0000000000000000000000000000000000000000..89e19e5d136a8f6d038d1c226eb76f9567fca954 GIT binary patch literal 30962 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 OH2y!bcAdQVqwyb*+_%#J literal 0 HcmV?d00001 diff --git a/tests/test_intertidal.py b/tests/test_intertidal.py index 0ef60ee..3ecc3cc 100644 --- a/tests/test_intertidal.py +++ b/tests/test_intertidal.py @@ -1,15 +1,25 @@ import pytest +import pickle +import rioxarray from click.testing import CliRunner + from intertidal.elevation import intertidal_cli, elevation -import pickle +from intertidal.validation import eval_metrics, map_raster, preprocess_validation +from intertidal.extents import load_reproject @pytest.fixture() def satellite_ds(): + """ + Loads a timeseries of satellite data from a .pickle file. + TODO: Replace this with data loaded directly from datacube + after adding access to prod database. + """ with open("tests/data/satellite_ds.pickle", "rb") as handle: return pickle.load(handle) +@pytest.mark.dependency() def test_intertidal_cli(): runner = CliRunner() result = runner.invoke( @@ -28,6 +38,41 @@ def test_intertidal_cli(): assert result.exit_code == 0 +@pytest.mark.dependency(depends=["test_intertidal_cli"]) +def test_dem_accuracy( + val_path="tests/data/lidar_10m_tests.tif", + mod_path="data/interim/testing/2020-2022/testing_2020_2022_elevation.tif", +): + """ + Compares elevation outputs of the previous CLI step against + validation data, and calculates and evaluates a range of accuracy + metrics. + """ + + # Load validation data + validation_da = rioxarray.open_rasterio(val_path, masked=True).squeeze("band") + + # Load modelled elevation and uncertainty data + modelled_da = load_reproject( + path=mod_path, + gbox=validation_ds.odc.geobox, + name="modelled_ds", + resampling="average", + ).band_data + + # Preprocess and calculate accuracy statistics + validation_z, modelled_z = preprocess_validation(modelled_ds, validation_ds, None) + accuracy_df = eval_metrics(x=validation_z, y=modelled_z, round=3) + + # Assert accuracy is within tolerance + assert accuracy_df.Correlation > 0.9 + assert accuracy_df.RMSE < 0.25 + assert accuracy_df.MAE < 0.2 + assert accuracy_df["R-squared"] > 0.8 + assert accuracy_df.Bias < 0.2 + assert abs(accuracy_df["Regression slope"] - 1) < 0.1 + + def test_elevation(satellite_ds): ds, ds_aux, tide_m = elevation( satellite_ds, @@ -44,10 +89,13 @@ def test_elevation(satellite_ds): study_area=None, log=None, ) + """ + Verify that elevation code produces expected outputs. + """ # Verify that ds contains correct variables assert "elevation" in ds.data_vars assert "elevation_uncertainty" in ds.data_vars - # Verify that ds is a single layer - assert "time" not in ds.dims \ No newline at end of file + # Verify that ds is a single layer with no time dimension + assert "time" not in ds.dims