diff --git a/README.md b/README.md index cb220bc..04289a3 100644 --- a/README.md +++ b/README.md @@ -149,13 +149,15 @@ inputs: dims: [time, x, y, altitude] variables: u: - altitude: - values: [100,] - units: m + coordinates: + altitude: + values: [100,] + units: m v: - altitude: - values: [100, ] - units: m + coordinates: + altitude: + values: [100, ] + units: m dim_mapping: time: method: rename @@ -256,13 +258,15 @@ inputs: dims: [time, x, y, altitude] variables: u: - altitude: - values: [100,] - units: m + coordinates: + altitude: + values: [100,] + units: m v: - altitude: - values: [100, ] - units: m + coordinates: + altitude: + values: [100, ] + units: m dim_mapping: time: method: rename diff --git a/example.danra.yaml b/example.danra.yaml index 73aa0df..f554d27 100644 --- a/example.danra.yaml +++ b/example.danra.yaml @@ -35,13 +35,15 @@ inputs: dims: [time, x, y, altitude] variables: u: - altitude: - values: [100,] - units: m + coordinates: + altitude: + values: [100,] + units: m v: - altitude: - values: [100, ] - units: m + coordinates: + altitude: + values: [100, ] + units: m dim_mapping: time: method: rename diff --git a/mllam_data_prep/ops/loading.py b/mllam_data_prep/ops/loading.py index 955fafd..9e78044 100644 --- a/mllam_data_prep/ops/loading.py +++ b/mllam_data_prep/ops/loading.py @@ -25,24 +25,25 @@ def load_and_subset_dataset(fp, variables): ds_subset = xr.Dataset() ds_subset.attrs.update(ds.attrs) if isinstance(variables, dict): - for var, coords_to_sample in variables.items(): + for var, var_metadata in variables.items(): da = ds[var] - for coord, sampling in coords_to_sample.items(): - coord_values = sampling.values - try: - da = da.sel(**{coord: coord_values}) - except KeyError as ex: - raise KeyError( - f"Could not find the all coordinate values `{coord_values}` in " - f"coordinate `{coord}` in the dataset" - ) from ex - expected_units = sampling.units - coord_units = da[coord].attrs.get("units", None) - if coord_units is not None and coord_units != expected_units: - raise ValueError( - f"Expected units {expected_units} for coordinate {coord}" - f" in variable {var} but got {coord_units}" - ) + if var_metadata.get("coordinates", False): + for coord, sampling in var_metadata["coordinates"].items(): + coord_values = sampling.values + try: + da = da.sel(**{coord: coord_values}) + except KeyError as ex: + raise KeyError( + f"Could not find the all coordinate values `{coord_values}` in " + f"coordinate `{coord}` in the dataset" + ) from ex + expected_units = sampling.units + coord_units = da[coord].attrs.get("units", None) + if coord_units is not None and coord_units != expected_units: + raise ValueError( + f"Expected units {expected_units} for coordinate {coord}" + f" in variable {var} but got {coord_units}" + ) ds_subset[var] = da elif isinstance(variables, list): try: diff --git a/tests/test_config.py b/tests/test_config.py index 5459db6..d19c162 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -4,7 +4,7 @@ import mllam_data_prep as mdp INVALID_EXTRA_FIELDS_CONFIG_YAML = """ -schema_version: v0.1.0 +schema_version: v0.2.0 dataset_version: v0.1.0 output: @@ -21,7 +21,7 @@ """ MISSING_FIELDS_CONFIG_YAML = """ -schema_version: v0.1.0 +schema_version: v0.2.0 dataset_version: v0.1.0 """ @@ -36,7 +36,7 @@ def test_get_config_issues(): VALID_EXAMPLE_CONFIG_YAML = """ -schema_version: v0.1.0 +schema_version: v0.2.0 dataset_version: v0.1.0 output: @@ -71,13 +71,15 @@ def test_get_config_issues(): dims: [time, x, y, altitude] variables: u: - altitude: - values: [100, ] - units: m + coordinates: + altitude: + values: [100, ] + units: m v: - altitude: - values: [100, ] - units: m + coordinates: + altitude: + values: [100, ] + units: m dim_mapping: time: method: rename