Source code for unilab.base.scene
"""UniLab configuration owner layered over the package-neutral UniSim scene."""
from __future__ import annotations
from collections.abc import Mapping
from dataclasses import dataclass, field
from unisim.scene import (
SceneCfg as _UniSimSceneCfg,
)
from unisim.scene import (
TerrainSceneCfg,
resolve_scene_default_qpos,
resolve_scene_fragment_path,
)
from unilab.base.entity import EntityCfg
[docs]
@dataclass
class SceneCfg(_UniSimSceneCfg):
"""Task-owned scene declaration with UniLab entity materialization.
Physics scene fields and all backend-facing behavior are implemented by
UniSim. UniLab only converts Hydra/OmegaConf entity mappings into the
manager facade's :class:`EntityCfg` records on the cold configuration path.
"""
model_file: str
fragment_files: list[str] = field(default_factory=list)
terrain: TerrainSceneCfg | None = None
entities: dict[str, object] = field(default_factory=dict)
def __post_init__(self) -> None:
materialized: dict[str, object] = {}
for name, value in self.entities.items():
if isinstance(value, EntityCfg):
materialized[name] = value
elif isinstance(value, Mapping):
materialized[name] = EntityCfg(**value)
else:
materialized[name] = value
self.entities = materialized
__all__ = [
"SceneCfg",
"TerrainSceneCfg",
"resolve_scene_default_qpos",
"resolve_scene_fragment_path",
]