class_docstr: CTC beam search decoder from *Flashlight* :cite:`kahn2022flashlight`.
  
  .. devices:: CPU
  
  Note:
      To build the decoder, please use the factory function :func:`ctc_decoder`.
docstr: Returns frame numbers corresponding to non-blank tokens.
docstr_tok: ["Returns","frame","numbers","corresponding","to","non-blank","tokens","."]
code: def _get_timesteps(self, idxs: torch.IntTensor) -> torch.IntTensor:
      """Returns frame numbers corresponding to non-blank tokens."""
  
      timesteps = []
      for i, idx in enumerate(idxs):
          if idx == self.blank:
              continue
          if i == 0 or idx != idxs[i - 1]:
              timesteps.append(i)
      return torch.IntTensor(timesteps)
  
imports: from __future__ import annotations
  import itertools
  from abc import abstractmethod
  from collections import namedtuple
  from typing import Dict, List, NamedTuple, Optional, Tuple, Union
  import torch
  from flashlight.lib.text.decoder import CriterionType, LexiconDecoder, LexiconDecoderOptions, LexiconFreeDecoder, LexiconFreeDecoderOptions, LM, LMState, SmearingMode, Trie, ZeroLM
  from flashlight.lib.text.dictionary import create_word_dict, Dictionary, load_words
  from torchaudio.utils import download_asset
label_desc: Use image node_id 3 for calling the CTCDecoder obj's underlying member method code with example usage: obj._get_timesteps(idxs) and returns: torch