code: def allowed_transitions(
      constraint_type: str, labels: Dict[int, str]
  ) -> List[Tuple[int, int]]:
      """
      Given labels and a constraint type, returns the allowed transitions. It will
      additionally include transitions for the start and end states, which are used
      by the conditional random field.
  
      # Parameters
  
      constraint_type : `str`, required
          Indicates which constraint to apply. Current choices are
          "BIO", "IOB1", "BIOUL", and "BMES".
      labels : `Dict[int, str]`, required
          A mapping {label_id -> label}. Most commonly this would be the value from
          Vocabulary.get_index_to_token_vocabulary()
  
      # Returns
  
      `List[Tuple[int, int]]`
          The allowed transitions (from_label_id, to_label_id).
      """
      num_labels = len(labels)
      start_tag = num_labels
      end_tag = num_labels + 1
      labels_with_boundaries = list(labels.items()) + [
          (start_tag, "START"),
          (end_tag, "END"),
      ]
  
      allowed = []
      for from_label_index, from_label in labels_with_boundaries:
          if from_label in ("START", "END"):
              from_tag = from_label
              from_entity = ""
          else:
              from_tag = from_label[0]
              from_entity = from_label[1:]
          for to_label_index, to_label in labels_with_boundaries:
              if to_label in ("START", "END"):
                  to_tag = to_label
                  to_entity = ""
              else:
                  to_tag = to_label[0]
                  to_entity = to_label[1:]
              if is_transition_allowed(
                  constraint_type,
                  from_tag,
                  from_entity,
                  to_tag,
                  to_entity,
              ):
                  allowed.append((from_label_index, to_label_index))
      return allowed
  
file_path: allennlp/allennlp/modules/conditional_random_field/conditional_random_field.py
imports: from typing import List, Tuple, Dict, Union
  import torch
  from allennlp.common.checks import ConfigurationError
  import allennlp.nn.util
label_desc: Use image node_id 1 for calling a global function with example usage: allowed_transitions(constraint_type, labels) and returns: allowed