[docs]defcheck_ancillary_variables(ds:xr.Dataset):"""Check that everything in an ancillary_variables attribute appears as a variable Check that every variable that is known ancillary appears in at least one ancillary_variable attribute """looks_ancillary_suffixes=("_qc","_error")ancillary_variables_attrs=defaultdict(list)looks_ancillary=set()forname,variableinds.variables.items():ifnotisinstance(name,str):raiseValueError(f"variable names must be strings not {name}")ifany(name.endswith(suffix)forsuffixinlooks_ancillary_suffixes):looks_ancillary.add(name)ifvariable.attrs.get("ancillary_variables")isNone:continueforancillaryinvariable.attrs["ancillary_variables"].split():ancillary_variables_attrs[ancillary].append(name)iferrors:=ancillary_variables_attrs.keys()-ds.variables.keys():raiseValueError(errors)iferrors:=looks_ancillary-ancillary_variables_attrs.keys():raiseValueError(errors)