Source code for pycif.plugins.obsoperators.standard.transforms.period_pipe

from logging import info

from .utils.default_subsimus import default_subsimus
from .utils.fwd_pipe import fwd_adj_pipe


[docs]def period_pipe(self, all_transforms, mapper): """Arrange all transformations for all their sub-simulation periods into a pipe whose order respects the required precursors and successors for each transformation. First propagate sub-simulation periods to precursors/successors for transformations which don't have pre-defined sub-simulation periods. Second, define a graph from all the precursors of all transformations Last, walk the graph to define the proper order of the transformations :param all_transforms: the object gathering all transformations :param mapper: the dictionary containing all information about the input/output of each transformation :return: the pipes to be computed in forward and backward mode, including for each direction a dry run in the other direction for initialization """ info("Computing the optimal order of transformation. This can take a while") # First update subsimulations from precursors and successors default_subsimus(all_transforms, mapper) # Get final pipe_list including forward transformations info("Doing forward order") all_pipe_transforms_fwd = fwd_adj_pipe( self, all_transforms, mapper, mode="forward") info("Doing adjoint order") all_pipe_transforms_bkwd = fwd_adj_pipe( self, all_transforms, mapper, mode="adjoint") return all_pipe_transforms_fwd, all_pipe_transforms_bkwd