rawalkhirodkar's picture
Add initial commit
28c256d
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the license found in the
# LICENSE file in the root directory of this source tree.
from typing import Any, Dict
def get_metric_value(indicator: str, metrics: Dict) -> Any:
"""Get the metric value specified by an indicator, which can be either a
metric name or a full name with evaluator prefix.
Args:
indicator (str): The metric indicator, which can be the metric name
(e.g. 'AP') or the full name with prefix (e.g. 'COCO/AP')
metrics (dict): The evaluation results output by the evaluator
Returns:
Any: The specified metric value
"""
if '/' in indicator:
# The indicator is a full name
if indicator in metrics:
return metrics[indicator]
else:
raise ValueError(
f'The indicator "{indicator}" can not match any metric in '
f'{list(metrics.keys())}')
else:
# The indicator is metric name without prefix
matched = [k for k in metrics.keys() if k.split('/')[-1] == indicator]
if not matched:
raise ValueError(
f'The indicator {indicator} can not match any metric in '
f'{list(metrics.keys())}')
elif len(matched) > 1:
raise ValueError(f'The indicator "{indicator}" matches multiple '
f'metrics {matched}')
else:
return metrics[matched[0]]