from mapgs.data.types import MapGSSample, collate_samples from mapgs.data.scene import generate_scene, ProceduralScene, MapNoise from mapgs.data.synthetic import ( SyntheticDataset, render_scene_gt, render_deviated_gt, place_dynamic_gt, ) from mapgs.data.real import ( RawClip, raw_to_sample, BaseDrivingDataset, WaymoDataset, NuScenesDataset, Argoverse2Dataset, ) from mapgs.data.unified import UnifiedClipDataset, write_unified_clip, UNIFIED_VERSION __all__ = [ "MapGSSample", "collate_samples", "generate_scene", "ProceduralScene", "MapNoise", "SyntheticDataset", "render_scene_gt", "render_deviated_gt", "place_dynamic_gt", "RawClip", "raw_to_sample", "BaseDrivingDataset", "WaymoDataset", "NuScenesDataset", "Argoverse2Dataset", "UnifiedClipDataset", "write_unified_clip", "UNIFIED_VERSION", ] def build_dataset(cfg, split: str = "train", **kwargs): """Factory: dispatch on ``cfg.data.name``. For ``unified`` (the recommended path for real Waymo+AV2 training), set ``cfg.data.root`` to one or more unified roots (comma-separated to train on a mix, e.g. ``"data/unified/waymo,data/unified/av2"``). """ name = cfg.data.name.lower() if name == "synthetic": return SyntheticDataset(cfg, split=split, **kwargs) if name == "unified": roots = [r.strip() for r in cfg.data.root.split(",") if r.strip()] return UnifiedClipDataset(cfg, roots=roots, split=split, **kwargs) if name == "waymo": return WaymoDataset(cfg, split=split, **kwargs) if name == "nuscenes": return NuScenesDataset(cfg, split=split, **kwargs) if name in ("argoverse", "argoverse2", "av2"): return Argoverse2Dataset(cfg, split=split, **kwargs) raise ValueError(f"unknown dataset {cfg.data.name!r}")