code: def test_unfused_check_update_tower_qps(self) -> None:
      rec_metric_value_test_launcher(
          target_clazz=TowerQPSMetric,
          target_compute_mode=RecComputeMode.UNFUSED_TASKS_COMPUTATION,
          test_clazz=TestTowerQPSMetric,
          metric_name=TowerQPSMetricTest.task_names,
          task_names=["t1", "t2", "t3"],
          fused_update_limit=0,
          compute_on_all_ranks=False,
          should_validate_update=True,
          world_size=WORLD_SIZE,
          entry_point=self._test_tower_qps,
          test_nsteps=AFTER_WARMUP_NSTEPS,
      )
  
imports: import unittest
  from functools import partial, update_wrapper
  from typing import Callable, Dict, List, Optional, Tuple, Type
  import torch
  import torch.distributed
  from torchrec.metrics.metrics_config import DefaultTaskInfo
  from torchrec.metrics.model_utils import parse_task_model_outputs
  from torchrec.metrics.rec_metric import RecComputeMode, RecMetric, RecTaskInfo
  from torchrec.metrics.test_utils import gen_test_batch, gen_test_tasks, metric_test_helper, rec_metric_value_test_launcher, TestMetric
  from torchrec.metrics.tower_qps import TowerQPSMetric
label_desc: Use image node_id 4 for calling the TowerQPSMetricTest obj's underlying member method code with example usage: obj.test_unfused_check_update_tower_qps() without return types