code: def limit(array: np.ndarray, config: Config) -> np.ndarray:
      debug("The limiter is started. Preparing the gain envelope...")
      rectified = rectify(array, config.threshold)
  
      if np.all(np.isclose(rectified, 1.0)):
          debug("The limiter is not needed!")
          return array
  
      gain_hard_clip = flip(1.0 / rectified)
      debug("Modifying the gain envelope: attack stage...")
      gain_attack, gain_hard_clip_slided = __process_attack(
          np.copy(gain_hard_clip), config
      )
  
      debug("Modifying the gain envelope: hold / release stage...")
      gain_release = __process_release(
          np.copy(gain_hard_clip_slided), config
      )
  
      debug("Finalizing the gain envelope...")
      gain = flip(max_mix(gain_hard_clip, gain_attack, gain_release))
  
      return array * gain[:, None]
  
file_path: matchering/matchering/limiter/hyrax.py
imports: import numpy
  import math
  from scipy import signal
  from scipy.ndimage.filters import maximum_filter1d
  from ..None import Config
  from ..log import debug
  from ..dsp import rectify, flip, max_mix
  from ..utils import make_odd, ms_to_samples
label_desc: Use image node_id 4 for calling a global function with example usage: limit(array, config) and returns: unknown, array