use functools.warps()