"""Synthetic GLORYS12-shaped data for smoke tests and local development.""" import glob import torch from torch.utils.data import Dataset try: import h5py except ImportError: h5py = None class SyntheticOceanDataset(Dataset): def __init__(self, samples, channels, grid, input_steps=2, output_steps=1, seed=42, data_dir=None): generator = torch.Generator().manual_seed(seed) files = sorted(glob.glob(f"{data_dir}/data/*.h5")) if data_dir else [] if files and h5py is not None: with h5py.File(files[0], "r") as handle: fields = torch.from_numpy(handle["fields"][:]).float() total = min(samples, fields.shape[0] - input_steps - output_steps + 1) self.x = torch.stack([fields[i:i + input_steps] for i in range(total)]) self.y = torch.stack([fields[i + input_steps:i + input_steps + output_steps] for i in range(total)]) else: self.x = torch.randn(samples, input_steps, channels, *grid, generator=generator) self.y = torch.randn(samples, output_steps, channels, *grid, generator=generator) def __len__(self): return self.x.shape[0] def __getitem__(self, index): return self.x[index], self.y[index]