Creates a composition of multiple tff.templates.MeasuredProcesses.

Composing MeasuredProcesses is a chaining process in which the output of the first MeasuredProcess feeds the input of the following MeasuredProcess. For example, given y = f(x) and z = g(y), this produces a new z = h(x) such that h(x) = g(f(x)).

Guidance for Composition Two MeasuredProcesses F(x) and G(y) can be composed into a new MeasuredProcess called C with the following properties:

  • C.state is the concatenation <F=F.state, G=G.state> as an OrderedDict.
  •, x).result ==,, x).result).result
  • C.measurements is the concatenation <F=F.measurements, G=G.measurements> as an OrderedDict.

The resulting composition C would have the following type signatures: initialize: ( -> <F=F.initialize, G=G.initialize>) next: (<<F=F.state, G=G.state>, F.input> -> <state=<F=F.state, G=G.State>, result=G.result, measurements=<F=F.measurements, G=G.measurements>)

Note that the guidance for composition is not strict and details are allowed to differ.

measured_processes An OrderedDict of MeasuredProcesses with keys as the process name and values as the corresponding MeasuredProcess.

A MeasuredProcess of the composition of input MeasuredProcesses.

TypeError If the MeasuredProcesses have the state at different placement (e.g. F.state@SERVER, G.state@CLIENTS).
TypeError If the function argment type doesn't match with the input type of the composite function.