Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_storm_relative_helicity_with_interpolation():
"""Test storm relative helicity with interpolation."""
u = np.array([-5, 15, 25, 15, -5]) * units('m/s')
v = np.array([40, 20, 10, 10, 30]) * units('m/s')
u = u.to('knots')
heights = np.array([0, 100, 200, 300, 400]) * units.m
pos_srh, neg_srh, total_srh = storm_relative_helicity(u, v, heights,
bottom=50 * units.meters,
depth=300 * units.meters,
storm_u=5 * units('m/s'),
storm_v=10 * units('m/s'))
assert_almost_equal(pos_srh, 400. * units('meter ** 2 / second ** 2 '), 6)
assert_almost_equal(neg_srh, -100. * units('meter ** 2 / second ** 2 '), 6)
assert_almost_equal(total_srh, 300. * units('meter ** 2 / second ** 2 '), 6)
dx_truth = np.array([[212943.5585, 212943.5585, 212943.5585],
[204946.2305, 204946.2305, 204946.2305],
[196558.8269, 196558.8269, 196558.8269],
[187797.3216, 187797.3216, 187797.3216]]) * units.meter
dy_truth = np.array([[277987.1857, 277987.1857, 277987.1857, 277987.1857],
[277987.1857, 277987.1857, 277987.1857, 277987.1857],
[277987.1857, 277987.1857, 277987.1857, 277987.1857]]) * units.meter
if flip_order:
lon = lon[::-1]
lat = lat[::-1]
dx_truth = -1 * dx_truth[::-1]
dy_truth = -1 * dy_truth[::-1]
lon, lat = np.meshgrid(lon, lat)
dx, dy = lat_lon_grid_deltas(lon, lat)
assert_almost_equal(dx, dx_truth, 4)
assert_almost_equal(dy, dy_truth, 4)
pressure[1] = 900 * units.hPa
pressure[0] = 800 * units.hPa
pvor = potential_vorticity_baroclinic(potential_temperature, pressure,
u, v, dx[None, :, :], dy[None, :, :],
lats[None, :, :])
abs_vorticity = absolute_vorticity(u, v, dx[None, :, :], dy[None, :, :],
lats[None, :, :])
vort_difference = pvor - (abs_vorticity * g * (-1 * (units.kelvin / units.hPa)))
true_vort = np.zeros_like(u) * (units.kelvin * units.meter**2
/ (units.second * units.kilogram))
assert_almost_equal(vort_difference, true_vort, 10)
def test_bulk_shear_no_depth():
"""Test bulk shear with observed sounding and no depth given. Issue #568."""
data = get_upper_air_data(datetime(2016, 5, 22, 0), 'DDC')
u, v = bulk_shear(data['pressure'], data['u_wind'],
data['v_wind'], heights=data['height'])
truth = [20.225018939, 22.602359692] * units('knots')
assert_almost_equal(u.to('knots'), truth[0], 8)
assert_almost_equal(v.to('knots'), truth[1], 8)
def test_mixing_ratio_from_specific_humidity_no_units():
"""Test mixing ratio from specific humidity works without units."""
q = 0.012
w = mixing_ratio_from_specific_humidity(q)
assert_almost_equal(w, 0.01215, 3)
def test_cape_cin():
"""Test the basic CAPE and CIN calculation."""
p = np.array([959., 779.2, 751.3, 724.3, 700., 269.]) * units.mbar
temperature = np.array([22.2, 14.6, 12., 9.4, 7., -38.]) * units.celsius
dewpoint = np.array([19., -11.2, -10.8, -10.4, -10., -53.2]) * units.celsius
parcel_prof = parcel_profile(p, temperature[0], dewpoint[0])
cape, cin = cape_cin(p, temperature, dewpoint, parcel_prof)
assert_almost_equal(cape, 75.7340825 * units('joule / kilogram'), 2)
assert_almost_equal(cin, -89.8179205 * units('joule / kilogram'), 2)
def test_relative_humidity_from_dewpoint_with_f():
"""Test Relative Humidity accepts temperature in Fahrenheit."""
assert_almost_equal(relative_humidity_from_dewpoint(70. * units.degF, 55. * units.degF),
58.935 * units.percent, 3)
def test_wet_bulb_temperature():
"""Test wet bulb calculation with scalars."""
val = wet_bulb_temperature(1000 * units.hPa, 25 * units.degC, 15 * units.degC)
truth = 18.34345936 * units.degC # 18.59 from NWS calculator
assert_almost_equal(val, truth, 5)
rh[:, 0, :] = 100.
rh[:, 1, :] = 80.
rh[:, 2, :] = 40.
rh[:, 3, :] = 20.
relh = rh * units.percent
isentlev = [296., 297., 300.] * units.kelvin
isentprs = isentropic_interpolation(isentlev, lev, tmpk, relh, axis=1)
trueprs = 1000. * units.hPa
trueprs2 = 936.18057 * units.hPa
trueprs3 = 879.446 * units.hPa
truerh = 69.171 * units.percent
assert isentprs[0].shape == (3, 3, 5, 5)
assert_almost_equal(isentprs[0][:, 0, :], trueprs, 3)
assert_almost_equal(isentprs[0][:, 1, :], trueprs2, 3)
assert_almost_equal(isentprs[0][:, 2, :], trueprs3, 3)
assert_almost_equal(isentprs[1][:, 1, ], truerh, 3)
def test_mixed_parcel():
"""Test the mixed parcel calculation."""
pressure = np.array([959., 779.2, 751.3, 724.3, 700., 269.]) * units.hPa
temperature = np.array([22.2, 14.6, 12., 9.4, 7., -38.]) * units.degC
dewpoint = np.array([19., -11.2, -10.8, -10.4, -10., -53.2]) * units.degC
parcel_pressure, parcel_temperature, parcel_dewpoint = mixed_parcel(pressure, temperature,
dewpoint,
depth=250 * units.hPa)
assert_almost_equal(parcel_pressure, 959. * units.hPa, 6)
assert_almost_equal(parcel_temperature, 28.7363771 * units.degC, 6)
assert_almost_equal(parcel_dewpoint, 7.1534658 * units.degC, 6)