Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 4b926ff

Browse files
committedMar 3, 2025·
update assert np.allclose to numpy.testing.assert_allclose
1 parent b5daffb commit 4b926ff

13 files changed

+218
-208
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

@@ -225,7 +226,7 @@ def test_conversion_3DCROCO():
225226
for zi, z in enumerate(z_xroms):
226227
sigma[zi] = _croco_from_z_to_sigma_scipy(fieldset, 0, z, lat, lon, None)
227228

228-
assert np.allclose(sigma, s_xroms, atol=1e-3)
229+
assert_allclose(sigma, s_xroms, atol=1e-3)
229230

230231

231232
def test_advection_3DCROCO():
@@ -242,8 +243,8 @@ def SampleW(particle, fieldset, time): # pragma: no cover
242243
particle.w = fieldset.W[time, particle.depth, particle.lat, particle.lon]
243244

244245
pset.execute([AdvectionRK4_3D, SampleW], runtime=runtime, dt=100)
245-
assert np.allclose(pset.depth, Z.flatten(), atol=5) # TODO lower this atol
246-
assert np.allclose(pset.lon_nextloop, [x + runtime for x in X.flatten()], atol=1e-3)
246+
assert_allclose(pset.depth, Z.flatten(), atol=5) # TODO lower this atol
247+
assert_allclose(pset.lon_nextloop, [x + runtime for x in X.flatten()], atol=1e-3)
247248

248249

249250
def test_advection_2DCROCO():
@@ -256,8 +257,8 @@ def test_advection_2DCROCO():
256257
pset = ParticleSet(fieldset=fieldset, pclass=Particle, lon=X, lat=Y, depth=Z)
257258

258259
pset.execute([AdvectionRK4], runtime=runtime, dt=100)
259-
assert np.allclose(pset.depth, Z.flatten(), atol=1e-3)
260-
assert np.allclose(pset.lon_nextloop, [x + runtime for x in X], atol=1e-3)
260+
assert_allclose(pset.depth, Z.flatten(), atol=1e-3)
261+
assert_allclose(pset.lon_nextloop, [x + runtime for x in X], atol=1e-3)
261262

262263

263264
def create_periodic_fieldset(xdim, ydim, uvel, vvel):
@@ -309,8 +310,8 @@ def test_advection_periodic_zonal_meridional():
309310
fieldset.add_periodic_halo(zonal=True, meridional=True)
310311
assert len(fieldset.U.lat) == ydim + 10 # default halo size is 5 grid points
311312
assert len(fieldset.U.lon) == xdim + 10 # default halo size is 5 grid points
312-
assert np.allclose(np.diff(fieldset.U.lat), fieldset.U.lat[1] - fieldset.U.lat[0], rtol=0.001)
313-
assert np.allclose(np.diff(fieldset.U.lon), fieldset.U.lon[1] - fieldset.U.lon[0], rtol=0.001)
313+
assert_allclose(np.diff(fieldset.U.lat), fieldset.U.lat[1] - fieldset.U.lat[0], rtol=0.001)
314+
assert_allclose(np.diff(fieldset.U.lon), fieldset.U.lon[1] - fieldset.U.lon[0], rtol=0.001)
314315

315316
pset = ParticleSet(fieldset, pclass=Particle, lon=[0.4], lat=[0.5])
316317
pset.execute(AdvectionRK4 + pset.Kernel(periodicBC), runtime=timedelta(hours=20), dt=timedelta(seconds=30))
@@ -425,8 +426,8 @@ def test_stationary_eddy(fieldset_stationary, method, rtol, diffField):
425426

426427
exp_lon = [truth_stationary(x, y, pset[0].time)[0] for x, y in zip(lon, lat, strict=True)]
427428
exp_lat = [truth_stationary(x, y, pset[0].time)[1] for x, y in zip(lon, lat, strict=True)]
428-
assert np.allclose(pset.lon, exp_lon, rtol=rtol)
429-
assert np.allclose(pset.lat, exp_lat, rtol=rtol)
429+
assert_allclose(pset.lon, exp_lon, rtol=rtol)
430+
assert_allclose(pset.lat, exp_lat, rtol=rtol)
430431

431432

432433
def test_stationary_eddy_vertical():
@@ -454,9 +455,9 @@ def test_stationary_eddy_vertical():
454455
exp_lon = [truth_stationary(x, z, pset[0].time)[0] for x, z in zip(lon, depth, strict=True)]
455456
exp_depth = [truth_stationary(x, z, pset[0].time)[1] for x, z in zip(lon, depth, strict=True)]
456457
print(pset, exp_lon)
457-
assert np.allclose(pset.lon, exp_lon, rtol=1e-5)
458-
assert np.allclose(pset.lat, lat, rtol=1e-5)
459-
assert np.allclose(pset.depth, exp_depth, rtol=1e-5)
458+
assert_allclose(pset.lon, exp_lon, rtol=1e-5)
459+
assert_allclose(pset.lat, lat, rtol=1e-5)
460+
assert_allclose(pset.depth, exp_depth, rtol=1e-5)
460461

461462
data = {"U": fldzero, "V": fld2, "W": fld1}
462463
fieldset = FieldSet.from_data(data, dimensions, mesh="flat")
@@ -465,9 +466,9 @@ def test_stationary_eddy_vertical():
465466
pset.execute(AdvectionRK4_3D, dt=dt, endtime=endtime)
466467
exp_depth = [truth_stationary(z, y, pset[0].time)[0] for z, y in zip(depth, lat, strict=True)]
467468
exp_lat = [truth_stationary(z, y, pset[0].time)[1] for z, y in zip(depth, lat, strict=True)]
468-
assert np.allclose(pset.lon, lon, rtol=1e-5)
469-
assert np.allclose(pset.lat, exp_lat, rtol=1e-5)
470-
assert np.allclose(pset.depth, exp_depth, rtol=1e-5)
469+
assert_allclose(pset.lon, lon, rtol=1e-5)
470+
assert_allclose(pset.lat, exp_lat, rtol=1e-5)
471+
assert_allclose(pset.depth, exp_depth, rtol=1e-5)
471472

472473

473474
def truth_moving(x_0, y_0, t):
@@ -530,8 +531,8 @@ def test_moving_eddy(fieldset_moving, method, rtol, diffField):
530531

531532
exp_lon = [truth_moving(x, y, t)[0] for x, y, t in zip(lon, lat, pset.time, strict=True)]
532533
exp_lat = [truth_moving(x, y, t)[1] for x, y, t in zip(lon, lat, pset.time, strict=True)]
533-
assert np.allclose(pset.lon, exp_lon, rtol=rtol)
534-
assert np.allclose(pset.lat, exp_lat, rtol=rtol)
534+
assert_allclose(pset.lon, exp_lon, rtol=rtol)
535+
assert_allclose(pset.lat, exp_lat, rtol=rtol)
535536

536537

537538
def truth_decaying(x_0, y_0, t):
@@ -613,8 +614,8 @@ def test_decaying_eddy(fieldset_decaying, method, rtol, diffField):
613614

614615
exp_lon = [truth_decaying(x, y, t)[0] for x, y, t in zip(lon, lat, pset.time, strict=True)]
615616
exp_lat = [truth_decaying(x, y, t)[1] for x, y, t in zip(lon, lat, pset.time, strict=True)]
616-
assert np.allclose(pset.lon, exp_lon, rtol=rtol)
617-
assert np.allclose(pset.lat, exp_lat, rtol=rtol)
617+
assert_allclose(pset.lon, exp_lon, rtol=rtol)
618+
assert_allclose(pset.lat, exp_lat, rtol=rtol)
618619

619620

620621
def test_analyticalAgrid():
@@ -663,6 +664,6 @@ def test_uniform_analytical(u, v, w, direction, tmp_zarrfile):
663664
ds = xr.open_zarr(tmp_zarrfile)
664665
times = (direction * ds["time"][:]).values.astype("timedelta64[s]")[0]
665666
timeref = np.arange(1, 5).astype("timedelta64[s]")
666-
assert np.allclose(times, timeref, atol=np.timedelta64(1, "ms"))
667+
assert_allclose(times, timeref, atol=np.timedelta64(1, "ms"))
667668
lons = ds["lon"][:].values
668-
assert np.allclose(lons, x0 + direction * u * np.arange(1, 5))
669+
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

+32-31
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,
@@ -46,8 +47,8 @@ def test_fieldset_from_data(xdim, ydim):
4647
assert fieldset.U._creation_log == "from_data"
4748
assert len(fieldset.U.data.shape) == 3
4849
assert len(fieldset.V.data.shape) == 3
49-
assert np.allclose(fieldset.U.data[0, :], data["U"], rtol=1e-12)
50-
assert np.allclose(fieldset.V.data[0, :], data["V"], rtol=1e-12)
50+
assert_allclose(fieldset.U.data[0, :], data["U"], rtol=1e-12)
51+
assert_allclose(fieldset.V.data[0, :], data["V"], rtol=1e-12)
5152

5253

5354
def test_fieldset_extra_syntax():
@@ -102,9 +103,9 @@ def test_fieldset_from_data_different_dimensions(xdim, ydim):
102103
assert len(fieldset.V.data.shape) == 3
103104
assert len(fieldset.P.data.shape) == 4
104105
assert fieldset.P.data.shape == (tdim, zdim, ydim / 2, xdim / 2)
105-
assert np.allclose(fieldset.U.data, 0.0, rtol=1e-12)
106-
assert np.allclose(fieldset.V.data, 1.0, rtol=1e-12)
107-
assert np.allclose(fieldset.P.data, 2.0, rtol=1e-12)
106+
assert_allclose(fieldset.U.data, 0.0, rtol=1e-12)
107+
assert_allclose(fieldset.V.data, 1.0, rtol=1e-12)
108+
assert_allclose(fieldset.P.data, 2.0, rtol=1e-12)
108109

109110

110111
@pytest.mark.parametrize("xdim", [100, 200])
@@ -118,8 +119,8 @@ def test_fieldset_from_parcels(xdim, ydim, tmpdir):
118119
fieldset = FieldSet.from_parcels(filepath)
119120
assert len(fieldset.U.data.shape) == 3 # Will be 4 once we use depth
120121
assert len(fieldset.V.data.shape) == 3
121-
assert np.allclose(fieldset.U.data[0, :], data["U"], rtol=1e-12)
122-
assert np.allclose(fieldset.V.data[0, :], data["V"], rtol=1e-12)
122+
assert_allclose(fieldset.U.data[0, :], data["U"], rtol=1e-12)
123+
assert_allclose(fieldset.V.data[0, :], data["V"], rtol=1e-12)
123124

124125

125126
def test_fieldset_from_modulefile():
@@ -204,14 +205,14 @@ def test_fieldset_from_file_subsets(indslon, indslat, tmpdir):
204205
indices_back = indices.copy()
205206
fieldsetsub = FieldSet.from_parcels(filepath, indices=indices)
206207
assert indices == indices_back
207-
assert np.allclose(fieldsetsub.U.lon, fieldsetfull.U.grid.lon[indices["lon"]])
208-
assert np.allclose(fieldsetsub.U.lat, fieldsetfull.U.grid.lat[indices["lat"]])
209-
assert np.allclose(fieldsetsub.V.lon, fieldsetfull.V.grid.lon[indices["lon"]])
210-
assert np.allclose(fieldsetsub.V.lat, fieldsetfull.V.grid.lat[indices["lat"]])
208+
assert_allclose(fieldsetsub.U.lon, fieldsetfull.U.grid.lon[indices["lon"]])
209+
assert_allclose(fieldsetsub.U.lat, fieldsetfull.U.grid.lat[indices["lat"]])
210+
assert_allclose(fieldsetsub.V.lon, fieldsetfull.V.grid.lon[indices["lon"]])
211+
assert_allclose(fieldsetsub.V.lat, fieldsetfull.V.grid.lat[indices["lat"]])
211212

212213
ixgrid = np.ix_([0], indices["lat"], indices["lon"])
213-
assert np.allclose(fieldsetsub.U.data, fieldsetfull.U.data[ixgrid])
214-
assert np.allclose(fieldsetsub.V.data, fieldsetfull.V.data[ixgrid])
214+
assert_allclose(fieldsetsub.U.data, fieldsetfull.U.data[ixgrid])
215+
assert_allclose(fieldsetsub.V.data, fieldsetfull.V.data[ixgrid])
215216

216217

217218
def test_empty_indices(tmpdir):
@@ -394,7 +395,7 @@ def test_fieldset_write_curvilinear(tmpdir):
394395
assert fieldset2.dx._creation_log == "from_netcdf"
395396

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

399400

400401
def addConst(particle, fieldset, time): # pragma: no cover
@@ -492,7 +493,7 @@ def UpdateU(particle, fieldset, time): # pragma: no cover
492493
assert fieldset.U.data[0, 1, 0] == 11
493494

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

497498

498499
@pytest.mark.parametrize("datetype", ["float", "datetime64"])
@@ -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
def test_fieldset_frompop():
@@ -693,16 +694,16 @@ def test_fieldset_from_data_gridtypes():
693694
plon = pset.lon
694695
plat = pset.lat
695696
# sol of dx/dt = (init_depth+1)*x+0.1; x(0)=0
696-
assert np.allclose(plon, [0.17173462592827032, 0.2177736932123214])
697-
assert np.allclose(plat, [1, 1])
697+
assert_allclose(plon, [0.17173462592827032, 0.2177736932123214])
698+
assert_allclose(plat, [1, 1])
698699

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

707708
# Curvilinear Z grid
708709
dimensions["lon"] = lonm
@@ -711,16 +712,16 @@ def test_fieldset_from_data_gridtypes():
711712
fieldset = FieldSet.from_data(data, dimensions, mesh="flat")
712713
pset = ParticleSet(fieldset, Particle, [0, 0], [0, 0], [0, 0.4])
713714
pset.execute(AdvectionRK4, runtime=1.5, dt=0.5)
714-
assert np.allclose(plon, pset.lon)
715-
assert np.allclose(plat, pset.lat)
715+
assert_allclose(plon, pset.lon)
716+
assert_allclose(plat, pset.lat)
716717

717718
# Curvilinear S grid
718719
dimensions["depth"] = depth_s
719720
fieldset = FieldSet.from_data(data, dimensions, mesh="flat")
720721
pset = ParticleSet(fieldset, Particle, [0, 0], [0, 0], [0, 0.4])
721722
pset.execute(AdvectionRK4, runtime=1.5, dt=0.5)
722-
assert np.allclose(plon, pset.lon)
723-
assert np.allclose(plat, pset.lat)
723+
assert_allclose(plon, pset.lon)
724+
assert_allclose(plat, pset.lat)
724725

725726

726727
@pytest.mark.parametrize("direction", [1, -1])

0 commit comments

Comments
 (0)
Please sign in to comment.