Skip to content

Commit 2f4194f

Browse files
Moving copernicusmarine unit tests to test_convert
1 parent f269cd9 commit 2f4194f

2 files changed

Lines changed: 49 additions & 71 deletions

File tree

tests/test_convert.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import pytest
12
import xarray as xr
23

34
import parcels
45
import parcels.convert as convert
6+
from parcels import FieldSet
57
from parcels._core.utils import sgrid
8+
from parcels._datasets.structured.circulation_models import datasets as datasets_circulation_models
69

710

811
def test_nemo_to_sgrid():
@@ -34,3 +37,49 @@ def test_nemo_to_sgrid():
3437
meta.get_value_by_id("face_dimension1"), # X center
3538
meta.get_value_by_id("node_dimension2"), # Y edge
3639
}.issubset(set(ds["V"].dims))
40+
41+
42+
_COPERNICUS_DATASETS = [
43+
datasets_circulation_models["ds_copernicusmarine"],
44+
datasets_circulation_models["ds_copernicusmarine_waves"],
45+
]
46+
47+
48+
@pytest.mark.parametrize("ds", _COPERNICUS_DATASETS)
49+
def test_fieldset_from_copernicusmarine(ds, caplog):
50+
if "uo" in ds:
51+
fields = {"U": ds["uo"], "V": ds["vo"]}
52+
elif "VSDX" in ds:
53+
fields = {"U": ds["VSDX"], "V": ds["VSDY"]}
54+
else:
55+
raise ValueError("Test dataset does not contain recognized current variables.")
56+
ds_fset = convert.copernicusmarine_to_sgrid(fields=fields)
57+
fieldset = FieldSet.from_sgrid_conventions(ds_fset)
58+
assert "U" in fieldset.fields
59+
assert "V" in fieldset.fields
60+
assert "UV" in fieldset.fields
61+
62+
63+
def test_fieldset_from_copernicusmarine_no_currents(caplog):
64+
ds = datasets_circulation_models["ds_copernicusmarine"]
65+
ds_fset = convert.copernicusmarine_to_sgrid(fields={"do": ds["uo"]})
66+
fieldset = FieldSet.from_sgrid_conventions(ds_fset)
67+
assert "U" not in fieldset.fields
68+
assert "V" not in fieldset.fields
69+
assert "UV" not in fieldset.fields
70+
assert caplog.text == ""
71+
72+
73+
@pytest.mark.parametrize("ds", _COPERNICUS_DATASETS)
74+
def test_fieldset_from_copernicusmarine_no_logs(ds, caplog):
75+
ds = ds.copy()
76+
zeros = xr.zeros_like(list(ds.data_vars.values())[0])
77+
ds["U"] = zeros
78+
ds["V"] = zeros
79+
80+
ds_fset = convert.copernicusmarine_to_sgrid(fields={"U": ds["U"], "V": ds["V"]})
81+
fieldset = FieldSet.from_sgrid_conventions(ds_fset)
82+
assert "U" in fieldset.fields
83+
assert "V" in fieldset.fields
84+
assert "UV" in fieldset.fields
85+
assert caplog.text == ""

tests/test_fieldset.py

Lines changed: 0 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
from parcels import Field, ParticleFile, ParticleSet, VectorField, XGrid
1010
from parcels._core.fieldset import CalendarError, FieldSet, _datetime_to_msg
11-
from parcels._datasets.structured.circulation_models import datasets as datasets_circulation_models
1211
from parcels._datasets.structured.generic import T as T_structured
1312
from parcels._datasets.structured.generic import datasets as datasets_structured
1413
from parcels._datasets.structured.generic import datasets_sgrid
@@ -243,76 +242,6 @@ def test_fieldset_add_field_after_pset():
243242
...
244243

245244

246-
_COPERNICUS_DATASETS = [
247-
datasets_circulation_models["ds_copernicusmarine"],
248-
datasets_circulation_models["ds_copernicusmarine_waves"],
249-
]
250-
251-
252-
@pytest.mark.parametrize("ds", _COPERNICUS_DATASETS)
253-
def test_fieldset_from_copernicusmarine(ds, caplog):
254-
fieldset = FieldSet.from_copernicusmarine(ds)
255-
assert "U" in fieldset.fields
256-
assert "V" in fieldset.fields
257-
assert "UV" in fieldset.fields
258-
assert "renamed it to 'U'" in caplog.text
259-
assert "renamed it to 'V'" in caplog.text
260-
261-
262-
@pytest.mark.parametrize("ds", [datasets_circulation_models["ds_copernicusmarine"].copy()])
263-
def test_fieldset_from_copernicusmarine_missing_axis(ds, caplog):
264-
del ds["latitude"].attrs["axis"]
265-
266-
with pytest.raises(
267-
ValueError,
268-
match="Dataset missing CF compliant metadata for axes "
269-
".*. Expected 'axis' attribute to be set "
270-
"on all dimension axes .*. "
271-
"HINT: Add xarray metadata attribute 'axis' to dimension .*",
272-
):
273-
FieldSet.from_copernicusmarine(ds)
274-
275-
276-
def test_fieldset_from_copernicusmarine_no_currents(caplog):
277-
ds = datasets_circulation_models["ds_copernicusmarine"].cf.drop_vars(
278-
["eastward_sea_water_velocity", "northward_sea_water_velocity"]
279-
)
280-
fieldset = FieldSet.from_copernicusmarine(ds)
281-
assert "U" not in fieldset.fields
282-
assert "V" not in fieldset.fields
283-
assert "UV" not in fieldset.fields
284-
assert caplog.text == ""
285-
286-
287-
@pytest.mark.parametrize("ds", _COPERNICUS_DATASETS)
288-
def test_fieldset_from_copernicusmarine_no_logs(ds, caplog):
289-
ds = ds.copy()
290-
zeros = xr.zeros_like(list(ds.data_vars.values())[0])
291-
ds["U"] = zeros
292-
ds["V"] = zeros
293-
294-
fieldset = FieldSet.from_copernicusmarine(ds)
295-
assert "U" in fieldset.fields
296-
assert "V" in fieldset.fields
297-
assert "UV" in fieldset.fields
298-
assert caplog.text == ""
299-
300-
301-
def test_fieldset_from_copernicusmarine_with_W(caplog):
302-
ds = datasets_circulation_models["ds_copernicusmarine"]
303-
ds = ds.copy()
304-
ds["wo"] = ds["uo"]
305-
ds["wo"].attrs["standard_name"] = "vertical_sea_water_velocity"
306-
307-
fieldset = FieldSet.from_copernicusmarine(ds)
308-
assert "U" in fieldset.fields
309-
assert "V" in fieldset.fields
310-
assert "W" in fieldset.fields
311-
assert "UV" in fieldset.fields
312-
assert "UVW" in fieldset.fields
313-
assert "renamed it to 'W'" in caplog.text
314-
315-
316245
def test_fieldset_from_fesom2():
317246
ds = datasets_unstructured["stommel_gyre_delaunay"]
318247
fieldset = FieldSet.from_fesom2(ds)

0 commit comments

Comments
 (0)