Source code for alphatwirl.loop.CollectorComposite

# Tai Sakuma <tai.sakuma@gmail.com>
from ..progressbar import ProgressReport

##__________________________________________________________________||
[docs]class CollectorComposite(object): """A composite of collectors. This class is a composite in the composite pattern. Examples of collectors are instances of `Collector`, `NullCollector`, and this class. """
[docs] def __init__(self, progressReporter = None): self.components = [ ] self.progressReporter = progressReporter
def __repr__(self): name_value_pairs = ( ('components', self.components), ('progressReporter', self.progressReporter), ) return '{}({})'.format( self.__class__.__name__, ', '.join(['{} = {!r}'.format(n, v) for n, v in name_value_pairs]), ) def add(self, collector): """add a collector Args: collector: the collector to be added """ self.components.append(collector) def collect(self, dataset_readers_list): """collect results Returns: a list of results """ ret = [ ] for i, collector in enumerate(self.components): if self.progressReporter is not None: report = ProgressReport(name = 'collecting results', done = i + 1, total = len(self.components)) self.progressReporter.report(report) ret.append(collector.collect([(dataset, tuple(r.readers[i] for r in readerComposites)) for dataset, readerComposites in dataset_readers_list])) return ret
## in one line without the progress bar #return [collector.collect([(dataset, tuple(r.readers[i] for r in readerComposites)) # for dataset, readerComposites in dataset_readers_list]) # for i, collector in enumerate(self.components)] ##__________________________________________________________________||