class_docstr: Inserts various types of characters (including zero-width or punctuation),
  which in turn breaks up the text.
  
  The 'cadence' and 'vary_chars' options are used to adjust the frequency and
  pattern of the characters, to avoid detection by automated deobfuscation techniques.
  
  If 'cadence' is not an integer (say, 2.5), a char will be added
  on *average* about every 2.5 chars.
code: def insert_chars(self, text: str) -> str:
      splits = int((len(text) + self.cadence - 1) // self.cadence)
      split_text = [
          text[
              math.ceil(i * self.cadence) : math.ceil(
                  (i + 1) * self.cadence
              )
          ]
          for i in range(splits)
      ]
  
      if not self.vary_chars:
          return random.choice(self.char_set).join(split_text)
  
      separators = random.choices(self.char_set, k=len(split_text))
      # pyre-fixme[6]: For 2nd param expected `int` but got `Tuple[]`.
      return "".join(sum(zip(split_text, separators), ())[:-1])
  
file_path: AugLy/augly/text/augmenters/insertion.py
imports: import math
  import random
  from typing import List, Union
  from augly.text.augmenters.utils import rejoin_words_and_whitespace, split_words_on_whitespace
label_desc: Use image node_id 2 for calling the InsertionAugmenter obj's underlying member method code with example usage: obj.insert_chars(text) and returns: str, random