|View source on GitHub|
A representation of a block of code in TFF's internal language.
A block is a syntactic structure that consists of a sequence of local name bindings followed by a result. The bindings are interpreted sequentially, with bindings later in the sequence in the scope of those listed earlier, and the result in the scope of the entire sequence. The usual hiding rules apply.
An informal concise notation for blocks is the following, with
representing the names defined locally for the block,
value_k the values
associated with them, and
result being the expression that reprsents the
value of the block construct.
let name_1=value_1, name_2=value_2, ..., name_n=value_n in result
Blocks are technically a redundant abstraction, as they can be equally well
represented by lambda expressions. A block of the form
let x=y in z is
roughly equivalent to
(x -> z)(y). Although redundant, blocks have a use
as a way to reduce TFF computation ASTs to a simpler, less nested and more
readable form, and are helpful in AST transformations as a mechanism that
prevents possible naming conflicts.
An example use of a block expression to flatten a nested structure below:
z = federated_sum(federated_map(x, federated_broadcast(y)))
An equivalent form in a more sequential notation using a block expression:
let v1 = federated_broadcast(y), v2 = federated_map(x, v1) in federated_sum(v2)
__init__( local_symbols, result )
Creates a block of TFF code.
local_symbols: The list of one or more local declarations, each of which is a 2-tuple (name, value), with 'name' being the string name of a local symbol being defined, and 'value' being the instance of ComputationBuildingBlock, the output of which will be locally bound to that name.
result: An instance of ComputationBuildingBlock that computes the result.
TypeError: if the arguments are of the wrong types.
Returns a serialized form of this object as a pb.Computation instance.
Returns the TFF type of this object (an instance of
Returns the compact string representation of this building block.
Returns the formatted string representation of this building block.
@classmethod from_proto( cls, computation_proto )
Returns an instance of a derived class based on 'computation_proto'.
computation_proto: An instance of pb.Computation.
An instance of a class that implements 'ComputationBuildingBlock' and that contains the deserialized logic from in 'computation_proto'.
NotImplementedError: if computation_proto contains a kind of computation for which deserialization has not been implemented yet.
ValueError: if deserialization failed due to the argument being invalid.
Returns the structural string representation of this building block.