Source code for onegpy.sequential

from onegpy.operator import operator_checker


[docs]class Sequential(object):
[docs] def __init__(self, operators=None): if operators is None: operators = [] self._operators = [] for operator in operators: self.add(operator)
def add(self, operator): self._added_operator_checker(operator) self._operators.append(operator) @property def operators(self): return self._operators def _added_operator_checker(self, operator): operator_checker(operator) if (self._operators and operator.n_in is not None) \ and self._operators[-1].n_out != operator.n_in: msg = 'Invalid operator:\n' \ 'Expected operator.n_in: {} {} None not {}' \ .format(self._operators[-1].n_out or '', 'or' if self._operators[-1].n_out is not None else '', operator.n_in) raise TypeError(msg) def __call__(self, population): out = population for operator in self._operators: # if `operator` is destructive, it perhaps returns None out = operator(out) or out return out