Download scripts/smoke_models.py from OneScience-Group/PDENNEval: direct link, hf CLI and curl.
- Browser
- Download file 3.63 kB
-
https://huggingface.co/OneScience-Group/PDENNEval/resolve/main/scripts/smoke_models.py
- Command line
-
hf download hf://OneScience-Group/PDENNEval/scripts/smoke_models.py
-
curl -L -o smoke_models.py https://huggingface.co/OneScience-Group/PDENNEval/resolve/main/scripts/smoke_models.py
3.63 kB
| from __future__ import annotations | |
| import sys | |
| from pathlib import Path | |
| from types import SimpleNamespace | |
| import torch | |
| PROJECT_ROOT = Path(__file__).resolve().parents[1] | |
| if str(PROJECT_ROOT) not in sys.path: | |
| sys.path.insert(0, str(PROJECT_ROOT)) | |
| def check(name: str, tensor: torch.Tensor, expected_last_dim: int | None = None) -> None: | |
| if not torch.isfinite(tensor).all(): | |
| raise RuntimeError(f"{name} produced non-finite values") | |
| if expected_last_dim is not None and tensor.shape[-1] != expected_last_dim: | |
| raise RuntimeError( | |
| f"{name} last dim expected {expected_last_dim}, got {tensor.shape[-1]}" | |
| ) | |
| print(f"[OK] {name}: shape={tuple(tensor.shape)}") | |
| def smoke_deeponet() -> None: | |
| from model.deeponet import DeepONetCartesianProd1D | |
| model = DeepONetCartesianProd1D( | |
| size=8, | |
| in_channel_branch=1, | |
| query_dim=1, | |
| out_channel=1, | |
| activation="relu", | |
| base_model="MLP", | |
| ).eval() | |
| x_func = torch.randn(2, 8, 1) | |
| x_loc = torch.linspace(0.0, 1.0, 8).unsqueeze(-1) | |
| out = model((x_func, x_loc)) | |
| check("deeponet.DeepONetCartesianProd1D", out, expected_last_dim=1) | |
| def smoke_fno() -> None: | |
| from model.fno import FNO2d | |
| model = FNO2d(num_channels=1, modes1=4, modes2=4, width=8, initial_step=1).eval() | |
| x = torch.randn(2, 16, 16, 1) | |
| coords = torch.linspace(0.0, 1.0, 16) | |
| xx, yy = torch.meshgrid(coords, coords, indexing="ij") | |
| grid = torch.stack((xx, yy), dim=-1).unsqueeze(0).repeat(2, 1, 1, 1) | |
| out = model(x, grid) | |
| check("fno.FNO2d", out, expected_last_dim=1) | |
| def smoke_mpnn() -> None: | |
| from torch_geometric.data import Data | |
| from model.mpnn import MPNN | |
| pde = SimpleNamespace( | |
| name="smoke", | |
| tmin=0.0, | |
| tmax=1.0, | |
| resolution_t=10, | |
| spatial_domain=[(0.0, 1.0)], | |
| resolution=[4], | |
| spatial_dim=1, | |
| variables={}, | |
| ) | |
| model = MPNN(pde=pde, time_window=10, hidden_features=128, hidden_layers=1).eval() | |
| edge_index = torch.tensor( | |
| [[0, 1, 2, 3, 1, 2, 3, 0], [1, 2, 3, 0, 0, 1, 2, 3]], | |
| dtype=torch.long, | |
| ) | |
| data = Data( | |
| x=torch.randn(4, 10, 1), | |
| x_pos=torch.linspace(0.0, 1.0, 4).unsqueeze(-1), | |
| t_pos=torch.zeros(4), | |
| edge_index=edge_index, | |
| batch=torch.zeros(4, dtype=torch.long), | |
| variables=torch.empty(4, 0), | |
| ) | |
| out = model(data, v=0) | |
| check("mpnn.MPNN", out) | |
| def smoke_pino_fno() -> None: | |
| from model.pino_fno import FNO1d | |
| model = FNO1d( | |
| modes=[4, 4], | |
| width=4, | |
| layers=[4, 4, 4], | |
| fc_dim=8, | |
| in_dim=2, | |
| out_dim=1, | |
| pad_ratio=[0.0, 0.0], | |
| ).eval() | |
| out = model(torch.randn(2, 16, 2)) | |
| check("pino_fno.FNO1d", out, expected_last_dim=1) | |
| def smoke_unet() -> None: | |
| from model.unet import UNet2d | |
| model = UNet2d(in_channels=1, out_channels=1, init_features=2).eval() | |
| out = model(torch.randn(1, 1, 16, 16)) | |
| check("unet.UNet2d", out) | |
| def smoke_uno() -> None: | |
| from model.uno import UNO1d | |
| model = UNO1d(num_channels=1, width=4, initial_step=1).eval() | |
| x = torch.randn(1, 64, 1) | |
| grid = torch.linspace(0.0, 1.0, 64).view(1, 64, 1) | |
| out = model(x, grid) | |
| check("uno.UNO1d", out, expected_last_dim=1) | |
| def main() -> int: | |
| torch.manual_seed(0) | |
| smoke_deeponet() | |
| smoke_fno() | |
| smoke_mpnn() | |
| smoke_pino_fno() | |
| smoke_unet() | |
| smoke_uno() | |
| return 0 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |