class_docstr: Generates trackers from training data.
class_docstr_tok: ["Generates","trackers","from","training","data","."]
docstr: Warns about unused story blocks.
  
  Unused steps are ones having a start or end checkpoint
  that no one provided.
docstr_tok: ["Warns","about","unused","story","blocks",".","Unused","steps","are","ones","having","a","start","or","end","checkpoint","that","no","one","provided","."]
code: def _issue_unused_checkpoint_notification(
      self, unused_checkpoints: Set[Text]
  ) -> None:
      """Warns about unused story blocks.
  
      Unused steps are ones having a start or end checkpoint
      that no one provided.
      """
      if STORY_START in unused_checkpoints:
          rasa.shared.utils.io.raise_warning(
              "There is no starting story block "
              "in the training data. "
              "All your story blocks start with some checkpoint. "
              "There should be at least one story block "
              "that starts without any checkpoint.",
              docs=DOCS_URL_STORIES + "#stories",
          )
  
      # running through the steps first will result in only one warning
      # per block (as one block might have multiple steps)
      collected_start = set()
      collected_end = set()
      for step in self.story_graph.story_steps:
          for start in step.start_checkpoints:
              if start.name in unused_checkpoints:
                  # After processing, there shouldn't be a story part left.
                  # This indicates a start checkpoint that doesn't exist
                  collected_start.add((start.name, step.block_name))
  
          for end in step.end_checkpoints:
              if end.name in unused_checkpoints:
                  # After processing, there shouldn't be a story part left.
                  # This indicates an end checkpoint that doesn't exist
                  collected_end.add((end.name, step.block_name))
  
      for cp, block_name in collected_start:
          if not cp.startswith(GENERATED_CHECKPOINT_PREFIX):
              rasa.shared.utils.io.raise_warning(
                  f"Unsatisfied start checkpoint '{cp}' "
                  f"in block '{block_name}'. "
                  f"Remove this checkpoint or add "
                  f"story blocks that end "
                  f"with this checkpoint.",
                  docs=DOCS_URL_STORIES + "#checkpoints",
              )
  
      for cp, block_name in collected_end:
          if not cp.startswith(GENERATED_CHECKPOINT_PREFIX):
              rasa.shared.utils.io.raise_warning(
                  f"Unsatisfied end checkpoint '{cp}' "
                  f"in block '{block_name}'. "
                  f"Remove this checkpoint or add "
                  f"story blocks that start "
                  f"with this checkpoint.",
                  docs=DOCS_URL_STORIES + "#checkpoints",
              )
  
imports: from collections import defaultdict, namedtuple, deque
  import copy
  import logging
  import random
  from contextlib import contextmanager
  from tqdm import tqdm
  from typing import Optional, List, Text, Set, Dict, Tuple, Deque, DefaultDict, Any, Iterable, Generator
  from rasa.shared.constants import DOCS_URL_STORIES
  from rasa.shared.core.constants import SHOULD_NOT_BE_SET
  from rasa.shared.core.domain import Domain, State
  from rasa.shared.core.events import ActionExecuted, UserUttered, ActionReverted, UserUtteranceReverted, Restarted, Event, SlotSet, ActiveLoop
  from rasa.shared.core.trackers import DialogueStateTracker, FrozenState
  from rasa.shared.core.slots import Slot
  from rasa.shared.core.training_data.structures import StoryGraph, STORY_START, StoryStep, RuleStep, GENERATED_CHECKPOINT_PREFIX
  from rasa.shared.utils.io import is_logging_disabled
  import rasa.shared.utils.io
label_desc: Use image node_id 17 for calling the TrainingDataGenerator obj's underlying member method code with example usage: obj._issue_unused_checkpoint_notification(unused_checkpoints) without return types