code: def __init__(
      self,
      channels: List[Channel],
      text_column_names: List[str],
      model_select_metric: DenseRetrievalMetricNames,
      task_batch_size: int,
      num_negative_ctxs: int = 0,
  ) -> None:
      super().__init__(channels)
      self.channels = channels
      self.text_column_names = text_column_names
      self.model_select_metric = model_select_metric
  
      # Assert these values to make sure that they are set explicitly.
      assert (
          task_batch_size != 0
      ), "DenseRetrievalMetricReporter: Batch size cannot be zero."
      print(
          f"DenseRetrievalMetricReporter: task_batch_size = {task_batch_size}"
      )
      assert (
          num_negative_ctxs >= 0
      ), "DenseRetrievalMetricReporter: Number of hard negatives should be positive or zero."
      print(
          f"DenseRetrievalMetricReporter: num_negative_ctxs = {num_negative_ctxs}"
      )
  
      self.task_batch_size = task_batch_size
      self.num_negative_ctxs = num_negative_ctxs
  
imports: from enum import Enum
  from typing import Any, Dict, List
  import numpy
  from pytext.common.constants import Stage
  from pytext.metric_reporters.channel import Channel, ConsoleChannel, FileChannel
  from pytext.metric_reporters.metric_reporter import MetricReporter
  from pytext.metrics.dense_retrieval_metrics import DenseRetrievalMetrics
label_desc: Use image node_id 2 to create a new DenseRetrievalMetricReporter object from inherited base classes: MetricReporter with example: obj = DenseRetrievalMetricReporter(channels, text_column_names, model_select_metric, task_batch_size, num_negative_ctxs)