Completed
Pull Request — master (#288)
by Vincent
02:02
created

fuel.TransformerDataIterator   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 38
Duplicated Lines 0 %
Metric Value
dl 0
loc 38
rs 10
wmc 5

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __iter__() 0 2 1
A __init__() 0 6 1
A __next__() 0 10 3
1
import six
2
3
4
class DataIterator(six.Iterator):
5
    """An iterator over data, representing a single epoch.
6
7
    Parameters
8
    ----------
9
    data_stream : :class:`DataStream`
10
        The data stream over which to iterate.
11
    request_iterator : iterator
12
        An iterator which returns the request to pass to the data stream
13
        for each step.
14
    as_dict : bool, optional
15
        If `True`, return dictionaries mapping source names to data
16
        from each source. If `False` (default), return tuples in the
17
        same order as `data_stream.sources`.
18
19
    """
20
    def __init__(self, data_stream, request_iterator=None, as_dict=False):
21
        self.data_stream = data_stream
22
        self.request_iterator = request_iterator
23
        self.as_dict = as_dict
24
25
    def __iter__(self):
26
        return self
27
28
    def __next__(self):
29
        if self.request_iterator is not None:
30
            data = self.data_stream.get_data(next(self.request_iterator))
31
        else:
32
            data = self.data_stream.get_data()
33
        if self.as_dict:
34
            return dict(zip(self.data_stream.sources, data))
35
        else:
36
            return data
37
38
39
class TransformerDataIterator(six.Iterator):
40
    """An iterator over transformed data, representing a single epoch.
41
42
    Parameters
43
    ----------
44
    transformer : :class:`Transformer`
45
        The transformer over which to iterate.
46
    child_iterator : :class:`DataIterator`
47
        The iterator of the transformer's data stream.
48
    request_iterator : iterator
49
        An iterator which returns the request to pass to the transformer
50
        for each step.
51
    as_dict : bool, optional
52
        If `True`, return dictionaries mapping source names to data
53
        from each source. If `False` (default), return tuples in the
54
        same order as `transformer.sources`.
55
56
    """
57
    def __init__(self, transformer, child_iterator, request_iterator=None,
58
                 as_dict=False):
59
        self.transformer = transformer
60
        self.child_iterator = child_iterator
61
        self.request_iterator = request_iterator
62
        self.as_dict = as_dict
63
64
    def __iter__(self):
65
        return self
66
67
    def __next__(self):
68
        if self.request_iterator is not None:
69
            data = self.transformer.get_data(
70
                self.child_iterator, next(self.request_iterator))
71
        else:
72
            data = self.transformer.get_data(self.child_iterator)
73
        if self.as_dict:
74
            return dict(zip(self.transformer.sources, data))
75
        else:
76
            return data
77