comp recursively postorder and replaces its constituents.
tff.framework.transform_postorder( comp, transform )
For each element of
comp viewed as an expression tree, the transformation
transform is applied first to building blocks it is parameterized by, then the
element itself. The transformation
transform should act as an identity
function on the kinds of elements (computation building blocks) it does not care
to transform. This corresponds to a post-order traversal of the expression tree,
i.e., parameters are alwaysd transformed left-to-right (in the order in which
they are listed in building block constructors), then the parent is visited and
transformed with the already-visited, and possibly transformed arguments in
NOTE: In particular, in
x are arguments to
f is transformed into
x' and finally,
Call(f',x') is transformed at the end.
computation_building_block.ComputationBuildingBlockto traverse and transform bottom-up.
transform: The transformation to apply locally to each building block in
comp. It is a Python function that accepts a building block at input, and should return a (building block, bool) tuple as output, where the building block is a
computation_building_block.ComputationBuildingBlockrepresenting either the original building block or a transformed building block and the bool is a flag indicating if the building block was modified as.
The result of applying
transform to parts of
comp in a bottom-up fashion,
along with a Boolean with the value
comp was transformed and
if it was not.
TypeError: If the arguments are of the wrong computation_types.
NotImplementedError: If the argument is a kind of computation building block that is currently not recognized.