in metropolis/metropolis.py [0:0]
def __make_reverse_index__(self, verbose: bool) -> None: # noqa C901
"""De-normalizes database to create reverse indices for common cases.
Args:
verbose: Whether to print outputs.
"""
start_time = time.time()
if verbose:
print("Reverse indexing ...")
# Store the mapping from token to table index for each table.
self._token2ind = {}
for table in self.table_names:
self._token2ind[table] = {}
for ind, member in enumerate(getattr(self, table)):
self._token2ind[table][member["token"]] = ind
# Decorate (adds short-cut) sample_annotation table with for category name.
for record in self.sample_annotation:
inst = self.get("instance", record["instance_token"])
record["category_name"] = self.get("category", inst["category_token"])[
"name"
]
# Do the same for sample_annotation_2d
for record in self.sample_annotation_2d:
inst = self.get("instance", record["instance_token"])
record["category_name"] = self.get("category", inst["category_token"])[
"name"
]
# Decorate (adds short-cut) sample_data with sensor information.
for record in self.sample_data:
cs_record = self.get("calibrated_sensor", record["calibrated_sensor_token"])
sensor_record = self.get("sensor", cs_record["sensor_token"])
record["sensor_modality"] = sensor_record["modality"]
record["channel"] = sensor_record["channel"]
# Reverse-index samples with sample_data, annotations and panoptic
for record in self.sample:
record["data"] = {}
record["anns"] = []
record["anns_2d"] = []
for record in self.sample_data:
sample_record = self.get("sample", record["sample_token"])
sample_record["data"][record["channel"]] = record["token"]
for ann_record in self.sample_annotation:
sample_record = self.get("sample", ann_record["sample_token"])
sample_record["anns"].append(ann_record["token"])
for ann_record_2d in self.sample_annotation_2d:
sample_record = self.get("sample", ann_record_2d["sample_token"])
sample_record["anns_2d"].append(ann_record_2d["token"])
for pano_record in self.panoptic:
sample_record = self.get("sample", pano_record["sample_token"])
sample_record["panoptic_token"] = pano_record["token"]
if verbose:
print(
f"Done reverse indexing in {time.time() - start_time:.1f} seconds.\n======"
)