<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def min_filter(data, size=7, res_g=None, sub_blocks=(1, 1, 1)):
 """ minimum 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"))
    else:
        raise ValueError("currently only 2 or 3 dimensional data is supported")
    return _filt(data=data, size=size, res_g=res_g, sub_blocks=sub_blocks)