'Iterate over `items` and begin yielding items after
`offset` number of items and stop when we\'ve yielded
`limit` number of items.'

def _apply_fn_limit_offset_gen(self, items, limit, offset):

    if ((limit is not None) and (limit < 0)):
        limit = None
    if ((offset is not None) and (offset < 0)):
        offset = None
    yielded = 0
    for (i, item) in enumerate(items):
        if ((offset is not None) and (i < offset)):
            continue
        if ((limit is not None) and (yielded >= limit)):
            break
        (yield item)
        yielded += 1
