A post-aggregation computation placed at SERVER.
The second step can be realized by direct application of appropriate intrinsic
such as tff.federated_sum, or by delegation to (one or more) "inner"
Both initialize and next must be tff.Computations with the following
initialize: ( -> S@SERVER)
next: (<S@SERVER, V@CLIENTS, *> ->
<state=S@SERVER, result=V@SERVER, measurements=M@SERVER>)
where * represents optional other arguments placed at CLIENTS.
A no-arg tff.Computation that creates the initial state
of the aggregation process.
A tff.Computation that defines an iterated function. If
initialize_fn returns a type S@SERVER, then next_fn must return a
MeasuredProcessOutput where the state attribute matches the type
S@SERVER, and accepts at least two argument of types S@SERVER
and V@CLIENTS, or more arguments where the first two argument must be
of types S@SERVER and V@CLIENTS. The result attribute of output
returned by next_fn must be of type V@SERVER.
Its first argument should always be the current state (originally produced
by the initialize attribute), the second argument must be the input placed
at CLIENTS, and the return type must be a
tff.templates.MeasuredProcessOutput with each field placed at SERVER.