class_docstr: Precision/recall/F1 metrics for intents and slots.
  
  Attributes:
      intent_metrics: Precision/recall/F1 metrics for intents.
      slot_metrics: Precision/recall/F1 metrics for slots.
      overall_metrics: Combined precision/recall/F1 metrics for all nodes (merging
          intents and slots).
code: def print_metrics(self) -> None:
      if self.intent_metrics:
          print("\nIntent Metrics")
          self.intent_metrics.print_metrics()
      if self.slot_metrics:
          print("\nSlot Metrics")
          self.slot_metrics.print_metrics()
      if self.overall_metrics:
          print("\nMerged Intent and Slot Metrics")
          print(
              f"  P = {self.overall_metrics.precision * 100:.2f} "
              f"R = {self.overall_metrics.recall * 100:.2f}, "
              f"F1 = {self.overall_metrics.f1 * 100:.2f}."
          )
  
imports: from collections import Counter, defaultdict
  from copy import deepcopy
  from typing import AbstractSet, Any, Callable, Counter, Dict, List, NamedTuple, Optional, Sequence, Tuple
  from pytext.data.data_structures.annotation import INVALID_TREE_INTENT
  from pytext.data.data_structures.node import Node, Span
  from .None import AllConfusions, Confusions, PerLabelConfusions, PRF1Metrics, PRF1Scores, safe_division
label_desc: Use image node_id 1 for calling the IntentSlotMetrics obj's underlying member method code with example usage: obj.print_metrics() without return types