Source code for forecast_processing.forecast_test

"""
Tests to make sure that the manual interpretation methods match with xarray, scipy, and numpy methods

Our manually written interpolation methods are faster for simulating
"""


import unittest
from env.forecast_processing.forecast import Forecast, Forecast_Subset
from env.config.env_config import env_params
from datetime import datetime

[docs] class TestFunctionOutputs(unittest.TestCase):
[docs] def setUp(self): #Try some different variants here: #FORECAST_PRIMARY = Forecast(env_params['era_netcdf'], forecast_type="ERA5", month=7) #FORECAST_PRIMARY = Forecast(env_params['era_netcdf'], forecast_type="ERA5", month=7, timewarp=3) #FORECAST_PRIMARY = Forecast(env_params['era_netcdf'], forecast_type="ERA5", month=None, timewarp=3) FORECAST_PRIMARY = Forecast(env_params['synth_netcdf'], forecast_type="SYNTH") FORECAST_PRIMARY = Forecast(env_params['synth_netcdf'], forecast_type="SYNTH", timewarp=6) self.forecast_subset = Forecast_Subset(FORECAST_PRIMARY) self.forecast_subset.randomize_coord() print("random_coord", self.forecast_subset.lat_central, self.forecast_subset.lon_central, self.forecast_subset.start_time) self.forecast_subset.subset_forecast()
[docs] def test1(self): lat = 35.22 lon = -106.42 time = datetime.strptime('2022-08-22 14:00:00', "%Y-%m-%d %H:%M:%S") output1 = self.forecast_subset.xr_lookup(lat, lon, time) output2 = self.forecast_subset.np_lookup(lat, lon, time) self.assertEqual(output1[0].all(), output2[0].all(), "test")
[docs] def test2(self): lat = 35.1 lon = -105.57 time = datetime.strptime('2022-08-22 14:00:00', "%Y-%m-%d %H:%M:%S") output1 = self.forecast_subset.xr_lookup(lat, lon, time) output2 = self.forecast_subset.np_lookup(lat, lon, time) self.assertEqual(output1[0].all(), output2[0].all(), "test")
[docs] def test3(self): lat = 35.17 lon = -105.6 time = datetime.strptime('2022-08-22 14:00:00', "%Y-%m-%d %H:%M:%S") output1 = self.forecast_subset.xr_lookup(lat, lon, time) output2 = self.forecast_subset.np_lookup(lat, lon, time) self.assertEqual(output1[0].all(), output2[0].all(), "test")
#Out of Bounds tests
[docs] def test4(self): lat = 33 lon = -106 time = datetime.strptime('2022-08-22 14:00:00', "%Y-%m-%d %H:%M:%S") output1 = self.forecast_subset.xr_lookup(lat, lon, time) output2 = self.forecast_subset.np_lookup(lat, lon, time) self.assertEqual(output1[0].all(), output2[0].all(), "test")
[docs] def test5(self): lat = 38 lon = -106 time = datetime.strptime('2022-08-22 14:00:00', "%Y-%m-%d %H:%M:%S") output1 = self.forecast_subset.xr_lookup(lat, lon, time) output2 = self.forecast_subset.np_lookup(lat, lon, time) self.assertEqual(output1[0].all(), output2[0].all(), "test")
[docs] def test6(self): lat = 34 lon = -101 time = datetime.strptime('2022-08-22 14:00:00', "%Y-%m-%d %H:%M:%S") output1 = self.forecast_subset.xr_lookup(lat, lon, time) output2 = self.forecast_subset.np_lookup(lat, lon, time) self.assertEqual(output1[0].all(), output2[0].all(), "test")
[docs] def test7(self): lat = 34 lon = -115 time = datetime.strptime('2022-08-22 14:00:00', "%Y-%m-%d %H:%M:%S") output1 = self.forecast_subset.xr_lookup(lat, lon, time) output2 = self.forecast_subset.np_lookup(lat, lon, time) self.assertEqual(output1[0].all(), output2[0].all(), "test")
[docs] def test8(self): lat = 35.22 lon = -106.42 time = datetime.strptime('2022-08-15 14:00:00', "%Y-%m-%d %H:%M:%S") output1 = self.forecast_subset.xr_lookup(lat, lon, time) output2 = self.forecast_subset.np_lookup(lat, lon, time) self.assertEqual(output1[0].all(), output2[0].all(), "test")
[docs] def test9(self): lat = 35.22 lon = -106.42 time = datetime.strptime('2022-08-27 14:00:00', "%Y-%m-%d %H:%M:%S") output1 = self.forecast_subset.xr_lookup(lat, lon, time) output2 = self.forecast_subset.np_lookup(lat, lon, time) self.assertEqual(output1[0].all(), output2[0].all(), "test")
[docs] def test10(self): lat = 35.18 lon = -106.43 time = datetime.strptime('2022-08-22 15:33:00', "%Y-%m-%d %H:%M:%S") output1 = self.forecast_subset.xr_lookup(lat, lon, time) output2 = self.forecast_subset.np_lookup(lat, lon, time) self.assertEqual(output1[0].all(), output2[0].all(), "test")
if __name__ == "__main__": unittest.main()