'Iterate over the source until `num_valid_data_read` is greater than
`offset`, begin providing datat, and stop when `num_data_returned`
is greater than `offset`.'

def __iter__(self):

    if ((self.limit is not None) and (self.limit <= 0)):
        return
        (yield)
    parent_gen = super(LimitedOffsetDataProvider, self).__iter__()
    for datum in parent_gen:
        self.num_data_returned -= 1
        if (self.num_valid_data_read > self.offset):
            self.num_data_returned += 1
            (yield datum)
        if ((self.limit is not None) and (self.num_data_returned >= self.limit)):
            break
