Browse Source

Renamed npvalues to to_np. Fixed issue with generator expressions crashing.

main
Bill Ladwig 9 years ago
parent
commit
9629bf121a
  1. 4
      src/wrf/api.py
  2. 6
      src/wrf/decorators.py
  3. 4
      src/wrf/interp.py
  4. 3
      src/wrf/latlonutils.py
  5. 24
      src/wrf/metadecorators.py
  6. 6
      src/wrf/specialdec.py
  7. 32
      src/wrf/util.py
  8. 8
      test/comp_utest.py
  9. 78
      test/utests.py

4
src/wrf/api.py

@ -15,7 +15,7 @@ from .interp import (interplevel, vertcross, interpline, vinterp)
from .latlon import (xy_to_ll, ll_to_xy, xy_to_ll_proj, ll_to_xy_proj) from .latlon import (xy_to_ll, ll_to_xy, xy_to_ll_proj, ll_to_xy_proj)
from .py3compat import (viewitems, viewkeys, viewvalues, isstr, py2round, from .py3compat import (viewitems, viewkeys, viewvalues, isstr, py2round,
py3range, ucode) py3range, ucode)
from .util import (npvalues, extract_global_attrs, is_standard_wrf_var, from .util import (to_np, extract_global_attrs, is_standard_wrf_var,
extract_dim, extract_vars, extract_times, combine_files, extract_dim, extract_vars, extract_times, combine_files,
extract_times, npbytes_to_str, is_moving_domain, extract_times, npbytes_to_str, is_moving_domain,
is_staggered, get_left_indexes, iter_left_indexes, is_staggered, get_left_indexes, iter_left_indexes,
@ -51,7 +51,7 @@ __all__ += ["interplevel", "vertcross", "interpline", "vinterp"]
__all__ += ["xy_to_ll", "ll_to_xy", "xy_to_ll_proj", "ll_to_xy_proj"] __all__ += ["xy_to_ll", "ll_to_xy", "xy_to_ll_proj", "ll_to_xy_proj"]
__all__ += ["viewitems", "viewkeys", "viewvalues", "isstr", "py2round", __all__ += ["viewitems", "viewkeys", "viewvalues", "isstr", "py2round",
"py3range", "ucode"] "py3range", "ucode"]
__all__ += ["npvalues", "extract_global_attrs", "is_standard_wrf_var", __all__ += ["to_np", "extract_global_attrs", "is_standard_wrf_var",
"extract_dim", "extract_vars", "extract_times", "combine_files", "extract_dim", "extract_vars", "extract_times", "combine_files",
"extract_times", "npbytes_to_str", "is_moving_domain", "extract_times", "npbytes_to_str", "is_moving_domain",
"is_staggered", "get_left_indexes", "iter_left_indexes", "is_staggered", "get_left_indexes", "iter_left_indexes",

6
src/wrf/decorators.py

@ -8,7 +8,7 @@ import numpy as np
import numpy.ma as ma import numpy.ma as ma
from .units import do_conversion, check_units, dealias_and_clean_unit from .units import do_conversion, check_units, dealias_and_clean_unit
from .util import iter_left_indexes, from_args, npvalues, combine_dims from .util import iter_left_indexes, from_args, to_np, combine_dims
from .py3compat import viewitems, viewvalues, isstr from .py3compat import viewitems, viewvalues, isstr
from .config import xarray_enabled from .config import xarray_enabled
from .constants import Constants from .constants import Constants
@ -187,7 +187,7 @@ def left_iteration(ref_var_expected_dims,
skip_missing = False skip_missing = False
for arg in new_args: for arg in new_args:
if isinstance(arg, DataArray): if isinstance(arg, DataArray):
arr = npvalues(arg) arr = to_np(arg)
elif isinstance(arg, np.ndarray): elif isinstance(arg, np.ndarray):
arr = arg arr = arg
else: else:
@ -352,7 +352,7 @@ def _extract_and_transpose(arg, do_transpose):
if xarray_enabled(): if xarray_enabled():
if isinstance(arg, DataArray): if isinstance(arg, DataArray):
arg = npvalues(arg) arg = to_np(arg)
if do_transpose: if do_transpose:
if isinstance(arg, np.ndarray): if isinstance(arg, np.ndarray):

4
src/wrf/interp.py

@ -8,7 +8,7 @@ from .extension import (_interpz3d, _vertcross, _interpline, _smooth2d,
_monotonic, _vintrp) _monotonic, _vintrp)
from .metadecorators import set_interp_metadata from .metadecorators import set_interp_metadata
from .util import extract_vars, is_staggered, get_id, npvalues from .util import extract_vars, is_staggered, get_id, to_np
from .py3compat import py3range from .py3compat import py3range
from .interputils import get_xy, get_xy_z_params, to_xy_coords from .interputils import get_xy, get_xy_z_params, to_xy_coords
from .constants import Constants, ConversionFactors from .constants import Constants, ConversionFactors
@ -262,7 +262,7 @@ def vertcross(field3d, vert, levels=None, missing=Constants.DEFAULT_FILL,
else: else:
end_point_xy = (end_point.x, end_point.y) end_point_xy = (end_point.x, end_point.y)
xy, var2dz, z_var2d = get_xy_z_params(npvalues(vert), pivot_point_xy, xy, var2dz, z_var2d = get_xy_z_params(to_np(vert), pivot_point_xy,
angle, start_point_xy, angle, start_point_xy,
end_point_xy, levels) end_point_xy, levels)

3
src/wrf/latlonutils.py

@ -9,8 +9,7 @@ from .constants import Constants, ProjectionTypes
from .extension import _lltoxy, _xytoll from .extension import _lltoxy, _xytoll
from .util import (extract_vars, extract_global_attrs, from .util import (extract_vars, extract_global_attrs,
either, is_moving_domain, is_multi_time_req, either, is_moving_domain, is_multi_time_req,
iter_left_indexes, is_mapping, is_multi_file, iter_left_indexes, is_mapping, is_multi_file)
npvalues)
from .py3compat import viewkeys, viewitems from .py3compat import viewkeys, viewitems
from .projutils import dict_keys_to_upper from .projutils import dict_keys_to_upper

24
src/wrf/metadecorators.py

@ -8,7 +8,7 @@ import numpy.ma as ma
from .extension import _interpline from .extension import _interpline
from .util import (extract_vars, either, from_args, arg_location, from .util import (extract_vars, either, from_args, arg_location,
is_coordvar, latlon_coordvars, npvalues, is_coordvar, latlon_coordvars, to_np,
from_var, iter_left_indexes) from_var, iter_left_indexes)
from .coordpair import CoordPair from .coordpair import CoordPair
from .py3compat import viewkeys, viewitems, py3range, ucode from .py3compat import viewkeys, viewitems, py3range, ucode
@ -308,11 +308,11 @@ def set_wind_metadata(copy_varname, name, description,
if not wind_ncvar: if not wind_ncvar:
for key,dataarray in viewitems(copy_var.coords): for key,dataarray in viewitems(copy_var.coords):
if is_coordvar(key): if is_coordvar(key):
outcoords[key] = dataarray.dims, npvalues(dataarray) outcoords[key] = dataarray.dims, to_np(dataarray)
elif key == "XTIME": elif key == "XTIME":
outcoords[key] = dataarray.dims, npvalues(dataarray) outcoords[key] = dataarray.dims, to_np(dataarray)
elif key == "Time": elif key == "Time":
outcoords[key] = npvalues(dataarray) outcoords[key] = to_np(dataarray)
outname = name outname = name
outattrs["description"] = description outattrs["description"] = description
@ -420,11 +420,11 @@ def set_cape_metadata(is2d):
for key,dataarray in viewitems(copy_var.coords): for key,dataarray in viewitems(copy_var.coords):
if is_coordvar(key): if is_coordvar(key):
outcoords[key] = dataarray.dims, npvalues(dataarray) outcoords[key] = dataarray.dims, to_np(dataarray)
elif key == "XTIME": elif key == "XTIME":
outcoords[key] = dataarray.dims, npvalues(dataarray) outcoords[key] = dataarray.dims, to_np(dataarray)
elif key == "Time": elif key == "Time":
outcoords[key] = npvalues(dataarray) outcoords[key] = to_np(dataarray)
if is2d: if is2d:
outcoords["mcape_mcin_lcl_lfc"] = ["mcape", "mcin", "lcl", "lfc"] outcoords["mcape_mcin_lcl_lfc"] = ["mcape", "mcin", "lcl", "lfc"]
@ -516,11 +516,11 @@ def set_cloudfrac_metadata():
for key,dataarray in viewitems(copy_var.coords): for key,dataarray in viewitems(copy_var.coords):
if is_coordvar(key): if is_coordvar(key):
outcoords[key] = dataarray.dims, npvalues(dataarray) outcoords[key] = dataarray.dims, to_np(dataarray)
elif key == "XTIME": elif key == "XTIME":
outcoords[key] = dataarray.dims, npvalues(dataarray) outcoords[key] = dataarray.dims, to_np(dataarray)
elif key == "Time": elif key == "Time":
outcoords[key] = npvalues(dataarray) outcoords[key] = to_np(dataarray)
outcoords["low_mid_high"] = ["low", "mid", "high"] outcoords["low_mid_high"] = ["low", "mid", "high"]
@ -880,7 +880,7 @@ def _set_cross_meta(wrapped, instance, args, kwargs):
else: else:
end_point_xy = (end_point.x, end_point.y) end_point_xy = (end_point.x, end_point.y)
xy, var2dz, z_var2d = get_xy_z_params(npvalues(z), pivot_point_xy, angle, xy, var2dz, z_var2d = get_xy_z_params(to_np(z), pivot_point_xy, angle,
start_point_xy, end_point_xy, levels) start_point_xy, end_point_xy, levels)
# Make a copy so we don't modify a user supplied cache # Make a copy so we don't modify a user supplied cache
@ -1327,7 +1327,7 @@ def _set_2dxy_meta(wrapped, instance, args, kwargs):
field3d = argvars["field3d"] field3d = argvars["field3d"]
xy = argvars["xy"] xy = argvars["xy"]
xy = npvalues(xy) xy = to_np(xy)
result = wrapped(*args, **kwargs) result = wrapped(*args, **kwargs)

6
src/wrf/specialdec.py

@ -5,7 +5,7 @@ import numpy as np
import wrapt import wrapt
from .util import iter_left_indexes, npvalues from .util import iter_left_indexes, to_np
from .config import xarray_enabled from .config import xarray_enabled
from .constants import Constants from .constants import Constants
@ -72,11 +72,11 @@ def uvmet_left_iter(alg_dtype=np.float64):
has_missing = False has_missing = False
u_arr = u u_arr = u
if isinstance(u, DataArray): if isinstance(u, DataArray):
u_arr = npvalues(u) u_arr = to_np(u)
v_arr = v v_arr = v
if isinstance(v, DataArray): if isinstance(v, DataArray):
v_arr = npvalues(v) v_arr = to_np(v)
umissing = Constants.DEFAULT_FILL umissing = Constants.DEFAULT_FILL
if isinstance(u_arr, np.ma.MaskedArray): if isinstance(u_arr, np.ma.MaskedArray):

32
src/wrf/util.py

@ -5,7 +5,7 @@ import os
from sys import version_info from sys import version_info
from copy import copy from copy import copy
from collections import Iterable, Mapping, OrderedDict from collections import Iterable, Mapping, OrderedDict
from itertools import product from itertools import product, tee
from types import GeneratorType from types import GeneratorType
import datetime as dt import datetime as dt
from inspect import getmodule from inspect import getmodule
@ -190,6 +190,12 @@ def _generator_copy(gen):
""" """
funcname = gen.__name__ funcname = gen.__name__
# This is for generator comprehensions. Only solution is to tee the
# original generator.
if funcname == "<genexpr>":
return tee(gen)
try: try:
argvals = getargvalues(gen.gi_frame) argvals = getargvalues(gen.gi_frame)
except NameError: except NameError:
@ -319,7 +325,15 @@ class IterWrapper(Iterable):
""" """
if isinstance(self._wrapped, GeneratorType): if isinstance(self._wrapped, GeneratorType):
return _generator_copy(self._wrapped)
gen_copy = _generator_copy(self._wrapped)
# If a tuple comes back, then this is a generator comprehension,
# so store the first tee'd item, then return the other
if isinstance(gen_copy, tuple):
self._wrapped = gen_copy[0]
return gen_copy[1]
return gen_copy
else: else:
obj_copy = copy(self._wrapped) obj_copy = copy(self._wrapped)
return obj_copy.__iter__() return obj_copy.__iter__()
@ -360,7 +374,7 @@ def get_iterable(wrfseq):
# Helper to extract masked arrays from DataArrays that convert to NaN # Helper to extract masked arrays from DataArrays that convert to NaN
def npvalues(array): def to_np(array):
"""Return the :class:`numpy.ndarray` contained in an """Return the :class:`numpy.ndarray` contained in an
:class:`xarray.DataArray` instance. :class:`xarray.DataArray` instance.
@ -947,7 +961,7 @@ def _combine_dict(wrfdict, varname, timeidx, method, meta, _key):
if outdata.shape[1:] != vardata.shape: if outdata.shape[1:] != vardata.shape:
raise ValueError("data sequences must have the " raise ValueError("data sequences must have the "
"same size for all dictionary keys") "same size for all dictionary keys")
outdata[idx,:] = npvalues(vardata)[:] outdata[idx,:] = to_np(vardata)[:]
idx += 1 idx += 1
if xarray_enabled() and meta: if xarray_enabled() and meta:
@ -967,7 +981,7 @@ def _combine_dict(wrfdict, varname, timeidx, method, meta, _key):
break break
key_coordnames.append(key_coord_name) key_coordnames.append(key_coord_name)
coord_vals.append(npvalues(first_array.coords[key_coord_name])) coord_vals.append(to_np(first_array.coords[key_coord_name]))
existing_cnt += 1 existing_cnt += 1
@ -1533,7 +1547,7 @@ def _cat_files(wrfseq, varname, timeidx, is_moving, squeeze, meta, _key):
outxtimes = get_cached_item(_key, timekey) outxtimes = get_cached_item(_key, timekey)
if outxtimes is None: if outxtimes is None:
outxtimes = np.empty(outdims[0]) outxtimes = np.empty(outdims[0])
outxtimes[startidx:endidx] = npvalues(first_var.coords[timename][:]) outxtimes[startidx:endidx] = to_np(first_var.coords[timename][:])
else: else:
timecached = True timecached = True
@ -1545,7 +1559,7 @@ def _cat_files(wrfseq, varname, timeidx, is_moving, squeeze, meta, _key):
outlats = get_cached_item(_key, latkey) outlats = get_cached_item(_key, latkey)
if outlats is None: if outlats is None:
outlats = np.empty(outcoorddims, first_var.dtype) outlats = np.empty(outcoorddims, first_var.dtype)
outlats[startidx:endidx, :] = npvalues(first_var.coords[latname][:]) outlats[startidx:endidx, :] = to_np(first_var.coords[latname][:])
else: else:
latcached = True latcached = True
@ -1553,7 +1567,7 @@ def _cat_files(wrfseq, varname, timeidx, is_moving, squeeze, meta, _key):
outlons = get_cached_item(_key, lonkey) outlons = get_cached_item(_key, lonkey)
if outlons is None: if outlons is None:
outlons = np.empty(outcoorddims, first_var.dtype) outlons = np.empty(outcoorddims, first_var.dtype)
outlons[startidx:endidx, :] = npvalues(first_var.coords[lonname][:]) outlons[startidx:endidx, :] = to_np(first_var.coords[lonname][:])
else: else:
loncached = True loncached = True
@ -2114,7 +2128,7 @@ def _extract_var(wrfin, varname, timeidx, is_moving,
pass pass
else: else:
if not meta: if not meta:
return npvalues(cache_var) return to_np(cache_var)
return cache_var return cache_var

8
test/comp_utest.py

@ -341,7 +341,7 @@ def get_args(varname, wrfnc, timeidx, method, squeeze):
t = ncvars["T"] t = ncvars["T"]
p = ncvars["P"] p = ncvars["P"]
pb = ncvars["PB"] pb = ncvars["PB"]
qvapor = npvalues(ncvars["QVAPOR"]) qvapor = to_np(ncvars["QVAPOR"])
full_t = t + Constants.T_BASE full_t = t + Constants.T_BASE
full_p = p + pb full_p = p + pb
@ -358,7 +358,7 @@ def get_args(varname, wrfnc, timeidx, method, squeeze):
t = ncvars["T"] t = ncvars["T"]
p = ncvars["P"] p = ncvars["P"]
pb = ncvars["PB"] pb = ncvars["PB"]
qvapor = npvalues(ncvars["QVAPOR"]) qvapor = to_np(ncvars["QVAPOR"])
ph = ncvars["PH"] ph = ncvars["PH"]
phb = ncvars["PHB"] phb = ncvars["PHB"]
@ -381,7 +381,7 @@ def get_args(varname, wrfnc, timeidx, method, squeeze):
p = ncvars["P"] p = ncvars["P"]
pb = ncvars["PB"] pb = ncvars["PB"]
qvapor = npvalues(ncvars["QVAPOR"]) qvapor = to_np(ncvars["QVAPOR"])
# Algorithm requires hPa # Algorithm requires hPa
full_p = .01*(p + pb) full_p = .01*(p + pb)
@ -535,7 +535,7 @@ def make_func(varname, wrfnc, timeidx, method, squeeze, meta):
ref = getvar(wrfnc, varname, timeidx, method, squeeze, cache=None, ref = getvar(wrfnc, varname, timeidx, method, squeeze, cache=None,
meta=meta) meta=meta)
nt.assert_allclose(npvalues(result), npvalues(ref)) nt.assert_allclose(to_np(result), to_np(ref))
if meta: if meta:
self.assertEqual(result.dims, ref.dims) self.assertEqual(result.dims, ref.dims)

78
test/utests.py

@ -6,7 +6,7 @@ import os, sys
import subprocess import subprocess
from wrf import (getvar, interplevel, interpline, vertcross, vinterp, from wrf import (getvar, interplevel, interpline, vertcross, vinterp,
disable_xarray, xarray_enabled, npvalues, disable_xarray, xarray_enabled, to_np,
xy_to_ll, ll_to_xy, xy_to_ll_proj, ll_to_xy_proj, xy_to_ll, ll_to_xy, xy_to_ll_proj, ll_to_xy_proj,
extract_global_attrs, viewitems, CoordPair) extract_global_attrs, viewitems, CoordPair)
from wrf.util import is_multi_file from wrf.util import is_multi_file
@ -137,13 +137,13 @@ def make_test(varname, wrf_in, referent, multi=False, repeat=3, pynio=False):
my_vals = getvar(in_wrfnc, "temp", timeidx=timeidx, units="c") my_vals = getvar(in_wrfnc, "temp", timeidx=timeidx, units="c")
tol = 1/100. tol = 1/100.
atol = .1 # Note: NCL uses 273.16 as conversion for some reason atol = .1 # Note: NCL uses 273.16 as conversion for some reason
nt.assert_allclose(npvalues(my_vals), ref_vals, tol, atol) nt.assert_allclose(to_np(my_vals), ref_vals, tol, atol)
elif (varname == "pw"): elif (varname == "pw"):
my_vals = getvar(in_wrfnc, "pw", timeidx=timeidx) my_vals = getvar(in_wrfnc, "pw", timeidx=timeidx)
tol = .5/100.0 tol = .5/100.0
atol = 0 # NCL uses different constants and doesn't use same atol = 0 # NCL uses different constants and doesn't use same
# handrolled virtual temp in method # handrolled virtual temp in method
nt.assert_allclose(npvalues(my_vals), ref_vals, tol, atol) nt.assert_allclose(to_np(my_vals), ref_vals, tol, atol)
elif (varname == "cape_2d"): elif (varname == "cape_2d"):
cape_2d = getvar(in_wrfnc, varname, timeidx=timeidx) cape_2d = getvar(in_wrfnc, varname, timeidx=timeidx)
tol = 0/100. tol = 0/100.
@ -152,7 +152,7 @@ def make_test(varname, wrf_in, referent, multi=False, repeat=3, pynio=False):
# merged back in to NCL. The modifications to the R and CP # merged back in to NCL. The modifications to the R and CP
# changes TK enough that non-lifting parcels could lift, thus # changes TK enough that non-lifting parcels could lift, thus
# causing wildly different values in LCL # causing wildly different values in LCL
nt.assert_allclose(npvalues(cape_2d[0,:]), ref_vals[0,:], tol, atol) nt.assert_allclose(to_np(cape_2d[0,:]), ref_vals[0,:], tol, atol)
elif (varname == "cape_3d"): elif (varname == "cape_3d"):
cape_3d = getvar(in_wrfnc, varname, timeidx=timeidx) cape_3d = getvar(in_wrfnc, varname, timeidx=timeidx)
# Changing the R and CP constants, while keeping TK within # Changing the R and CP constants, while keeping TK within
@ -163,14 +163,14 @@ def make_test(varname, wrf_in, referent, multi=False, repeat=3, pynio=False):
tol = 0/100. tol = 0/100.
atol = 200.0 atol = 200.0
#print np.amax(np.abs(npvalues(cape_3d[0,:]) - ref_vals[0,:])) #print np.amax(np.abs(to_np(cape_3d[0,:]) - ref_vals[0,:]))
nt.assert_allclose(npvalues(cape_3d), ref_vals, tol, atol) nt.assert_allclose(to_np(cape_3d), ref_vals, tol, atol)
else: else:
my_vals = getvar(in_wrfnc, varname, timeidx=timeidx) my_vals = getvar(in_wrfnc, varname, timeidx=timeidx)
tol = 2/100. tol = 2/100.
atol = 0.1 atol = 0.1
#print (np.amax(np.abs(npvalues(my_vals) - ref_vals))) #print (np.amax(np.abs(to_np(my_vals) - ref_vals)))
nt.assert_allclose(npvalues(my_vals), ref_vals, tol, atol) nt.assert_allclose(to_np(my_vals), ref_vals, tol, atol)
return test return test
@ -249,7 +249,7 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
p = getvar(in_wrfnc, "pressure", timeidx=timeidx) p = getvar(in_wrfnc, "pressure", timeidx=timeidx)
hts_500 = interplevel(hts, p, 500) hts_500 = interplevel(hts, p, 500)
nt.assert_allclose(npvalues(hts_500), ref_ht_500) nt.assert_allclose(to_np(hts_500), ref_ht_500)
elif (varname == "vertcross"): elif (varname == "vertcross"):
ref_ht_cross = _get_refvals(referent, "ht_cross", repeat, multi) ref_ht_cross = _get_refvals(referent, "ht_cross", repeat, multi)
@ -261,12 +261,12 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
pivot_point = CoordPair(hts.shape[-1] / 2, hts.shape[-2] / 2) pivot_point = CoordPair(hts.shape[-1] / 2, hts.shape[-2] / 2)
ht_cross = vertcross(hts, p, pivot_point=pivot_point, angle=90.) ht_cross = vertcross(hts, p, pivot_point=pivot_point, angle=90.)
nt.assert_allclose(npvalues(ht_cross), ref_ht_cross, rtol=.01) nt.assert_allclose(to_np(ht_cross), ref_ht_cross, rtol=.01)
# Test opposite # Test opposite
p_cross1 = vertcross(p,hts,pivot_point=pivot_point, angle=90.0) p_cross1 = vertcross(p,hts,pivot_point=pivot_point, angle=90.0)
nt.assert_allclose(npvalues(p_cross1), nt.assert_allclose(to_np(p_cross1),
ref_p_cross, ref_p_cross,
rtol=.01) rtol=.01)
# Test point to point # Test point to point
@ -276,8 +276,8 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
p_cross2 = vertcross(p,hts,start_point=start_point, p_cross2 = vertcross(p,hts,start_point=start_point,
end_point=end_point) end_point=end_point)
nt.assert_allclose(npvalues(p_cross1), nt.assert_allclose(to_np(p_cross1),
npvalues(p_cross2)) to_np(p_cross2))
elif (varname == "interpline"): elif (varname == "interpline"):
@ -288,7 +288,7 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
t2_line1 = interpline(t2, pivot_point=pivot_point, angle=90.0) t2_line1 = interpline(t2, pivot_point=pivot_point, angle=90.0)
nt.assert_allclose(npvalues(t2_line1), ref_t2_line) nt.assert_allclose(to_np(t2_line1), ref_t2_line)
# Test point to point # Test point to point
start_point = CoordPair(0, t2.shape[-2]/2) start_point = CoordPair(0, t2.shape[-2]/2)
@ -297,7 +297,7 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
t2_line2 = interpline(t2, start_point=start_point, t2_line2 = interpline(t2, start_point=start_point,
end_point=end_point) end_point=end_point)
nt.assert_allclose(npvalues(t2_line1), npvalues(t2_line2)) nt.assert_allclose(to_np(t2_line1), to_np(t2_line2))
elif (varname == "vinterp"): elif (varname == "vinterp"):
# Tk to theta # Tk to theta
fld_tk_theta = _get_refvals(referent, "fld_tk_theta", repeat, multi) fld_tk_theta = _get_refvals(referent, "fld_tk_theta", repeat, multi)
@ -320,8 +320,8 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
atol = 0.0001 atol = 0.0001
field = np.squeeze(field) field = np.squeeze(field)
#print (np.amax(np.abs(npvalues(field) - fld_tk_theta))) #print (np.amax(np.abs(to_np(field) - fld_tk_theta)))
nt.assert_allclose(npvalues(field), fld_tk_theta, tol, atol) nt.assert_allclose(to_np(field), fld_tk_theta, tol, atol)
# Tk to theta-e # Tk to theta-e
fld_tk_theta_e = _get_refvals(referent, "fld_tk_theta_e", repeat, multi) fld_tk_theta_e = _get_refvals(referent, "fld_tk_theta_e", repeat, multi)
@ -342,8 +342,8 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
atol = 50.0001 atol = 50.0001
field = np.squeeze(field) field = np.squeeze(field)
#print (np.amax(np.abs(npvalues(field) - fld_tk_theta_e)/fld_tk_theta_e)*100) #print (np.amax(np.abs(to_np(field) - fld_tk_theta_e)/fld_tk_theta_e)*100)
nt.assert_allclose(npvalues(field), fld_tk_theta_e, tol, atol) nt.assert_allclose(to_np(field), fld_tk_theta_e, tol, atol)
# Tk to pressure # Tk to pressure
fld_tk_pres = _get_refvals(referent, "fld_tk_pres", repeat, multi) fld_tk_pres = _get_refvals(referent, "fld_tk_pres", repeat, multi)
@ -362,8 +362,8 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
field = np.squeeze(field) field = np.squeeze(field)
#print (np.amax(np.abs(npvalues(field) - fld_tk_pres))) #print (np.amax(np.abs(to_np(field) - fld_tk_pres)))
nt.assert_allclose(npvalues(field), fld_tk_pres, tol, atol) nt.assert_allclose(to_np(field), fld_tk_pres, tol, atol)
# Tk to geoht_msl # Tk to geoht_msl
fld_tk_ght_msl = _get_refvals(referent, "fld_tk_ght_msl", repeat, multi) fld_tk_ght_msl = _get_refvals(referent, "fld_tk_ght_msl", repeat, multi)
@ -380,8 +380,8 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
log_p=True) log_p=True)
field = np.squeeze(field) field = np.squeeze(field)
#print (np.amax(np.abs(npvalues(field) - fld_tk_ght_msl))) #print (np.amax(np.abs(to_np(field) - fld_tk_ght_msl)))
nt.assert_allclose(npvalues(field), fld_tk_ght_msl, tol, atol) nt.assert_allclose(to_np(field), fld_tk_ght_msl, tol, atol)
# Tk to geoht_agl # Tk to geoht_agl
fld_tk_ght_agl = _get_refvals(referent, "fld_tk_ght_agl", repeat, multi) fld_tk_ght_agl = _get_refvals(referent, "fld_tk_ght_agl", repeat, multi)
@ -398,8 +398,8 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
log_p=True) log_p=True)
field = np.squeeze(field) field = np.squeeze(field)
#print (np.amax(np.abs(npvalues(field) - fld_tk_ght_agl))) #print (np.amax(np.abs(to_np(field) - fld_tk_ght_agl)))
nt.assert_allclose(npvalues(field), fld_tk_ght_agl, tol, atol) nt.assert_allclose(to_np(field), fld_tk_ght_agl, tol, atol)
# Hgt to pressure # Hgt to pressure
fld_ht_pres = _get_refvals(referent, "fld_ht_pres", repeat, multi) fld_ht_pres = _get_refvals(referent, "fld_ht_pres", repeat, multi)
@ -417,8 +417,8 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
log_p=True) log_p=True)
field = np.squeeze(field) field = np.squeeze(field)
#print (np.amax(np.abs(npvalues(field) - fld_ht_pres))) #print (np.amax(np.abs(to_np(field) - fld_ht_pres)))
nt.assert_allclose(npvalues(field), fld_ht_pres, tol, atol) nt.assert_allclose(to_np(field), fld_ht_pres, tol, atol)
# Pressure to theta # Pressure to theta
fld_pres_theta = _get_refvals(referent, "fld_pres_theta", repeat, multi) fld_pres_theta = _get_refvals(referent, "fld_pres_theta", repeat, multi)
@ -436,8 +436,8 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
log_p=True) log_p=True)
field = np.squeeze(field) field = np.squeeze(field)
#print (np.amax(np.abs(npvalues(field) - fld_pres_theta))) #print (np.amax(np.abs(to_np(field) - fld_pres_theta)))
nt.assert_allclose(npvalues(field), fld_pres_theta, tol, atol) nt.assert_allclose(to_np(field), fld_pres_theta, tol, atol)
# Theta-e to pres # Theta-e to pres
fld_thetae_pres = _get_refvals(referent, "fld_thetae_pres", repeat, multi) fld_thetae_pres = _get_refvals(referent, "fld_thetae_pres", repeat, multi)
@ -455,8 +455,8 @@ def make_interp_test(varname, wrf_in, referent, multi=False,
log_p=True) log_p=True)
field = np.squeeze(field) field = np.squeeze(field)
#print (np.amax(np.abs(npvalues(field) - fld_thetae_pres))) #print (np.amax(np.abs(to_np(field) - fld_thetae_pres)))
nt.assert_allclose(npvalues(field), fld_thetae_pres, tol, atol) nt.assert_allclose(to_np(field), fld_thetae_pres, tol, atol)
return test return test
@ -531,13 +531,13 @@ def make_latlon_test(testid, wrf_in, referent, single, multi=False, repeat=3,
xy = xy + 1 # NCL uses fortran indexing xy = xy + 1 # NCL uses fortran indexing
ref = ref_vals[:,0] ref = ref_vals[:,0]
nt.assert_allclose(npvalues(xy), ref) nt.assert_allclose(to_np(xy), ref)
# Next make sure the 'proj' version works # Next make sure the 'proj' version works
projparams = extract_proj_params(in_wrfnc) projparams = extract_proj_params(in_wrfnc)
xy_proj = ll_to_xy_proj(lats[0], lons[0], **projparams) xy_proj = ll_to_xy_proj(lats[0], lons[0], **projparams)
nt.assert_allclose(npvalues(xy_proj), npvalues(xy-1)) nt.assert_allclose(to_np(xy_proj), to_np(xy-1))
else: else:
@ -545,13 +545,13 @@ def make_latlon_test(testid, wrf_in, referent, single, multi=False, repeat=3,
xy = xy + 1 # NCL uses fortran indexing xy = xy + 1 # NCL uses fortran indexing
ref = ref_vals[:] ref = ref_vals[:]
nt.assert_allclose(npvalues(xy), ref) nt.assert_allclose(to_np(xy), ref)
# Next make sure the 'proj' version works # Next make sure the 'proj' version works
projparams = extract_proj_params(in_wrfnc) projparams = extract_proj_params(in_wrfnc)
xy_proj = ll_to_xy_proj(lats, lons, **projparams) xy_proj = ll_to_xy_proj(lats, lons, **projparams)
nt.assert_allclose(npvalues(xy_proj), npvalues(xy-1)) nt.assert_allclose(to_np(xy_proj), to_np(xy-1))
else: else:
# Since this domain is not moving, the reference values are the # Since this domain is not moving, the reference values are the
@ -567,24 +567,24 @@ def make_latlon_test(testid, wrf_in, referent, single, multi=False, repeat=3,
ll = xy_to_ll(in_wrfnc, i_s[0], j_s[0]) ll = xy_to_ll(in_wrfnc, i_s[0], j_s[0])
ref = ref_vals[::-1,0] ref = ref_vals[::-1,0]
nt.assert_allclose(npvalues(ll), ref) nt.assert_allclose(to_np(ll), ref)
# Next make sure the 'proj' version works # Next make sure the 'proj' version works
projparams = extract_proj_params(in_wrfnc) projparams = extract_proj_params(in_wrfnc)
ll_proj = xy_to_ll_proj(i_s[0], j_s[0], **projparams) ll_proj = xy_to_ll_proj(i_s[0], j_s[0], **projparams)
nt.assert_allclose(npvalues(ll_proj), npvalues(ll)) nt.assert_allclose(to_np(ll_proj), to_np(ll))
else: else:
ll = xy_to_ll(in_wrfnc, i_s, j_s) ll = xy_to_ll(in_wrfnc, i_s, j_s)
ref = ref_vals[::-1,:] ref = ref_vals[::-1,:]
nt.assert_allclose(npvalues(ll), ref) nt.assert_allclose(to_np(ll), ref)
# Next make sure the 'proj' version works # Next make sure the 'proj' version works
projparams = extract_proj_params(in_wrfnc) projparams = extract_proj_params(in_wrfnc)
ll_proj = xy_to_ll_proj(i_s, j_s, **projparams) ll_proj = xy_to_ll_proj(i_s, j_s, **projparams)
nt.assert_allclose(npvalues(ll_proj), npvalues(ll)) nt.assert_allclose(to_np(ll_proj), to_np(ll))
return test return test

Loading…
Cancel
Save