class_docstr: Internal class for representing validation result per metric.
  Not user facing, used for organizing metric failures and generating failure message
  more conveniently.
  :param metric_name: String representing the metric name
  :param candidate_metric_value: value of metric for candidate model
  :param metric_threshold: :py:class: `MetricThreshold<mlflow.models.validation.MetricThreshold>`
                           The MetricThreshold for the metric.
  :param baseline_metric_value: value of metric for baseline model
class_docstr_tok: ["Internal","class","for","representing","validation","result","per","metric",".","Not","user","facing",",","used","for","organizing","metric","failures","and","generating","failure","message","more","conveniently",".",":","param","metric_name",":","String","representing","the","metric","name",":","param","candidate_metric_value",":","value","of","metric","for","candidate","model",":","param","metric_threshold",":",":","py",":","class",":","`","MetricThreshold","<","mlflow.models.validation.MetricThreshold",">","`","The","MetricThreshold","for","the","metric",".",":","param","baseline_metric_value",":","value","of","metric","for","baseline","model"]
docstr: Returns a human-readable string representing the validation result for the metric.
docstr_tok: ["Returns","a","human-readable","string","representing","the","validation","result","for","the","metric","."]
code: def __str__(self):
      """
      Returns a human-readable string representing the validation result for the metric.
      """
      if self.is_success():
          return f"Metric {self.metric_name} passed the validation."
  
      if self.missing_candidate:
          return (
              f"Metric validation failed: metric {self.metric_name} was missing from the "
              f"evaluation result of the candidate model."
          )
  
      result_strs = []
      if self.threshold_failed:
          result_strs.append(
              f"Metric {self.metric_name} value threshold check failed: "
              f"candidate model {self.metric_name} = {self.candidate_metric_value}, "
              f"{self.metric_name} threshold = {self.metric_threshold.threshold}."
          )
      if self.missing_baseline:
          result_strs.append(
              f"Model comparison failed: metric {self.metric_name} was missing from "
              f"the evaluation result of the baseline model."
          )
      else:
          if self.min_absolute_change_failed:
              result_strs.append(
                  f"Metric {self.metric_name} minimum absolute change check failed: "
                  f"candidate model {self.metric_name} = {self.candidate_metric_value}, "
                  f"baseline model {self.metric_name} = {self.baseline_metric_value}, "
                  f"{self.metric_name} minimum absolute change threshold = "
                  f"{self.metric_threshold.min_absolute_change}."
              )
          if self.min_relative_change_failed:
              result_strs.append(
                  f"Metric {self.metric_name} minimum relative change check failed: "
                  f"candidate model {self.metric_name} = {self.candidate_metric_value}, "
                  f"baseline model {self.metric_name} = {self.baseline_metric_value}, "
                  f"{self.metric_name} minimum relative change threshold = "
                  f"{self.metric_threshold.min_relative_change}."
              )
      return " ".join(result_strs)
  
imports: from mlflow.exceptions import MlflowException
  from mlflow.protos.databricks_pb2 import BAD_REQUEST, INVALID_PARAMETER_VALUE
  from mlflow.utils.annotations import deprecated
label_desc: Use image node_id 2 for calling the _MetricValidationResult obj's underlying member method code with example usage: obj.__str__() and returns: str, str, self, str, str, self, str