Source code for dipy.workflows.combined_workflow
from dipy.testing.decorators import warning_for_keywords
from dipy.workflows.workflow import Workflow
[docs]
class CombinedWorkflow(Workflow):
@warning_for_keywords()
def __init__(
self, *, output_strategy="append", mix_names=False, force=False, skip=False
):
"""Workflow that combines multiple workflows.
The workflow combined together are referred as sub flows in this class.
"""
self._optionals = {}
super(CombinedWorkflow, self).__init__(
output_strategy=output_strategy, mix_names=mix_names, force=force, skip=skip
)
[docs]
def get_sub_runs(self):
"""Returns a list of tuples
(sub flow name, sub flow run method, sub flow short name)
to be used in the sub flow parameters extraction.
"""
sub_runs = []
for flow in self._get_sub_flows():
sub_runs.append((flow.__name__, flow.run, flow.get_short_name()))
return sub_runs
def _get_sub_flows(self):
"""Returns a list of sub flows used in the combined_workflow. Needs to
be implemented in every new combined_workflow.
"""
raise AttributeError(
f"Error: _get_sub_flows() has to be defined for {self.__class__}"
)
[docs]
def set_sub_flows_optionals(self, opts):
"""Sets the self._optionals variable with all sub flow arguments
that were passed in the commandline.
"""
self._optionals = {}
for key, sub_dict in opts.items():
self._optionals[key] = {k: v for k, v in sub_dict.items() if v is not None}
[docs]
def get_optionals(self, flow, **kwargs):
"""Returns the sub flow's optional arguments merged with those passed
as params in kwargs.
"""
opts = self._optionals[flow.__name__]
opts.update(kwargs)
return opts
[docs]
def run_sub_flow(self, flow, *args, **kwargs):
"""Runs the sub flow with the optional parameters passed via the
command line. This is a convenience method to make sub flow running
more intuitive on the concrete CombinedWorkflow side.
"""
return flow.run(*args, **self.get_optionals(type(flow), **kwargs))