Download model/NeuralGCM_demo.py from OneScience-Group/NeuralGCM: direct link, hf CLI and curl.
- Browser
- Download file 2.31 kB
-
https://huggingface.co/OneScience-Group/NeuralGCM/resolve/main/model/NeuralGCM_demo.py
- Command line
-
hf download hf://OneScience-Group/NeuralGCM/model/NeuralGCM_demo.py
-
curl -L -o NeuralGCM_demo.py https://huggingface.co/OneScience-Group/NeuralGCM/resolve/main/model/NeuralGCM_demo.py
2.31 kB
| # Copyright 2024 Google LLC | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # https://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| import importlib.resources | |
| import pickle | |
| from dinosaur import coordinate_systems | |
| from dinosaur import horizontal_interpolation | |
| from dinosaur import spherical_harmonic | |
| import model as neuralgcm | |
| import numpy as np | |
| import xarray | |
| def _horizontal_regrid( | |
| regridder: horizontal_interpolation.Regridder, dataset: xarray.Dataset | |
| ) -> xarray.Dataset: | |
| """Horizontally regrid an xarray Dataset.""" | |
| # TODO(shoyer): consider moving to public API | |
| regridded = xarray.apply_ufunc( | |
| regridder, | |
| dataset, | |
| input_core_dims=[['longitude', 'latitude']], | |
| output_core_dims=[['longitude', 'latitude']], | |
| exclude_dims={'longitude', 'latitude'}, | |
| vectorize=True, # loops over level, for lower memory usage | |
| ) | |
| regridded.coords['longitude'] = np.rad2deg(regridder.target_grid.longitudes) | |
| regridded.coords['latitude'] = np.rad2deg(regridder.target_grid.latitudes) | |
| return regridded | |
| def load_checkpoint_tl63_stochastic(): | |
| """Load a checkpoint for a toy TL63 stochastic model.""" | |
| package = importlib.resources.files(neuralgcm) | |
| file = package.joinpath('data/tl63_stochastic_mini.pkl') | |
| return pickle.loads(file.read_bytes()) | |
| def load_data(coords: coordinate_systems.CoordinateSystem) -> xarray.Dataset: | |
| """Load demo data for the given coordinate system.""" | |
| if coords.vertical.layers != 37: | |
| raise ValueError('can only load demo data for 37 pressure levels') | |
| package = importlib.resources.files(neuralgcm) | |
| with package.joinpath('data/era5_tl31_19590102T00.nc').open('rb') as f: | |
| ds = xarray.load_dataset(f).expand_dims('time') | |
| regridder = horizontal_interpolation.ConservativeRegridder( | |
| spherical_harmonic.Grid.TL31(), coords.horizontal | |
| ) | |
| return _horizontal_regrid(regridder, ds) | |