code: def __process_release(
      array: np.ndarray, config: Config
  ) -> np.ndarray:
      hold = ms_to_samples(
          config.limiter.hold, config.internal_sample_rate
      )
  
      slided_input = __sliding_window_fast(array, hold, mode="hold")
  
      b, a = signal.butter(
          config.limiter.hold_filter_order,
          config.limiter.hold_filter_coefficient,
          fs=config.internal_sample_rate,
      )
      hold_output = signal.lfilter(b, a, slided_input)
  
      b, a = signal.butter(
          config.limiter.release_filter_order,
          config.limiter.release_filter_coefficient
          / config.limiter.release,
          fs=config.internal_sample_rate,
      )
      release_output = signal.lfilter(
          b, a, np.maximum(slided_input, hold_output)
      )
  
      return np.maximum(hold_output, release_output)
  
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 3 for calling a global function with example usage: __process_release(array, config) and returns: np