From 1332223b31d4c361d7db13125674730272d3ac64 Mon Sep 17 00:00:00 2001 From: Bill Ladwig Date: Thu, 13 Dec 2018 15:39:21 -0700 Subject: [PATCH] Added tests. --- test/test_proj_params.py | 314 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 314 insertions(+) create mode 100644 test/test_proj_params.py diff --git a/test/test_proj_params.py b/test/test_proj_params.py new file mode 100644 index 0000000..77a0ec7 --- /dev/null +++ b/test/test_proj_params.py @@ -0,0 +1,314 @@ +import unittest as ut +import numpy.testing as nt +import numpy as np +import numpy.ma as ma +import os, sys +import subprocess + +from wrf import xy_to_ll_proj, ll_to_xy_proj, to_np + + +class WRFLatLonProjTest(ut.TestCase): + longMessage = True + +def make_test(xy_or_ll_out): + def test(self): + + # Python 3 + if sys.version_info > (3,): + assert_raises_regex = self.assertRaisesRegex + xrange = range + else: + assert_raises_regex = self.assertRaisesRegexp + + if xy_or_ll_out == "xy": + # Test the required failures + with assert_raises_regex(ValueError, ".*map_proj.*" ): + ll_to_xy_proj(30,-110) + + with assert_raises_regex(ValueError, ".*ref_lat.*" ): + ll_to_xy_proj(30,-110, map_proj=1) + + with assert_raises_regex(ValueError, ".*ref_lon.*" ): + ll_to_xy_proj(30,-110, map_proj=1, ref_lat=45) + + with assert_raises_regex(ValueError, ".*known_x.*" ): + ll_to_xy_proj(30,-110, map_proj=1, ref_lat=45.0, + ref_lon=-120.) + + with assert_raises_regex(ValueError, ".*known_y.*" ): + ll_to_xy_proj(30,-110, map_proj=1, ref_lat=45.0, + ref_lon=-120., known_x=1) + + with assert_raises_regex(ValueError, ".*dx.*" ): + ll_to_xy_proj(30,-110, map_proj=1, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0) + + ####### Now test the projections + + # Lambert Conformal - truelat1, stand_lon required + with assert_raises_regex(ValueError, ".*truelat1.*" ): + ll_to_xy_proj(30,-110, map_proj=1, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + dx=3000.) + + with assert_raises_regex(ValueError, ".*stand_lon.*" ): + ll_to_xy_proj(30,-110, map_proj=1, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + dx=3000., + truelat1=60.) + + # Make sure it runs with all params set vs not + p_all = ll_to_xy_proj(28., -89., map_proj=1, ref_lat=17.803, + ref_lon=-100.7747, known_x=0, known_y=0, + dx=30000., truelat1=30., truelat2=30., + stand_lon=-89., pole_lat=90., pole_lon=0.) + + + p_def = ll_to_xy_proj(28., -89., map_proj=1, ref_lat=17.803, + ref_lon=-100.7747, known_x=0, known_y=0, + dx=30000., truelat1=30., + stand_lon=-89.) + + nt.assert_allclose(to_np(p_all), to_np(p_def)) + + # Polar Stereographic - truelat1, stand_lon + + with assert_raises_regex(ValueError, ".*truelat1.*" ): + ll_to_xy_proj(30,-110, map_proj=2, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + dx=3000.) + + with assert_raises_regex(ValueError, ".*stand_lon.*" ): + ll_to_xy_proj(30,-110, map_proj=2, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + dx=3000., + truelat1=60.) + + p_all = ll_to_xy_proj(28., -89., map_proj=2, ref_lat=17.933, + ref_lon=-100.0735, known_x=0, known_y=0, + dx=30000., truelat1=30., truelat2=30., + stand_lon=-89., pole_lat=90., pole_lon=0.) + + + p_def = ll_to_xy_proj(28., -89., map_proj=2, ref_lat=17.933, + ref_lon=-100.0735, known_x=0, known_y=0, + dx=30000., truelat1=30., + stand_lon=-89.) + + nt.assert_allclose(to_np(p_all), to_np(p_def)) + + + # Mercator - truelat1 + + with assert_raises_regex(ValueError, ".*truelat1.*" ): + ll_to_xy_proj(30,-110, map_proj=2, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + dx=3000.) + + p_all = ll_to_xy_proj(28., -89., map_proj=3, ref_lat=19.1075, + ref_lon=-101.008, known_x=0, known_y=0, + dx=30000., truelat1=30., truelat2=30., + stand_lon=-89., pole_lat=90., pole_lon=0.) + + + p_def = ll_to_xy_proj(28., -89., map_proj=3, ref_lat=19.1075, + ref_lon=-101.008, known_x=0, known_y=0, + dx=30000., truelat1=30.) + + nt.assert_allclose(to_np(p_all), to_np(p_def)) + + # Lat/lon - stand_lon, dy, pole_lat, pole_lon + + with assert_raises_regex(ValueError, ".*stand_lon.*" ): + ll_to_xy_proj(30,-110, map_proj=6, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + dx=.2698388) + + with assert_raises_regex(ValueError, ".*dy.*" ): + ll_to_xy_proj(30,-110, map_proj=6, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + stand_lon=89.0, + dx=.2698388) + + with assert_raises_regex(ValueError, ".*pole_lat.*" ): + ll_to_xy_proj(30,-110, map_proj=6, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + stand_lon=89.0, + dx=.2698388, dy=.2698388) + + with assert_raises_regex(ValueError, ".*pole_lon.*" ): + ll_to_xy_proj(30,-110, map_proj=6, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + stand_lon=89.0, + dx=.2698388, dy=.2698388, + pole_lat=62.0) + + p_all = ll_to_xy_proj(28.,-89., map_proj=6, ref_lat=17.6759, + ref_lon=-101.4286, known_x=0, known_y=0, + dx=30000, dy=30000, + truelat1=30., truelat2=30., + stand_lon=-89., pole_lat=62.0, + pole_lon=180.) + + + p_def = ll_to_xy_proj(28., -89., map_proj=6, ref_lat=17.6759, + ref_lon=-101.4286, known_x=0, known_y=0, + stand_lon=-89., + dx=30000, dy=30000, pole_lat=62.0, + pole_lon=180.) + + nt.assert_allclose(to_np(p_all), to_np(p_def)) + + + if xy_or_ll_out == "ll": + + # Test the required failures + with assert_raises_regex(ValueError, ".*map_proj.*" ): + xy_to_ll_proj(45, 50) + + with assert_raises_regex(ValueError, ".*ref_lat.*" ): + xy_to_ll_proj(45, 50, map_proj=1) + + with assert_raises_regex(ValueError, ".*ref_lon.*" ): + xy_to_ll_proj(45, 50, map_proj=1, ref_lat=45) + + with assert_raises_regex(ValueError, ".*known_x.*" ): + xy_to_ll_proj(45, 50, map_proj=1, ref_lat=45.0, + ref_lon=-120.) + + with assert_raises_regex(ValueError, ".*known_y.*" ): + xy_to_ll_proj(45, 50, map_proj=1, ref_lat=45.0, + ref_lon=-120., known_x=1) + + with assert_raises_regex(ValueError, ".*dx.*" ): + xy_to_ll_proj(45, 50, map_proj=1, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0) + + ####### Now test the projections + + # Lambert Conformal - truelat1, stand_lon required + with assert_raises_regex(ValueError, ".*truelat1.*" ): + xy_to_ll_proj(45, 50, map_proj=1, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + dx=3000.) + + with assert_raises_regex(ValueError, ".*stand_lon.*" ): + xy_to_ll_proj(45, 50, map_proj=1, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + dx=3000., + truelat1=60.) + + # Make sure it runs with all params set vs not + p_all = xy_to_ll_proj(45, 50, map_proj=1, ref_lat=17.803, + ref_lon=-100.7747, known_x=0, known_y=0, + dx=30000., truelat1=30., truelat2=30., + stand_lon=-89., pole_lat=90., pole_lon=0.) + + + p_def = xy_to_ll_proj(45, 50, map_proj=1, ref_lat=17.803, + ref_lon=-100.7747, known_x=0, known_y=0, + dx=30000., truelat1=30., + stand_lon=-89.) + + nt.assert_allclose(to_np(p_all), to_np(p_def)) + + # Polar Stereographic - truelat1, stand_lon + + with assert_raises_regex(ValueError, ".*truelat1.*" ): + xy_to_ll_proj(45, 50, map_proj=2, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + dx=3000.) + + with assert_raises_regex(ValueError, ".*stand_lon.*" ): + xy_to_ll_proj(45, 50, map_proj=2, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + dx=3000., + truelat1=60.) + + p_all = xy_to_ll_proj(45, 50, map_proj=2, ref_lat=17.933, + ref_lon=-100.0735, known_x=0, known_y=0, + dx=30000., truelat1=30., truelat2=30., + stand_lon=-89., pole_lat=90., pole_lon=0.) + + + p_def = xy_to_ll_proj(45, 50, map_proj=2, ref_lat=17.933, + ref_lon=-100.0735, known_x=0, known_y=0, + dx=30000., truelat1=30., + stand_lon=-89.) + + nt.assert_allclose(to_np(p_all), to_np(p_def)) + + + # Mercator - truelat1 + + with assert_raises_regex(ValueError, ".*truelat1.*" ): + xy_to_ll_proj(45, 50, map_proj=2, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + dx=3000.) + + p_all = xy_to_ll_proj(45, 50, map_proj=3, ref_lat=19.1075, + ref_lon=-101.008, known_x=0, known_y=0, + dx=30000., truelat1=30., truelat2=30., + stand_lon=-89., pole_lat=90., pole_lon=0.) + + + p_def = xy_to_ll_proj(45, 50, map_proj=3, ref_lat=19.1075, + ref_lon=-101.008, known_x=0, known_y=0, + dx=30000., truelat1=30.) + + nt.assert_allclose(to_np(p_all), to_np(p_def)) + + # Lat/lon - stand_lon, dy, pole_lat, pole_lon + + with assert_raises_regex(ValueError, ".*stand_lon.*" ): + xy_to_ll_proj(45, 50, map_proj=6, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + dx=.2698388) + + with assert_raises_regex(ValueError, ".*dy.*" ): + xy_to_ll_proj(45, 50, map_proj=6, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + stand_lon=89.0, + dx=.2698388) + + with assert_raises_regex(ValueError, ".*pole_lat.*" ): + xy_to_ll_proj(45, 50, map_proj=6, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + stand_lon=89.0, + dx=.2698388, dy=.2698388) + + with assert_raises_regex(ValueError, ".*pole_lon.*" ): + xy_to_ll_proj(45, 50, map_proj=6, ref_lat=45.0, + ref_lon=-120., known_x=0, known_y=0, + stand_lon=89.0, + dx=.2698388, dy=.2698388, + pole_lat=62.0) + + p_all = xy_to_ll_proj(64, 40, map_proj=6, ref_lat=17.6759, + ref_lon=-101.4286, known_x=0, known_y=0, + dx=30000, dy=30000, + truelat1=30., truelat2=30., + stand_lon=-89., pole_lat=62.0, + pole_lon=180.) + + + p_def = xy_to_ll_proj(64, 40, map_proj=6, ref_lat=17.6759, + ref_lon=-101.4286, known_x=0, known_y=0, + stand_lon=-89., + dx=30000, dy=30000, pole_lat=62.0, + pole_lon=180.) + + nt.assert_allclose(to_np(p_all), to_np(p_def)) + + return test + + +if __name__ == "__main__": + + for v in ("xy", "ll"): + test_func = make_test(v) + setattr(WRFLatLonProjTest, 'test_{0}'.format(v), test_func) + + ut.main() + \ No newline at end of file