contextlibs, functools, itertools