code: def test_prf1_metrics(self) -> None:
      self.assertMetricsAlmostEqual(
          compute_classification_metrics(
              PREDICTIONS1,
              LABEL_NAMES1,
              loss=2.0,
              average_precisions=False,
          ),
          ClassificationMetrics(
              accuracy=0.5,
              macro_prf1_metrics=MacroPRF1Metrics(
                  per_label_scores={
                      # label1: TP = 1, FP = 0, FN = 1
                      "label1": PRF1Scores(1, 0, 1, 1.0, 0.5, 2.0 / 3),
                      # label2: TP = 1, FP = 1, FN = 1
                      "label2": PRF1Scores(1, 1, 1, 0.5, 0.5, 0.5),
                      # label3: TP = 0, FP = 1, FN = 0
                      "label3": PRF1Scores(0, 1, 0, 0.0, 0.0, 0.0),
                  },
                  macro_scores=MacroPRF1Scores(
                      3, 0.5, 1.0 / 3, 7.0 / 18
                  ),
              ),
              per_label_soft_scores=None,
              mcc=None,
              roc_auc=None,
              loss=2.0,
          ),
      )
  
imports: from pytext.metrics import ClassificationMetrics, compute_classification_metrics, compute_soft_metrics, LabelPrediction, MacroPRF1Metrics, MacroPRF1Scores, PRF1Scores, SoftClassificationMetrics
  from pytext.metrics.tests.metrics_test_base import MetricsTestBase
label_desc: Use image node_id 1 for calling the BasicMetricsTest obj's underlying member method code with example usage: obj.test_prf1_metrics() without return types