docs: def max_filter(data, size=7, res_g=None, sub_blocks=(1, 1, 1)):
      """
          maximum filter of given size
  
      Parameters
      ----------
      data: 2 or 3 dimensional ndarray or OCLArray of type float32
          input data
      size: scalar, tuple
          the size of the patch to consider
      res_g: OCLArray
          store result in buffer if given
      sub_blocks:
          perform over subblock tiling (only if data is ndarray)
  
      Returns
      -------
          filtered image or None (if OCLArray)
      """
      if data.ndim == 2:
          _filt = make_filter(_generic_filter_gpu_2d(FUNC = "(val>res?val:res)", DEFAULT = "-INFINITY"))
      elif data.ndim == 3:
          _filt = make_filter(_generic_filter_gpu_3d(FUNC = "(val>res?val:res)", DEFAULT = "-INFINITY"))
  
      return _filt(data = data, size = size, res_g = res_g, sub_blocks=sub_blocks)