Multi-threaded ins and outs finding (using multiprocessing)

    :param voxel_grid: voxel grid
    :param datapts: data points
    :return: in-outs

def find_inouts_mp(voxel_grid, datapts, **kwargs):
    """ Multi-threaded ins and outs finding (using multiprocessing)

    :param voxel_grid: voxel grid
    :param datapts: data points
    :return: in-outs
    """
    tol = kwargs.get('tol', 10e-8)
    num_procs = kwargs.get('num_procs', 4)
    with pool_context(processes=num_procs) as pool:
        filled = pool.map(partial(is_point_inside_voxel, ptsarr=datapts, tol=tol), voxel_grid)
    return filled