code: def mutate_categorical(
      X: np.ndarray,
      rate: float = None,
      seed: int = 0,
      feature_range: tuple = (0, 255),
  ) -> tf.Tensor:
      """
      Randomly change integer feature values to values within a set range
      with a specified permutation rate.
  
      Parameters
      ----------
      X
          Batch of data to be perturbed.
      rate
          Permutation rate (between 0 and 1).
      seed
          Random seed.
      feature_range
          Min and max range for perturbed features.
  
      Returns
      -------
      Array with perturbed data.
      """
      frange = (feature_range[0] + 1, feature_range[1] + 1)
      shape = X.shape
      n_samples = np.prod(shape)
      mask = tf.random.categorical(
          tf.math.log([[1.0 - rate, rate]]),
          n_samples,
          seed=seed,
          dtype=tf.int32,
      )
      mask = tf.reshape(mask, shape)
      possible_mutations = tf.random.uniform(
          shape,
          minval=frange[0],
          maxval=frange[1],
          dtype=tf.int32,
          seed=seed + 1,
      )
      X = tf.math.floormod(
          tf.cast(X, tf.int32) + mask * possible_mutations, frange[1]
      )
      return tf.cast(X, tf.float32)
  
label_desc: Use image node_id 1 for calling a global function with example usage: mutate_categorical(X, rate, seed, feature_range) and returns: tf