def METHOD_NAME(self, score_args):
    """Logs the metric score value for each score defined for the model"""
    assert hasattr(self, "scores"), "Scores for the model should be defined"
    end_scores = {}
    # The first score in the first `self.scores` is the optimization criterion
    for score in self.scores:
        score_ret = score(*score_args)
        validate_score_return_type(score_ret)
        # If the returned score is a tuple, store each subscore as separate entry
        if isinstance(score_ret, tuple):
            end_scores[f"{score}"] = score_ret[0][1]
            # All other scores will also be logged
            for (subscore, value) in score_ret:
                end_scores[f"{score}_{subscore}"] = value
        elif isinstance(score_ret, float):
            end_scores[f"{score}"] = score_ret
        else:
            raise ValueError(
                f"Return type {type(score_ret)} is unexpected. Return type of "
                "the score function should either be a "
                "tuple(tuple) or float."
            )
    return end_scores