Skip to content

Commit 2e75cd6

Browse files
committed
update assert np.allclose to numpy.testing.assert_allclose
1 parent eecb692 commit 2e75cd6

13 files changed

+210
-200
lines changed

tests/test_advection.py

+26-25
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import numpy as np
55
import pytest
66
import xarray as xr
7+
from numpy.testing import assert_allclose
78

89
from parcels import (
910
AdvectionAnalytical,
@@ -98,7 +99,7 @@ def test_advection_meridional(lon, lat):
9899
pset = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(-60, 60, npart), lat=np.linspace(0, 30, npart))
99100
delta_lat = np.diff(pset.lat)
100101
pset.execute(AdvectionRK4, runtime=timedelta(hours=2), dt=timedelta(seconds=30))
101-
assert np.allclose(np.diff(pset.lat), delta_lat, rtol=1.0e-4)
102+
assert_allclose(np.diff(pset.lat), delta_lat, rtol=1.0e-4)
102103

103104

104105
def test_advection_3D():
@@ -119,7 +120,7 @@ def test_advection_3D():
119120
)
120121
time = timedelta(hours=2).total_seconds()
121122
pset.execute(AdvectionRK4, runtime=time, dt=timedelta(seconds=30))
122-
assert np.allclose(pset.depth * pset.time, pset.lon, atol=1.0e-1)
123+
assert_allclose(pset.depth * pset.time, pset.lon, atol=1.0e-1)
123124

124125

125126
@pytest.mark.parametrize("direction", ["up", "down"])
@@ -161,8 +162,8 @@ def SubmergeParticle(particle, fieldset, time): # pragma: no cover
161162
pset.execute(kernels, runtime=11.0, dt=1)
162163

163164
if direction == "up" and wErrorThroughSurface:
164-
assert np.allclose(pset.lon[0], 0.6)
165-
assert np.allclose(pset.depth[0], 0)
165+
assert_allclose(pset.lon[0], 0.6)
166+
assert_allclose(pset.depth[0], 0)
166167
else:
167168
assert len(pset) == 0
168169

@@ -227,7 +228,7 @@ def test_conversion_3DCROCO():
227228
for zi, z in enumerate(z_xroms):
228229
sigma[zi] = _croco_from_z_to_sigma_scipy(fieldset, 0, z, lat, lon, None)
229230

230-
assert np.allclose(sigma, s_xroms, atol=1e-3)
231+
assert_allclose(sigma, s_xroms, atol=1e-3)
231232

232233

233234
@pytest.mark.v4alpha
@@ -246,8 +247,8 @@ def SampleW(particle, fieldset, time): # pragma: no cover
246247
particle.w = fieldset.W[time, particle.depth, particle.lat, particle.lon]
247248

248249
pset.execute([AdvectionRK4_3D, SampleW], runtime=runtime, dt=100)
249-
assert np.allclose(pset.depth, Z.flatten(), atol=5) # TODO lower this atol
250-
assert np.allclose(pset.lon_nextloop, [x + runtime for x in X.flatten()], atol=1e-3)
250+
assert_allclose(pset.depth, Z.flatten(), atol=5) # TODO lower this atol
251+
assert_allclose(pset.lon_nextloop, [x + runtime for x in X.flatten()], atol=1e-3)
251252

252253

253254
@pytest.mark.v4alpha
@@ -262,8 +263,8 @@ def test_advection_2DCROCO():
262263
pset = ParticleSet(fieldset=fieldset, pclass=Particle, lon=X, lat=Y, depth=Z)
263264

264265
pset.execute([AdvectionRK4], runtime=runtime, dt=100)
265-
assert np.allclose(pset.depth, Z.flatten(), atol=1e-3)
266-
assert np.allclose(pset.lon_nextloop, [x + runtime for x in X], atol=1e-3)
266+
assert_allclose(pset.depth, Z.flatten(), atol=1e-3)
267+
assert_allclose(pset.lon_nextloop, [x + runtime for x in X], atol=1e-3)
267268

268269

269270
def create_periodic_fieldset(xdim, ydim, uvel, vvel):
@@ -315,8 +316,8 @@ def test_advection_periodic_zonal_meridional():
315316
fieldset.add_periodic_halo(zonal=True, meridional=True)
316317
assert len(fieldset.U.lat) == ydim + 10 # default halo size is 5 grid points
317318
assert len(fieldset.U.lon) == xdim + 10 # default halo size is 5 grid points
318-
assert np.allclose(np.diff(fieldset.U.lat), fieldset.U.lat[1] - fieldset.U.lat[0], rtol=0.001)
319-
assert np.allclose(np.diff(fieldset.U.lon), fieldset.U.lon[1] - fieldset.U.lon[0], rtol=0.001)
319+
assert_allclose(np.diff(fieldset.U.lat), fieldset.U.lat[1] - fieldset.U.lat[0], rtol=0.001)
320+
assert_allclose(np.diff(fieldset.U.lon), fieldset.U.lon[1] - fieldset.U.lon[0], rtol=0.001)
320321

321322
pset = ParticleSet(fieldset, pclass=Particle, lon=[0.4], lat=[0.5])
322323
pset.execute(AdvectionRK4 + pset.Kernel(periodicBC), runtime=timedelta(hours=20), dt=timedelta(seconds=30))
@@ -431,8 +432,8 @@ def test_stationary_eddy(fieldset_stationary, method, rtol, diffField):
431432

432433
exp_lon = [truth_stationary(x, y, pset[0].time)[0] for x, y in zip(lon, lat, strict=True)]
433434
exp_lat = [truth_stationary(x, y, pset[0].time)[1] for x, y in zip(lon, lat, strict=True)]
434-
assert np.allclose(pset.lon, exp_lon, rtol=rtol)
435-
assert np.allclose(pset.lat, exp_lat, rtol=rtol)
435+
assert_allclose(pset.lon, exp_lon, rtol=rtol)
436+
assert_allclose(pset.lat, exp_lat, rtol=rtol)
436437

437438

438439
def test_stationary_eddy_vertical():
@@ -460,9 +461,9 @@ def test_stationary_eddy_vertical():
460461
exp_lon = [truth_stationary(x, z, pset[0].time)[0] for x, z in zip(lon, depth, strict=True)]
461462
exp_depth = [truth_stationary(x, z, pset[0].time)[1] for x, z in zip(lon, depth, strict=True)]
462463
print(pset, exp_lon)
463-
assert np.allclose(pset.lon, exp_lon, rtol=1e-5)
464-
assert np.allclose(pset.lat, lat, rtol=1e-5)
465-
assert np.allclose(pset.depth, exp_depth, rtol=1e-5)
464+
assert_allclose(pset.lon, exp_lon, rtol=1e-5)
465+
assert_allclose(pset.lat, lat, rtol=1e-5)
466+
assert_allclose(pset.depth, exp_depth, rtol=1e-5)
466467

467468
data = {"U": fldzero, "V": fld2, "W": fld1}
468469
fieldset = FieldSet.from_data(data, dimensions, mesh="flat")
@@ -471,9 +472,9 @@ def test_stationary_eddy_vertical():
471472
pset.execute(AdvectionRK4_3D, dt=dt, endtime=endtime)
472473
exp_depth = [truth_stationary(z, y, pset[0].time)[0] for z, y in zip(depth, lat, strict=True)]
473474
exp_lat = [truth_stationary(z, y, pset[0].time)[1] for z, y in zip(depth, lat, strict=True)]
474-
assert np.allclose(pset.lon, lon, rtol=1e-5)
475-
assert np.allclose(pset.lat, exp_lat, rtol=1e-5)
476-
assert np.allclose(pset.depth, exp_depth, rtol=1e-5)
475+
assert_allclose(pset.lon, lon, rtol=1e-5)
476+
assert_allclose(pset.lat, exp_lat, rtol=1e-5)
477+
assert_allclose(pset.depth, exp_depth, rtol=1e-5)
477478

478479

479480
def truth_moving(x_0, y_0, t):
@@ -536,8 +537,8 @@ def test_moving_eddy(fieldset_moving, method, rtol, diffField):
536537

537538
exp_lon = [truth_moving(x, y, t)[0] for x, y, t in zip(lon, lat, pset.time, strict=True)]
538539
exp_lat = [truth_moving(x, y, t)[1] for x, y, t in zip(lon, lat, pset.time, strict=True)]
539-
assert np.allclose(pset.lon, exp_lon, rtol=rtol)
540-
assert np.allclose(pset.lat, exp_lat, rtol=rtol)
540+
assert_allclose(pset.lon, exp_lon, rtol=rtol)
541+
assert_allclose(pset.lat, exp_lat, rtol=rtol)
541542

542543

543544
def truth_decaying(x_0, y_0, t):
@@ -619,8 +620,8 @@ def test_decaying_eddy(fieldset_decaying, method, rtol, diffField):
619620

620621
exp_lon = [truth_decaying(x, y, t)[0] for x, y, t in zip(lon, lat, pset.time, strict=True)]
621622
exp_lat = [truth_decaying(x, y, t)[1] for x, y, t in zip(lon, lat, pset.time, strict=True)]
622-
assert np.allclose(pset.lon, exp_lon, rtol=rtol)
623-
assert np.allclose(pset.lat, exp_lat, rtol=rtol)
623+
assert_allclose(pset.lon, exp_lon, rtol=rtol)
624+
assert_allclose(pset.lat, exp_lat, rtol=rtol)
624625

625626

626627
def test_analyticalAgrid():
@@ -669,6 +670,6 @@ def test_uniform_analytical(u, v, w, direction, tmp_zarrfile):
669670
ds = xr.open_zarr(tmp_zarrfile)
670671
times = (direction * ds["time"][:]).values.astype("timedelta64[s]")[0]
671672
timeref = np.arange(1, 5).astype("timedelta64[s]")
672-
assert np.allclose(times, timeref, atol=np.timedelta64(1, "ms"))
673+
assert_allclose(times, timeref, atol=np.timedelta64(1, "ms"))
673674
lons = ds["lon"][:].values
674-
assert np.allclose(lons, x0 + direction * u * np.arange(1, 5))
675+
assert_allclose(lons, x0 + direction * u * np.arange(1, 5))

tests/test_diffusion.py

+11-10
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import numpy as np
55
import pytest
6+
from numpy.testing import assert_allclose
67
from scipy import stats
78

89
from parcels import (
@@ -44,10 +45,10 @@ def test_fieldKh_Brownian(mesh):
4445
lons = pset.lon
4546

4647
tol = 500 * mesh_conversion # effectively 500 m errors
47-
assert np.allclose(np.std(lats), expected_std_lat, atol=tol)
48-
assert np.allclose(np.std(lons), expected_std_lon, atol=tol)
49-
assert np.allclose(np.mean(lons), 0, atol=tol)
50-
assert np.allclose(np.mean(lats), 0, atol=tol)
48+
assert_allclose(np.std(lats), expected_std_lat, atol=tol)
49+
assert_allclose(np.std(lons), expected_std_lon, atol=tol)
50+
assert_allclose(np.mean(lons), 0, atol=tol)
51+
assert_allclose(np.mean(lats), 0, atol=tol)
5152

5253

5354
@pytest.mark.parametrize("mesh", ["spherical", "flat"])
@@ -78,8 +79,8 @@ def test_fieldKh_SpatiallyVaryingDiffusion(mesh, kernel):
7879
lats = pset.lat
7980
lons = pset.lon
8081
tol = 2000 * mesh_conversion # effectively 2000 m errors (because of low numbers of particles)
81-
assert np.allclose(np.mean(lons), 0, atol=tol)
82-
assert np.allclose(np.mean(lats), 0, atol=tol)
82+
assert_allclose(np.mean(lons), 0, atol=tol)
83+
assert_allclose(np.mean(lats), 0, atol=tol)
8384
assert stats.skew(lons) > stats.skew(lats)
8485

8586

@@ -106,7 +107,7 @@ def vertical_randomexponential(particle, fieldset, time): # pragma: no cover
106107

107108
depth = pset.depth
108109
expected_mean = 1.0 / fieldset.lambd
109-
assert np.allclose(np.mean(depth), expected_mean, rtol=0.1)
110+
assert_allclose(np.mean(depth), expected_mean, rtol=0.1)
110111

111112

112113
@pytest.mark.parametrize("mu", [0.8 * np.pi, np.pi])
@@ -134,8 +135,8 @@ def vonmises(particle, fieldset, time): # pragma: no cover
134135

135136
angles = np.array([p.angle for p in pset])
136137

137-
assert np.allclose(np.mean(angles), mu, atol=0.1)
138+
assert_allclose(np.mean(angles), mu, atol=0.1)
138139
vonmises_mean = stats.vonmises.mean(kappa=kappa, loc=mu)
139-
assert np.allclose(np.mean(angles), vonmises_mean, atol=0.1)
140+
assert_allclose(np.mean(angles), vonmises_mean, atol=0.1)
140141
vonmises_var = stats.vonmises.var(kappa=kappa, loc=mu)
141-
assert np.allclose(np.var(angles), vonmises_var, atol=0.1)
142+
assert_allclose(np.var(angles), vonmises_var, atol=0.1)

tests/test_field.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import numpy as np
33
import pytest
44
import xarray as xr
5+
from numpy.testing import assert_allclose
56

67
from parcels import Field
78
from parcels.tools.converters import (
@@ -22,8 +23,8 @@ def test_field_from_netcdf_variables():
2223
variable = {"U": "vozocrtx"}
2324
f3 = Field.from_netcdf(filename, variable, dims)
2425

25-
assert np.allclose(f1.data, f2.data, atol=1e-12)
26-
assert np.allclose(f1.data, f3.data, atol=1e-12)
26+
assert_allclose(f1.data, f2.data, atol=1e-12)
27+
assert_allclose(f1.data, f3.data, atol=1e-12)
2728

2829
with pytest.raises(AssertionError):
2930
variable = {"U": "vozocrtx", "nav_lat": "nav_lat"} # multiple variables will fail

tests/test_fieldset.py

+24-23
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import numpy as np
44
import pytest
55
import xarray as xr
6+
from numpy.testing import assert_allclose
67

78
from parcels import (
89
AdvectionRK4,
@@ -89,8 +90,8 @@ def test_fieldset_from_data(xdim, ydim):
8990
assert fieldset.U._creation_log == "from_data"
9091
assert len(fieldset.U.data.shape) == 3
9192
assert len(fieldset.V.data.shape) == 3
92-
assert np.allclose(fieldset.U.data[0, :], data["U"], rtol=1e-12)
93-
assert np.allclose(fieldset.V.data[0, :], data["V"], rtol=1e-12)
93+
assert_allclose(fieldset.U.data[0, :], data["U"], rtol=1e-12)
94+
assert_allclose(fieldset.V.data[0, :], data["V"], rtol=1e-12)
9495

9596

9697
def test_fieldset_extra_syntax():
@@ -147,9 +148,9 @@ def test_fieldset_from_data_different_dimensions(xdim, ydim):
147148
assert len(fieldset.V.data.shape) == 3
148149
assert len(fieldset.P.data.shape) == 4
149150
assert fieldset.P.data.shape == (tdim, zdim, ydim / 2, xdim / 2)
150-
assert np.allclose(fieldset.U.data, 0.0, rtol=1e-12)
151-
assert np.allclose(fieldset.V.data, 1.0, rtol=1e-12)
152-
assert np.allclose(fieldset.P.data, 2.0, rtol=1e-12)
151+
assert_allclose(fieldset.U.data, 0.0, rtol=1e-12)
152+
assert_allclose(fieldset.V.data, 1.0, rtol=1e-12)
153+
assert_allclose(fieldset.P.data, 2.0, rtol=1e-12)
153154

154155

155156
@pytest.mark.parametrize("xdim", [100, 200])
@@ -163,8 +164,8 @@ def test_fieldset_from_parcels(xdim, ydim, tmpdir):
163164
fieldset = FieldSet.from_parcels(filepath)
164165
assert len(fieldset.U.data.shape) == 3 # Will be 4 once we use depth
165166
assert len(fieldset.V.data.shape) == 3
166-
assert np.allclose(fieldset.U.data[0, :], data["U"], rtol=1e-12)
167-
assert np.allclose(fieldset.V.data[0, :], data["V"], rtol=1e-12)
167+
assert_allclose(fieldset.U.data[0, :], data["U"], rtol=1e-12)
168+
assert_allclose(fieldset.V.data[0, :], data["V"], rtol=1e-12)
168169

169170

170171
def test_fieldset_from_modulefile():
@@ -392,7 +393,7 @@ def test_fieldset_write_curvilinear(tmpdir):
392393
assert fieldset2.dx._creation_log == "from_netcdf"
393394

394395
for var in ["lon", "lat", "data"]:
395-
assert np.allclose(getattr(fieldset2.dx, var), getattr(fieldset.dx, var))
396+
assert_allclose(getattr(fieldset2.dx, var), getattr(fieldset.dx, var))
396397

397398

398399
def addConst(particle, fieldset, time): # pragma: no cover
@@ -490,7 +491,7 @@ def UpdateU(particle, fieldset, time): # pragma: no cover
490491
assert fieldset.U.data[0, 1, 0] == 11
491492

492493
da = xr.open_dataset(str(tmp_zarrfile).replace(".zarr", "_0005U.nc"))
493-
assert np.allclose(fieldset.U.data, da["U"].values, atol=1.0)
494+
assert_allclose(fieldset.U.data, da["U"].values, atol=1.0)
494495

495496

496497
@pytest.mark.v4remove
@@ -517,12 +518,12 @@ def test_timestamps(datetype, tmpdir):
517518
fieldset3 = FieldSet.from_parcels(tmpdir.join("file*"))
518519
timestamps = [dims1["time"], dims2["time"]]
519520
fieldset4 = FieldSet.from_parcels(tmpdir.join("file*"), timestamps=timestamps)
520-
assert np.allclose(fieldset3.U.grid.time_full, fieldset4.U.grid.time_full)
521+
assert_allclose(fieldset3.U.grid.time_full, fieldset4.U.grid.time_full)
521522

522523
for d in [0, 8, 10, 12]:
523524
fieldset3.computeTimeChunk(d * 86400.0, 1.0)
524525
fieldset4.computeTimeChunk(d * 86400.0, 1.0)
525-
assert np.allclose(fieldset3.U.data, fieldset4.U.data)
526+
assert_allclose(fieldset3.U.data, fieldset4.U.data)
526527

527528

528529
@pytest.mark.v4remove
@@ -610,10 +611,10 @@ def sampleTemp(particle, fieldset, time): # pragma: no cover
610611
temp_theo = temp_vec[-1]
611612
elif dt_sign == -1:
612613
temp_theo = temp_vec[0]
613-
assert np.allclose(temp_theo, pset.temp[0], atol=1e-5)
614-
assert np.allclose(pset.u1[0], pset.u2[0])
615-
assert np.allclose(pset.v1[0], pset.v2[0])
616-
assert np.allclose(pset.d[0], 1.0)
614+
assert_allclose(temp_theo, pset.temp[0], atol=1e-5)
615+
assert_allclose(pset.u1[0], pset.u2[0])
616+
assert_allclose(pset.v1[0], pset.v2[0])
617+
assert_allclose(pset.d[0], 1.0)
617618

618619

619620
@pytest.mark.parametrize("tdim", [10, None])
@@ -654,9 +655,9 @@ def generate_dataset(xdim, ydim, zdim=1, tdim=1):
654655

655656
pset.execute(AdvectionRK4, dt=1, runtime=10)
656657
if tdim == 10:
657-
assert np.allclose(pset.lon_nextloop[0], 4.5) and np.allclose(pset.lat_nextloop[0], 10)
658+
assert_allclose(pset.lon_nextloop[0], 4.5) and np.allclose(pset.lat_nextloop[0], 10)
658659
else:
659-
assert np.allclose(pset.lon_nextloop[0], 5.0) and np.allclose(pset.lat_nextloop[0], 10)
660+
assert_allclose(pset.lon_nextloop[0], 5.0) and np.allclose(pset.lat_nextloop[0], 10)
660661

661662

662663
@pytest.mark.v4alpha
@@ -695,16 +696,16 @@ def test_fieldset_from_data_gridtypes():
695696
plon = pset.lon
696697
plat = pset.lat
697698
# sol of dx/dt = (init_depth+1)*x+0.1; x(0)=0
698-
assert np.allclose(plon, [0.17173462592827032, 0.2177736932123214])
699-
assert np.allclose(plat, [1, 1])
699+
assert_allclose(plon, [0.17173462592827032, 0.2177736932123214])
700+
assert_allclose(plat, [1, 1])
700701

701702
# Rectilinear S grid
702703
dimensions["depth"] = depth_s
703704
fieldset = FieldSet.from_data(data, dimensions, mesh="flat")
704705
pset = ParticleSet(fieldset, Particle, [0, 0], [0, 0], [0, 0.4])
705706
pset.execute(AdvectionRK4, runtime=1.5, dt=0.5)
706-
assert np.allclose(plon, pset.lon)
707-
assert np.allclose(plat, pset.lat)
707+
assert_allclose(plon, pset.lon)
708+
assert_allclose(plat, pset.lat)
708709

709710
# Curvilinear Z grid
710711
dimensions["lon"] = lonm
@@ -713,8 +714,8 @@ def test_fieldset_from_data_gridtypes():
713714
fieldset = FieldSet.from_data(data, dimensions, mesh="flat")
714715
pset = ParticleSet(fieldset, Particle, [0, 0], [0, 0], [0, 0.4])
715716
pset.execute(AdvectionRK4, runtime=1.5, dt=0.5)
716-
assert np.allclose(plon, pset.lon)
717-
assert np.allclose(plat, pset.lat)
717+
assert_allclose(plon, pset.lon)
718+
assert_allclose(plat, pset.lat)
718719

719720
# Curvilinear S grid
720721
dimensions["depth"] = depth_s

0 commit comments

Comments
 (0)