Source code for movement.validators.arrays

"""Validators for data arrays."""

import xarray as xr

from movement.utils.logging import log_error


[docs] def validate_dims_coords( data: xr.DataArray, required_dim_coords: dict ) -> None: """Validate dimensions and coordinates in a data array. This function raises a ValueError if the specified dimensions and coordinates are not present in the input data array. Parameters ---------- data : xarray.DataArray The input data array to validate. required_dim_coords : dict A dictionary of required dimensions and their corresponding coordinate values. If you don't need to specify any coordinate values, you can pass an empty list. Examples -------- Validate that a data array contains the dimension 'time'. No specific coordinates are required. >>> validate_dims_coords(data, {"time": []}) Validate that a data array contains the dimensions 'time' and 'space', and that the 'space' dimension contains the coordinates 'x' and 'y'. >>> validate_dims_coords(data, {"time": [], "space": ["x", "y"]}) Raises ------ ValueError If the input data does not contain the required dimension(s) and/or the required coordinate(s). """ missing_dims = [dim for dim in required_dim_coords if dim not in data.dims] error_message = "" if missing_dims: error_message += ( f"Input data must contain {missing_dims} as dimensions.\n" ) missing_coords = [] for dim, coords in required_dim_coords.items(): missing_coords = [ coord for coord in coords if coord not in data.coords.get(dim, []) ] if missing_coords: error_message += ( "Input data must contain " f"{missing_coords} in the '{dim}' coordinates." ) if error_message: raise log_error(ValueError, error_message)