in habitat/datasets/rearrange/rearrange_generator.py [0:0]
def _get_resource_sets(self) -> None:
"""
Extracts and validates scene, object, and receptacle sets from the config and fills internal datastructures for later reference.
Assumes the Simulator (self.sim) is already initialized.
"""
# {scene set name -> [scene handles]}
self._scene_sets: Dict[str, List[str]] = {}
# {object set name -> [object handles]}
self._obj_sets: Dict[str, List[str]] = {}
# {receptacle set name -> ([included object handles], [excluded object handles], [included receptacle name substrings], [excluded receptacle name substrings])}
self._receptacle_sets: Dict[
str, Tuple[List[str], List[str], List[str], List[str]]
] = {}
expected_list_keys = ["included_substrings", "excluded_substrings"]
# scene sets
for scene_set in self.cfg.scene_sets:
assert "name" in scene_set
assert (
scene_set["name"] not in self._scene_sets
), f"cfg.scene_sets - Duplicate name ('{scene_set['name']}') detected."
for list_key in expected_list_keys:
assert (
list_key in scene_set
), f"Expected list key '{list_key}'."
assert (
type(scene_set[list_key]) is list
), f"cfg.scene_sets - '{scene_set['name']}' '{list_key}' must be a list of strings."
self._scene_sets[
scene_set["name"]
] = cull_string_list_by_substrings(
self.sim.metadata_mediator.get_scene_handles(),
scene_set["included_substrings"],
scene_set["excluded_substrings"],
)
# object sets
for object_set in self.cfg.object_sets:
assert "name" in object_set
assert (
object_set["name"] not in self._obj_sets
), f"cfg.object_sets - Duplicate name ('{object_set['name']}') detected."
for list_key in expected_list_keys:
assert (
list_key in object_set
), f"Expected list key '{list_key}'."
assert (
type(object_set[list_key]) is list
), f"cfg.object_sets - '{object_set['name']}' '{list_key}' must be a list of strings."
self._obj_sets[
object_set["name"]
] = cull_string_list_by_substrings(
self.sim.get_object_template_manager().get_template_handles(),
object_set["included_substrings"],
object_set["excluded_substrings"],
)
# receptacle sets
expected_list_keys = [
"included_object_substrings",
"excluded_object_substrings",
"included_receptacle_substrings",
"excluded_receptacle_substrings",
]
for receptacle_set in self.cfg.receptacle_sets:
assert "name" in receptacle_set
assert (
receptacle_set["name"] not in self._receptacle_sets
), f"cfg.receptacle_sets - Duplicate name ('{receptacle_set['name']}') detected."
for list_key in expected_list_keys:
assert (
list_key in receptacle_set
), f"Expected list key '{list_key}'."
assert (
type(receptacle_set[list_key]) is list
), f"cfg.receptacle_sets - '{receptacle_set['name']}' '{list_key}' must be a list of strings."
# NOTE: we can't finalize this list until sampling time when objects are instanced and receptacle metadata is scraped from the scene
self._receptacle_sets[receptacle_set["name"]] = (
receptacle_set["included_object_substrings"],
receptacle_set["excluded_object_substrings"],
receptacle_set["included_receptacle_substrings"],
receptacle_set["excluded_receptacle_substrings"],
)