tff.framework.Block

A representation of a block of code in TFF's internal language.

Inherits From: ComputationBuildingBlock, TypedObject

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 name_k 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)

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.

locals

proto Returns a serialized form of this object as a pb.Computation instance.
result

type_signature Returns the TFF type of this object (an instance of tff.Type).

Methods

check_block

View source

Check that this is a 'Block'.

check_call

View source

Check that this is a 'Call'.

check_compiled_computation

View source

Check that this is a 'CompiledComputation'.

check_data

View source

Check that this is a 'Data'.

check_intrinsic

View source

Check that this is an 'Intrinsic'.

check_lambda

View source

Check that this is a 'Lambda'.

check_placement

View source

Check that this is a 'Placement'.

check_reference

View source

Check that this is a 'Reference'.

check_selection

View source

Check that this is a 'Selection'.

check_struct

View source

Check that this is a Struct.

children

View source

Returns an iterator yielding immediate child building blocks.

compact_representation

View source

Returns the compact string representation of this building block.

formatted_representation

View source

Returns the formatted string representation of this building block.

from_proto

View source

Returns an instance of a derived class based on 'computation_proto'.

Args
computation_proto An instance of pb.Computation.

Returns
An instance of a class that implements 'ComputationBuildingBlock' and that contains the deserialized logic from in 'computation_proto'.

Raises
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.

structural_representation

View source

Returns the structural string representation of this building block.