forked from 3rdparty/wrf-python
5 changed files with 460 additions and 16 deletions
@ -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() |
||||||
|
|
Loading…
Reference in new issue