code: def _get_action_strings(cls,
                              possible_actions: List[List[ProductionRule]],
                              action_indices: Dict[int, List[List[int]]]) -> List[List[List[str]]]:
          
          all_action_strings: List[List[List[str]]] = []
          batch_size = len(possible_actions)
          for i in range(batch_size):
              batch_actions = possible_actions[i]
              batch_best_sequences = action_indices[i] if i in action_indices else []
              # This will append an empty list to ``all_action_strings`` if ``batch_best_sequences``
              # is empty.
              action_strings = [[batch_actions[rule_id][0] for rule_id in sequence]
                                for sequence in batch_best_sequences]
              all_action_strings.append(action_strings)
          return all_action_strings
docs: Takes a list of possible actions and indices of decoded actions into those possible actions
          for a batch and returns sequences of action strings. We assume ``action_indices`` is a dict
          mapping batch indices to k-best decoded sequence lists.