diff --git a/src/anemoi/datasets/create/sources/xarray_support/time.py b/src/anemoi/datasets/create/sources/xarray_support/time.py index 847b21598..efc1fbc31 100644 --- a/src/anemoi/datasets/create/sources/xarray_support/time.py +++ b/src/anemoi/datasets/create/sources/xarray_support/time.py @@ -168,8 +168,8 @@ def fill_time_metadata(self, coords_values: dict[str, Any], metadata: dict[str, """ valid_datetime = coords_values[self.time_coordinate_name] - metadata["date"] = as_datetime(valid_datetime).strftime("%Y%m%d") - metadata["time"] = as_datetime(valid_datetime).strftime("%H%M") + metadata["date"] = int(as_datetime(valid_datetime).strftime("%Y%m%d")) + metadata["time"] = int(as_datetime(valid_datetime).strftime("%H%M")) metadata["step"] = 0 return valid_datetime @@ -235,8 +235,8 @@ def fill_time_metadata(self, coords_values: dict[str, Any], metadata: dict[str, hours = step.total_seconds() / 3600 assert int(hours) == hours - metadata["date"] = as_datetime(base_datetime).strftime("%Y%m%d") - metadata["time"] = as_datetime(base_datetime).strftime("%H%M") + metadata["date"] = int(as_datetime(base_datetime).strftime("%Y%m%d")) + metadata["time"] = int(as_datetime(base_datetime).strftime("%H%M")) metadata["step"] = int(hours) # When date is present, it should be compatible with time and step @@ -305,8 +305,8 @@ def fill_time_metadata(self, coords_values: dict[str, Any], metadata: dict[str, hours = step.total_seconds() / 3600 assert int(hours) == hours - metadata["date"] = as_datetime(base_datetime).strftime("%Y%m%d") - metadata["time"] = as_datetime(base_datetime).strftime("%H%M") + metadata["date"] = int(as_datetime(base_datetime).strftime("%Y%m%d")) + metadata["time"] = int(as_datetime(base_datetime).strftime("%H%M")) metadata["step"] = int(hours) return valid_datetime @@ -362,8 +362,8 @@ def fill_time_metadata(self, coords_values: dict[str, Any], metadata: dict[str, step = coords_values[self.step_coordinate_name] assert isinstance(step, datetime.timedelta) - metadata["date"] = as_datetime(date).strftime("%Y%m%d") - metadata["time"] = as_datetime(date).strftime("%H%M") + metadata["date"] = int(as_datetime(date).strftime("%Y%m%d")) + metadata["time"] = int(as_datetime(date).strftime("%H%M")) hours = step.total_seconds() / 3600 diff --git a/tests/xarray/test_netcdf.py b/tests/xarray/test_netcdf.py index f25d8c4d7..882b43620 100644 --- a/tests/xarray/test_netcdf.py +++ b/tests/xarray/test_netcdf.py @@ -9,6 +9,7 @@ import os +import earthkit.data as ekd import xarray as xr from multiurl import download @@ -45,6 +46,21 @@ } +def test_netcdf_metadata_types_compare_with_ekd(): + ekd_fl = ekd.from_source("sample", "era5-hourly-2t-20230724T1200Z.nc") + ds = ekd_fl.to_xarray() + + ads_fl = XarrayFieldList.from_xarray(ds) + assert len(ekd_fl) == len(ads_fl) + + common_keys = set(ekd_fl[0].metadata().keys()) & set(ads_fl[0].metadata().keys()) + assert {"date", "time", "variable"}.issubset(common_keys) + + # check that metadata value types are the same whether going via earthkit-data or anemoi-datasets + for key in common_keys: + assert type(ekd_fl[0].metadata(key)) is type(ads_fl[0].metadata(key)), f"Type mismatch for key '{key}'" + + def skip_test_netcdf() -> None: """Test loading and validating various NetCDF datasets.""" for url, checks in URLS.items():