tff.templates.concatenate_measured_processes

Creates a concatenation of multiple tff.templates.MeasuredProcesses.

For example, given y = f(x) and z = g(y), this produces a new <y, z> = <f(x), g(y)> that concatenates the two MeasuredProcesses.

Guidance for Concatenation Two MeasuredProcesses F(x) and G(y) can be concatenated into a new MeasuredProcess called C with the following properties, each is the concatenation of that of input MeasuredProcesses as an OrderedDict:

  • C.state == <F=F.state, G=G.state>.
  • C.next(C.state, <x, y>).result == <F=F.next(F.state, x).result, G=G.next(G.state, y).result>.
  • C.measurements == <F=F.measurements, G=G.measurements>.

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

Note that the guidance for concatenation 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 concatenation of input MeasuredProcesses.

TypeError If the MeasuredProcesses have the state at different placement (e.g. F.state@SERVER, G.state@CLIENTS).