Adding some beginner advice to the README.
authorA. Unique TensorFlower <gardener@tensorflow.org>
Wed, 21 Feb 2018 16:13:01 +0000 (08:13 -0800)
committerTensorFlower Gardener <gardener@tensorflow.org>
Wed, 21 Feb 2018 16:17:02 +0000 (08:17 -0800)
PiperOrigin-RevId: 186461145

tensorflow/contrib/py2tf/README.md

index cd50675ad57316b9c749c137e6acd30b91c10073..c89f2084b495e4f29dbacfd72fbd55acc69e4904 100644 (file)
@@ -2,3 +2,42 @@
 
 A compiler for generating TensorFlow numeric and control flow ops from Python
 code.
+
+### Eng Guide
+See tensorflow/contrib/py2tf/impl/api.py for the decorator definition and entry
+point to the conversion code.
+
+See tensorflow/contrib/py2tf/impl/conversion.py for where all of the
+`Transformer`s are called on the AST.
+
+In order to alter the AST one should create a subclass of `transformer.Base`, as
+seen in converters/.  In this subclass if one wants to add code that runs on
+each node then the `visit_<node_name>` method should be overridden, where
+`<node_name>` is the name of the type of node you wish to alter.  See
+https://docs.python.org/2/library/ast.html#ast.NodeTransformer and note that we
+use gast to bridge some Python version differences.  Also
+http://greentreesnakes.readthedocs.io/en/latest/nodes.html has references on
+which visitation functions are supported.  The `visit_<node_name>` function then
+returns the node that will be included in the final AST. An example of this is
+the following `Transformer` that will alter all while loops:
+
+  ```
+  class WhileLoopTransformer(transformer.Base):
+
+  def __init__(self, context):
+    super(WhileLoopTransformer, self).__init__(context)
+
+  def visit_While(self, node):
+    return node
+  ```
+
+Here, `visit_While` will be called on all while loop nodes with the node passed
+in as node.  Because we just return node without altering it, this is a no-op.
+
+One thing to note is that this will not recursively alter nested while loops; in
+order to do this we need to call `self.generic_visit(node)` which is a
+pre-defined function that recursively visits all the children of `node`.
+
+In order to have the new `Transformer` actually be called on the AST, it needs
+to be called from `node_to_graph` in
+tensorflow/contrib/py2tf/impl/conversion.py.