Wires the pipeline and returns a lazy object of
        the transformed data.

        :param data: must be an iterable, where a full document
        must be returned for each loop

        :param rewrap: (optional) is a bool that indicates the need to rewrap
        data in cases where iterating over it produces undesired results,
        for instance ``dict`` instances.

        :param prefetch: (optional) is an int defining the number of items to
        be prefetched once the pipeline starts yielding data. The
        default prefetching mechanism is based on threads, so be
        careful with CPU-bound processing pipelines.

def run(self, data, rewrap=False, prefetch=0):
        """
        Wires the pipeline and returns a lazy object of
        the transformed data.

        :param data: must be an iterable, where a full document
        must be returned for each loop

        :param rewrap: (optional) is a bool that indicates the need to rewrap
        data in cases where iterating over it produces undesired results,
        for instance ``dict`` instances.

        :param prefetch: (optional) is an int defining the number of items to
        be prefetched once the pipeline starts yielding data. The
        default prefetching mechanism is based on threads, so be
        careful with CPU-bound processing pipelines.
        """
        if rewrap:
            data = [data]

        for _filter in self._filters:
            _filter.feed(data)
            data = _filter
        else:
            iterable = self._prefetch_callable(data, prefetch) if prefetch else data
            for out_data in iterable:
                yield out_data