code: def generate_model_outputs_cases() -> (
      Iterable[Dict[str, torch._tensor.Tensor]]
  ):
      return [
          # random_inputs
          {
              "labels": torch.tensor([[1, 0, 0, 1, 1]]),
              "predictions": torch.tensor([[0.2, 0.6, 0.8, 0.4, 0.9]]),
              "weights": torch.tensor([[0.13, 0.2, 0.5, 0.8, 0.75]]),
              "grouping_keys": torch.tensor([0, 1, 0, 1, 1]),
              "expected_auprc": torch.tensor([0.5737]),
          },
          # perfect_condition
          {
              "labels": torch.tensor([[1, 0, 0, 1, 1]]),
              "predictions": torch.tensor([[1, 0, 0, 1, 1]]),
              "weights": torch.tensor([[1] * 5]),
              "grouping_keys": torch.tensor([1, 1, 0, 0, 1]),
              "expected_auprc": torch.tensor([1.0]),
          },
          # inverse_prediction
          {
              "labels": torch.tensor([[1, 0, 0, 1, 1]]),
              "predictions": torch.tensor([[0, 1, 1, 0, 0]]),
              "weights": torch.tensor([[1] * 5]),
              "grouping_keys": torch.tensor([0, 1, 0, 1, 1]),
              "expected_auprc": torch.tensor([0.5833]),
          },
          # all_scores_the_same
          {
              "labels": torch.tensor([[1, 0, 1, 0, 1, 0]]),
              "predictions": torch.tensor([[0.5] * 6]),
              "weights": torch.tensor([[1] * 6]),
              "grouping_keys": torch.tensor([1, 1, 1, 0, 0, 0]),
              "expected_auprc": torch.tensor([0.5]),
          },
          # one_class_in_input
          {
              "labels": torch.tensor([[1, 1, 1, 1, 1]]),
              "predictions": torch.tensor([[0.2, 0.6, 0.8, 0.4, 0.9]]),
              "weights": torch.tensor([[1] * 5]),
              "grouping_keys": torch.tensor([1, 0, 0, 1, 0]),
              "expected_auprc": torch.tensor([1.0]),
          },
          # one_group
          {
              "labels": torch.tensor([[1, 0, 0, 1, 1]]),
              "predictions": torch.tensor([[0.2, 0.6, 0.8, 0.4, 0.9]]),
              "weights": torch.tensor([[0.13, 0.2, 0.5, 0.8, 0.75]]),
              "grouping_keys": torch.tensor([1, 1, 1, 1, 1]),
              "expected_auprc": torch.tensor([0.8291]),
          },
          # two tasks
          {
              "labels": torch.tensor(
                  [[1, 0, 0, 1, 0], [1, 1, 1, 1, 0]]
              ),
              "predictions": torch.tensor(
                  [
                      [0.2281, 0.1051, 0.4885, 0.7740, 0.3097],
                      [0.4658, 0.3445, 0.6048, 0.6587, 0.5088],
                  ]
              ),
              "weights": torch.tensor(
                  [
                      [0.6334, 0.6937, 0.6631, 0.5078, 0.3570],
                      [0.2637, 0.2479, 0.2697, 0.6500, 0.7583],
                  ]
              ),
              "grouping_keys": torch.tensor([0, 1, 0, 0, 1]),
              "expected_auprc": torch.tensor([0.3980, 0.6232]),
          },
      ]
  
imports: import unittest
  from typing import Dict, Iterable, List, Optional, Type, Union
  import torch
  from torch import no_grad
  from torchrec.metrics.auprc import _compute_auprc_helper, AUPRCMetric
  from torchrec.metrics.metrics_config import DefaultTaskInfo
  from torchrec.metrics.rec_metric import RecComputeMode, RecMetric, RecMetricException, RecTaskInfo
  from torchrec.metrics.test_utils import metric_test_helper, rec_metric_value_test_launcher, TestMetric
label_desc: Use image node_id 2 for calling a global function with example usage: generate_model_outputs_cases() and returns: list