Download scripts/variables.py from OneScience-Group/FuXi_v21: direct link, hf CLI and curl.
- Browser
- Download file 1.8 kB
-
https://huggingface.co/OneScience-Group/FuXi_v21/resolve/main/scripts/variables.py
- Command line
-
hf download hf://OneScience-Group/FuXi_v21/scripts/variables.py
-
curl -L -o variables.py https://huggingface.co/OneScience-Group/FuXi_v21/resolve/main/scripts/variables.py
1.8 kB
| from __future__ import annotations | |
| PRESSURE_LEVELS = [50, 100, 150, 200, 250, 300, 400, 500, 600, 700, 850, 925, 1000] | |
| PRESSURE_VARIABLES = ["z", "t", "u", "v", "q"] | |
| SURFACE_VARIABLES = [ | |
| "msl", "t2m", "d2m", "sst", "ws10m", "ws100m", "u10m", "v10m", | |
| "u100m", "v100m", "lcc", "mcc", "hcc", "tcc", "ssr", "ssrd", | |
| "fdir", "ttr", "tcw", "tp", | |
| ] | |
| C85_CHANNEL_NAMES = [f"{name}{level}" for name in PRESSURE_VARIABLES for level in PRESSURE_LEVELS] | |
| C85_CHANNEL_NAMES += SURFACE_VARIABLES | |
| DIAGNOSTIC_CHANNELS = ["ssr", "ssrd", "fdir", "ttr", "tp"] | |
| assert len(C85_CHANNEL_NAMES) == 85 | |
| def c85_from_config(config: dict) -> tuple[list[str], list[str]]: | |
| """Build and validate the fixed C85 channel contract from configuration.""" | |
| variables = config["variables"] | |
| mapping = variables["mapping"] | |
| if mapping != { | |
| "pressure_order": "variable_major", | |
| "pressure_name": "{variable}{level}", | |
| "surface_name": "{variable}", | |
| "source_dataset": "fields", | |
| "units": "source_native", | |
| "transform": "identity", | |
| }: | |
| raise ValueError("variables.mapping must preserve the C85 source and ordering contract") | |
| channels = [ | |
| mapping["pressure_name"].format(variable=name, level=level) | |
| for name in variables["pressure"] | |
| for level in variables["pressure_levels"] | |
| ] | |
| channels.extend(mapping["surface_name"].format(variable=name) for name in variables["surface"]) | |
| diagnostics = list(variables["diagnostic"]) | |
| if channels != C85_CHANNEL_NAMES: | |
| raise ValueError("Configured variables do not match the required C85 channel order") | |
| if diagnostics != DIAGNOSTIC_CHANNELS: | |
| raise ValueError("Configured diagnostic variables do not match the required C85 contract") | |
| return channels, diagnostics | |